it-swarm.dev

Neden her amaca hizmet eden "evrensel" bir programlama dili olamaz?

neden mevcut tüm programlama dillerinin en iyi özelliklerini birleştirip evrensel bir programlama diline uymuyorsunuz?

60
killown

Aynı nedenden ötürü bir tavuk bölmek için İsviçre çakısı kullanmıyorsunuz ...

http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/My_swiss_army_knife.JPG/800px-My_swiss_army_knife.JPG

İsviçre çakısı genellikle bir bıçağın yanı sıra tornavidalar ve konserve açacakları ve diğerleri gibi çeşitli araçlara sahiptir. Bu ataşmanlar, bir pivot nokta mekanizması aracılığıyla bıçağın sapının içine yerleştirilir ...

Bıçağın tasarımı ve esnekliği hem dünya çapında tanınmaya yol açtı ...

116
David_001

Çünkü

  1. kimse tüm eski kodu yeniden yazmak istemez.
  2. Tüm amaçlar üzerinde anlaşmak zor
  3. Kapsamlı bir amaç listesi oluşturduktan sonra, bunlar oluşturulmadan önce değişecektir.
  4. Birisi yeni bir amaç nedeniyle tamamen farklı bir dile başlayacaktı.
  5. Microsoft,
  6. Apple
  7. Açık kaynak
  8. Bütün Babil Balıkları ile ne yapardık?
  9. SQL'i evrensel hale getiremedi bile.
80
JeffO

Programlamada sahip olduğunuz çok büyük bir problem alanıdır. Bu alan son derece ve birçok yöne doğru uzanmaktadır.

Bu nedenle gömülü uçuş kontrolörleri C ile yazılır ve web siteleri PHP, Java, Rails, .NET ve diğer bilgisayarlarda yazılır.

Gömülü uçuş kontrolörü için, çalışmak için yaklaşık 128k belleğim var ve bunun üzerine kodum işlenmeyen bir istisna alırsa, uçak düşüyor, 200 kişi ölüyor ve 1B $ 'ı ayarlamaya dava açıyorum ve her birine mühendis göndermek zorundayım dünyadaki havalimanı müşterilerimi 10 milyon $/gün kaybetti topraklı uçak düzeltmek için. Çok sıkı ve yanlış gidebilecek az sayıda hareketli parçası olan bir dille çalışmam gerekiyor.

Web uygulamam için çalışmak için birkaç GB belleğim var, ancak ağ hızı sınırlıdır (her gün daha az derecede, ancak bu muhtemelen webin en büyük sınırıdır). Bana bir ton özellik veren ve mümkün olduğunca hızlı aktarılabilecek çıktı üreten bir dile bakacağım. Sitemin çökmesi durumunda gerçekten umrumda değil, belki birkaç satış (100 $) kaybedeceğim ve bombalanan kullanım durumunu düzeltmek zorunda kalacağım, önemli değil.

Web siteleri 15 yıldan fazla bir süredir C'de yazılmadı (kimse cgi komut dosyaları yapıyor mu?) Ve bildiğim kadarıyla uçuş kontrolörleri şimdi C++ 'a bakmaya başladı, ancak o zaman bile çok kısıtlı bir şekilde.

38
Bill Leeper
  1. Garajınıza (veya ailenizin garajına) gidin.
  2. Araç kutusunu açın.
  3. Birden fazla araç görürseniz, bunun sorunuz için nasıl geçerli olduğunu düşünün.

Alet kutunuz yoksa veya içi boş sapta tornavida uçları olan sadece küçük çekiçlerden birine sahipseniz, o zaman size büyük bir sempati duyuyorum.

Ciddi anlamda. Bir otomobil mağazasına giderseniz, tamircinizin alet çantasında sadece tek bir tek şey var mı? O (veya o), çeşitli otomobil onarım görevlerini gerçekleştirmek için özel olarak tasarlanmış profesyonel sınıf araçlara sahip bir profesyoneldir.

Benzer şekilde, profesyonel yazılım geliştiricileri ticaretini yapmak için yeterli araç setine sahip olmalıdır. Araç kutunuzu açar ve yalnızca bir Philips tornavida [yazılım eşdeğeri] görürseniz, kendinizi bir profesyonel olarak göremezsiniz.

Cıvatayı bir açık uçlu anahtar, bir kutu uçlu anahtar, bir cırcır anahtar veya ayarlanabilir bir anahtarla çevirebilirsiniz. Hatta bir cıvatayı kayma eklem pensesi ile beceriksizce, küçük ila şiddetli hasarla bile çevirebilirsiniz. Ancak bir balyozla bir cıvatayı döndürmek oldukça zordur.

24
brettmjohnson

Diğerlerine farklı bir cevap - Aslında bir dilin bir dilin "evrensel" bir dil olması için potansiyel olduğunu düşünüyorum. diğer birçok dil, belki de düşündüğünüz gibi kesinlikle tasarlanmış bir dil değildir.

Yukarıdaki brettmjohnson'ın benzetmesini kullanmak için , her programlama dilinin bir kutunun içindeki araç (veya İsviçre çakısı üzerindeki) olduğu fikri herkesin yaptığı varsayımdır, ancak gerçekten kusurlu bir varsayımdır.

Araç kutusu programlama dili olsaydı ne olurdu?

Demek istediğim, dilleri dilediğiniz gibi ekleyebilir ve dilden kaldırabiliyorsanız ve ihtiyacınız olan araçlarla kendi araç kutunuz varsa - araçlar farklı amaçlar için olsa bile.

Kavram kısmen var. Örneğin, Nemerle gibi diller dile sözdizimi eklemenize izin verir ve bu nedenle, X dilinden en iyi özelliği alabilirsiniz. "ve Nemerle'ye (veya kendinize) ekleyin. Bu her zaman kendi makrolarınızı yazmak anlamına gelmez - her dil (veya paradigma) standart bir kütüphanedeki bir makro içinde tanımlanabilir - öyle ki import Haskell; import Prolog; Yazabilir ve iki dili yazmaya başlayabilirsiniz sanki sizin dilinizin bir parçasıymış gibi?

O zaman soru şu - farklı dil/paradigmaların özelliklerini birbirleriyle nasıl çalıştırabilirsiniz? Buna cevap veremesem de, .Net ve JVM gibi çerçeveler bazı çözüm önerileri sunuyor - diller derlendikleri için en azından kısmen uyumlu. Örneğin C # ile yazılmış herhangi bir kodu alıp şikayeti olmayan F # 'dan kullanabilirsiniz.

Çözümün bugün olduğu gibi 'sorun', bu dilleri birlikte kullanmanın, birbirinize referans veremeyen ayrı projeler olarak oluşturmanızı gerektirmesidir - sadece 1 yönlü referansınız olabilir. Dil engeli, her projenin başka herhangi bir projeye erişmeden önce tüm dosyalarını ayrı olarak Ortak Ara Dilde derlemesidir.

Bu engeli kaldırmaya yönelik bir basamak, farklı projelerin (örneğin C # ve F #) kodunun aynı proje içinde derlenmesine izin vermek olacaktır. Teorik olarak her dosyayı ayrı ayrı (veya gruplar halinde - kısmi türler veya dairesel referansları varsa) derleyebilir ve daha sonra derlenmiş (CIL) nesnelere erişebilen farklı bir dilin dosyalarını derleyebilirsiniz. Bunun çalışması için derleme sırasını kesinlikle tanımlamanız gerekir - ancak F # durumunda derleme sırası zaten gereklidir.

Her neyse, "Kesinlikle evrensel bir dil olabilir" demiyorum. Şu anda var olan diller arasında daha iyi birlikte çalışabilirlik potansiyeli olduğunu öneriyorum. Gerçekte, çok yakında çok fazla gelişme göstermesi olası değildir, sadece bir dilin uygulanması ve onu kullanmak için gereken kütüphaneler, araçlar vb.

20
Mark H

Bazı dillerin en iyi özellikleri diğerlerinin en iyi özellikleriyle çelişir.

Örneğin: Tip farkında yansımalar gerçekten Güzel bir özelliktir, ancak gevşek yazılan bir dilde çok fazla değmez, ancak gevşek yazma da zaman zaman gerçek bir fayda olabilir.

Tek bir dilde bile, en iyi özellikleri her zaman aynı anda kullanamazsınız çünkü birbirleriyle çakışırlar.

10
Bill

"Jack esnaf - hiçbirinin ustası." akla geliyor.

Bazı programlar hız gerektirir, diğerleri büyük miktarda bellek veya diske hızlı erişim. Bazı diller birinde iyi, diğerinde kötü - hiç de iyi bir dil alacağınızı sanmıyorum.

Yani, herhangi bir dilde hemen hemen her programı yazarken, elde ettiğiniz şeyin bu sorunu çözmek için yazabileceğiniz "en iyi" program olduğu garanti edilmez.

7
ChrisF

Diller insanların düşüncelerini şekillendirir. Bu doğal diller için geçerlidir. Eğer bir çocuk "bir, iki, çok" sayıları olan tek bir dil biliyorsa, çocuk matematikini öğretmek zordur. (Maalesef, bağlantım yok) İngilizce'de sanki yerlermiş gibi farklı zamanlardan bahsediyoruz - bu nedenle zaman yolculuğu kavramını hayal etmek mümkün. Diğer bazı dillerde, zaman yolculuğu fikri konuşmacılarında asla olur.

Bu, programlama dilleri için de geçerlidir.

Dolayısıyla tek bir programlama dilimiz varsa, herkes tüm hesaplama görevlerini tamamen aynı şekilde düşünecektir. Böylece alternatifleri araştırmayacağız ve bir şey yapmanın en iyi yolu keşfedilmeden kalacak.

Evrensel bir dile en yakın şey C'dir. C, temel donanım kavramlarıyla (şeylerin aslında donanımda nasıl yapıldığını) çok yakından eşleştirir ve her * dildeki programlar C'ye dönüştürülebilir. (CFront'un montajcı için C derleyicilerini nasıl kullandığını görün C ile ilgili sorun temel olarak yukarıda belirtilen dönüşümlerin bir C programcısının bakış açısından anlamlı olmamasıdır.

C'de "Lambdas" her zaman mümkün olmuştur. Sözdizimi kapalıdır, tüm proje/dosyanın etrafına kod yayılması dahil, bu nedenle tercih edilen bir çözüm değildi. Yakalama/yükseltme/vb sürümü ile, başka bir yerde bir işlev tanımlayın ve işleve bir işaretçi iletin. (bkz qsort ()) Yakalanan değerlerle lambdas kullanmak için, yazmanız gereken kodun miktarı ve karmaşıklığı çok artar - hiç kimsenin aslında kullanma kodunu yazdığının farkında olduğum kadarıyla Bu programlama yöntemi C.'de Lambdaların dilin bir parçası olduğu ve temelde her yerde kullanıldığı dillerden farklı olarak.

C ve C++ arasındaki temel fark, C++ 'dan sizin için stuff ilgilenmesini nasıl isteyebilirsiniz; ancak artık yalnızca tek bir kod satırından, gerçekten ne kadar sorduğunuzu göremezsiniz. Cevap şu şekildedir: bu duruma bağlıdır (diğer tüm kodlara göre).

Bazı programlama dilleri belirli görevler için mükemmeldir, ancak dünya çapında kullanımda olan çoğu programın o dilde programlanması mantıklı olmaz. Yani, dil bu programı başlatmak için kullanılabilirse, verilen bir şey değildir.

5
MaHuJa

Var. Hiçbiri araç her şey için en iyisidir, ancak birçok programlama dili gibi bazı araçlar hizmet tüm amaçlarla değil, en iyi herkese değil.

İş için en iyi aracı seçebilirsiniz, ancak her amaç için kullanılabilen programlama dilleri vardır ve bunları seçebilirsiniz. Bunu tavsiye etmiyorum ama mümkün.

4
Maniero

"Tüm özellikleri birleştirmenin" daha iyi bir dil olacağını düşünmek yanlıştır.

Şişkin, karmaşık, okunamaz bir karmaşa ile sonuçlanma olasılığınız daha yüksektir.

İyi dil tasarımı, seçim ve değiş tokuş yapılmasını gerektirir. Muhtemelen en iyi/en devrimci/en başarılı diller, bir şey çıkarır ve yeni şeyler eklemek yerine daha iyi bir alternatiftir.

  • Yapısal programlama dilleri (C, Pascal) - "git" i alır, prosedürler ve yapılandırılmış döngüler vb.
  • Java - "manuel bellek yönetimi" ni çıkarır, GC/yönetilen bellekle değiştirir
  • Haskell/Clojure - "kontrol edilemeyen mutable durumu" alır
  • LISP - çoğu "dil sözdizimi" ni alır, esnek bir homoikonik s-ifadeleri ağacının yerini alır

Bob Martin Amca'nın bu tepesinde harika bir konuşma var - Son Programlama Dili

4
mikera

Evrensel bir dile sahip olmanın teknik yararları üzerindeki imkansızlığı? Bu tamamen saçmalık. Sen olabilir tüm üsleri kapsayan evrensel bir dile sahipsin. Sorun çoğunlukla tarihseldir: farklı şeyler yapmak ve farklı topluluklarda kullanmak için farklı diller icat edildi. Birçoğu sıkışmış. Bu tercihlere (vi! Emacs! Bekleyin, Java! C # demek istedim, Microsoft, Açık Kaynak, vb. Demek istedim vb.) Ve tarihi kazaların genel olarak gömülmesi ... Küçük dillerdeki doğal dillere bakın bu konunun ne kadar çılgın olabileceğini görmek için bazı Avrupa ülkeleri gibi kitleler. Bazı kasabaların kendi gururları ve neşeleri vardır, sadece konuştukları küçük bir lehçe vardır. Uluslar ve programlama toplulukları o kadar da farklı değildir ve programlama toplulukları daha rasyonel değildir. Onlar olsaydı, hepimiz evrensel bir şeylerde esperanto ve program konuşurduk ...

4
Dan Rosenstark

Muhtemelen başka bir adı olan ve gerçekten bir paradoks olmayan "genelleme/uzmanlık paradoksu" olarak adlandırdığım bir şey yüzünden

Bir programlama dili ne kadar genelleştirilmişse, bir şeyi başarmak için o kadar fazla kod gerekir. Dil ne kadar uzmanlaşırsa, o dili o kadar az başarabilirsiniz.

4
Homde

Şimdiye kadar yazılanlarla, çok yeni bir gerekçe eklemek zordur, ancak birkaçını atacağım.

  • Evrim: Kaynaklar için en uygun hayatta kalma rekabeti ve kendilerine hitap edecek bir niş tanıtılan, mutasyona uğrayan ve geçirilen sadece biyolojik sistemler değildir. Rekabet iyidir ve işleri ilerletir.

  • Olgunluk: Muhtemelen bir asırdan daha az bir süredir bilgisayar dilleri yapıyoruz. Henüz cevabı alamıyoruz çünkü henüz tüm soruları bile bilmiyoruz.

  • Ayrı oluşum: Bunun için doğru kelimeden emin değilim, ancak dünyada birçok coğrafi bölgede başlayan birçok yazı sistemi. Kısmen kil tabletlere oyma talepleri tarafından dikte edilen Çivi yazısı düşünün. Sanskritçe, Yunanca, İbranice, Roma, Arapça alfabe düşünün. Hiyeroglif, birçok Doğu Asya ülkesinde paylaşılan 6000'den fazla sembolle Çin'in güzel yazma yöntemi. Kiril, Katakana ve Hirigana gibi fonetik temelli daha modern karışık alfabe düşünün. Ben bir dilbilimci değilim, bu yüzden yanlışlıkları çok sert bir şekilde ateşlemeyin, ancak dünya çapındaki kültürler bir şeye ihtiyaç duyduklarında, onu yaratacak ve kendi zorunluluklarını kendileri yapacaklardır. Bilgisayar dilleri, dünya çapında bir çok iletişim olduğunda ortaya çıktı ve İmparatorluk ve Metrik sistemler gibi, güçlü fikir liderliği olan yerlerden geldi. Ancak programlama dilleri birçok kültüre (bazıları şirket kültürüne) hizmet eder, bu yüzden onları yapan insanları yansıtırlar. Bilgisayar dilleri, tasarımlarını ve kullanımlarını şekillendiren kültürel miraslarla birlikte gelir. İşletim sistemi çekirdek kültüründe, C ve C++ 'nın kısa bir süre sonra Java (veya başka bir şekilde)) için kullanımdan kaldırılması olası değildir, çünkü yerel kod üretimine, donanım soyutlaması oluşturmak için donanımla yakın/verimli bağlantıya izin verirler katmanları ve yüklü büyükçe bir var.

  • Tasarım Tasarımı: Programlama dilleri farklı organizasyon paradigmalarının kullanılmasından kaynaklanır. COBOL ve Ada, çok sayıda hiyerarşiye sahip olan DOD'un bir parçası olan komitelerdendi. Doğru hatırlıyorsam C, C++, Java ve muhtemelen birçoğu bir ya da az sayıda tasarımcıdan geldi. Fred Brooks, komitenin sonuçlarını, Tasarım Dizaynında (http://www.youtube.com/watch?v=pC-DlX-PaF4) Vizyoner tabanlı yaklaşımlarla karşılaştırır. Bugün bir evrensel programlama dilini tanımlamak için bir Da Vinci veya bir komite seçmek için oturursak, kime ya da hangi yöntemle tasarlanması gerektiğini bilir miyiz?

0
DeveloperDon

Belki tüm bunlar üzerinde biraz farklı bir eğim:

Dil nedir? Gülünç derecede basit olmak gerekirse, kelime bilgisi, sözdizimi ve anlambilimdir.

Bir programlama diliyle ilk yaptığınız şey nedir?
Şeyleri tanımlarsınız - sınıflar, değişkenler, yöntemler - kelime dağarcığını ve anlambilimi genişletirsiniz.

Neden? Böylece şimdi daha önce söyleyemeyeceğiniz şeyler söyleyebilirsiniz.
Beğen ya da beğenme, yeni bir özel amaçlı dil yaptın.

IMHO, genel amaçlı bir dilde aranacak olan şey, özel amaçlı diller oluşturmayı kolaylaştırıyorsa.

0
Mike Dunlavey

En iyi özelliklere sahip herhangi bir araç yoktur. Örneğin, Javascript ve Scheme'nin güzel bir özelliği küçük olmalarıdır, bu nedenle özellikleri paketlemeye başlarsanız, bu özellikte zaten kayboldunuz.

Yine de Cobra diğer dillerdeki tüm Nice özelliklerine sahip olma yönünde umut verici görünüyor. :-)

0
Andrea

İsviçre-ordu-bıçak argümanının yanı sıra (bir noktası vardır - bir alandan daha iyi bir geniş spektrumlu dil tasarlamak daha zordur . belirli bir dil - ancak bu böyle bir dilin hem mümkün hem de iyi bir fikir olmayacağı anlamına gelmez), "en iyi özellikleri birleştirmek" ile ilgili sorunlar vardır:

  • Dil özellikleri için "en iyi" özneldir veya en azından (bitmez tükenmez şekilde) tartışmalıdır.
  • Bazı özellikler uyumlu değildir; bir dilden iyi bir özellik diğerinden iyi bir özellikle birleştirildiğinde patlayabilir.
  • Henüz yeni özelliklerle gelmedik.

Kısacası, dil tasarımı bundan daha zor ve karmaşıktır. Yine de Scala 'a bakmak isteyebilirsiniz.

0
comingstorm

Çünkü böyle bir dil oluşturursanız, yeni bir dil daha olacaktır. Büyük bir hayran kitlesi alabilirsiniz, ancak diğer tüm diller hala mevcut olacaktır.

O zamandan beri birçok yeni dil icat edilmiş olsa da C hala var.

python gibi evrensel bir dil olduğunu söyleyebilirsin, ama sonra Ruby de var.

Pek çok dilin nedeni, birçok programcı olması ve bazılarının yeni diller oluşturmayı sevmesidir.

Herkesin kabul ettiği tek bir evrensel dil olmamasının nedeni, bir zanaat olarak programlamanın tüm kararı veren bazı kurumlar tarafından dikte edilmemesidir. Herkes istediklerini yapmakta özgürdür.

Bu iyi birşey.

0
hasen