Dinamik yazılan diller tüm eleştiriyi hak ediyor mu? [kapalı]


35

İnternette programlamada dil seçimi hakkında birkaç yazı okudum. Son zamanlarda birçok dinamik yazı dili popülerdi, örneğin Ruby, Python, PHP ve Erlang. Ancak birçok işletme halen C, C ++, C # ve Java gibi statik yazılmış dillerle kalmaktadır.

Ve evet, statik yazılı dillerin yararlarından biri, programlama hatalarının derleme zamanında, çalışma zamanında değil, daha önce yakalanmasıdır. Ancak dinamik yazılı dillerin de avantajları var. ( Wikipedia'da daha fazlası )

İşletmelerin Erlang, Ruby ve Python gibi dilleri kullanmaya başlamamalarının ana nedeni, dinamik tipte olmaları gibi görünüyor. Bu aynı zamanda StackOverflow'taki insanların Erlang aleyhine karar vermelerinin ana nedeni gibi görünüyor. Bkz Neden Erlang "karşı" karar yaptılar .

Ancak, işletmelerde dinamik yazmaya karşı güçlü bir eleştiri var gibi görünüyor, ancak bunun neden bu kadar güçlü olduğunu anlamıyorum .

Gerçekten, işletmelerde dinamik yazmaya karşı neden bu kadar çok eleştiri var? Projelerin maliyetini gerçekten çok mu etkiliyor, yoksa ne? Ama belki yanılıyorum.


3
Ben tür çıkarımı ve olası ördek yazarak statik yazarak şeyler yapmanın en iyi yolu olduğunu düşünüyorum. Aynı zamanda çok karmaşık
Casebash

2
Ben sadece C # 'ın ördek yazmasına bir göz attım (dili kullanmıyorum) ve ördek yazmanın tanımını tam olarak doldururken, gereken ayrıntı, amacı ortadan kaldırıyor gibi görünüyor. Bu arada sırada faydalı olmadığını söylemek değildir.
Chinmay Kanchi

3
Sadece ben miyim yoksa dinamik olarak yazılmış dillerden daha çok statik yazılmış dil eleştirileri var mı? Ayrıca, benim deneyimlerime göre, büyük "işletmelerin" dilleri / teknoloji seçimleri gerçek teknik özelliklerden ziyade mevcut trendler / güvenli seçimler tarafından belirlenir.
MAK

2
@ChinmayKanchi: Verbosity? Siz sadece bir şey ilan dynamicedip kullanmaya başlayabilirsiniz. Normal yöntem çağrılarından veya operatör aşırı yüklenmelerinden daha fazla ayrıntılı değildir.
Joey

4
Şu anki şirketimde boşa harcadığım saat sayısını, derleyicinin Java kullanmış olduğumuzda derhal tespit edebileceği Groovy on Grails kodundaki hataları ayıklama.
WKS

Yanıtlar:


46

Evet, yaptıklarına inanıyorum.

Yeni bir proje için dil seçiminde göz önünde bulundurulması gereken birkaç neden vardır:

  • Çalışma zamanı hızı. C / C ++ / Fortran ile karşılaştırıldığında, Perl ve Python o kadar yavaş ki komik.
  • Başlatma hızı. Yukarıdaki hızlı dillere kıyasla, Java düşüyor ve JVM yüklenip yüklenmeye devam ederken ağlıyor while(1)...
  • Prototip-yeteneği. C ++ veya Java için gereken bildirim / tanım çalışmalarını ayrıntılı bir şekilde yapmak ve yapmak, hata sayılarıyla güvenilir bir şekilde ilişkili olan bilinen tek ölçüm olan LOC'u artırır. Aynı zamanda çok zaman alır. Ayrıca türler ve bağlantılar hakkında biraz daha düşünmeyi gerektirir.
  • Dahili güvenilirlik. Dinamik olarak içindekilerle uğraşmak, kendi kendini değiştiren kodunuzda hata ayıklamaya başlayana kadar harika . (Python, Lisp, Perl)
  • Doğruluk doğrulaması. Bir derleyici, kodunuzun C ++ kodunda hızlı bir defadan fazla geçmesini sağlayabilir ve bu gerçekten çok iyi olabilir.
  • Statik analiz detayları. C ve Java oldukça iyi statik analizlere sahiptir. Perl teorik düzeyde tamamen statik olarak analiz edilemez (Muhtemelen Python da). Lisp'in de olmadığından oldukça eminim.
  • Garip platformlar genelde sadece C alır.
  • Destek zinciri Böceklerinize bakıp üzerinde çalışacağınız bir sözleşmeniz varsa , bu çok büyük .

Eğer Çalıştığınız kurum "Bundan sonra" bir ilke sahip olduğunu tahmin edebilirsiniz varsa (Orada bunun için bir muhasebe terim) ve alışkanlık sadece rastgele yazılıma değil işin karar, o zaman çok daha iyi bir durum için sahip yazılımı kullanarak. Majör İşletme satışı olmadığı için (sürdürme sorumluluğunu üstlenmenin bir sonucunu taşır) Python / Perl / $ dynamic_language, riski önemli ölçüde azaltır.

Tecrübelerime göre, açık kaynaklı bakım sağlayıcılar çoğu zaman tamiratlarla ilgili sorumluluk almak ve güncellemeleri yayınlamakla ilgili bir sorun yaşarlar. “Ücretsiz, üzerinde çalışsan SİZ!” olduğu değil çoğu işletmeler (değil başka şeylerin yanı sıra çekirdek Senay,) kabul edilebilir bir cevap.

Tabii ki, yüksek risk / yüksek ödül kuralları ile oynama eğiliminde olan ve teknolojinin donma sınırında kalmaya çok açık olan webapp / başlangıç ​​dünyasından bahsetmiyorum .


16
“Ücretsiz, üzerinde çalışsan SİZ!” <- Genel olarak F / OSS ile ilgili en büyük sorun +1 olur, ancak
oyum bitti

4
Güzel özeti. İyi yapılandırılmış tiplerin anlamsal bir anlam ifade ettiğini anlatacağım (bir türe bakabilir ve ne yaptığını anlayabilirim, nasıl kullanılabileceğini anlayabilirim) ve doğruluğu sağlamak için kullanılabilir (sadece sınırlı inpus kabul eden bir tip inşa edebilirim) ), ve ben yazım hataları aptal hataları almıyorum (otomatik değişken bildirimi nefret ediyorum)
smithco

4
Herhangi bir büyük açık kaynaklı proje için ticari destek alabilirsiniz. Büyük firmalar büyük parçalar için dinamik olarak yazılmış PL kullanmaktadır (uygun olanlara), Facebook PHP (UI) ve Erlang (sohbet) kullanmaktadır, Twitter Ruby (UI) kullanır, Google Python kullanır (bilmiyorum) ve Lisp ve Python birçok karmaşık araştırma projesinde kullanılıyor. Not: Ben bir C # geliştiricisiyim (neredeyse) hiç dinamik olarak yazılmış bir dil kullanmadım; Ancak bu noktalar önemli ölçüde geçerli değildir.
Kaveh Shahbazian

4
Cevabını beğendim ama Java dinamik olarak yazılmış değil ...
Mehrdad

2
@ PaulNathan: Çok fazla düşünüyorsun. Soru dinamik olarak yazılmış diller hakkında soruyordu ve bu cevap Java'yı dinamik olarak yazılmış gibi söylüyor.
Mehrdad

24

Kurumsal karar vericilere çok fazla teknik kredi veriyorsunuz. Eski bir deyiş var, "Kimse IBM'i satın aldığı için kovulmadı." Farklı bir rotaya giderseniz ve işler her zaman taşınırsa (her zaman yaparlar), kimse suçlanma riskini almak istemez. Standartlara uyun ve başka birini suçlayın.

Sonunda geleceğin işletmeleri olacak ve bu dilleri kullanacak birçok genç şirket var.

Ve VBA'de yazılmış buggillion kod satırlarını da unutmayalım!


1
+1, "... yarının işletmeleri [ve] bu dilleri kullanacak."
rdmueller 20:11

6
“Sonunda geleceğin işletmeleri olacak ve bu dilleri kullanacak birçok genç şirket var.”: Dinamik dillerin oldukça yeni olduğunu ve daha fazla şirket tarafından benimsenmesi için zamana ihtiyaç duyduklarını ima ediyorsun. Öte yandan, dinamik diller uzun zamandan beri var.
Giorgio

17

İşletmelerin C, C ++, C # ve Java kullanmasının nedeni statik olarak yazılmış olmaları değildir (en azından doğrudan değil). Kurumsal karar vericiler, bu tür seçimleri, tip sistemlerinin nesnel bir karşılaştırmasına dayanarak yapmıyorlar, sizi temin ederim.

Şirketler şununla ilgilenir:

  • Uzun süreli bakım maliyetleri : 10 yıl içinde işlerin iyi çalışmaya devam etmesini makul bir şekilde bekleyebilir misiniz? Dil gelişiminin muhafazakar ve geriye dönük olarak uyumlu olması (Java'da olduğu gibi) gerçekten iyi bir şeydir. Statik yazım burada yardımcı olur çünkü derleme zamanında büyük bir hata türünü üretim sisteminize girmeden yakalar.
  • Yetenek kullanılabilirliği - parlak yeni sisteminizi korumak için geliştiriciler bulabilecek misiniz? Orijinal geliştirici ayrılırsa, diğer herkes kodu anlayacak mı? Bu, herhangi bir "yeni" dilin (özellikle dağıtım, yapım sistemleri, operasyonel destek vb. İçin yeni gereksinimler yaratıyorsa) sunulmasına büyük engel teşkil eder. Bu, yaygın olarak kullanılan dillere büyük avantajlar sağlar (C, C ++, C # ve Java)
  • Entegrasyon maliyetleri : kolay zaten yerinde varsa veya edinilen muhtemel olduğunu diğer teknolojilerle entegre / bağlamak için nedir? Zaten eski J2EE sistemleri yığınınız varsa, onlarla entegrasyon yapmanız gerekir. Yeni bir Java EE çözümünün Python'dan çok daha pratik olması muhtemeldir.
  • Tahmin edilebilirlik / düşük risk : platform / dil kanıtlanmış mı ve çalışacağından emin olabilir miyim? Bu genellikle basit üretkenlikten daha önemlidir. Bir yöneticinin patronunu, insan gücünün yeni bir sistem kurması için kendisine büyük bir bütçe vermesi için ikna etmesi, daha sonra geri dönmesi ve işe yaramadığını söylemesi daha kolaydır.
  • Kurumsal Destek / destek - büyük uluslararası kuruluşlar dili ve platforma destek vermeye kararlı mı? Beni desteklemek için bir sözleşme imzalayacaklar mı, böylece işler ters giderse arayacak birisine sahip olabilir miyim?
  • Satıcı tarafsızlığı / platform bağımsızlığı - Tek bir tedarikçiye kilitleneceğim mi? Yoksa geniş bir gelecekteki tedarikçi seçeneklerine / geçiş yollarına sahip miyim? Rakipleriniz öğle yemeğinizi yerken ilerleme kaydedememek için mimari bir çıkmazda sıkışıp kalmak istemezsiniz. İşinizi kurumsal bir mimar olarak düzgün yapıyorsanız, bu konuda en az 5-10 yıl düşünmeniz gerekir.

Şahsen, eğer Enterprise'da dinamik dilleri kullanmak istiyorsanız, o zamana kadarki en iyi şansınız mevcut bir kurumsal ekosisteme destek veren bir şey kullanmak olduğunu düşünüyorum. En kayda değer, yeni dinamik JVM dilleridir: örneğin, JRuby, Groovy, Clojure. İlgili IT yönetimine gelince, bunlar "güvenli" dinamik dil seçimleridir çünkü Java kurumsal ekosisteminin geri kalanıyla birlikte çalışırlar ve iyi çalışırlar.


1
Henüz kimsenin cevabını almadığına inanamıyorum.
Sebastian N.

11

İşletmelerin Erlang, Ruby ve Python gibi dilleri kullanmaya başlamamalarının ana nedeni, dinamik tipte olmaları gibi görünüyor.

Bence bu sadece onların birincil bahanesi. Asıl sebep, işletmelerin hepsini gerçekten ciddiye almaması ve belki biraz fazla amatör olduklarını hissetmeleridir. Java ve .NET, “büyük işletme adları” dır, iyi bir ticari pazarlamaya ve ticari müşteri desteğine sahiptir ve bu nedenle gerçekten çok ciddiye alınmaktadır.

Büyük işletme isimleri kadar popüler hiçbir yerde statik olarak yazılmış bir dil olmaması talihsizdir. Neden açık kaynaklı / özgür yazılım programlama ortamları neredeyse her zaman dinamik olarak yazılıyor? Bu, statik olarak yazılmış bir dilin yapması o kadar kolay olmadığını ve dinamik yazmanın “tembel bir adamın kesilmesi” olduğunu gösterebilir. Bu durumda, dinamik olarak yazılmış dillere karşı karar veren işletmelerin bir anlamı olabilir.


8
Gerçekten mi? Son gördüğümde, Google Python'un yaratıcısını işe almak ve zamanının% 50'sini dil üzerinde çalışmasına izin vermek de dahil olmak üzere Python'un arkasında oldukça fazla ağırlık ve önemli bir gelişme çabası atmıştı. Google ayrıca Python'a, özellikle de artık yutulmayan yutkunmanın Python 3 kaynak ağacında birleştirildiğine dair iyi miktarda kod katmaktadır. Bu Python'u benim için "büyük işletme adı" yapar.
Chinmay Kanchi

13
@Chinmay Kanchi: Sonuçunuzu 1 örneklem büyüklüğünde bir istatistikten nasıl çıkardığınıza ilginç
Timwi

6
Touché. Ancak, bazı sonuçlarınız da hatalı. Dinamik bir dili doğru uygulamak, statik olarak yazılmış bir dili uygulamaktan çok daha zordur. Dinamik yazarak kesinlikle değil senin deyiminle bir "tembel adamın kesmek". Geliştiricilerin tembel olmalarını sağlar, ancak derleyici / tercüman yazan kişinin değil. Aslında, dinamik olarak yazılmış bir dili optimize etmek o kadar zordur ki, son zamanlarda yoğun bir şekilde (JavaScript) uygulanan bir dili düşünebilirim (JavaScript), ancak diğer diller için optimizasyon / JIT projeleri (Python, PHP).
Chinmay Kanchi

2
Ayrıca, dinamik olarak yazılmış dillerin açık kaynak ortamlarında en yaygın kullanılan dil olduğunu düşünüyorsanız, bu kesin değildir. Seçtiğiniz metriğe bağlı olarak, bu doğru olabilir, ancak çoğu zaman değildir. Ölçme kod satırları, C uzun atışta kazanır. Çok dilli dilleri de içeren açık kaynaklı projelerde hangi dillerin kullanıldığını ölçerseniz, en popüler diller bu sırada JavaScript, C, C ++ ve PHP'dir. Yalnızca ana dili ölçerseniz, en popüler diller Perl, Java, C # ve JavaScript'tir. bit.ly/C6xTB
Chinmay Kanchi

7
Elbette , dinamik olarak yazılmış diller için bir optimizer yazmak zordur, ancak bir tercüman değil : tüm tip kontrollerini ortadan kaldırabilirsiniz, gerisi aynıdır. Hiçbir amatör dil üreticisi bir optimizer yazmayı düşünmüyor. - Son bit ile ilgili olarak, çoğu açık kaynaklı yazılımın dinamik olarak yazılmış bir programlama dilinde yazıldığını ima etmek istemedim, bunun yerine çoğu açık kaynaklı programlama dilinin (“ortamlar” dedim çünkü derleyiciler / tercümanlar, IDE'ler vs.) dinamik olarak yazılmışlardır.
Timwi

9
  • Dinamik olarak yazılmış diller, statik olarak yazılmış kuzenlerinden daha yavaş olma eğilimindedir.
  • Hatalar yakalamak daha zor ve hata ayıklamak zor olabilir
  • Derleyici / tercüman yapabilecekleriniz ve yapamadıklarınız konusunda çok daha az titiz olma eğilimindedir. yani, derleme aşamasında hemen hemen sadece sözdizimi hatalarını yakalarsınız
  • Eğer bir dinamik yazdığınız dilin tasarımı ile çok dikkatli değilseniz, sen Javascript, ile bitirmek -kokuyor kod dili

EDIT: Şu anda ana programlama dilimin dinamik olarak yazılmış Python olduğunu söylemeliyim. Şahsen, değişkenleri önceden bildirmek zorunda kalmamakla birlikte gelen özgürlüğü seviyorum, ancak zaman zaman, bir fonksiyonun gecikmeden ziyade hataları yakalamak için ne tür parametreler alacağını belirtmek güzel olurdu .


1
Derleyicinin titiz olmadığı doğru olsa da, tercüman genellikle. Genelde tercüman problemli durumları tespit eder ve hataları bildirir.
Winston Ewert

17
Dinamik yazarak seviyorum ama nefret predeclare değişkenlere olmaması! Çoğu zaman yanlışlıkla yeni bir değişken tanıyorum çünkü değişken adını yanlış yazdım.
Frank Shearar

1
@Frank: Ben unprintably aşk Perl değişken bildiriminde zorlamak için bir ayara sahip olduğunu. Bence Perl'in avantajlarından biri.
Paul Nathan

8

Dinamik olarak yazılmış diller (bazı programcılar / patronlar tarafından) çalışmayan kodlar üretmek için de algılanır. Dinamik olarak yazılmış bir programın derlenmesi, doğruluğu hakkında çok az şey anlatır. Statik olarak yazılmış bir dilin derlenmesi, size çok daha fazla şey anlatır. (Öte yandan, derlemeler arasında hala çok uzun bir yol var ve doğru olanı yapıyor, bu göründüğü zaman daha az anlamlı olabilir)

Dinamik olarak yazılmış diller, betik dilleri olarak algılanır. Hiçbir zaman bash veya toplu iş dosyasına bir uygulama yazmazsınız. Dinamik olarak yazılmış tüm diller bu kategoriye girmeye meyillidir (haksız).

Dinamik olarak yazılmış diller daha yavaş, sonra statik olarak yazılmış diller. (Ancak JIT’de iyi çalışmanın bunu nasıl değiştirdiğini göreceğiz)


2
Bazı programcılar "tarafından algılanıyor" . Dinamik yazarak ilgili programcılar ile argümanlar var, genellikle aslında hiç itiraf sona kullanıldığı bu tür bir dil.
Frank Shearar

1
@ Frank, dinamik yazımın düşüklüğünü savunan kişilerin genellikle kullanmadıklarını mı söylüyorsunuz?
Winston Ewert

2
@Frank: Bu tür bir dil kullandım ve çoğu zaman sonuç elde edilemez bir karışıklık oldu. (Adil olmak gerekirse, PHP idi ve PHP'nin dinamik yazmanın yanı sıra başka problemleri de var)
Billy ONeal

@Billy: Bunun yaygın olduğunu düşünüyorum. VB ile olan deneyimim yüzünden yıllarca dinamik yazma üzerine düştüm - sonunda sonunda bu korkunç, şizofrenik dinamik yazmanın uygulanmasının tipik olmadığını anladığımda, fikrim çarpıcı bir şekilde değişti.
Shog9

@Winston: Tartıştığım insanların olmadığını söylüyorum. Benim için, “dinamik yazma muhtemelen işe yaramaz” durumuydu ... ... ama ilk önce dinamik diller için (başımın üstünden yeni çıkmış), IDE'ler, yeniden yapılanma gibi birçok teknik kullanacaklar. Ayrıca, şunun gibi sorular: stackoverflow.com/questions/2317579 , muhtemelen evrensel olmasa da, çalışamıyorum-ama-denemedim-denemedim-programcıların izole edilmediğini gösteriyor. (Ben, her iki yaklaşımın da bir değeri olduğunu düşünüyorum.)
Frank Shearar

8

Not: Bu çoğunlukla özneldir ve deneyimlerime ve izlenimlerime dayanır.

Dinamik olarak yazılmış diller, statik olarak yazılmış dillerden çok farklıdır. Bu farklılıklar muhtemelen ağır işletme yazılımlarında diğer uygulamaların çoğundan daha önemli hale gelir.

Statik olarak yazılmış diller çok kuralcı olma eğilimindedir. Bir yöntem yalnızca imzasıyla tam olarak eşleşen girdiyi alacaktır. Erişim seviyeleri çok önemli olma eğilimindedir ve arayüzler açıkça tanımlanmıştır, bu tanımları uygulamak için ayrıntılı ama açık kısıtlamalar vardır.

Dinamik olarak yazılmış diller ise çok pragmatiktir. Yazım dönüşümleri genellikle örtük olarak gerçekleşir, yeterince benzer davrandığı sürece yanlış giriş türü sağlarsanız, işlevler bile yürütülebilir. Python gibi dillerde, erişim seviyeleri bile teknik kısıtlamalardan ziyade sözleşmeye dayalı olacaktır (yani sadece privatekullanmanız söylenmemesi ve komik bir adı olması nedeniyle).

Birçok programcı dinamik dilleri tercih eder, çünkü bunlar tartışmalı bir şekilde hızlı prototip oluşturmaya izin verirler. Kod genellikle daha kısa biter (yalnızca tür bildirimlerinin bulunmamasından dolayı) ve hızlı ve kirli bir çözüme ihtiyaç duyduğunuz veya bir şeyi test etmek istediğiniz için uygun protokolü ihlal etmek istiyorsanız, bu mümkün.

Şimdi, "girişimci" şirketlerin genellikle statik olarak yazılmış dilleri tercih etmesinin nedeni, tam olarak bu kısıtlamalar konusunda daha kısıtlayıcı ve daha açık olmalarıdır. Uygulamada, statik olarak yazılmış kodlar bile, bir derleyiciye sahip salaklar tarafından kırılabilir olsa da, birçok problem daha önce süreç içinde çok daha görünür hale gelecektir (çalışma zamanından önce). Bunun anlamı, kod tabanı büyük, monolitik ve karmaşık olsa bile, kodu çalıştırmak veya QA departmanına göndermek zorunda kalmadan birçok hata kolayca yakalanabilir.

Bu avantaj, o ortamın dışındaki pek çok programcının olumsuz yönlerinden ağır basmamasının nedeni, bunların kodun kapsamlı bir şekilde incelenmesiyle veya hatta çalıştırmaya çalışılarak kolayca yakalanabilecek hatalar olmasıdır. Özellikle test odaklı bir metodoloji uygulandığında, bu hatalar çoğu zaman yakalaması ve düzeltmesi kolay değildir. Ayrıca, bu tür birçok şirketin çok daha kısa bir sürüm döngüsüne sahip olmasıyla, üretkenlik genellikle sağlamlıktan daha önemlidir ve geliştiricilerin kendileri tarafından birçok (temel) test yapılır.

Girişimci şirketlerin dinamik olarak yazılmış dilleri fazla kullanmamasının diğer nedeni ise eski koddur. Aptal gibi göründüğü kadar aptalca, büyük şirketler raf ömrünün çok üstünde olsalar bile, genellikle işe yarayan çözümlere bağlı kalacaktır. Bu yüzden birçok büyük şirket Internet Explorer 6'yı zorluyor ve işletim sistemlerini yükseltmek için çok yavaşlar. Bu nedenle, genellikle "eski" dillerde (örneğin Java'nın eski sürümleri) yeni kodlar yazmaları da olasıdır: Canlı olmayan bir yazılıma birkaç satır kod eklemek, yeni bir yazının tamamını okumak için onay almaktan çok daha kolaydır. dil.

tl; dr: statik diller bürokrasiye daha fazla benziyor, bu nedenle girişimci yöneticiler daha iyi.


3
Gevşeyen yazım kurallarına sahip diller, sorta çalışması için yanlış olan şeyler için birçok fırsat yaratır. Örneğin, JavaScript'te, bir sayıyı bir dizgenin beklediği bir koda geçirmek, o numarayı dize olarak temsil etmiş, ancak her zaman değil gibi davranır. Örneğin 456 ila 123'ü eklemeyi denemek 123456'yı vermez, ancak bunun yerine 579'u verir. Sayıdan dizeye dönüşümden kimin sorumlu olduğu belli olmadığı sürece, ya gereksiz olarak yapılabilir veya hiç başarısızlıkla sonuçlanabilir.
supercat

1
@ supercat, PHP ve JavaScript'in bu konuyla başa çıkmanın iki yolu için iyi bir örnek olduğunu düşünüyorum (işleçlerle ilgili olarak): PHP işleçlerinde açıkça belirsizdir - +birleştirme istiyorsanız, kullanmanız gereken sayıları alır ve ekler .; JS'de her iki işlem de aynı operatörü paylaşır - değerlerin nasıl davranacağını bilmiyorsanız, bunları açıkça dönüştürmeniz beklenir. Tabii ki bu aynı zamanda gevşek yazma ile katı yazma (Python'un daha katı olması) ile de ilgilidir, ancak temelde ya değerinizin doğru tipte olduğundan emin olmanız ya da işlemlerinizi beklenen tipleri uygulamanız gerekir.
Alan Plum,

1
PHP ile pek aşina değilim, ama "doğru" yaklaşımı dediğim şeyi kullandığı anlaşılıyor. Javascript IMHO'nun birçok yönden berbat olduğu, ancak "+" davranışının en kötülerden biri olduğunu düşünüyorum. Aslında, gevşemeli-durgun dinamik yazmanın, başka bir sınıf veya arayüz türündeki şeylerin belirli kurallarla uygulanmak veya türetmek olarak kabul edilmesi gerektiğini beyan eden bir arayüzün daha güçlü bir tip sisteme göre daha fazla avantaj sağlayacağına inanmıyorum. iddiaların nasıl önceliklendirileceği hakkında. Yapısal olarak yazılmış mevcut çerçevelerle farkında olduğum en büyük sınırlama şudur ...
supercat

1
... eğer iki kişi bağımsız olarak benzer arayüzler geliştirirse, üçüncü bir tarafın bunları birbirlerinin yerine kullanabilecek kod yazması mümkün değildir. Bir üçüncü taraf yeni bir arayüz tanımlayabiliyorsa ve mevcut olanlardan birinin veya her ikisinin uygulamalarının yenisini otomatik olarak uygulaması gerektiğini (gerekirse yeni arayüzde sağlanan sarmalayıcıları kullanarak) beyan ederse, bunun anlamsal olanın% 99'unu idare edeceğini düşünüyorum. Dinamik yazma hakkında iyi.
supercat

3

Hayır, dinamik olarak yazılmış dillerin tüm eleştirileri hak ettiğini sanmıyorum. (İsterseniz, statik olarak yazılmış diller kadar eleştiriyi de hak ederler.)

Deneyimlerime göre (ve bu ifadeyi genelleştirmeye çalışmıyorum), dinamik dilleri eleştiren programcılar bunları kullanmadı. Konuşma genellikle "ama statik yazarken derleyici çok fazla hata yakalar!" ve derim ki "peki, bu sadece benim sorunum değil, tecrübelerime göre". (Genellikle diğer programcılar Java, Delphi veya benzer bir geçmişe sahiptir; Haskell veya ML programcıları bilmiyorum.)

Birisi iddiaları tekniği Foo olamayacağını zaman gerçekten beni sancı tek şey muhtemelen bu tekniği icat edildiğinde tarafından ve dinamik yazdığınız için ... dinamik yazılan dilde yapılması (veya çok zor yapmak olabilir) dil. IDE? Smalltalk. Otomatik yeniden düzenleme Smalltalk. Arayanlar-of / uygulamacılarıdır-of? Smalltalk.


Cevabımı kişisel duruşumla karıştırmak istemedim, ki bu: doğru iş için doğru araç. Ne tür bir dil kullanıyorsanız kullanın, bazı görevler için daha uygun ve diğerleri için daha uygun, başka bir dilden daha uygundur.
Frank Shearar

6
Diğer programcı Haskell'den geldiğinde, onun hem Java hem de dinamik diller için üstün bir dil olduğunu zaten biliyor;)
Andres F.

0

İşletmeler yeterince yeni dilleri ve araçları benimsememektedirler ve bunun için iyi sebepler vardır. Ancak, C # gibi ana araçlardan biri bu özelliklerden bazılarını uyguladığında, o zaman ana şirketlere sızacaklar.


Bunun neden reddedildiğini bilmiyorum, ama bu anlayışlı bir ifade. İşletmeler yavaş ve muhafazakar. İnsanlar ayrıca, ani bir değişiklik (Ruby gibi) için kademeli değişimi (bazen statik olarak yazılmış bir dilde dinamik yazmayı kullanmanızı sağlayan C # 'daki dinamik anahtar kelime gibi) tercih eder.
Vaddadi Kartick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.