Neden bu kadar çok programlama dili var?


130

C / C ++ 'da oldukça akıcıyım ve çeşitli betik dilleri (awk / sed / perl) etrafında dolaşabilirim. Python'u çok daha fazla kullanmaya başladım çünkü C ++ 'ın bazı şık yönlerini awk / sed / perl komut dosyası yetenekleriyle birleştiriyor.

Fakat neden bu kadar çok farklı programlama dili var? Bütün bu dillerin aynı şeyleri yapabileceğini tahmin ediyorum, neden sadece bir dile bağlı kalmıyor ve bunu bilgisayarları programlamak için kullanmıyorsunuz? Özellikle, yapmam gereken herhangi bir sebep var mı? bilgisayar programcısı olarak işlevsel bir dil bilmek?

Bazı ilgili okumalar:


2
OO ile OO olmayan arasında da bir fark vardır. Ayrıca, bazı diller hoş paketlerle gelir: R, Maple, Matlab, Mathematica, genellikle başka dillerden yoksundur.
Artem Kaznatcheev



2
Paralel algoritmalar uygulamak için, işlevsel programlama daha iyidir, genel olarak değişken nesneleriniz varsa, OO paradigmasını kullanmak daha iyidir, (eğer değişmeyen nesnelerle uğraşmak istiyorsanız ) onu işlevsel modele dönüştürmek daha iyidir. Bu senaryo paralel işlemede yaygın olarak bulunmaktadır. Ayrıca, akıcı arayüz ve yöntem zincirleme gibi mükemmel OO modellerinden bazıları, işlevsel paradigma gibi çalışır.

4
Neden bu kadar çok araba var? Neden bu kadar çok uçak var? Peki ya TEKNE! Yani gerçekten! Okyanusa doğru iniyorsunuz ve sarkan şeylerin hepsi gibi! Ne var nokta şeylerin bütün bu değişik türde?!?!? Verimsiz! Bu savurgan! Ve tüm bu farklı seçimlerin acayip anlamı nedir?!?!? Tanrım - bilge insanlar! Hiç kimse Yugo, F-150 ve okyanus gemisi dışında hiçbir şeye ihtiyaç duymaz! Oh, evet, uçaklar - MD-80'ler hemen hemen her şey için işe yarayacak. Orada. Şimdi her şey
Bob Jarvis

Yanıtlar:


116

Programlama dilleri zamanla gelişir ve gelişir (inovasyon).

İnsanlar farklı dillerden fikirler alır ve bunları yeni dillerle birleştirir. Bazı özellikler geliştirildi (miras mekanizmaları, tip sistemleri), bazıları eklendi (çöp toplama, istisnaların ele alınması), bazıları kaldırıldı (goto ifadeler, düşük seviye işaretçi manipülasyonları).

Programcılar, herhangi bir dil kurgusu tarafından desteklenmeyen bir şekilde bir dil kullanmaya başlar. Dil tasarımcıları bu kullanım kalıplarını tanımlar ve bu kullanım kalıplarını desteklemek için yeni soyutlamalar / dil yapıları sunar. Assembly dilinde prosedür yoktu. C. sınıf yok. (Erken) C ++ 'da istisna işleme yok. Yeni modüllerin erken dillerde yüklenmesinin güvenli bir yolu yoktur (Java'da kolay). Yerleşik iş parçacığı yok (Java'da kolay peasy).

Araştırmacılar hesaplamaları ifade etmenin alternatif yollarını düşünüyorlar. Bu Lisp ve dil ağacının işlevsel dil dalı olan Prolog ve mantık programlama dalı, Erlang ve diğer aktör tabanlı programlama modellerini de beraberinde getirdi.

Zaman içinde, dil tasarımcıları / araştırmacıları, tüm bu yapıları ve bunların nasıl etkileşimde bulunduğunu daha iyi anlayabilmekte ve popüler yapıları bir araya getirerek tasarlanan dilleri içerecek şekilde tasarlamaktadır. Bu, nesneler ve sınıflar (tek veya çoklu miras yerine özellikler kullanılarak ifade edilir), fonksiyonel programlama özellikleri, sınıf sistemi ve desen eşleştirme ile güzel bir şekilde bütünleştirilmiş cebirsel veri türleri ve aktör bazlı eşzamanlılık olan Scala gibi harika dillerle sonuçlanır.

Statik tip sistemlere inanan araştırmacılar, Java’da yazılan genel sınıflar (ve Haskell’deki harika şeylerin tümü) gibi şeylere izin vererek etkileyiciliğini geliştirmek için çaba harcarlar; yanlış gitmek. Statik tip sistemler genellikle programlayıcıya (türlerde yazarak) büyük bir yük getirir, bu nedenle araştırmalar bu yükü hafifletmiştir. Haskell ve ML gibi diller, programcının tüm tip açıklamalarını atlamasına izin verir (zor bir şey yapmıyorlarsa). Scala, programcının işini kolaylaştırmak için programcının yöntemlerin içindeki türleri atlamasını sağlar. Derleyici tüm eksik tipleri besler ve programcıya olası hataları bildirir.

Son olarak, bazı diller belirli alanları desteklemek için tasarlanmıştır. Örnekler SQL, R, Makefiles, Graphviz giriş dili, Mathmatica, LaTeX. Bu dillerin işlevselliğini genel amaçlı dillere (doğrudan) dahil etmek oldukça zahmetli olur. Bu diller, kendi etki alanlarına özgü soyutlamaları temel alır.

Programlama dili tasarımında evrim olmasaydı, hepimiz hala assembly dili veya C ++ kullanıyorduk.

İşlevsel bir programlama dilini bilmeye gelince : işlevsel diller, hesaplamaları, diğer programlama dillerini kullanmaktan daha net ve farklı şekilde ifade etmenizi sağlar. C ++ ve Python arasındaki farkı düşünün ve 4 ile çarpın. Daha ciddi olarak, başka bir cevapta daha önce de belirtildiği gibi, fonksiyonel programlama size problemler hakkında farklı bir düşünce tarzı sunar. Bu, diğer tüm paradigmalar için geçerlidir; Bazıları bazı problemlere daha iyi uyar, bazıları değildir. Çok paradigma dillerinin daha popüler hale gelmesinin nedeni budur: Dil değiştirmeden ihtiyacınız olduğunda farklı bir paradigmadan yapıları kullanabilir ve daha zorlu bir şekilde bir yazılım parçası içinde paradigmaları karıştırabilirsiniz.


1
Tamamen katılıyorum. Çok paradigma dillerinin (örneğin Scala) birkaç yıl içerisinde nerede olacağıyla ilgileniyorum. Kolay DSL entegrasyonuna izin verirlerse, dil numaralarında kademeli bir düşüş görebiliriz.
Raphael

2
Çok ayrıntılı cevap! Çoğu programlama dilinin Turing Equivalent olabileceğini kabul edebiliriz, ancak bu destekledikleri soyutlamanın her sorun alanı için uygun olduğu anlamına gelmiyor.
CyberFonic

Meclis ve C ++ 'ı aynı kutuya koymak kalbimi acıtıyor. C ++ çok gelişti! Özellikle C ++ 11 ve sonrası.
Peregring-lk,

66

tldr: Gümüş mermi dili yok.

Umarım beni dava etmeyeceklerdir, ama işte Stanford sunumlarından birinin fotoğrafı.

görüntü tanımını buraya girin

Bir dil seçmeye karar verdiğinizde , bu 3 özellikten sadece 2'sini seçebilirsiniz . .

İşte bu yüzden insanlar üzgün ve 3ünü de kapsayan bir süper dil icat etmek istiyorlar.

Aslında, çok sayıda gereksinim var (bazıları diğer cevaplarda görebildiğiniz gibi) ancak temel özelliklere ayrıntı ekliyorlar. Ek olarak, bir dili diğerine tercih etmenin tarihsel ve politik nedenleri vardır.

Bu tür faktörlerin kombinasyonları yeni bir dil verir.

( Her iyi programcının kendi yeni dilini yapması gerektiğini duydum; )


11
Zamanla üçgenler küçülüyor, köşeler birbirine yaklaşıyor demek… Umarım / düşlerim.
Dave Clarke,

1
Performans ve Genellik, daha az karşılaştırılabilir, ancak bir dilde edindiğiniz deneyimin size belirli bir dilden daha fazla üretkenlik sağladığını ekleyeceğim, yalnızca "dillerin üretkenliğini" tek başına karşılaştırmak adil değil çünkü bilgi ve uzmanlık varsayımına ihtiyacınız var hepsini, çok düşük bir hipotez.
Hernan_eche

Bu ilginç bir ifade ve bana CAP teoremini hatırlatıyor. Bu sadece resmi olmayan bir tartışma mı, yoksa üçgen kanıtlanabilir mi?
evnu

1
@evnu, işte bir bölümün quasiformal argümanı: genelliğin L dilinde herhangi bir uzunlukta n geçerli programların daha geniş bir problem alanı kapsadığı varsayımıyla, her bir problem alt uzayının sadece uzunluk programlarının bir kısmı tarafından kapsandığı anlamına gelir. Özel alt alanınızın dışındaki n uzunluktaki programlar bunun yerine alt alanınızın içinde olsaydı, probleminizi çözen daha kısa bir program bulma olasılığınız daha yüksek olurdu (muhtemelen daha verimli olacaktınız), ancak dil daha az genel olurdu. - diğer alt alanlarda problemleri daha az iyi çözer (yani daha uzun programlarla).
Jonas Kölker

Bu, en az iki programlama diline ve çok sayıda alana özgü dile ihtiyaç duyduğunuz ve böylece üçgenin üç tarafını da kapsayan iyi bir argümandır. Bundan çok, çok, daha çok var. (Ve c'yi üçgenin en üst köşesine koyardım, ama bu oldukça küçük bir niggle.)
Peter Shor

25

Dünya, çok farklı varyasyonlara sahip olan şeylerle doludur: kelime işlemciler, arabalar, ev tasarımları, içecekler, şekerlemeler, kalemler, kürekler, vb. Çok fazla olmamızın nedenleri, birkaç ilkeye indirgenebilir:

  • Birisi var olan ürünlerde daha fazla gelişme sağlayabileceğini düşünüyor
  • Yerel düşüncelerden farklı bir tasarım yapılması gerekir (düşünün: stilts'taki evler ile beton plakalardaki evler)
  • Yeni bir ürün kategorisi, daha önce hiçbirinin olmadığı yerde bir ihtiyacı dolduruyor

Herhangi bir büro malzemeleri mağazasına girin ve "yazı gereçleri" bölümüne bakın - yüzlerce çeşit kalem vardır. Hepsi kabaca aynı şeyi yapıyor: yazı yüzeyine mürekkep dağıtıyor. Ancak satış için gördüğünüz her bir kalem, yukarıdaki üç nedenden biri nedeniyle var.

  • Kartuş dolma kalemleri, tüy tüy kalemlerinde bir gelişme olan daldırma dolma kalemlerde bir gelişmedir.
  • NASA'nın yerçekimi yokluğunda yazabilecek bir kaleme ihtiyacı vardı, bu yüzden basınçlı rollerball kalemi icat edildi.
  • İlk kalemin kendisi katran veya kana batırılmış sivri uçlu bir çubuk olabilir; ondan önce insanlar birlikte kayaları kazıyor ya da duvarlara kürklü pigmentler sürüyordu. (Sadece bir tahmin.)

Hiçbir ürün, her kullanıcının ihtiyacına uymadığından, kalemlerdeki gelişim devam edecektir. Bazı kalemler ucuz ve tek kullanımlık, bazıları pahalı ve yüksek kaliteli malzemelerden üretilmiştir; bazıları jel, bazıları mürekkep, bazıları pigment kullanır; bazılarının bükümlü kapakları vardır, bazılarının kapakları yoktur; geniş variller, dar variller, yuvarlak variller, kare variller; uzun kısa; Kırmızı, beyaz, siyah, mavi Vs vs.

Ancak kalemler hakkında yeterli.

Şu anki programlama dilleri sayısız ilke kadar takip edilebilir: 1940'larda eski bilgisayarlar için sayısal makine kodları. İlkel, kullanımı zor ve bilgisayara girmek için zahmetli, ancak işi yaptılar. Programcılar makine kodlarına anımsatıcı kelimeler (ADD, CALL, LOAD gibi) atayarak, "derleme dilleri" olarak adlandırılan dil sınıfını doğurmaktan çok uzun zaman geçmedi.

Farklı işlemci mimarileri, temeldeki makinelerin özel özelliklerine bağlı olarak farklı anımsatıcı kodlar istedi. Bu farklılıkları hesaba katmak farklı montaj dillerini icat etmek anlamına geliyordu.

(Belki şimdiye kadar bunun nereye gittiğini görebilirsiniz ...)

Programcılar, meclis dilleri programlarına ve testere modellerine baktılar: aynı talimat dizileri döngüler, koşullamalar, değişken atamaları, işlev çağrıları vb. Oluşturmak için kullanılacaktı. Böylece, prosedürel programlama dilleri doğdu. Bu diller, "if", "while", "let" vb.

Bilgisayar programlamanın matematiksel bir analizinden yola çıkarak fonksiyonel diller geldi - hesaplamaya bakmanın tamamen yeni bir yolu. Daha iyi değil, daha kötü değil, sadece farklı.

Ve sonra nesne yönelimli, statik olarak yazılmış, dinamik olarak yazılmış, geç bağlama, erken bağlama, düşük bellek kullanımı, yüksek bellek kullanımı, paralelleştirilebilir, belirli kullanımlar için diller ve daha sonra var.

Sonuçta, farklı programlama dilleri var çünkü farklı programlama dilleri istiyoruz . Her dil tasarımcısının, "rüya" dilinin nasıl görüneceği ve işleyeceği konusunda kendi fikirleri vardır. Çeşitlilik iyi bir şeydir.


Burada, neden herhangi bir nedenden ötürü insanların istediği dışında birden fazla dile sahip olmamız gerektiğine ilişkin zorlayıcı bir neden görmüyorum.
Raphael

İşte bu kadar. Programcılar doğası gereği problem çözücülerdir. Problemleri çözmek için, genellikle programlama dilleri biçiminde araçlara ihtiyaç duyarlar. Araçlar problemlerini çözmelerine istedikleri gibi çözemezlerse yeni araçlar icat ederler. Bunu şu şekilde düşünün: araçlar yazılım olduğundan ve yeni sorunları çözmek için yeni bir yazılım yazıldığından, araçlar çözülecek sorunlar olabilir. Bu sorunlar yeni araçlar yaparak çözüldü.
Barry Brown

Sadece bir nit: Dillerin işlevsel dalı, matematikçilerin, bugün "bilgisayar" dediğimiz şeyi ilk bilgisayarlardan 50 yıl önce düşünülmeye başlamasıyla ilgili nasıl ifade edebileceği konusundaki fikirlerinin bir sonucudur. Hiçbir şey için LISP'nin (bazı şekillerde) hala etraftaki ikinci en eski dil, ilk önce FORTRAN olduğu bir şey değil.
von

20

İşlevsel programlama dilleri genellikle farklı (ancak iktidarda eşdeğer) hesaplama modeline dayanır: lambda-calculus . LISP, Şema (yaygın olarak algılanabilir bir Yapıda ve Bilgisayar Programlarının yorumlanmasında kullanılan) gibi bazı türetilmemiş (Python benzeri yazım dili) kitap / dersi) ve Haskell, ML, F # gibi statik olarak yazılmış diller gibi .

SICP beni işlevsel programlamaya iten şeydi, ancak diğer insanlar John Hughes tarafından bu makaleyi ve onunla bu röportajı önermektedir .

İşlevsel programlama, örneğin VS2010 ve 11’de F # (.NET için işlevsel dilleri) ekleyen Microsoft tarafından zorlanıyor; ayrıca, MSR, IIRC’de bazı Haskell geliştiricileri kullanıyorlar.

Ayrıca, Refal gibi bazı non-lambda-calculus fonksiyonel programlama dilleri de vardır. , desen eşleştirme ve yeniden yazma temeline dayanan .

İşlevsel dillerde soyutlama seviyesi farklı olduğu için, işlevsel programlama tekniklerini kullanırken problem çözme konusundaki tutumunuz değişir. Bazıları sizi genel olarak daha iyi bir programcı yapabileceğini söylüyor.


1
Diğer ilginç bir dil sınıfı, Prolog gibi mantıksal programlama dilleridir. DataLog ile sadece çok sınırlı bir deneyime sahiptim, bu yüzden belki de başkası bunun hakkında bir cevap yazabildi mi?
Daniil

2
Her bir programlama paradigması için bir programlama diline ihtiyacımız olduğuna katılıyorum: zorunlu, OO, bildirimsel, işlevsel, vb.
Dai

@Dai, peki, gerçekten mi? Teorik temel, bir dilin tek özelliği değildir. Örneğin, biri Java veya C # 'nın temel bir özelliğinin, Java'yı önemli ölçüde farklı kılan sanal makine (C ++' a kıyasla) olduğunu söyleyebilir.
Daniil

Fakat eğer C # ve Java her ikisi de sanal makine konseptini kullanıyorsa, neden her iki dil için de aynı sözdizimini kullanmıyoruz? Bence her tasarımcı, dilinin nasıl olması gerektiğine dair güçlü fikirleri olduğunu ve kendi standartlarını oluşturma eğiliminde olduğunu düşünüyorum.
Dai

@Dai, sonuçta C # ve Java arasında çok küçük farklar var. Ayrıca, Windows için Java VM ile ilgili yasal bir anlaşmazlık olduğunu düşünüyorum.
Daniil

19

Özellikle, işlevsel bir dili bilgisayar programcısı olarak bilmem gereken herhangi bir neden var mı?

Evet. Çünkü Haskell düşündüğüm gibi değişti. Senin de düşünme şeklini değiştirebilir.

Hikaye: Bir günde herhangi bir programlama dilini öğrenebileceğimi düşünürdüm . Bir gün Haskell'e başladım. Monadlardan önce gelen her şeyi yarım günde bitirdim. Şimdi o günden bu yana bir yıl oldu ve hala umutsuzca Monad'lara takıldım.

oku:

  1. Dil ve düşünce wiki

  2. Turing Ödülü dersi Kenneth E. Iversion tarafından düşünce aracı olarak gösterilmektedir.

Fakat neden bu kadar çok farklı programlama dili var?

Gösterim, düşünce için bir araçtır. Farklı düşüncelerle rahatça başa çıkabilmek için farklı terzi notlarına ihtiyacımız var. Böylece yeni diller yaratıyoruz.

Ayrıca, oku . ;-)


5
Yinelenmek ilahidir!
Pratik Deoghare

4
yinelemek insandır?
Suresh

1
Haskell için iyi bir ilan olup olmadığından emin değilim. ;)
Barry Brown

@Pratik Deoghare. Bir günde Haskell öğrenmek muhtemelen iyi bir fikir değildi. Kuş ve Wadler gibi fonksiyonel programlama üzerine iyi bir kitap okudum ve zamanınızı ayırın derdim. O zaman monadlar o kadar zor olmayabilir.
Uday Reddy,

"Monadlardan önce gelen her şeyi yarım günde bitirdim." Gerçekten mi? Yarım gün içinde sınıfları, functorları, ADT'leri, çeşitleri vb. Öğrendin mi? Bu imkansız. LYAH, 14'ün 12. bölümünde monad'lara sahiptir. RWH, 6. bölüme kadar monodlara sahip değildir ve çok kademeli olarak tanıtılmaktadır - tam tanım, 14.
bölümdedir

13

Bir noktada, kullandıkları dilin kısıtlamaları yüzünden hayal kırıklığına uğramamış ve kaşıntılarını çizmeye karar vermeyen bir programcı olabilir. Böylece yeni bir dil - ya da mevcut olanın lehçesi - doğar.

"Bir Nesneler Teorisi" ndeki Abadi ve Cardelli, nesne yönelimli temellerden bir programlama dili ailesi geliştiriyorlar. İşlevsel programlamanın özel bir OO durumu olduğunu kanıtlıyorlar, ancak konuşmayı değil.

Yeni bir şey icat etmek eğlencelidir, bu yüzden insanların var olanı daha iyi hale getirmeye katkıda bulunmaktansa başka bir dil yaratma olasılıkları daha yüksektir. Tabii ki, vizyonunda değişiklik yapılmasını bekleyen dil koruyucuları var. En iyi örnek Common Lisp ve Scheme destekçileri arasındaki uçurum.


3
Nesneler Teorisi, kullanılabilir bir programlama dili ailesinin tamamını sunmaz. Nesneye yönelik programlama dilleri için bir temel ve derslere dayanmayan garip bir dil sunar. "Bir Nesneler Teorisi" ile işlevsel programlama arasındaki bağlantıyı göremiyorum. Örneğin calculi nesnesi tembellik nosyonuna sahip değildir. OO kavramlarını fonksiyonlar ve kayıtlar gibi kodlayan araştırmalar da vardır, örneğin Pierce'ın 90'ların sonlarındaki çalışmaları.
Dave Clarke


11

Neden dünyada bu kadar çok ülke var? 5 veya 6 süper güçümüz, hatta Dünya'nın evrensel bir krallığımız olsaydı daha kolay olmaz mıydı? Neden daha iyi olmayacağını tartışmak kolaydır --- bir başlangıç ​​için, farklı ülkelerdeki rekabet ilerlemeye yol açabilir ve demokrasi, insan hakları vb. Bakış açısından, birçok ülke birinden daha iyi olabilir - - ama bu, neden birçok ülkemiz olduğunu açıklamıyor . Sadece birçok ülkenin neden daha iyi olacağını açıklar .

Benzer şekilde, neden bu kadar çok farklı insan dilini sorabilirsiniz? Lehçe, Arapça, Mandarin ... Sadece bir dil olsaydı daha kolay olmaz mıydı? Her iki şekilde de tartışabilirsiniz, ancak bunlar yaşamın bir şekilde ya da diğerinde olmasının neden daha iyi olacağının sebepleri olabilir. O açıklamak olmaz nedenleri orada çok farklı insan dilleri olmak gerisinde.

Mesele şu ki, gezegende birçok insan var ve hepimiz kendi işimizi yapıyoruz, hepimizin de görüşleri var, hepimiz sorumlu olmak istiyoruz ve kendi ülkemiz veya programlama dilimiz var ve sık sık daha iyi bildiğimizi düşünüyoruz. diğerlerinden daha fazla, ya da en azından başkalarının neler sunması gerektiğini anlama zahmetinde bulunmayın.

Bu çok aydınlatıcı blog gönderisini okuyun, Neden bu kadar çok Python web çerçevesi var? Görünüşe göre Python'da yaklaşık 50 web çerçevesi var. Bu sadece saçma; Bunun için kesinlikle mantıklı bir sebep yok. Ancak yazının yazarı cevap veriyor: çok fazla Python web çerçevesi var çünkü bir tane oluşturmak çok kolay . Daha fazla python web çerçevesi veya daha fazla programlama dili olması için mantıklı bir nedene ihtiyacınız yoktur. İnsanlar yeni olanları yaratmaya devam edecekler çünkü zaten ne mevcut olduğunu bilmiyorlar, ya da para kazanabileceklerini umuyorlar ya da sadece yeni şeyler yaratmak eğlencelidir!

Kişisel bir örneği tarif edeyim. Yaklaşık 10 yıl önce bir Fin şirketi için bazı C ++ kodları yazıyordum. Bilirsiniz, Finlandiya'da uzun mesafeli seyahat eden ve bir yerden diğerine birçok şey teslim eden devasa kamyonları var. Eminim Amerika'da da böyle kamyonlar var. Bu yüzden tipik bir sorun, tüm 24 ya da öylesine lastiklerin iyi olduğundan emin olmaktır. Elbette, zamana göre test edilmiş bir teknoloji var: basınç ve sıcaklık izlenebilir ve sert değişiklikler bir şeyin yanlış gittiğini gösterir. Tabii ki, bu teknolojinin tümü tescillidir, patentlidir ve tüm sonuçları ile birlikte. (Unutmayın: patentlerin yenilikçiliği teşvik etmesi gerekiyordu!) Bu yüzden bu Fin şirketi lastiklerin durumunu ... sesle tespit etmek istedi. Buradaki fikir, tüm lastiklerden gelen sesi dinlemek ve lastiklerden birinin bir tür sorunu olup olmadığını anlamak için bu seslerin üzerine bir tür sinyal işleme sihri yapmaktı ve prototip yapıyordum. Bu deliliğin (Hatta örnek sesleri kaydetmek için özel bir laboratuara bile sahiplerdi; bir kez 5 veya 10 ton basınca maruz bıraktıktan ve bir miktar saçma sıcaklığına ısıtdıktan sonra bir örnek lastiği patlatmayı başardıklarında bana belli bir durumun etkileyici bir video kaydını gönderdiler. .) Açıkçası, yine de, eğlenceli olması ve bazı insanların para kazanmak istemesi dışında, bu gelişmenin akılcı bir nedeni yoktu. Ayrıca, birisinin neden yeni bir programlama dili geliştirmeye başlamasının bir çok nedeni olduğunu da anlayın. Hepsini öğrenmeye gerek yok, hatta mümkün bile değil. (Hatta örnek sesleri kaydetmek için özel bir laboratuara bile sahiplerdi; bir kez 5 veya 10 ton basınca maruz bıraktıktan ve bir miktar saçma sıcaklığına ısıtdıktan sonra bir örnek lastiği patlatmayı başardıklarında bana belli bir durumun etkileyici bir video kaydını gönderdiler. .) Açıkçası, yine de, eğlenceli olması ve bazı insanların para kazanmak istemesi dışında, bu gelişmenin akılcı bir nedeni yoktu. Ayrıca, birisinin neden yeni bir programlama dili geliştirmeye başlamasının bir çok nedeni olduğunu da anlayın. Hepsini öğrenmeye gerek yok, hatta mümkün bile değil. (Hatta örnek sesleri kaydetmek için özel bir laboratuara bile sahiplerdi; bir kez 5 veya 10 ton basınca maruz bıraktıktan ve bir miktar saçma sıcaklığına ısıtdıktan sonra bir örnek lastiği patlatmayı başardıklarında bana belli bir durumun etkileyici bir video kaydını gönderdiler. .) Açıkçası, yine de, eğlenceli olması ve bazı insanların para kazanmak istemesi dışında, bu gelişmenin akılcı bir nedeni yoktu. Ayrıca, birisinin neden yeni bir programlama dili geliştirmeye başlamasının bir çok nedeni olduğunu da anlayın. Hepsini öğrenmeye gerek yok, hatta mümkün bile değil. 5 veya 10 ton basınca maruz bıraktıktan sonra bir örnek lastiği patlatmayı ve gülünç bir sıcaklığa kadar ısıtmayı başardıklarında bana belirli bir durumun etkileyici bir video kaydını gönderdiler.) Açıkça, yine, belirli bir rasyonel yoktu Bu gelişmenin nedeni, eğlenceliydi ve bazı insanlar para kazanmak istedi. Ayrıca, birisinin neden yeni bir programlama dili geliştirmeye başlamasının bir çok nedeni olduğunu da anlayın. Hepsini öğrenmeye gerek yok, hatta mümkün bile değil. 5 veya 10 ton basınca maruz bıraktıktan sonra bir örnek lastiği patlatmayı ve gülünç bir sıcaklığa kadar ısıtmayı başardıklarında bana belirli bir durumun etkileyici bir video kaydını gönderdiler.) Açıkça, yine, belirli bir rasyonel yoktu Bu gelişmenin nedeni, eğlenceliydi ve bazı insanlar para kazanmak istedi. Ayrıca, birisinin neden yeni bir programlama dili geliştirmeye başlamasının bir çok nedeni olduğunu da anlayın. Hepsini öğrenmeye gerek yok, hatta mümkün bile değil.

Tabii ki, tüm bunlar sadece evrime inanıyorsanız geçerlidir. Bir çeşit akıllı tasarıma inanıyorsanız, Tanrı'nın tüm programlama dillerini de yarattığına inanıyorsanız, bu çokluğun arkasında bir amaç bulmanız gerekir. Belki de Tanrı, farklı programlama dilleri arasındaki rekabeti teşvik etmek istedi, böylece yazılım geliştirme sanatı mümkün olan en yüksek durumuna ulaşabildi.

Sonuç olarak, birçok kişi, birçok ülke ve birçok programlama dili vardır. Bu sadece hayatın doğası! Bunun için minnettar olalım: bu sadece programlama / bilgisayar bilimi alanının çok canlı ve gelişmekte olduğu anlamına gelir.


çok mükemmel bir cevap, neden kabul edilmediğini bilmiyorum!
Am_I_Helpful

8

Neden bu kadar çok farklı programlama dili var?

Çünkü yapılacak seçimler var:

  • Şartname modu: emeratif vs fonksiyonel
  • Yazma: Statik olarak yazılmış, dinamik olarak yazılmış
  • Değerlendirme sırası: by-value ve by-name tarafından yapılan arama
  • Modülerlik: sınıf tabanlı ve soyut veri tipi tabanlı
  • Yürütme modeli: sıralı ve eşzamanlı

Neyse ki, son ikisi kaçınılmaz ikiliklerdir, yani her ikisi de seçimleri tek bir programlama diline koyabilir. Ancak, ilk üç ikilik 8 kombinasyona yol açar. Böylece, ideal bir dünyada bile, en az 8 programlama dili olacaktır. Aşağıya indiğinizde, belirli paradigmalar içerisinde daha farklı tasarım seçenekleri olacaktır. Örneğin, biri sınıf tabanlı statik olarak yazılmış bir dil yapmaya karar verirse, tip sistemini tasarlamanın farklı yolları vardır. Bunu yapmak için henüz kanonik bir yol yoktur. Bir eşzamanlı programlama dili yapmaya karar verirse, eşzamanlılığı temsil etmenin çeşitli yolları vardır: semaforlar, koşullu kritik bölgeler, monitörler, mesaj geçişi (senkronize ve asenkron). Senkronize mesaj geçişi içerisinde,

Programlama dili teorisinde yaptığımız araştırmaların bir kısmı, bu ikiliklerin çözümüne adanmıştır. Mesela " Uygulamalı dil atamaları " adlı bir makalede zorunlu ve işlevsel programlama arasındaki ikilemi çözmeye çalıştım ve yöntemimiz artık Haskell tarafından benimsendi ve onu hem işlevsel hem de zorunlu bir dil haline getirdi. Bu, ikiliğin tamamen çözüldüğü anlamına gelmez. Bir Haskell programcısı, problemini işlevsel olarak mı yoksa zorunlu olarak mı çözeceğiyle ilgili bir seçimle karşı karşıya. Luca Cardelli, statik ve dinamik yazım ikilemi çözümünde çalıştı. Paul Levy , "by-value" ile "by-name" adlı ikilemi çözme üzerinde çalıştı . Bu sonuçların tümü henüz gerçek hayattaki programlama dillerinde uygulanmamıştır.


Bütün bu diller aynı şeyi yapabilirse, neden sadece bir dile bağlı kalmıyor ve bunu bilgisayarları programlamak için kullanmıyorsunuz?

Çünkü gerçek dünyadaki bir programcı için sadece bir şeyler yapmak yeterli değildir. Aynı zamanda nasıl yapıldığını da önemli. Doğru yapıldığında, problem alanı programda güvenilir bir şekilde temsil edilir, problemin modülerliği korunur ve programların anlaşılması, değiştirilmesi ve bakımı kolay hale gelir. Bütün bunlar program geliştirme ve bakım maliyetini etkiler . Ayrıca, yazılımın güvenilirliğini ve güvenliğini de etkiler.

Örneğin, birçok kişi finansal hesaplar için " Quicken " adlı bir program kullanıyor . Orijinal program, Visual Basic'in bazı kurum içi versiyonlarında geliştirildi ve oldukça iyiydi. Ancak, genişletmek ve sürdürmek zor olmuştur. Yıllar geçtikçe, şirket onu yeni özellikler için genişletmeye çalıştığı için, program her yerde milyonlarca memnun olmayan müşteriyle giderek daha fazla çarpışmaya başladı. Muhtemelen yazılımı güçlü bir şekilde yazılmış nesne yönelimli programlama dilinde yeniden yapılandırmaktan faydalanacaklardır.


Özellikle, işlevsel bir dili bilgisayar programcısı olarak bilmem gereken herhangi bir neden var mı?

Tarihsel olarak, "matematiksel programlama" standart matematiksel uygulamayı takip eden Godel, Kleene ve Church tarafından icat edildi ve "zorunlu programlama", Turing tarafından mekanik hesaplama kavramını saptamak için icat edildi. Turing'den önce, zorunlu programlama fikirlerini analiz etmiş bir matematik kanıtı bulunmamaktadır. (Tüm geleneksel matematiksel algoritmalar "zorunlu bir stilde" ifade edilirken, temel içerikleri hala işlevseldi.) Bu nedenle, zorunlu programlama, insan uygarlığı için çok yeni ve matematiği hala çok iyi anlaşılmadı. Herkesin bazı fonksiyonel programlamayı bilmesi gereken 1 numaralı neden, programlamanın matematiksel olabileceğini anlamaktır. (Zorunlu programlamanın matematiksel olmadığını kabul etmiyorum. Hangi fonksiyonel programcıların inandığına inanıyor. Ancak, mevcut sanat durumuyla, zorunlu programlamada matematiksel olarak nasıl yapıldığını henüz bilmediğimize katılıyorum. Birçoğumuz tam olarak bu sorun üzerinde çalışıyoruz.)


1

Buna evrim olarak bakabilirsiniz.

Başlangıçta, bilgisayarlar tamamen ikili kodlarla programlandı. Bundan sonra hatırlatıcılar tanıtıldı ve çoğunlukla kullanılan CPU'ya bağlı olarak montaj dilleri tanıtıldı.

Bu daha yüksek seviye (3. seviye) dilleri getirildi (Pascal, C, ADA, Cobol), bazıları çok genel (C gibi), bazıları veri işleme (Cobol), bazıları hesaplamalar (Fortran) için daha uygun.

Bundan sonra 4. seviye diller, mantık dilleri gibi (Prolog gibi) ortaya çıktı. En genel diller, üçüncü seviye dillerin halefidir; bazıları Java, C #.

ASP.NET, PHP gibi internete / web'e özgü dilleri de görüyoruz.

Ve çoğunlukla genel bir dille birlikte çalışan belirli bir etki alanı (DSL) için diller.

Sonra çocukların LOGO gibi programlama öğrenecekleri diller var.

Ayrıca Python, Ruby vb. Gibi hızlı yazma kodları için diller (XML) (XSLT).

Muhtemelen birçok dili ve hatta dil kategorilerini unutmuşumdur.


1
Kronolojinin kafası karışmış. Prolog 1972'den bu yana Ada'dan daha genç (1983). "Üçüncü seviye dillerin halefi" ile ne demek istediğinizi bilmiyorum; az sayıda dil C ve Pascal (Ada'nın himayesinde) de dahil olmak üzere Fortran'ın torunları değildir.
prosfilaes

1
@prosfilaes, yolu karıştı. FORTRAN halen kullanımda olan ilk dildi, sonra LISP, sonra da COBOL geldi. Algol, algoritmaların yayınlanması için tanımlandı, makine kullanımı için değil (ama yine de bir tür derleyicinin olduğu gibi), Pascal ve daha sonra C görüntüleri vardı.
vonbrand

1

diğer cevaplar iyidir, birkaç yeni açı ekleyecektir. DC'nin yazdığı gibi diller tıpkı gerçek insan dilleri gibi gelişir ! ve gerçek insan dilleri gibi birbirlerinden tekrar kavram ve sözdizimi ödünç alırlar. Başka bir deyişle , bilgisayar dillerinin etimolojisi hakkında oldukça gerçek bir araştırma .

Bu aynı zamanda 1930'lu yılların başında lambda matematiği ile başlayan uzun bir tarih ve zaman çizelgesi olduğu anlamına gelir .

programlama dili ile teori ve uygulama arasında güçlü bir etkileşim / sinerji / simbiyoz vardır. Yeni teorilere yol açan ve bunun tersi olan yeni uygulamalar icat edilir. bir programlama dili birçok yönden teori ile uygulama arasında bir köprüdür .

Tarihten ilginç bir örnek olay incelemesi Fortran'dır. iyi bilinmese de, Fortran'ın önceki sürümlerinde (çoğunlukla Fortran77'den önce) belirsiz bir gramer vardı . bu, aynı komutun yasal olarak "yorumlanabilir" / derleyici tarafından farklı şekillerde derlenebileceği anlamına gelir çünkü birden fazla geçerli "yorum" vardır (bu "yorumlanmış" dillerin aynı teknik anlamı değildir).

bu yüzden, resmi gramerlerle ilgili teori , Fortran'ın icat edildiği zaman boyunca geliştirildi ve dil belirsizliği konusu keşfedildiğinde küçük bir krizdi. Fortan sözdizimi, bu belirsizliği önlemek için yeniden düzenlenmiştir ve daha sonra diller, tasarımlarında gramer belirsizliğine karşı daha fazla duyarlılığa sahiptir. OOP ayrıca programlama dillerinde "etkileyen" veya "dalgalanan" birçok dilin dilini değiştirerek onları dönüştüren teorik bir kavram / ilerlemenin çok önemli bir örneğidir.

diğer vaka çalışmaları yeni teknolojilerin icadıdır. örneğin ilişkisel veri tabanının buluşu , bilgisayar dilleri üzerinde büyük bir etkiye sahiptir, örneğin SQL ve bilgisayar dili arayüzleri (örneğin, java, "JDBC"). Aynı şekilde dünya çapında ağ bile daha büyük bir etki yaratıyor. WWW’nin erken büyümesiyle büyük ölçüde çakışan ve evrimsel patlamalarla karşılaştırılabilecek dotcom patlaması etrafında zamanlanmış bir dil patlaması var gibiydi .

Ayrıca, bazı programlamaların yavaşlayabileceğini düşünen Moores yasasının katlanarak artan işleme gücü ile birlikte yeni programlama dillerinde uzun bir yükseliş eğilimi var gibi görünüyor .

programlama dillerindeki mevcut longrange eğilimleri, örneğin MapReduce ile Büyük Veri ve Paralelleştirme yönünde görünmektedir . ayrıca kapanışlara güncel bir ilgi var .

Dillerin bir başka önemli yönü de, artan soyutlama seviyelerini temsil etmeleridir . daha yüksek seviyeli soyutlamalar (bir piramit gibi) oluşturmak için daha düşük seviyeli soyutlamalar üzerine inşa ederler. Bu yolla, bilgisayar dili gelişiminin gelişimi muhtemelen sonsuzdur ve önemli olanların uzun zamandan beri icat edilmeye devam edeceğinden oldukça emin olabiliriz. psikolojide benzer bir kavram olarak adlandırılan bu muhtemelen benzer olduğunu chunking -roughly alt seviye yapı taşları arasından yüksek düzeyde zihinsel kavramları bina, belirtti.

birçok bilgisayar dilini inceleyen herkes, bazı yönlerinin aşırı sinirli modaya açık hale geldiği, yani savunuculuğu kadar kritik olmadığı, hatta zaman içinde (kullanımda olduğu) öldüğü bir sürü zihniyetinin gözlenebileceğini kabul etmelidir! temel fikirlerin / değişikliklerin bazıları kalıyor ancak (aşırı) yutturmaca kayboluyor. Bu anlamda programlama dilleri de modaya girip çıkıyor . bence son yarım on yılda , gerçekten yararlı, ancak aşırı yazılmış iki dava :

gittikçe artan bir şekilde kendi kendine benzerlik birçok ana dilde görülebilir, öyle ki hepsi bir çok benzer özelliği kendi yollarına, örneğin bir ızgaradaki birçok özelliği "kontrol eden" ürün karşılaştırma çizelgelerinde olduğu gibi bir araya getirme eğilimindedirler.


ayrıca , genellikle dilleri geçen ve dillerde uygulanan tasarım desenlerine de bakın . Dil çalışmasının / işlevselliğinin bir diğer önemli yönü de kütüphanelerde
vzn

FORTRAN'ın hiçbir zaman resmi bir tanımı yoktu, dilbilgisi belirsizliklerine yol açabilecek ifadenin karmaşıklığı çok daha azdı (evet, PDQ FORTRAN adlı bir abominasyona programlamaya başladım ve daha sonra FORTRAN IV) dilde (çok utanç verici) belirsizlik gramer, gramerle tanımlanan ilk dil olan Algol'a geldi.
von

nokta orjinal / erken FORTRAN ile alınmış fakat daha sonraki versiyonlar daha sert dilbilgisi tanımlarıyla daha biçimselleştirilmiştir. bir dilin dil teorisi ile birlikte evrimini gösteren bir örnek çalışmadır .
vzn

FORTRAN gramerle zorla beslendi, ancak hiçbir zaman bir tane etrafında tasarlanmadı. Algol, Pascal, Modula ailesi, Oberon, C ve bunun yanında, PL / 1, Ada vb. Bağlamsız dilbilgisi teknolojisi ve ayrıştırma anlayışı göz önüne alındığında, bugün bir dilbilgisi tanımlamak ve bunu hatasız bir çözümleyiciye çevirmek neredeyse önemsizdir, hiçbir yeni dil olmadan yapamazsınız.
von

zeyilname, yeni / gelişmekte olan dillerde vaka çalışması: Google go , node.js , Apple swift
vzn 10:16

-3

Öyle değillerdi, sadece bir pazarlama hilesi-- dilini "C" gibi görünmesini sağlarsanız, bu durum giriş engelini azaltır.

Hiç C etkisi olmayan bazıları: SQL, Pascal, Delphi, FORTRAN, COBOL, Ada, PowerBuilder, HyperTalk, Lisp, Simula, FOCAL, BASIC, PL / I, Algol, Algol-68, SNOBOL, Modula, Visual BASIC, Özel öğretmen, logo, İleri, DIBOL, Helix, AppleScript, Python, Erlang, Yakut, Seçim, İngilizce, RPG, PL / SQL, ASP, Prolog, SmallTalk, Perl, bash, Değnek BASIC, REXX, DOS toplu dili.

C gibi görünen, ama onunla çok az ortak noktası olanlar: JavaScript, Java, C #, (tartışmalı) Objective-C.

Hepsi pazarlama, Java, C ++ ve JavaScript biraz C'ye benziyor, ancak kapakların altında daha farklı olabilirdi.


5
"Onlar değildi" - ne değildi? Her durumda, bunun soruyu nasıl cevapladığını anlamıyorum. Bu sadece bir dil listesi ve pazarlamanın bir şekilde yer aldığı tamamen doğrulanmamış bir iddia ile birlikte.
David Richerby

2
"C etkisi olmayan bazıları: ... Algol, Algol-68, ..." - Komik demelisin ki C, Algol’dan çıktı. "Dili biraz" C "gibi görünmesini sağlarsanız, bu da giriş engelini azaltır" - iirc, bunun yanlış olduğu kanıtlandı. Önceden programlamaya maruz kalmayan öğrenciler diğer dillerle daha hızlı öğrenirler (bu çalışmada Haskell kullandıklarını düşünüyorum).
Raphael
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.