Minimalist bir gelişme yaklaşımı izleyen herhangi bir programlama dili var mı?


26

Dillerin ticari yazılımlarla aynı olduğu düşünüldüğünde, yeni sürümleri haklı çıkarmak için her zaman yeni özellikler eklemenin sürekli bir ihtiyaç olduğunu biliyorum.

Sürüm 1.0'ın son sürüm olduğu diller olabilir mi, var mı? Elbette hata düzeltmeleri bundan muaf, ama özellik her zaman aynı kalır?

Bu şekilde, dildeki her özellik güzel bir şekilde bir araya gelir ve geriye doğru uyumluluktan dolayı hala kullanılmayan eski özelliklere sahip olduklarından sonra vidalanmış gibi görünmezler.

Bazı akademik dillerin böyle olduğunu farz ediyorum? Ancak bu fikri takip eden ticari olarak başarılı diller var mı? Eşlik eden kütüphane de yeni özellikler almakta serbesttir, ancak dil her zaman sabit kalır.

Verebileceğim bir örnek, oldukça sık kullandığım favori dillerim C # 'dan biri, her sürümde daha fazla özellik ekleniyor. Bunlardan yararlanmak için, gerçek görevleri elimden almalı ve önemsiz kavramları alıp daha karmaşık sorunları çözmek için kendimi bir araya getirmektense bunları öğrenmek için uzun zaman harcamak zorundayım.

Sanırım her şeyin tutarlı olduğu, mantıklı olduğu ve mümkün olduğunca dik olduğu minimalist bir yaklaşım arıyorum.


7
Çoğu geliştiricinin çalışma alanı, problemleri etkili bir şekilde çözmektir. Etkinlik, sürekli yeni şeyler öğrenmeyi gerektirir. Yeni dil özellikleri, yeni çerçeveler, yeni araçlar daha etkili olması için geliştirildi. Onları öğrenerek, aslında işine odaklanıyorsun.
Arseni Mourzenko

4
Program yapan herkes mutlaka tam zamanlı bir programcı değildir. Diğer birçok meslek için başka bir araçtır.
Joan Venge

4
Sonra tekrar, kimse seni bir şey öğrenmeye zorlamaz. C # 1.0 gereksinimlerinizi çözerse, ihtiyacınız olmayan bir şeyi öğrenmek için zamanınızı boşa harcamayın.
Arseni Mourzenko

11
Bence sorunun meşru olduğunu düşünüyorum: Neden KISS ve YAGNI prensiplerini yazılım yapılarına uygulamalıyız? Bir dilin yeteri kadar temel özelliği varsa, daha fazla gelişme (IMHO), esas olarak pazarlama (şirketleri, müşterilerini korumak için özelliklere sahip dilleri yapmaya zorlayan diğer dillerle rekabet etme) nedeniyledir.
Giorgio

2
@MainMa: "Etkinlik sürekli yeni şeyler öğrenmeyi gerektirir.": Çok fazla özellik içeren karmaşık bir programlama dili, onu artırmak yerine etkinliği azaltabilir. Örneğin, bir ekip içinde, dilin farklı altkümelerini kullanan, kod incelemeleri yapan, hata düzeltme ve bakım işlemlerini daha az verimli hale getiren farklı geliştiricilere yol açabilir.
Giorgio

Yanıtlar:


32

Lisp, Smalltalk. Tesadüfen, bunlar aynı zamanda bütün gruptaki en iyi dillerdir.

Hem Lisp hem de Smalltalk, güçlü birleştirici metafor üzerine inşa edilmiş dillerdir. Lisp'in metaforu "her şey bir listedir; bu liste hem veri hem de kodu (işlev olarak) temsil eder" dir. Smalltalk'un metaforu "her şey bir nesnedir; bir davranışı çağırmanın tek yolu, bir nesneye mesaj iletmektir". Bu metafor, dillerin kararlı, minimal ve güçlü olmasını sağlar. Gerisi kütüphanede.

Minimal olmayan tüm dillerde ("şişirilmiş" yazmak istedim) dillerinde "kontrol yapıları" olarak adlandırılan şeyler, burada kütüphanenin bir parçasıdır (örnek olarak: condlisp işlevinde ifTrue:/ ifFalse:Smalltalk'taki mesaj ailesi, hem diğer dillerin ifanahtar kelimesi olduğu yerlerde ).

Lisp / Smalltalk'ın paradigmalarının neredeyse minimal bir düzenlemesi olduğu ve daha fazlası olmadığı görülebilir (Lisp: işlevsel programlama; Smalltalk: nesne yönelimli programlama).


4
İyi Lisp uygulamaları C ile rekabet edebilir, iyi Smalltalk uygulamaları C ++ ile rekabet edebilir. Heck, Oracle'ın HotSopt JVM, gezegendeki en hızlı VM, olduğu hatta onun optimizasyonlar için statik türde bilgileri kullanmaz, bir Smalltalk VM.
Jörg W Mittag


9
Bu cevap, yapıcı olamayacak kadar küçük. Detay veya destekleyici kanıt eksikliği.
Jimmy Hoffa,

2
-1 Lisp? LİSP ? Ciddi anlamda? 1970'lerin LİSP Savaşlarından sonra, tekrarlananlar bir LİSP Birliğine ve sonunda Ortak Lisp'e teşebbüs eder mi? Hayır, LISP bile 1.0’da “bitmedi”.
Ross Patterson,

1
Bence çok önemli bir fikre dikkatinizi çekti: bir dilin bir (veya birkaç) güçlü, birleştirici metafor (lar) etrafında oluşturulması gerektiğini, yani bir programlama dili düşüncelerinizi düzenlemenin bir yolunu sunmalıdır. Bence bazı dillerin karmaşıklığı kısmen böyle bir metaforun olmamasından kaynaklanıyor: bu diller yeni özellikler birleştirerek büyümeye devam ediyor çünkü temelde birleştirici bir bakış açısı yok.
Giorgio

6

Dizgi sistemi olan TeX , sürüm 3'ten bu yana oldukça kararlı.

Sürüm 3'ten bu yana, TeX, sürümlerin asimptotik olarak π'e yaklaşması için, ondalık sayının sonuna fazladan bir rakam ekleyerek güncelleme yapılan bir özel sürüm sürüm sistemi kullandı. Bu, TeX'in şimdi çok istikrarlı olduğu ve yalnızca küçük güncellemeler beklendiği gerçeğinin bir yansımasıdır. TeX'in şu anki sürümü 3.1415926; en son Mart 2008’de güncellendi. Tasarım, sürüm 3.0’dan sonra dondu ve yeni bir özellik veya temel değişiklik eklenmeyecek, böylece yeni sürümlerin tümü yalnızca hata düzeltmeleri içerecek. Donald Knuth'un kendisi, TeX'in geliştirilebileceği birkaç alan önermiş olsa da, aynı çıktıyı üretecek değişmemiş bir sisteme sahip olmanın, şimdi ve gelecekte yeni özellikler sunmaktan daha önemli olduğuna inandığını belirtti. Bu nedenle "dedi.

"Sizin her şeyin tutarlı olduğu, mantıklı olduğu ve mümkün olduğunca dik olduğu minimalist bir yaklaşım arıyorum." ifadesi, ancak diğer kriterlerin çoğunu karşılamaktadır.


6

C ve Fortran akla gelen dillerdir. Çok kararlıdırlar ve sözdizimleri kişinin aklında kolayca bulunur. Kendinize kötü kod yazmaktan başka, bu dilleri kullanırken çok az sürpriz var. Ancak onları hızlı uygulama geliştirme için harika diller olarak tutmazdım.

Dillerin hızlı ilerlemesini, bir zamanlar onlara biraz zaman harcadığım, işimi önemli ölçüde kolaylaştıran ve ifadeyi korurken kodumuzu daha az karmaşık hale getiren özelliklerle tercih ediyorum.


1
C'nin minimalist tasarımı ile aynı fikirdeyim. Dil yıllar boyunca güncellense bile, dilin temel tasarım ve programlama modeli hala tanınıyor (diğer diller her 5 ila 10 yılda bir devrime giriyor). Elbette, C, eskiden olduğu gibi genel amaçlı bir dil değildir, çünkü belirli uygulama alanlarındaki (masaüstü uygulamaları, web uygulamaları vb.) Diğer dillerle değiştirilmiştir.
Giorgio

@ Giorgio: Hepsi değil. Minimal olanlar (bahsettiğim gibi) yapmaz. Kıvırcık kaynaklı bilgisayarlı diziler: Squtal'ın getirdiği bir tanesinin haricinde, Smalltalk sözdiziminde herhangi bir değişiklik olmadı. Kütüphane, çekirdek ( Behaviorve Collectionhiyerarşiler) konusunda da oldukça kararlıdır . Bana öyle geliyor ki, C, C89, C99 ve diğerleri ile daha az kararlı.
herby

1
@herby: Muhtemelen Smalltalk gibi diğer dillerin C'den daha kararlı olduğu konusunda haklısın. Yine de, C'nin temel programlama modeli, 20 yıl önce olduğu gibi. Diğer diller derin değişimlere uğramıştır. Bu yüzden, yine de C'nin en istikrarlı dil olduğunu iddia etmiyorum, ancak IMO, diğer birçok ana dilden çok daha kararlı.
Giorgio

6

Diğerleri çoktan Lisp demişti bu yüzden Forth'u büyütmeliyim . Uygulaması çok kolaydır ve dilin kurallarını takip etmek kolaydır.

"Kelimeler" sözlüğüyle yığın temelli bir dildir. Kalıtsal bazı özellikleri kullanarak dili kolayca genişletebilirsiniz.

Kaplumbağa grafiklerin ÇOK özlü bir örneği:

\ 8.8 fixed point sine table lookup
-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,
: s abs 3C mod dup 1D > if 3C swap - then dup E > if
  -1 1E rot - else 1 swap then n + c@ 1+ * ;

0 var x 0 var y 0 var a
0 var q 0 var w 
: c 9380 C80 0 fill ; \ clear screen
: k >r 50 + 8 << r> ! ;
: m dup q @ * x +! w @ * y +! ; \ move n-pixels (without drawing)
: g y k x k ; \ go to x,y coord
: h dup a ! dup s w ! 2D + s q ! ; \ heading
: f >r q @ x @ y @ w @ r 0 do >r r + >r over + \ forward n-pixels
  dup 8 >> r 8 >> plot r> r> loop o y ! x ! o r> o ;
: e key 0 vmode cls ; \ end
: b 1 vmode 1 pen c 0 0 g 0 h ; \ begin
: t a @ + h ; \ turn n-degrees

Sonra onu ile çalışan : squiral -50 50 g 20 0 do 100 f 21 t loop ;size verir:

spiral

Bu Microsoft çalışanının blogu için kredi .


1
Bu nasıl yeniden oylandı? İleride iyi bir aday olabilir, ancak verilen örnek çalıştırılabilir hat gürültüsünden çok daha iyi değil; PLT'nin açıklık takıntısının neden profesyonellerin ihtiyaç duyduğu ile karşı karşıya olduğunun en iyi örneği.
Telastyn

4
@Telastyn Bu onun sorusu değildi.
Austin Henley

4

Lisp'den söz edilmesine rağmen, bildiğim en minimalist dil şema . Zorunlu olduğum üniversite derslerinde bunu anlamakta zorlandım. Fakat programlama hakkında düşünme biçimimi değiştirdi ve bu çok az. Tüm sözdizimi kadar az, Parantez ()ve Boşluktur.

Dildeki tek değişiklik +, define(ve diğerleri gibi) ilkelleri yerleşiklere dönüştürme kararıydı . Yani lansman sırasında kullanılabilirler, ancak çalışma sırasında yeniden tanımlanabilirler.


2

Her şeyden önce minimalist olacak tasarım olan Tcl

Oradan http://www.tcl.tk/about/features.html sayfasından , özelliklerden biri, öğrenmenin çok kolay olması ve sıradan programcıların ve hatta programcı olmayanların nerede kullanabileceğidir.


3
Bu bana doğru geliyor, ancak tek satırlık cevaplar destekleyici bilgi içermiyor veya detaylar kimseye yardımcı olamayacak kadar düşük kalitede. Lütfen iyi bir ayrıntı ekleyin (ve sadece özetini içermeyen bir bağlantı değil) ve benden yukarıdan bir oy alacaksınız
Jimmy Hoffa

tamam, ancak kapatılmamış soru nedeniyle ne kadar çaba harcamadığını bilmiyorum
Egryan

1
Şans ile oylardan tekrar açılacak. Güzel bir soru. Topluluk tarafından yakında yeniden açılmamışsa, yeniden açılmasını denemek ve yeniden açmak için Meta’ya gönderebilirim.
Jimmy Hoffa

Kabul ediyorum ve işten çıktıktan sonra
gönderiye

"TCL Dili Üzerine Bir Vaka Çalışması", "Tcl: Katıştırılabilir Bir Komut Dili" ve tcl.tk/about/history.html için google'da arama yapın - bazı önemli noktalar veriyorlar. Ancak, OP'nin arzusunu desteklediklerinden emin değilim - görünen o ki, TCL orijinal 1.0’ından uzatıldı (bkz. Wiki.tcl.tk/1721 )

2

İstenen olasılıkları düşük olan diller dışında ezoterik dilleri dışında kurulduğundan beri nispeten değişmeyen çok az dil var ( Befunge'de anlamlı bir şey yazmaya çalışmaktan nefret ediyorum (yine de orijinal 1.0 serbest bırakmak)).

Yeni bir şey öğrenmek zorunda kalmama arzusunu doldurması en muhtemel olan diller, diğer programlar arasında 'yapıştırıcı' konusunda uzmanlaşmış dillerdir. Jcl , bash ve benzerleri gibi diller . Basit kodlama dilleri de buna dahil olabilir - awk , liderlerden biri.

Biri bu alemi terk ettiğinde, gelişme olur. Dil veya çerçeveler. Bazı durumlarda, dili hızlı bir şekilde değiştiren bir çerçeveye ulaşmadan kodlamak 'zordur'.

Birçok dilde bir miktar geriye dönük uyumluluk vardır. Bir kişi bugün hala Java 1.4 yazabilir, ancak muhtemelen tavsiye edilmese de - insanların bunun için yazdığı çerçeveler dilden daha hızlı değişiyor. Birisi 20 ila 40 yılda değişmeyen bir dil spesifikasyonu için hala f77 ve f90 derleyicilerini bulabilir. C, Amaç C, C ++ hala dilin daha eski teknik özelliklerine kodlanmış olabilir - bir kişinin kodunu güncel tutması gerekmemektedir, çünkü yeni bir özellik yayımlanmıştır veya orada yeni bir çerçeve vardır.

Bazı dillerin oldukça uzun, değişmeyen bir geçmişi vardır, çünkü dilin kendisi istediği şeyi yapmak için yeterince güçlüdür. Lisp bu alanda ana adaydır. Dördüncü ayrıca, "pek değişmedi" alemine de girer.

Daha geleneksel kodlama dillerine gitmek TCL, Perl ve Python'a bakar. Şu anda 'fad' aleminde olan ve bir nedenden dolayı popülerlik patlaması yaşayan şeylerden kaçının (yakut ve javascript, sana bakıyorum). TCL yıllar içinde değişti , ancak hedeflerinden biri tasarım tutarlılığını korumaya çalışmak. Modern Perl ve Python'un her ikisi de bazı tasarım tutarlılıklarına sahip olsa da, kuşkusuz yeni özellikler cıvatalanmış gibi hissedebilir (bir kişinin kullanması gerekmese de).


2

Python'un tasarım hedeflerinden biri olarak minimalizmi olan bir dil için uygun bir aday olduğunu düşünüyorum. Diğer şeyler arasında, teşebbüs nispeten küçük çekirdek kavramları sayısı ve sürüm 3 civarında dayanıyor, dilini biraz basitleştirmek tarafından kaldırarak bazı özellikleri.

(Onaylandı, bu sürüm 1'den aynı kalan bir özellik seti ile aynı değil, ancak dil yazarlarının istedikleri zaman sürüm 1 olarak adlandırmaları koşuluyla dilleri değerlendirmenin oldukça keyfi bir yol olduğunu düşünüyorum.)


Aralık 2012 cevap tarihi size ücretsiz bir geçiş hakkı veriyor, çünkü o zamandan beri Python 3 olarak bilinen ve aslında basitliği ortadan kaldırırken bir yığın kaba yığın eklemek isteyen C ++ ile rekabet eden canavarlığa sahibiz. Şimdi bilgisayardaki en yabancı addon-istila dillerinden biri.
Thomas Browne,

-1

Bence "minimalist" tasarım yaklaşımı Tcl tarafından örneklendirilecektir. Örnek olarak, hayal gücünüzün düşünebildiği herhangi bir kontrol yapısını uygulamak için {return} komutunu {return -code n} değerleri ile kullanabilirsiniz, Perl (resmen) almak için on yıl beklemek zorunda kaldı. hiç ihtiyacım vardı). Ayrıca Dodekalogue http://wiki.tcl.tk/10259’un Tcl’nin dilbilgisini tamamen kapladığını göreceksiniz - geri kalan, çalışmak istediğiniz programlama paradigması ne olursa olsun, bu dilbilgisinde ifade edilebilir.


bu sadece iki yıl önce yayınlanan bir cevapta yapılan ve açıklanan noktayı tekrarlar
gnat

Orjinal gönderiye atıfta bulunarak yalnızca ortogonallık = tarihçe (C dilleri ailesi) ve son diller arası asimilasyon diyebilirim; İşletim sistemi hatlarında, genelleştirilmiş MVC web çerçeveleri, coroutines ve c. Bu trendin dışında, C11 ve yaklaşmakta olan Java lambdalarına (her ikisi de işletim sisteminin "komut dosyası" dillerindeki gelişmeyi yansıtan) dikkat çekici kapanışlara dikkat çekebilirim.
user132043
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.