Kısa cevap: hayır, çünkü Turing denkliği.
Uzun cevap: Bu adam trol oluyor. Tür sistemlerinin "sizi bir alt kümeyle sınırlandırdığı" doğru olduğu halde, bu alt kümenin dışındaki öğeler, tanım gereği çalışmayan şeylerdir.
Herhangi bir Turing-komple programlama dilinde yapabileceğiniz her şey (genel amaçlı programlama için tasarlanmış bir dil, artı olmayanlar; temizlemesi oldukça düşük bir çubuktur ve sistemin dönmesi için birkaç örnek vardır.) istemeden tamamlayın) herhangi bir Turing-complete programlama dilinde yapabilirsiniz. Buna "Turing denkliği" denir ve yalnızca tam olarak ne dediği anlamına gelir. Önemlisi, diğer bir şeyi diğer dilde olduğu kadar kolay yapabileceğiniz anlamına gelmez - bazıları ilk sırada yeni bir programlama dili yaratmanın asıl amacının bu olduğunu söyler: Mevcut dillerin emdiği şeyler.
Örneğin, dinamik bir tip sistemi, tüm değişkenleri, parametreleri ve dönüş değerlerini temel olarak bildirerek statik OO tipi bir sistemin üzerine taklit edilebilir. Object
tip ve ardından içindeki belirli verilere erişmek için yansıma kullanarak edilebilir, böylece bunu gerçekleştirdiğinizde Kelimenin tam anlamıyla, dinamik bir dilde yapabileceğiniz hiçbir şeyi statik bir dilde yapamayacağınızı görüyorsunuz. Ama bu şekilde yapmak elbette büyük bir karışıklık olurdu.
Alıntıdaki adam statik tiplerin yapabileceklerinizi kısıtladığına göre doğru, ama bu önemli bir özellik değil, sorun. Yoldaki çizgiler arabanızda neler yapabileceğinizi sınırlar, ancak onları kısıtlayıcı mı yoksa yardımcı mı buluyorsunuz? (Otomobillerin yanlarına doğru gitmelerini söyleyen hiçbir şeyin olmadığı ve araba sürdüğüm yere gelmeyeceklerini söylemediği yoğun, karmaşık bir yolda sürmek istemeyeceğimi biliyorum!) Ne olduğunu açıkça tanımlayan kuralları belirleyerek geçersiz davranış olarak kabul edilir ve bunun gerçekleşmemesini sağlamak, kötü bir çarpışma olasılığını büyük ölçüde azaltırsınız.
Ayrıca, diğer tarafı da kötüleştiriyor. Bu, "yazmak istediğiniz tüm ilginç programlar tür olarak çalışacaktır" değil, "yazmak istediğiniz tüm ilginç programlar tür gerektirecektir " değil. Belli bir karmaşıklık seviyesinin ötesine geçtiğinizde, iki nedenden dolayı sizi kodda tutmak için bir tür sistem olmadan kod tabanını korumak çok zorlaşır.
Birincisi, tür ek açıklamaları olmayan kodların okunması zor çünkü. Aşağıdaki Python'u düşünün:
def sendData(self, value):
self.connection.send(serialize(value.someProperty))
Verilerin, bağlantının diğer ucundaki sistemin aldığı gibi görünmesini ne bekliyorsunuz? Ve tamamen yanlış görünen bir şey alıyorsa, neler olduğunu nasıl anlarsınız?
Hepsi yapısına bağlıdır value.someProperty
. Ama neye benziyor? İyi soru! Ne çağırıyor sendData()
? Ne geçiyor? Bu değişken neye benziyor? Nereden geldi? Yerel değilse, olup value
bitenleri takip etmek için tüm tarih boyunca izlemelisiniz . Belki de someProperty
mülkiyeti olan başka bir şeyden geçiyorsunuzdur, fakat düşündüğünüzü yapmaz.
Şimdi buna, benzer bir sözdizimi kullanan ancak statik olarak yazılmış olan Boo dilinde görebileceğiniz gibi tür ek açıklamalarına bakalım:
def SendData(value as MyDataType):
self.Connection.Send(Serialize(value.SomeProperty))
Yanlış giden bir şey varsa, aniden hata ayıklama işiniz daha büyük bir sipariş aldı: tanımına bakın MyDataType
! Ayrıca, kötü davranış alma şansı, aynı adı taşıyan bir özelliği olan uyumsuz bir türden geçtiğinizden aniden sıfıra gider, çünkü tür sistemi bu hatayı yapmanıza izin vermez.
İkinci sebep ilke dayanıyor: Büyük ve karmaşık bir projede, büyük olasılıkla birden fazla katılımcınız var. (Ve eğer değilse, uzun zamandır kendiniz yapıyorsunuz, bu aslında aynı şey. Bana inanmıyorsanız 3 yıl önce yazdığınız kodu okumayı deneyin!) Bu, ne olduğunu bilmediğiniz anlamına gelir. kodun yazıldığı sırada hemen hemen herhangi bir bölümünü yazan kişinin kafasından geçiyordu, çünkü orada değildiniz ya da uzun zaman önce kendi kodunuz olup olmadığını hatırlamıyordunuz. Tip bildirimlerinin olması gerçekten kodun amacının ne olduğunu anlamanıza yardımcı olur!
Alıntıdaki adam gibi insanlar, neredeyse sınırsız donanım kaynaklarının her geçen yıl daha az ve daha az alakalı hale getirdiği bir dünyada, “derleyiciye yardım etme” ya da “tamamen verimlilik hakkında” olmaları gibi statik yazmanın yararlarını sıklıkla yanlış tanımlıyorlar. Ancak gösterdiğim gibi, bu faydalar kesinlikle mevcut olsa da, birincil fayda insan faktörlerinde, özellikle de okunabilirlik ve bakım kolaylığı. (Eklenen verimlilik, yine de kesinlikle güzel bir bonus!)