Zayıf yazılan diller neden hala aktif olarak geliştirilmektedir?


17

Neden zayıf yazılan diller hala aktif olarak geliştiriliyor acaba? Örneğin, bir insanın yazmaktan ne faydası olabilir?

$someVar = 1;
(...)  // Some piece of code
$someVar = 'SomeText';

çok farklı, stongly yazılan versiyonu kullanmak yerine

int someInt = 1;
(...)
string SomeString = 'SomeText';

İkinci örnekte ek bir değişken tanımlamanız gerektiği doğrudur, ancak bu gerçekten acıyor mu? Tüm diller derleme zamanında tür güvenliğini zorunlu kıldığından, güçlü bir şekilde yazılmaya çalışılmamalı mı, böylece tür dökümünde bazı tuzaklardan kaçınmalı mı?


9
"Güçlü yazılmış" iyi tanımlanmış bir terim değildir. Çoğunlukla "tip sistemini değiştiremezsiniz" anlamına gelir. Yukarıda açıkladığınız şeyin dikey yazıtmaya karşı gizli veya statik yazmaya karşı durağan olabileceği yönüyle dikeydir.
Frank Shearar

10
Bunu yakından ilişkili, tartışmasız hatta yinelenen birkaç soru ile alev etiketinden (etiketlerinde statik ve dinamik yazımdan bahseden sorular için sadece SackOverflow'u arayın) meşru soruya taşıyan bu eksiklik nedir?

1
Hem statik olarak yazılan hem de dinamik olarak yazılan diller için avantajlar ve dezavantajlar vardır. Dinamik olarak yazılan diller, hızlı geliştirme veya prototiplemeye güzel bir şekilde katkıda bulunur (bu nedenle "komut dosyası dilleri" genellikle dinamik olarak yazılır), statik olarak yazılan dillerin (tartışmalı olarak) büyük, karmaşık projelerde büyüdükçe bakımı ve genişletilmesi daha kolaydır.
Charles Salvia

6
İlk örnek, değişkenlerin bildirilen türü olmayan Python'a benzer . Bununla birlikte, Python çok güçlü bir şekilde yazılmış bir dildir çünkü nesnelerin - kendileri - değiştirilmesi veya zorlanması neredeyse imkansız olan bir türe sahiptir. Bence terminolojinin yanlış kullanımı bu soruyu cevaplamayı çok zorlaştırıyor.
S.Lott

1
@delnan Bu sorunun iki makul cevabı vermesi ve bir alev savaşına dönüşmemesi yardımcı oluyor.
Adam Lear

Yanıtlar:


25

Güçlü / zayıf yazma ve statik / dinamik yazma dikeydir.

Güçlü / zayıf , işlevsel olarak konuşarak, bir değerin türünün önemli olup olmadığıyla ilgilidir. Zayıf yazılan bir dilde, rakamlarla dolu iki dizeyi alabilir ve bunlara tamsayı ekleyebilir; kuvvetle yazılan bir dilde bu bir hatadır (önce değerleri doğru türlere çevirmez veya dönüştürmezseniz). Güçlü / zayıf yazım siyah beyaz bir şey değildir; çoğu dil ne% 100 katı ne de% 100 zayıftır.

Statik / dinamik yazma, türlerin değerlere veya tanımlayıcılara bağlanıp bağlanmadığıyla ilgilidir. Dinamik olarak yazılan bir dilde, türden bağımsız olarak herhangi bir değişkene herhangi bir değer atayabilirsiniz; statik yazma her tanımlayıcı için bir tür tanımlar ve farklı bir türden atama ya bir hatadır ya da örtük bir yayınla sonuçlanır. Bazı diller, statik olarak bildirilen türlerin yanı sıra türlenmemiş tanımlayıcılara ('varyant') izin veren karma bir yaklaşım benimser. Ayrıca, derleyicinin türleri bulmasını sağlayarak, her şeyin türünü açıkça bildirmeden statik yazmanın mümkün olduğu bir mekanizma olan bir tür çıkarım da vardır (Haskell bunu kapsamlı bir şekilde kullanır, C # bunu varanahtar kelime yoluyla ortaya koyar ).

Zayıf dinamik programlama pragmatik bir yaklaşıma izin verir; dil çoğu zaman yolunuza çıkmaz, ancak kendinizi ayağınıza çektiğinizde de içeri girmez. Güçlü statik yazım, aksine, programcıyı derleyicinin veya yorumlayıcının bir hata sınıfını algılamasına izin verecek şekilde koddaki değerler hakkında belirli beklentileri açıkça belirtmeye iter. İyi bir tip sistemi ile, bir programcı bir değere neyin yapılabileceğini ve neyin yapılamayacağını tam olarak tanımlayabilir ve eğer birileri yanlışlıkla birisini istenmeyen bir şekilde denerse, tip sistemi genellikle bunu önleyebilir ve şeylerin tam olarak nerede ve neden yanlış gittiğini gösterebilir.


Dize birleştirme ve ekleme (örneğin &birleştirme için varsayalım) için ayrı işleçlerle HyperTalk gibi uygun şekilde zayıf yazılan bir dilde , belirsizlikler gibi "12"+3veya 45 & "6"hiç işlem yapılmaz (sırasıyla 15 ve "456" hesaplar). Daha kuvvetli bir şekilde yazılmış bir dilde, "+" operatörü belirsizlik yaratmadan hem dize birleştirme hem de sayısal ekleme için güvenli bir şekilde aşırı yüklenebilir, çünkü dize ve sayılardaki işlemler yasaklanır. Dil, ne türler ne de yapılacak işlemler için çiviler belirtildiğinde sorunlar ortaya çıkar.
supercat

4

Zayıf yazım daha fazladır 1 == "TRUE". Vikipedi üzerindeki bu bölüm farkı güzel bir şekilde göstermektedir.

Lütfen, wikipedia'dan hiçbir örneğin statik olarak yazılmadığını unutmayın; bu, ikinci örneğinizde bahsettiğiniz şeydir.

Öyleyse, soru neden insanlar dinamik olarak yazılan dilleri kullanıyorsa, cevap şudur: statik tip sistemler size sınırlamalar getirir. Birçok insan hiçbir zaman etkileyici bir statik tip sistemle çalışmadı, bu da onları statik yazmanın dezavantajlarının faydalardan daha ağır bastığı sonucuna götürür.


0

İnsanlar bu dilleri kullandıkları ve sevdikleri için zayıf tür diller hala geliştirilmektedir. Zayıf yazmayı sevmiyorsanız, zayıf yazılan dilleri kullanmayın. Bir şeyin Tek Gerçek Yol olduğunu ve Herkesin Tek Gerçek Yol Yapması gerektiğini beyan etmek, dünyanın karmaşıklığını görmezden gelir.


0

Tüm diller derleme zamanında tür güvenliğini zorunlu kıldığından, güçlü bir şekilde yazılmaya çalışılmamalı mı, böylece tür dökümünde bazı tuzaklardan kaçınmalı mı?

Şart değil. Amaç-C Öğrenme: Bir Primer bu soruyu doğrudan Amaç-C bağlamında ele alır:

Zayıf yazılan değişkenler, koleksiyondaki nesnelerin tam türünün bilinmediği koleksiyon sınıfları gibi şeyler için sıkça kullanılır. Güçlü yazılan dilleri kullanmaya alışkınsanız, zayıf yazılan değişkenlerin kullanımının sorunlara yol açacağını düşünebilirsiniz, ancak aslında muazzam esneklik sağlarlar ve Objective-C programlarında çok daha fazla dinamizme izin verirler.

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.