Web siteleri için dinamik ve statik olarak yazılan diller [kapalı]


13

Bu ifade, statik olarak yazılmış dillerin web siteleri için ideal olmadığını göstermektedir:

Bunu bir web sitesi oluşturmakla kıyaslayacağım. Web sayfalarını oluştururken, genellikle bir web sayfasında etkileşime giren çok fazla bileşene sahipsiniz. Burada düğmeler ve orada küçük widget'lar var ve bir web sayfasında onlarca yanı sıra, web sitenizde hepsi dinamik olan düzinelerce veya yüzlerce web sayfası var. Böyle büyük bir yüzey alanına sahip bir sistemle, statik olarak yazılmış bir dil kullanmak aslında oldukça esnek değildir. Scala'da programlamak ve onunla bir web sayfası oluşturmak, etkileşimli olarak düğmeleri ve neyi dolaşmak istediğimde acı verici olurdu. Tüm sistemin tutarlı olması gerekiyorsa, tüm sistemin sadece bir düğmeyi hareket ettirmek için kontrol yazması gerekiyorsa, bunun gerçekten esnek olmadığını düşünüyorum.

Kaynak: http://www.infoq.com/interviews/kallen-scala-twitter

Bu doğru mu? Neden ya da neden olmasın?


6
Bana doğru nesne hiyerarşisine sahip bir dil / paket düşünmemiş gibi geliyor. İhtiyacınız olan tüm bilgileri içerdiğinde ve tüm kontroller bundan türetildiğinde, taşıdığınız kontrolün bir Buttonzaman olup olmadığını kontrol etmeye WebControlgerek yoktur.
Matthew

5
Yup @Matthew - polimorfizmi
Nicole

8
Ayrıca - Heyecan popüler olabilir, ama bu değil kendi site bir mühendislik başyapıtı çünkü.
Nicole

Yanıtlar:


39

Ben kesinlikle katılmıyorum. Sistemler büyüdükçe, statik olarak yazılmış diller bileşen düzeyinde sağlamlık ve dolayısıyla sistem düzeyinde esneklik sağlar.

Ayrıca, yazar tarafından verilen örnek gerçekten bir anlam ifade etmiyor. Bu adam, polimorfizmin ördek tiplemesinden başka yollarla elde edilebileceğini bilmiyor gibi görünüyor.

Dinamik dillerin üstün olduğunu iddia eden birkaç kişi var, ancak bu genellikle yapısal alt tipleme, cebirsel veri türleri ve birinci dereceden fonksiyonları destekleyen etkileyici tip sistemlerle ilgili deneyim eksikliklerine dayanıyor.


1
Birinci dereceden fonksiyonlar yapısal alt tipleme ve cebirsel veri türleriyle aynı kategoriye nasıl girer? Dinamik dillerin birinci derece fonksiyonları olmadığı gibi anlaşılırsınız, ki bu açıkça doğru değildir (Şema, Ortak Lisp, Erlang, Smalltalk, ...).
Frank Shearar

21
+1 "Görünüşe göre bu adam polimorfizmin ördek tipinden başka yollarla elde edilebileceğini bilmiyor gibi görünüyor."
Nicole

1
@Frank Shearer: Demek istediğim, başka bir değerle aynı tip güvenlikle destekleniyorlar. İşlev değerlerini destekleyen ancak imzalar arasında ayrım yapmayan, kesin olarak yazılmış bir dizi dil vardır.
back2dos

1
Ben de katılmıyorum, bu yüzden cevap olarak seçiyorum.
Bradford


8

Her şeyden önce, yukarıdaki ifadenin yazarının web sitesi geliştirme hakkında konuştuğunu unutmayın. Bu yüzden sunum geliştirme konusunda endişeli ve Scala'nın iyi bir seçim olmayacağını düşünüyor.

Bunu söyledikten sonra, web geliştirme konusunda iyi bir deneyimim var. En az 8 yıl boyunca bununla çalıştım, 5 tanesi dijital ajanslarda.

Ve evet, tecrübelerime göre , sunum katmanındaki statik olarak yazılmış, derlenmiş bir dil büyük bir engel olabilir. İçeriğin, iş gereksinimlerinden çok daha sık aralıklarla değiştirilmesi gerekir. Ve genellikle bunun farklı bir ekip ("ön uç" geliştiricileri) tarafından yapılması gerekir. Normalde HTML, JavaScript, web standartları, CSS hakkında çok şey biliyorlar, ancak Java ve C # gibi sunucu tarafı diller hakkında çok fazla şey bilmiyorlar. Ayrıca, bir şablondaki her türlü değişikliğin hemen kullanılabilir olduğunu varsayarlar ; bunlar derleme ve yazma hataları için kullanılmaz. Ve haklılar: statik olarak yazılmış diller, veri erişimi ve iş kuralları gibi zor, karmaşık gereksinimler için çok iyidir, ancak arayüz geliştirme için iyi değildir.

Aslında, Velocity gibi özel ve yorumlanmış bir şablon dili kullanmanın ana avantajlarından biri budur . Kullanımı kolay, gücü ve esnekliği sunum katmanı geliştiricileri için yeterlidir. Ve sonra sunucu tarafındaki adamlar, her yerde ciddi, statik olarak yazılmış bir dil kullanmakta özgürler ...

Bununla birlikte, Scala'nın biraz farklı olduğunu da kabul ediyorum. Çok daha az ayrıntılı ve çok daha etkileyici Java ile aynı anda olmak, inanması olabilir sunum gelişimi için kullanılabilecek - belki başarılı bir şekilde şablon dili olarak kullanılabilir. Ayrıca, Play (web sitesini her değişiklikten sonra otomatik olarak derleyen) gibi bir çerçeveyle birleştirilebiliyorsa , kazanan bir IMHO olabilir. Yine de, Play bile iyi bir işaret olmayan Groovy benzeri (dinamik) bir şablon dili seçti.

Özetlemek gerekirse: Scala ile ilgili sorun, derlendiği gerçeğiyle çok daha ilgili. Aslında türünü çıkarma mekanizması, statik olarak da yazıldığını neredeyse unutturmanızı sağlar.

(Ve İngilizcem için üzgünüm. Bir şey net değilse bana bildirin, düzeltmeye çalışacağım.)


1
Bu ikinci - Java bir web dili yapmaya çalıştığınızda sadece JSP / STRUTS karışıklık bakmak!
James Anderson

8

Bence metin (ve çoğu cevap) Statik olarak yazılan dilleri ve aşırı ayrıntılı dilleri karıştırıyor . Tabii ki, kavşak çok büyük (özellikle sadece en ana dilleri düşünürken); ancak ayrıntılı olmayan, statik olarak yazılan dillerin bazı ilginç örnekleri vardır: Go, Haskell, Scala, Rust…


2
"Aşırı" tanımlayın. Programlar gittikçe daha karmaşık hale geldikçe ve kullanım ömürleri ve bakım döngüleri arttıkça, orijinal yazarın dışındaki bir kişinin herhangi bir kod parçasında hata ayıklama veya değiştirme ihtiyacı olasılığı artmaya devam eder. Bu durumda olduğunuzda, genellikle silahın altındasınız ve tam olarak hangi veriyle uğraştığınız ve neyin daha iyi yapabileceği hakkında daha fazla bilgi alabilirsiniz. Başkalarının Delphi ve diğer insanların JavaScript hatalarını ayıkladım ve Delphi ayrıntı düzeyi ve tür bilgisi nedeniyle
Mason Wheeler

1
Sadece bir yan not: TypeScript (statik, bilgi içeren JavaScript) gibi bir şey OP'nin teorisini test etmenin basit bir yolu olabilir. Kısa pozlamam oldukça güzeldi - bir kez JavaScript'i TypeScript'e dönüştürürken, aslında belirli bir yöntemin çağrılması ve bir hata üretmenin olası bir yolu olmadığını bulmama yardımcı oldu .
Katana314

5

Bruce Eckel'in Güçlü Yazma ve Güçlü Test'i okumanızı tavsiye ederim . Temel argüman, yazılım kalitesinin teste kaymasıdır. Birçok farklı şekilde test edebilirsiniz. Derleyiciler bazı şeyleri derleme zamanında test eder: int değişkeninde bir dizeyi saklamaya çalışın ve muhtemelen size havlayacak. Dinamik dillerde, testlerin çoğu çalışma zamanında gerçekleşir. Sonuçta, testin ne zaman gerçekleştiği önemli değildir. Sadece olmalý. Dinamik dillerde derlemediğiniz zaman, çalışma zamanında test kaybedilir. Her şeyi sağlam bir şekilde test ediyorsun, değil mi?

Bu göz önüne alındığında, dinamik dillere karşı katı tip sistemlere sahip derlenmiş diller için bir tercih sadece bir tercihtir. Bir tür boksör, külot veya tanga ve fransız pantolon gibi. Doğru ya da yanlış cevap yok. Onları doğru tavırla giyin ve sadece harika.


1
"Derleyiciler bazı şeyleri derleme zamanında test eder: bir dizgeyi int değişkeninde depolamaya çalışın ve muhtemelen size havlayacak. Dinamik dillerde, test sırasında bir sürü test gerçekleşir.": Doğru, dinamik bir dil kullanırken olurum tip kontrolünün yerine birçok test yazmak için. Statik bir dil kullanarak testlerimin iş mantığına daha fazla odaklanmasını sağlayabilirim.
Giorgio

@Giorgio İlginç, testlerimde nadiren herhangi bir tip kontrol mantığı var.
pllee

@pllee: Bazen doğrudan tip kontrol mantığı değildir, ancak testler statik tip bir sistemin zaten uygulayabileceği bazı davranışları kontrol eder.
Giorgio

Bruce Eckel, yıllarca aşırı ayrıntılı dillerle (Java, C ++, ...) uğraşan ve daha sonra karşılaştığı ilk farklı treni (Python) atlayan başka bir kişi gibi görünüyor. Makalenin yarısını Python sözdiziminin ne kadar büyük olduğunu övüyor. Bilgi eksikliğinden dolayı bu tartışmaya katkıda bulunacak hiçbir şeyi yoktur.
ziggystar

Ancak, dinamik bir dilde bir int değişkeninde bir dize saklamaya çalışırsanız, uygulamayı çalıştırana / test edene ve onu eylemde görene kadar fark etmeyeceğinizden emin olun. Ama gerçek dünya pratiğinde (17 yıldan fazla gelişim) bunu nadiren bir hatanın ana nedeni olarak görüyorum! Hiç! Ama öyle olsa bile - fark ettiniz ve düzelttiniz mi? Sorun ne? Sanki tüm argüman çok nadir bir teknik durumdan oluşuyor. Bu büyük bir sorun değil! Öte yandan, dinamik yazmanın yararı gelişimin çok daha hızlı olmasıdır.
Manachi

2

Çoğu durumda buna katılıyorum, çünkü yüzleşelim, müşterilerle bir web-plataform üzerinde uğraşırken esneklik bir zorunluluktur.

Statik olarak yazılan diller, dinamik olarak yazılan dillerden daha sağlam ve güvenlidir, ancak kodu olması gerektiği gibi davranmaya adapte etmeye başladığınızda ve hızlı bir şekilde ihtiyacınız olduğunda, çözümler biraz karmaşık ve katı görünür.

Teknolojileri birleştirmek için değişikliğe sahipseniz, statik olarak yazılan bir dilde (çekirdek çok fazla değişmez) bir çekirdek oluşturmanızı ve kullanıcı etkileşimi için dinamik olarak kullanmanızı öneririm.


Gevşek kaplin iyidir. Ancak bunu başarmak için dinamik diller gerekli değildir. Web, HTTP üzerinden yapılan gevşek bağlantılarla ilgilidir ve çoğu web sunucusu ve tarayıcı statik dilde yazılmıştır. Dinamik diller , büyük bir araç zinciri çağırmadan çalışma zamanında kolayca değiştirilebilen bir parça koda ihtiyaç duyduğunuzda komut dosyası uygulamalarında parlar .
9000

2

Bence bu yazının yazarı Scala'nın kendisine bakmadı. Java ve C # 'ın sınırlamaları olduğunu ve web geliştirme için biraz esnek olmadığını kabul etsem de, Scala, bunu duyduğunuzda normalde düşündüğünüzden oldukça farklı olan statik olarak yazılmış bir dildir. Scala, maymun yamalamanın bir tür güvenli versiyonu olarak ördek yazmaya da izin verir (Kapalı dönüşümler yoluyla). Bu, programlama kitaplıklarını biraz daha karmaşık hale getirir, çünkü türler hakkında düşünmeniz gerekir, ancak Lift gibi bir kitaplık kullanırsanız, dinamik bir dil gibi hissedilir, ancak derleyici sizi kullanmadığınız bariz hatalar hakkında bilgilendirir sağ. Şahsen asansör web çerçeve raylar veya benzeri üzerinde yakut gizlemek zorunda olmadığını düşünüyorum. Burada veya burada kod örneklerine bir göz atınve kendiniz karar verin. Uzunca bir süre asansörde gelişiyorum ve asla bir tip hatamın olduğu bir durumum yoktu ve "Ah adam, eğer bu dinamik olsaydı işe yarayacaktı ..." çünkü dinamik olsaydı bana bunu söylemezdi çalışma sırasında çökene kadar bir hata oluştu.


1

Şahsen söylediklerinin sadece Web siteleri için değil, herhangi bir sistem için geçerli olduğunu düşünüyorum. Donanımla konuşurken statik yazmaya ihtiyacınız olacak, çünkü her şey dinamik yazmanın, ne yaparsanız yapın, gerçekten ne olursa olsun aynı dezavantajlara ve faydalara sahip olması ve en iyi olanı tada ve her proje için belirli sorunlara bağlıdır.


Scala'nın biraz özel olduğunu, çünkü tür çıkarımı kullandığını ve dolayısıyla Java dediği gibi aynı statik yazım kategorisine ait olmadığını belirtmek gerekir.
Winston Ewert

1

Pratik Hızlı cevap: Web boyutunun boyutuna ve karmaşıklığına bağlıdır. Küçük web sitesi, dinamik program. lang., Complex Büyük web sitesi, statik progr. Lang.

Genişletilmiş sıkıcı cevap: Birçok geliştirici bir web sitesinin dinamik bir programla yapılması gerektiğinde ısrar eder. langr. ancak gerçek şu ki, sonunda web geliştirme araçları statik yazılan dilleri kullanma veya taklit etme eğilimindedir.

PHP ile birkaç kez çalıştım ve er ya da geç, verilen veri türlerini doğrulayan bir çok kod eklemek zorunda kaldık, bu da statik olarak yazılmış bir programda örtük. Lang.

Yazılan Lagn. ayrıca çok fazla tür doğrulaması gerektiren IDE (ler) in kullanımına yardımcı olur.

(komşu programınız tarafından getirildi. & derleyici tasarımcısı ;-))


0

Katılıyorum. Çoğu web ön uç C # koduna baktığımda, dizelerden dökümler ve dizelere serileştirme var. Temel olarak, protokol olarak HTTP dinamik diller için iyi bir seçimdir.

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.