Bazı dil toplulukları (örneğin, Ruby ve Python) diğerleri (örneğin, Lisp veya ML) olmasa da parçalanmayı nasıl önleyebilirdi?


67

"Lisp" (veya "Lisp benzeri") terimi, Common Lisp, Scheme ve Arc gibi birçok farklı dil için bir şemsiyedir. ML'de olduğu gibi diğer dil topluluklarında da benzer parçalanma var.

Ancak, Ruby ve Python, dilde değişiklik yapmak yerine, uygulamada yenilikçiliğin (PyPy veya YARV gibi) daha fazla gerçekleştiği bu kaderden kaçmayı başardı.

Ruby ve Python toplulukları dilin parçalanmasını önlemek için özel bir şey yaptı mı?


10
Kötü bir şey gibi parçalandığını söylüyorsun.
Sonia

21
@Sonia Pazar payı açısından, parçalanma genellikle bir felakettir.
chrisaycock

5
Diller birbirleriyle rekabet halinde mi?
Barry Brown

32
@Sonia Kötü bir şey olabilir. Örneğin, Python için yazılmış bir kütüphane neredeyse kesinlikle uygulamaya bağlı değildir, ancak Lisp için yazılmış bir kütüphane Şema'da çalışmayabilir.
Kris Harper

2
@Barry Brown: Harika nokta! Diller birbirleriyle pazar rekabeti içinde olmamalıdır. Ancak, dil satıcıları genellikle bu dil tasarımını etkiler (bunun Ruby, Python, Lisp, ML gibi bir durum olduğunu sanmıyorum).
Giorgio,

Yanıtlar:


77

Ruby ve Python'un her ikisi de dümenlerinde iyi niyetli diktatörlere sahiptir . Pragmatik kaygılara derinden dayanan dillerdir. Bunlar muhtemelen parçalanmayı engelleyen en önemli faktörlerdir. Lisp ve ML ise teorik olarak akademi'de “komite tarafından tasarlanan” diller gibidir.

Lisp aslen John McCarthy tarafından bilgisayar programları için pratik bir matematik notasyonu olarak tasarlandı. Asla gerçek bir programlama dili olarak uygulamamıştı; ilk uygulama Steve Russell tarafından geliştirildi , ancak yardımsever bir diktatör değildi. Zaman içinde Lisp'in birçok farklı uygulaması ortaya çıktı; Common Lisp onları standartlaştırma girişimiydi.

Lisp daha çok dil ailesinden biridir. Öyleyse, ML, Lisp'e benzer bir evrimsel yol izlemiştir.


4
Hmm, kesinlikle Objective-C (iOS uygulamaları için) ve Ada (Savunma Bakanlığı sözleşmeleri için) gibi homojen dil toplulukları arasındaki diktatör durumunu görüyorum. Bu durumlarda, geliştiricilerin sadece kendi warezlerini satabilmek için takip ettikleri yüksek bir güç bağlılık istedi. Ancak hiçbir zaman Python'da (hobici proje) C # (.Net bileşeni) kodlaması gerekebileceği gibi kodlamam gerekmedi. Yani, Python'dan C'den daha kolay kaçabilirim. Bu kullanım tehdidi olmadan veya satış yapmazsınız, bir diktatör sürüye nasıl tutunur? Bu olsa ayrı bir soru olabilir.
chrisaycock

1
"İyi niyetli diktatör" derken, bütün dil değişikliklerinin dili saf kılma vizyonuna sahip bir kişiden geçmesi gerektiğini kastediyorum. Pragmatik nedenlerle insanlar Python ile kalıyor; dili severler ve içinde üretkendirler. Ancak herkesin ve erkek kardeşinin bunu çatallamasına ve hala Python olarak adlandırmasına izin verilmiyor.
Robert Harvey,

4
@HenrikHansen Haskell, Robert'in bahsettiği gibi bir standarttır. Bu yüzden HUGS derleyicisi her ikisi de kendilerine "Haskell" dediği için GHC ile uyumlu olmalıdır. Aynı standart tabanlı koruma, C ve C ++ 'a kadar uzanır; bu nedenle GCC ve Visual Studio'nun uyumlu olması gerekir (özel uzantıların kullanılmadığı varsayılır). Merak, Lisp'e olan, zaten bir standardın (Common Lisp) olduğu ve henüz birçok Lisps'ın olduğu şeydir. ML, Standart ML ve henüz diğer ML'lerin olduğu yerde aynı soruna sahiptir.
chrisaycock

4
"Yaygın Lisp, Lisp'in birbirinden ayrılan farklı değişkenlerini standartlaştırmak için geliştirildi" - en.wikipedia.org/wiki/Common_Lisp . Başka bir deyişle, standart geliştirilmeden önce zaten parçalanma vardı.
Robert Harvey

3
ML ve Lisp’lerin Python ve Ruby dilleri olmadığını bile söyleyebilirim. Lisp ve ML, birkaç farklı dil tarafından uygulanan "kavramlar" gibidir.
BenjaminB

29

Muhtemel bir faktör sadece yaş. Lisp ve ML Python ve Ruby'den çok daha yaşlı:

  • Lisp: 1958

  • ML: 1973

  • Python: 1991

  • Yakut: 1995

Lisp ve ML, donanım yeteneklerinde çok daha fazla değişiklik, bilgisayar bilimlerinde daha fazla eğilim ve üzerinde çalışacak bir şeyler arayan çok sayıda doktora öğrencisi olduğu açıkça görülüyor.


7
Muhtemelen, ama Fortran’a bu derece çatalları olduğunu hatırlamıyorum. (Fortran D gibi şeyler vardı ama çoğu Fortran standardizasyondan geçti.) Sanırım birleşme yaşı belki de bir faktör olabilir.
chrisaycock

2
AFAIK, Fortran, standartlar komiteleri yavaş yavaş ortaya çıkana kadar muhtemelen muhtemelen Lisp ve ML'den daha yaygın olduğu için birçok uyumsuzluk ve standart dışı uzantıya ve farklı uygulamalara sahipti.
erjiang,

@erjian: FORTRAN uyumsuzluklarını ortaya çıkardı, çünkü iş kullanımı için ciddi bir teşvik vardı. Çoğunlukla akademisyenlerde kullanılan LISP, hiç bu kadar lüks olmamıştı. Yani, kullanımının ne kadar yaygın olduğu değil, kullanıcılarının ne kadar zengin olduğu.
MSalters

2
Veya, dönüşümlü olarak, değişkenler FORTRAN olarak adlandırılmamıştır. BASIC, çıktığında, basitleştirilmiş bir FORTRAN'a benziyordu.
David Thornley

1
@MSalters Common Lisp aslında iş kullanımıyla diğer şeylerin yanı sıra çeşitli makam ağızlarında uyumsuzlukları gidermek için (oldukça başarılı bir IMO) çabasıydı (ve ayrıca DARPA finanse ettiği tüm araştırma laboratuvarlarının kodu daha kolay paylaşabilmesini istedi) . Günümüzde şema, clojure ve ortak lisp dışında, pratik bir genel amaç lispları yoktur ve bu üçü yeterince farklıdır, ayrı kültürlere ve tarihe sahip, java ve C ++ 'dan ziyade aynı dilin lehçeleri sayılmaz. .
Pavel Penev

24

Bunlar aslında bütün uygulama tanımlı dillerdir.

Öyle bir dilin yeni uygulama oluşturmak kolaydır olduğunda büyük ölçüde , daha sonra korsanların olmak korsanları kod mevcut uyumlu, devam edin ve bunu. Herkes bir noktada Lisp uygulaması yazıyor. ML derleyicileri, dil tasarımındaki lisans öğrencileri için neredeyse zorunludur - dil, tümüyle iyi belgelendirildikten sonradır .

Öte yandan, özel ve uygulama tarafından tanımlanan dillere sahibiz. Ya da o kadar karmaşık olan diller, şimdiye kadar uygulanabilir bir alternatif uygulama üretmenin önündeki önemli bir engeldir:

  • yakut; perl; python - uygulanabilir alternatifler üretmek için fazlasıyla tanımlanmış uygulama
  • ghc haskell ve erlang - iyi tanımlanmış, ancak insanların genellikle rahatsız etmediği, ghc (veya erlang) ile rekabet eden bir şey yapmak çok zor

Olumsuz görünen bu durum - alternatif alternatifler üretemeyecek kadar zor olan diller, büyük bir tersine sahip: kıt geliştirici kaynakları tek bir gerçek uygulamaya yoğunlaşıyor.


Tarihsel bir not olarak, Haskell topluluğundaki birçok kişi, dev topluluğun parçalanmasının başaramayacağımız anlamına geldiğini kabul ederek aktif olarak birleşme ve dev çabanın yoğunlaşmasını takip etti. GHC seçildi ve şampiyon oldu.


2
"Aktif olarak takip edilen birleşme ve yoğunlaşma" hakkında daha fazla şey bilmek isterim.
Sam Tobin-Hochstadt

Parçalanma doğaldır. Python ve Ruby gibi diller, kullanılmayan varyantları saymazsanız, örneğin ChinesePython ve daha önceki bir sürümde durdurulan varyantlar, örneğin Jython gibi ana kısımda parçalanmayan anomillerdir. Burada hayatta kalma önyargısı da var, çünkü diktatörlü dillerin çoğu pek popüler olmuyor, örneğin Nermerle, Groovy, Beanshell, Boo, aslında binlerce kişi var.
Vorg van Geir 11:12

1
O zaman bile Haskell, Python / Ruby olgunluk durumuna ulaşmak için hala daha pratik olabilirdi. Haskell'in cabalkullanması eğlenceli bir araç değildir ve kırılması kolaydır: Yesod bile bunu onaylıyor: yesodweb.com/blog/2012/04/cabal-meta Python ve Ruby, paket yönetimi konusunda çok daha iyi.
Ehtesh Choudhury

1
@Shurane Python ve Ruby yazmadan önce paketlerinizi kontrol etmiyorlar ...
Don Stewart

2
-1: "yakut; perl; python - uygulanabilir alternatifler üretmek için çok fazla uygulama tanımlı" Jython, IronPython, JRuby, IronRuby, PyPy, Stackless, uygulamalarda (ve bunlar yalnızca büyük olanlar) yanlış olduğunu ispatlamaktadır. Ayrıca, CPython referans uygulamasıdır, ancak dil tanımı değildir, bu
vartec 14:13

12

Bir faktörün tanımlayıcı bir platform olduğunu söyleyebilirim . Haskell için platform Haskell standardı ve GHC'dir (hayal ediyorum). Ruby için Ruby geliştirme platformunu "tanımlayan" Ruby on Rails idi. C için Unix'ti.

Bunu, dilin nasıl olduğunu tanımlayan özgün bir tekme platformunun olmadığı Lisp ile karşılaştırın. Doğru hatırlıyorsam, her Lisp makinesinin modele ve üreticiye bağlı olarak küçük farklılıkları vardı. Common Lisp nedense tanımlamıyordu. Muhtemelen çok fazla rekabet ve başka bir platforma taşınmakta isteksizlik yüzünden.

Bu, tabii ki, tamamen benim tarafımdan spekülasyon. Düşünceden Harvey'in cevabına yapılan yorum cevapları geldi. Bununla birlikte, tanımlayıcı platformun birçok şekilde ortaya çıktığı görülüyor, ancak ortak özellik, popülerlik kazandığı şey gibi görünüyor.


Aslında bu fikri sevdim. Birçok Lisp formunu kullanabilirim, çünkü hiçbiri "katil bir çerçeveye" sahip değil, ancak Rails kullanmak istersem, kanonik Ruby'ye bağlı kalmalıyım. Kesinlikle tek cevap bu değil, hipotezini beğendim.
chrisaycock

platform kısmında hemfikir olurdum . Dili çalıştırabilecek tek bir tercümanınız varsa, çok fazla parçalanma olmazdı.
c69

Ortak lisp, tek bir tanımlamaya erken karar vermedi, çünkü insanlar hijyenik makrolar gibi bazı şeyler hakkında güçlü fikirlere sahipti.
Robert Harvey,

Hem katılıyorum hem de buna katılmıyorum. Katil bir çerçeve, temel dili değerli işlevlerle yayar, büyümeyi teşvik eder ve standart şartların dışında hızlı bir şekilde yeniliklere izin verir, çünkü katılıyorum. Kabul etmiyorum, çünkü eğer çerçeve tutucular çok dikkatli olmazlarsa, inovasyondaki hızlı artış, onu dengesiz hale getirebilecek çok fazla şişkinlik ve / veya sızdıran soyutlamaya yol açabilir.
Evan Plaice

1
(devam) jQuery gibi bir dil temel işlevini genişleten çerçeveler, ideal olarak, bu çerçeveler tarafından verilen en değerli katkılar standartlaştırıldığı ve çekirdeğe dahil edildiği için gelecekte kaybedilecek. IMHO, çerçeveler en hızlı şekilde ölme eğilimindedir çünkü geliştiriciler genellikle bir kod temeli stabilize olurken bağımlılıkları azaltmayı / ortadan kaldırmayı tercih eder. Dil geliştiricileri ilgili kalmak istiyorlarsa, çerçeve işlevselliğini uyarlayarak ve benimseyerek ve kullanıcılarını 3. parti çerçevelere bağımlılığı azaltmaya teşvik ederek bu süreci kolaylaştıracaklardır.
Evan Plaice

7

Bir dilin gelişimini süren kültürü tartmayı unutma

Ayrıca python / php ile ilgili gelişmelerin halka açık bir şekilde yapılması gerçeğine ağırlık veririm. Herhangi birisine / herkese ücretsiz olarak erişilebilen standart bir şartnameyi izleyen bir grup insanınız var.

W3C'de olduğu gibi, HTML / CSS standardı ile aynı. Dilin başarmak için tasarlandığı şeyin daha ince detaylarını kontrol eden küçük bir motive edilmiş birey grubunuz var. Halka açıklanmadan önce her şey açıkça tanımlanmış bir şartnameye giriyor.

OTOH, LISP gibi diller profesörler veya dilin 'en iyi kullanımı' konusundaki bakış açılarının doğru olduğuna gerçekten inanan diğer kişiler tarafından kapalı kapılar ardında çatallanmıştır. Aynı anda aynı anda doğru ve yanlış olabilirler çünkü bazı uygulamalar bazı şeylerde harikadır; hiçbiri her şeyde en iyisi değil.

Bu mutlaka kötü bir şey değil, çünkü çeşitlilik yenilikçiliği besliyor. LISP gibi diller, öğrenme ve araştırma için mükemmel dillerdir ve anlamanın sınırlarını zorladıkları için kalırlar.

Ancak bir ortamı inovasyon için iyi yapan nitelikler, istikrar için mutlaka faydalı değildir; tersine, bir ortamı istikrar için iyi kılan niteliklerin yaratıcılık için mutlaka iyi olması gerekmez.

Gelişme aktif işbirliğine dayandığında, bazen bireyler büyük bütünün yararına bulunmak zorunda kalırlar. Araştırma için kötü / tutarlılık için iyi.


Gerçek şu ki, biz hala programlama dilinin geliştirilmesinin vahşi batısında yaşıyoruz. 'İdeal dili' tasarlama sorunu o kadar büyük ki, anıtsal çabalara rağmen, kimse çözmeye yaklaşmadı.

Araştırma / akademi sektöründe hala gelişme ve yenilik için çok yer var. Pratik uygulamalarda kullanımda üstel bir yazılım büyümesinin olduğu ticari sektörde ve itici güç basitlik ve tutarlılıktır.

Bazı diller, ilkinde uzmanlaşırken, bazılarında ikincisi uzmanlaşmıştır. Her ikisinde de uzmanlaşmaya çalışanlar genellikle ya çok iyi iş çıkarmazlar ve ölürler.

Her ikisi tarafından da VB / C # / Java gibi yekpare dillere atıfta bulunuyorum. Söylemek için çok erken ama C # ve Python'un 10 yıl içinde nasıl göründüğünü görmek istiyorum. Mevcut hızda C #, oldukça acımasız görünmesini sağlayan bir oranda işlevsellik ve tutarsızlık artıyor. Harika belgelerle bile, dilde bulunan tüm ince ayrıntıları ve tuhaflıkları hatırlamak çok acı verici. Tek bir geliştirici için harikadır, ancak benzersiz stillere sahip daha fazla geliştirici attığınızda, kod tabanındaki tutarsızlık arttıkça, kalite zarar görür ve kimse kazanamaz. Perl'in üretim ortamında yarattığı zorluklardan öğrenilecek çok şey olduğunu düşünüyorum.


Merdiven? İkincisi mi demek istiyorsun?
Giorgio

@ Giorgio Evet, yanlış yazdığımda nefret ediyorum.
Evan Plaice

2

Python ve Ruby gibi dillerin parçalanmadığını söylemenin doğru olduğunu sanmıyorum. Zaten bazı parçalanma etkilerini görmeye başlıyoruz. Örneğin, Python 3, Python 2 ile tamamen geriye dönük olarak uyumlu değildir, bu nedenle her iki sürümün de korunması gerekir ve mevcut kodların çoğunun yalnızca Python 2 ile çalışması gerekir.

Diğer bir faktör, dillerin yaşıdır. En çok parçalanmaya maruz kalanlar eski dillerdir ve bu nedenle evrim ve revizyon baskılarına maruz kalırlar. Lisp birkaç on yıl önce icat edildi, bu yüzden bazı fikirlerini alıp onları yeni dillere dahil etmek için çok zaman vardı. C, parçalanmış bir dilin başka bir örneğidir. C, dilin kendisi için yalnızca bir büyük revizyona sahip olmasına rağmen (K & R'den ANSI'ye), C ++, Quite C ve C benzeri bir sözdizimini paylaşan diğerleri de dahil olmak üzere çok sayıda yayılma olmuştur.

Ruby'nin kendisi önceki dillerden bir "parçalanma" dır. C, Smalltalk ve Perl'den (diğerlerinin yanı sıra) fikirlerini içerdiği için, şu anda parçalamayı yapan dildir . Gelecekte, Ruby'nin neden diğer dillerle daha fazla iç içe geçmediğini göremediğimizi anlamıyorum.


6
-1 çünkü: (1) Python 3.x parçalanma değil. Bu sadece dil gelişiminde bir sonraki adımdır; Python 2.x birkaç yıl içinde tamamen düşecek . (2)% 99 uyumlu olan diğer dil uygulamaları (% 1 uygulama detayıdır ve çoğunlukla belirsizdir) ve dili tanımlamada aktif olarak yer almayı reddetmektedir. (3) Ortak bir zemini paylaşan ve biraz uyumlu olan çok farklı bir dil (C ++ - C) zor parçalanmadır. (4) Mevcut dillerden fikirleri kabul etmek parçalanma değil, bir dili tasarlamanın tek yolu budur.

2
@delnan: Python 2.x birkaç yıl içinde tamamen bırakılacak mı? COBOL ve Fortran hala etraftayken söylenecek aptalca bir şey!
Mason Wheeler

3
@MasonWheeler Gelişimden bahsediyorum. VCS hala eski kod arşivine sahip olacak, resmi olmayan ikili indirmeler on yıllarca kalabilir ve bazı dükkanlar taşıma işleminden kaçınabilir. Ancak çok uzak olmayan bir gün, Python programlamasının büyük çoğunluğunun Python 3'te gerçekleşmesini bekliyorum. Sonuçta, 2.x özellik gelişimi bir süre önce sona erdi (ve python-dev'in beynini yıkamadıkça devam etmeyeceksin) , bugfix / güvenlik güncellemelerinin sonsuza kadar sürmemesi gerekiyor ve kütüphanelerin önemli bir kısmı Python 3'e aktarılıyor, diğerlerinin çoğu ya bekliyor (ya da Djano) bekletiliyor.

1
@MasonWheeler Oh, ve Fortran ve COBOL’a gelince: Fortran 2008’de yeni bir standart revizyon aldı ve COBOL 2002’den bu yana bir avuç teknik rapor aldı.

@MasonWheeler Modern COBOL'un nesne yönelimli programlamaya izin verdiğini biliyor muydunuz?

2

Lisp parçalanmıştır, çünkü şimdiye kadar tasarlanan en muhteşem dil, çok güçlü bir modeldir. Günümüzde çoğu dil Lisp'te ilk kez uygulanmış olanları ödünç almaktadır, bu nedenle her dilin bu belirli parçalanmanın bir parçası olduğunu söyleyebilirsiniz. Örneğin Smalltalk, Lisp'ten büyük ölçüde ilham alıyordu ve Ruby, Smalltalk'tan büyük ölçüde ilham alıyordu. JavaScript bir Java kılığındaki Lisp ve benzeridir. Hepsi birbirine bağlıdır ve her dil mucidi en sevdiği eserlerini diğer dillerden seçer.

Diğer bir faktör ise, Lisp'in muhtemelen uygulanması en kolay programlama konsepti - bu yüzden tekrar tekrar yapıldı.


1

Lisp benzeri diller çarpıcı biçimde değiştirilemeyecek kadar basit ve teoriktir. Dilbilgisel değişiklikler (sadece komutların isimlerini değiştirmek istemiyorum) sadece arkasındaki işlevsel programlama teorisine uymaz.

Ancak lisp gibi dillerin olması, "değişikliklerin" zaten lisp'a yapıldığını gösteriyor. Başka bir deyişle, lisp'ten ilham alan ya da arkasındaki teorisinden ilham alan ve benzer şekilde yeni bir dil yapan insanlar var.

Python'dan ilham alan birçok dil var. Julia, CoffeeScript, vs. kendi boşluk alanına duyarlı nesneye yönelik dil ailesini oluşturacak.

Python gibi bir dilin temellerini asla değiştirmeyeceğini düşünüyorum. Python nesne yönelimlidir ve bu nedenle C ++ ve Java ile benzerliklere sahiptir, ancak dinamiktir ve bu nedenle birçok betik diline benzer.

Peki aslında dilleri kim önemsiyor? Önemli olan şey şudur: Fransızca Latince'ye benzer, ancak Fransızca'yı anlayan kızlar çok daha sıcaktır;)

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.