Neden tüm amaçlara hizmet eden “evrensel” bir programlama dili olamıyor? [kapalı]


57

neden tüm mevcut programlama dillerinin en iyi özelliklerini bir araya getirip evrensel bir programlama diline sığdırmıyor?


23
'En iyi' terimi özneldir, bu yüzden asla evliliğin kabul ettiği en iyisine sahip olamazsınız. Elbette, tüm platformlarda geniş gelişim yelpazesi için uygun olan birkaç dil vardır. C ++ ve Java, ana ikisidir.
GrandmasterB

5
@GrandmasterB Sen C # unuttun
Daniel Little

15
'C' diye adlandırılır
Martin Beckett

9
biz bir tür olarak doğuştan gelen bir yeteneğe sahip değiliz (bireyselliğimizden dolayı), dolayısıyla evrensel olarak neyin gerekli olduğu konusunda asla hemfikir olmayacağız ve bu yüzden asla olmayacak (en azından insanlar tarafından yaratılmadı!)
Nim

9
Evrensel bir programlama dili? Yani, herkesin yıllar önce değiştiği evrensel insan diline benzeyen bir şey mi?
Kyralessa

Yanıtlar:


116

Aynı sebepten dolayı, bir tavuk bıçaklamak 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 Ordusu bıçağı genellikle bir bıçağın yanı sıra, tornavida ve kutu açacakları ve diğerleri gibi çeşitli aletlere sahiptir. Bu bağlantılar bıçak sapının içinde bir pivot nokta mekanizması ile istiflenir ...

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


26
Aynı sebepten ötürü bir minibüsü sürükleyici bir yarışa getirmiyorsunuz. Aynı sebepten dolayı, bir su tabancasını bir düelloya getirmeyin.
Chris

19
@ Chris Bir su tabancası düello ise?
Rusty

44
Aynı sebepten ötürü, ölüm çizgisi üzerindeyken asla Sicilya ile girmiyorsunuz.
Rusty

6
Bir ev inşa etmek için ihtiyacınız olan her şeyi yapan bir İsviçre çakısı olsaydı, bunlardan herhangi birinin yararı olur mu?
Brad Mace

4
Bu cevap korkunç bir benzetmedir. Belki de yazmış olsaydınız: fransızca dil ingilizceden farklı bir ifade doğruluğu sağladığı için benzetmeyi daha çok sevmiş olabilirim. Ancak bilgisayar dilleri “şeyler” ya da insan dilleri değildir. Doğru cevap: bilmiyoruz. İnsanların mantığı nasıl ifade ettikleri ve bu noktaya nasıl geldikleri hakkında daha fazla bilgi edinmesi gerekecektir. Ayrıca, bazı diller diğer DSL'leri ifade edebilecek 'meta dilleri'dir. Bunları sorunuza dahil etmeli miyiz?
Dibbeke

80

Çünkü

  1. hiç kimse tüm eski kodu yeniden yazmak istemiyor.
  2. Tüm amaçlar üzerinde anlaşmak zor
  3. Kapsamlı bir amaç listesi oluşturduğunuzda, onu geliştirmeden önce değişeceklerdir.
  4. Biri yeni bir amaç için tamamen farklı bir dil başlatabilir.
  5. Microsoft,
  6. elma
  7. Açık kaynak
  8. Tüm Babil Balıkları ile ne yaparız?
  9. SQL'i evrensel hale getiremedi bile.

Kısa durdun. Sadece ha-ha-only-ciddi "En iyi 10" listesinden birini bekliyordum.
Jeffrey Hantin

4
"Babil Balıklarını Koru" kampanyasını en azından şimdilik engellemek için + 1. Lanet olası hippiler.
Paslı

2
Babel Fish'e gelince, sushi yap!
Muad'Dib

1
Noktası 1 ile ilgili olarak, tüm eski kod sonunda yeniden yazılmak zorunda olacak ya neyse kodu / kütüphanelerde son tuhaflık kullanarak veya destek maliyetlerinin saçma miktarda olmadan etkin çalıştırmak mümkün olmayacaktır.
Michael,

38

Programlamada sahip olduğunuz çok büyük bir problem alanı. Bu etki alanı son derece ve birçok yönden değişmektedir.

Bu nedenle gömülü uçuş kontrol cihazlarının C ile yazılması ve web sitelerinin PHP, Java, Rails, .NET ve diğerlerinin bir kısmı ile yazılmasıdır.

Gömülü uçuş kontrolcüsü için, kodumun işlenmemiş bir istisna alması durumunda uçağın çökmesi, 200 kişinin ölmesi ve 1B $ ayarlaması için dava açmam ve her birine mühendisler göndermek zorunda kalmam durumunda, bunun üzerinde çalışacak yaklaşık 128k bellek var. Müşterilerimi 10 milyon dolar / gün kaybederek topraklanan uçakları tamir etmek için dünyadaki havaalanı. Çok sıkı ve yanlış gidebilecek az sayıda hareketli parçaya sahip bir dille çalışmak zorundayım.

Web uygulamam için çalışacak birkaç GB belleğim var, ancak ağ hızı sınırlıdır (her gün daha az derecededir, ancak bu muhtemelen web en büyük sınırdır). Bana bir sürü özellik kazandıran ve mümkün olan en hızlı şekilde aktarılabilecek çıktılar üreten bir dile bakacağım. Sitem düşerse umrumda değil, belki birkaç satış kaybedeceğim (100 $) ve bombalanan kullanım olayını düzeltmek zorunda kalacağım, önemli değil.

Web siteleri C’de 15 yıldan fazla bir süredir yazılmamış (herhangi bir cgi komut dosyası var mı?) Ve bildiğim kadarıyla uçuş kontrolörleri şimdi C ++ 'a bakmaya başlıyor, ama o zaman bile çok kısıtlı bir şekilde.


3
Gerçekten para kazanan çoğu site, önemli bir kesinti yaşarlarsa 100 dolardan fazla kaybedecektir. Ölüm kalım durumuyla karşılaştırılabilir olduğunu söylemek istemem ama yine de bu riski bir miktardan fazla küçümsemektir.
Aaron,

3
Facebook'un ne kadar lapa lapa olduğu hakkında bir fikrin var mı? Son zamanlarda her 37 dakikada bir kod bastıklarını bildirdi. Siteleri bir şekilde veya başka bir şekilde sürekli olarak büründü ve onların backlog'larında bir milyon bilet var. Mesele şu ki, internette kimse ölmeyecek, birkaç satış "kaybedebilirsin" ama sonuçta hepsi çok fazla risk değil. Karşılaştığınız sorunların çoğu sadece bazı müşterileri etkilemeyecek, üssü değil
Bill Leeper

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

Alet çantanız yoksa veya sadece içi boş sapta tornavida uçları bulunan o çekiçlerden birine sahipseniz, size büyük sempati duyuyorum.

Ciddi anlamda. Bir oto mağazasına giderseniz, teknisyeninizin araç testinde sadece bir tane her şeyi halletme aleti var mı? Kendisi, çeşitli otomobil tamir işlerini yapmak için özel olarak tasarlanmış profesyonel kalitede aletlerle profesyoneldir.

Benzer şekilde, profesyonel yazılım geliştiriciler ticaretini yapmak için yeterli araçlara sahip olmalıdırlar. Alet çantanızı açıp yalnızca [tornavida eşdeğeri [yazılım eşdeğeri] görürseniz, kendinizi profesyonel olarak düşünemezsiniz.

Açık uçlu bir anahtar, kutu uçlu anahtar, mandallı anahtar veya ayarlanabilir anahtarlı bir cıvatayı döndürebilirsiniz. Cıvatayı bile sıkıca, küçük veya ağır hasarlı kayma-eklem pense ile bir tutam döndürebilirsiniz. Ancak bir kızak çekiç ile bir cıvata açmak oldukça zor.


Bu "ebeveynin garajını" dahil etmek için. Bir garajım olmadığı için bu gerçekten netleşiyor.
Dan Rosenstark,

5
Daha iyi bir benzetme bir dil olabilir, bazı bireysel araçlardan ziyade bir araç kutusu gibidir.
Tom Hawtin -

4
Kutuda 20 farklı araç olabilir. Ama bahse girerim onları tanımlamak için sadece bir dile ihtiyacın var.
ThomasX

2
Bu günlerde araç kutusu, söz konusu dilin kullanabileceği kütüphaneler gibidir.
Michael,

18

Başkalarına farklı bir cevap türü - aslında bir dilin "evrensel" bir dil olma potansiyeli olduğunu düşünüyorum , belki de tam olarak tasarlanmış bir dil olmasa da, birçok dilin özelliklerine ve paradigmalarına izin veriyor.

Brettmjohnson'un yukarıdaki analojisini kullanmak için, her programlama dilinin bir kutunun içindeki araç (veya bir İsviçre çakısı üzerinde) olduğu fikri, herkesin yaptığı varsayımdır, ama gerçekten de hatalı bir varsayımdır.

Programlama dili araç kutusu ise?

Demek istediğim, dilediğiniz gibi dilden özellikler ekleyip kaldırabiliyorsanız ve içinde gerek duyduğunuz araçlarla kendi araç kutunuz varsa - araçlar farklı amaçlar için olsa bile.

Bu konsept kısmen zaten var. Örneğin, gibi diller Nemerle size izin dile sözdizimi eklemek ve bu nedenle, siz "dil X'ten iyi özelliği" almak ve Nemerle (ya da kendi) nize eklemek mümkün olabilir. Bu, mutlaka kendi makrolarınızı her zaman yazmanız anlamına gelmez - her dil (veya paradigma), standart bir kütüphanede bir makro içinde tanımlanabilir - öyle ki, sizin gibi import Haskell; import Prolog;ve her iki dili de sanki bir parçasıymış gibi yazmaya başlayabilirsiniz. senin dilin?

O zaman soru şudur: Farklı dillerin / paradigmaların birbirleriyle çalışmasını nasıl sağlarsınız? Buna cevap veremesem de .Net ve JVM gibi çerçeveler bazı çözümler sunar - diller derleme biçimleri nedeniyle en azından kısmen uyumludur. Örneğin, C # ile yazılmış herhangi bir kodu alabilir ve F # 'dan şikayet etmeden kullanabilirsiniz.

Bugünkü çözümle ilgili 'sorun', bu dilleri bir arada kullanmanın, birbirinize referans veremeyen ayrı projeler olarak oluşturmanızı gerektiriyor olmasıdır - yalnızca tek yönlü bir başvuru olabilir. Dil engeli, herhangi bir projenin erişebilmesi için her projenin tüm dosyalarını ayrı olarak Ortak Orta Dil'e derlemesidir.

Bu engeli ortadan kaldırmak için atılan bir taş, farklı dillerin (örneğin, C # ve F #) aynı proje içinde derlenmesini sağlamak olacaktır. Teoride, her bir dosyayı ayrı ayrı derleyebilirsiniz (ya da kısmi türler veya dairesel referanslar varsa gruplar halinde) ve daha sonra derlenmiş (CIL) nesnelere erişebilen farklı bir dilin dosyalarını derleyebilirsiniz. Bununla birlikte çalışması için derleme sırasını kesin olarak 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 bir birlikte çalışabilirlik potansiyeli olduğunu öne sürüyorum. Gerçekte, çok yakında iyileşmesi pek olası değildir, çünkü çok fazla çalışma nedeniyle bir dili ve kütüphaneleri, onu kullanmak için gereken araçları vb. Uygulamaktır.


4
Tüm dünya bir PC değil. Bu gezegendeki işlemcilerin çoğunda 64K bayttan az toplam bellek alanı var. Bu işlemcilerde kullanılabilecek bir dilin, bu forumdakilerin çoğunun evrensel dilinizin gelişmiş bir derleme dili olarak kullanacağını düşündüğü dillerden daha düşük olması gerekir. Bence buna "C" denirdi.
05'te

10

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

Örneğin: Yazma duyarlı yansımalar gerçekten hoş bir özelliktir, ancak gevşek bir şekilde yazılmış bir dilde çok fazla bir değeri olmaz, ancak gevşek yazma da zaman zaman gerçek bir fayda olabilir.

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


ancak bu özellikler etkinleştirildiyse / engellenirse, örneğin gereksinimlere uygun olarak: tipe uygun yansımaları etkinleştirebilir ve gevşek şekilde yazılmış dil özelliğini devre dışı bırakabilirsiniz ...
killown

2
ve eğer bir sürü dilin özelliklerini bir şey yapabilecek tek bir dilde birleştirmeye çalışacak olsaydınız, fazladan fazlalık, karışıklık, farklı özelliklerin kombinasyonlarını kullanmanın farklı yollarından kaynaklanan hatalar ve birçok Bu hatta hangi paradigmayı kullandığınızı belirtmekle boşa harcarsınız.

haklısın, ama problemi dili ultra yapılandırılabilir hale getirerek çözerek dilin tarif ettiği gibi kullanımı zorlaştırıyor. Bazı durumlarda tehlikeli olsa bile işleri mümkün kılan esnek bir dili severim, ancak bazı kavramları birleştirmeniz gereken yapılandırma seviyesi, sadece geri çekilip çözümü düşük seviye C ya da başka bir şeyde yazmaktan daha karmaşık hale getirecektir. .
Bill

1
Çakışan özellikler için +1
Frank Shearar

Meselenin sadece bu dilin özellikleri çatışması olmadığını değil, birçok dilin belirli bir genel gider seviyesini belirleyen, ancak bazı işlemlerin basitleştirilmesine izin veren özellikleri içeren temel bir çerçeve varsaydığını düşünüyorum. Diller ayrıca tipik olarak kendileriyle ilişkili belirli 'tipik kullanım modellerine' sahiptir. Hangi özelliklerin bir çerçeveye dahil edilmesi ve hangi kodlama modellerinin kullanılması gerektiği, takasları içerir; ve farklı özellik ve kalıp kombinasyonları farklı uygulamalar için daha iyidir.
supercat

7

"Tüm esnaf Jack - hiçbiri ustası." akla yaylar.

Bazı programlar hız gerektirir, diğerleri ise büyük miktarda bellek veya diske hızlı erişim sağlar. Bazı diller birincide iyidir, ama bir diğeri için de kötüdür - hiç de iyi bir dil edineceğini sanmıyorum.

Bu nedenle, herhangi bir dilde hemen hemen herhangi bir programı yazarken, elde ettiğiniz sorunun bu sorunu çözmek için yazabileceğiniz "en iyi" program olacağı garanti edilmez.


4

Var. Hiçbir araç her şey için en iyisi değildir, ancak birçok programlama dili gibi bazı araçlar herkes için en iyisine değil, her amaca hizmet eder .

İş için en iyi aracı seçebilirsiniz ancak tüm amaçlarla kullanılabilecek programlama dilleri vardır ve bunları seçebilirsiniz. Tavsiye etmiyorum ama mümkün.


4

Bir şey yüzünden, muhtemelen başka bir adı olan ve gerçekten bir paradoks olmayan "genelleme / uzmanlık paradoksu" olarak adlandırıyorum.

Bir programlama dili ne kadar genel olursa, bir şeyi başarmak için o kadar fazla kod gerekir. Dil ne kadar uzmanlaşırsa, onunla o kadar az şey başarabilirsiniz.


2
Genelleştirilmiş bir dilde uzmanlaşmış kütüphanelerin bulunmasının mümkün olması dışında sizinle aynı fikirdeyim.
dan_waterworth

@ dan: Kabul, ancak yalnızca dil kütüphane yazarlarına özellikler sağlamaya odaklanırsa. En sevdiğim iki dilim D ve Python. Her ikisi de oldukça genel dillerdir (özellikle D) ancak her ikisi de kütüphane yazarları için pek çok özelliğe sahiptir, bu yüzden özel kitapları işlemek için kendi kütüphanelerinizi oluşturabilirsiniz. Ben hor Matlab ve R. gibi süper alanı özgü dilleri
dsimcha

4

Diller, insanların düşünme şeklini şekillendirir. Bu doğal diller için geçerlidir. Bir çocuk "bir, iki, çok" sayılarıyla yalnızca bir dil biliyorsa, o çocuğa matematiği öğretmek zordur. (Üzgünüm, bağlantıya sahip değilim) İngilizce olarak, sanki yermişler gibi farklı zamanlardan bahsediyoruz - bu nedenle zaman yolculuğu kavramını hayal etmek mümkün. Diğer dillerde, zaman yolculuğu fikri hiçbir zaman konuşmacılarına gelmez.

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

Dolayısıyla, eğer tek bir programlama dilimiz varsa, herkes tüm hesaplama görevlerini aynı şekilde düşünür. Böylece alternatifleri araştırmayacağız ve bir şeyi yapmanın en iyi yolu keşfedilmemiş kalacaktır.

Evrensel bir dile en yakın şey C'dir. C, temel donanım kavramlarına (gerçekte donanıma göre yapılanlar) çok yakın eşleşir ve her * dildeki programlar, C'ye dönüştürülebilir. görevler) C ile ilgili sorun temel olarak yukarıda belirtilen dönüşümlerin bir C programcıları bakış açısından bir anlam ifade etmeyeceğidir.

"Lambdalar" C'de her zaman mümkün olmuştur. Sözdizimi tüm proje / dosya etrafına yayılan kod dahil kapalıdır, bu nedenle tercih edilen bir çözüm değildi. No-capture / upvalue / etc sürümüyle başka bir yerde bir işlev tanımlayın ve işleve bir işaretçi geçirin. (bakınız qsort () ) Yakalanan değerlerle lambda kullanmak için, yazmanız gereken kodun miktarı ve karmaşıklığı çok fazla artar - hiç kimsenin C de bu programlama yöntemini kullanmak için kod yazdığını bilmediğim kadarıyla Lambdaların dilin bir parçası olduğu ve temel olarak her yerde kullanıldığı dillerin aksine.

C ve C ++ arasındaki temel fark bakmak C ++ sorabilir nasıl şeyler sizin için; ama o zaman artık tek bir kod satırından gerçekten ne kadar istediğinizi göremezsiniz. Cevap şu şekildedir: duruma bağlıdır (tüm bu diğer kodlara).

Bazı programlama dilleri belirli görevler için mükemmeldir, ancak dünya çapında kullanılan mevcut programların çoğu bu dilde programlanmışsa anlam ifade etmez. Diğer bir deyişle, dil bu programı başlatmak için kullanılabiliyorsa, hangisi verilen değildir.


2
"Bazı diğer dillerde, zaman yolculuğu fikri asla konuşmacılarına gelmez." Kaynak belirtilmeli. Sapir-Whorf hipotezi hiçbir şekilde güçlü biçimiyle özel olarak kabul gören bir yöntem değildir.
Muhammad Alkarouri,

4

Evrensel Bir Dilin Teknik Değerinde İmkansızlık? Bu tamamen saçmalık. Sen couldtüm temelleri kapsayan evrensel bir dile sahip. Sorun çoğunlukla tarihseldir: farklı şeyler yapmak için farklı diller icat edildi ve farklı topluluklarda kullanıldı. Bir çoğu sıkışmış. Bu tercihlere ekle (vi! Emacs! Bekle, Java! C #, beklediğimde Microsoft, Açık Kaynak, vb. Demek istedim) ve tarihi kazaların genel olarak gömülmesi… Küçük dillerdeki doğal dillere bakın. Bazı Avrupa ülkeleri gibi kitle bu konunun ne kadar delice olabileceğini görüyor. Bazı şehirlerin kendi gururu ve sevinci var, sadece onların konuştuğu küçük bir lehçe var. Milletler ve programlama toplulukları o kadar farklı değildir ve programlama toplulukları daha rasyonel değildir. Öyle olsaydı, hepimiz esperanto konuşur ve Evrenselde bir şeyleri konuşmayı ...


1
Sorun bundan daha derin. Kullanılabilirlik seçenekleri ne kadar fazla olursa, işlerin o dilde çalışmasının tek ve kapalı yolu olmak yerine açıkça belirtilmelidir. Java'yı C # ile karşılaştırmak yerine, Java'yı Prolog ile karşılaştırırsanız, sorunlar daha da belirginleşir. Her ikisinin özelliklerinin bir dilde olması, bileşik dilin sözdizimini zorlaştırır. Daha makul bir seçenek, sözdizimini en aza indirgemek ve herhangi bir özelliğin bir metaprogramlama kütüphanesi olarak uygulanmasına izin vermek olabilir. Temelde Lisp'in yaptığı bu, ancak bazı işler için çekirdeği yeterince düşük olmasa da.
Steve314

4

“Tüm özellikleri birleştirmek” in daha iyi bir dil olacağını düşünmek yanlıştır.

Şişirilmiş, karmaşık ve okunamayan bir karmaşaya maruz kalma olasılığınız daha yüksektir.

İyi dil tasarımı, seçim ve takaslar yapılmasını gerektirir. Muhtemelen en iyi / en devrimci / en başarılı diller, yeni şeyler eklemek yerine bir şeyi çıkarıp daha iyi bir alternatif sağlayan dillerdir .

  • Yapısal programlama dilleri (C, Pascal) - "goto" yu alır, prosedürler ve yapılandırılmış döngüler vs. ile değiştirir
  • Java - "manuel bellek yönetimi" yerine geçer, GC / yönetilen bellek ile değiştirir
  • Haskell / Clojure - "kontrolsüz değişken durumu" çıkardı
  • Lisp - çoğu "dil sözdizimini" üstlenir, esnek bir homoikonik s ifadesi ağacıyla değiştirilir

Bu konuda Bob Amca Martin - Son Programlama Dili harika bir konuşma yaptı


"Yapısal programlama dilleri (C, Pascal) -" goto "yu alır, prosedürler ve yapılandırılmış döngüler vs. ile değiştirir." - Üzgünüm, orada yanılıyorsun: C var goto. Ama cevabın geri kalanını seviyorum. C'nin yaptığı temel şey, hafızada her şeyin tam olarak nerede olduğunu ve hangi kayıtta ne olduğunu gösteren ve umursamadığınız program sayacını gizlemenizi sağlar (oturduğu kesin adres açısından, tekrar hareket ettirebilirsiniz.) bir goto ile neredeyse bir montaj hassasiyeti düzeyinde).
Wyatt8740

0

En iyi özelliklere sahip hiçbir araç yoktur. Örneğin, Javascript ve Scheme’in hoş bir özelliği küçük olmalarıdır, bu yüzden özellikleri paketlemeye başlarsanız, zaten bu konuda kaybedersiniz.

Yine de Cobra , diğer dillerden gelen tüm güzel özelliklere sahip olma yönünde umut verici görünüyor. :-)


0

Çünkü böyle bir dil yaratırsanız, yeni bir dil daha olacak. Büyük bir hayran kitlesi elde edebilirsiniz, ancak diğer tüm diller hala mevcut olacak.

O zamandan beri birçok yeni dil icat edilse de C hala var.

Python'un bu kadar evrensel bir dil olduğunu söyleyebilirsin ama sonra da yakut var.

Birçok dilin olmasının sebebi, basitçe birçok programcının olması ve bazılarının yeni diller oluşturmayı sevmesidir.

Herkesin kabul edeceği tek bir evrensel dilin olmamasının nedeni, bir zanaat olarak programlamanın tüm kararları veren bazı kurumlar tarafından dikte edilmemesidir. Herkes istediğini yapmakta özgürdür.

Bu iyi birşey.


Ayrıca, ne iyi ne de kötü değil, yazılım mühendisliğinin yüz yıllık olmadığı ve var olan diğer her tür mühendislikle karşılaştırıldığında çok olgun olmayan bir yapı olduğu gerçeğinin bir ürünü olduğunu savunuyorum.
Michael,

0

Şimdiye kadar yazılanların hepsinde, yeni bir gerekçe eklemek çok zor, ama birkaç taneye gireceğim.

  • Evrim: Sadece, kaynaklar için kendilerine uygun bir hayatta kalma rekabeti ve kendilerine hitap eden bir niş için tanıtılan, mutasyona uğrayan ve bunlara maruz kalan biyolojik sistemler değildir. Rekabet iyidir ve işleri ilerletir.

  • Vade: Muhtemelen bir yüzyıldan daha uzun bir süredir bilgisayar dilleri yapıyoruz. Henüz cevabı alamıyoruz çünkü henüz tüm soruları bilmiyoruz.

  • Ayrı genesis: Bunun için doğru kelimeden emin değilsiniz, ancak dünyada birçok coğrafi bölgede başlayan birçok yazı sistemi var. Kısmen kil tabletlere oyulmanın talepleri tarafından belirlenmiş olan Çivi yazısı hakkında düşünün. Sanskritçe, Yunanca, İbranice, Roma, Arap alfabelerini düşünün. Hiyeroglif, pek çok doğu Asya ülkesinde paylaşılan 6000'den fazla sembolle Çin güzel yazı yöntemidir. Kiril, Katakana ve Hirigana gibi fonetik temelli daha modern karışık alfabeleri düşünün. Ben bir dilbilimci değilim, bu yüzden yanlışlıkları çok sert bir şekilde alevlendirmeyin, ama dünya çapında kültürler bir şeye ihtiyaç duyduğunda, onu yaratacak ve kendi zorunluluklarından kendi başlarına yapacaklardır. İmparatorluk ve Metrik sistemler gibi dünya çapında çok fazla iletişim olduğu zaman bilgisayar dilleri ortaya çıktı. güçlü fikir liderliği olan yerlerden geldi. Ancak programlama dilleri birçok farklı kültüre hizmet eder (bazıları kurumsal kültürler), bu yüzden onları yapan insanları yansıtırlar. Bilgisayar dilleri, tasarımlarını ve kullanımlarını şekillendiren kültürel miraslarla gelir. İşletim sistemi çekirdeği kültüründe, C ve C ++ 'nın Java için (ya da başka bir yolla) kısa zamanda kullanımdan kaldırılması pek mümkün değildir, çünkü yerel kod oluşturmaya izin verir, donanım soyutlama katmanları oluşturmak için donanım ile yakın / verimli eşleşir ve büyük ölçüde yüklü bir temel içerirler.

  • Tasarımın Tasarımı: Programlama dilleri farklı örgütsel paradigmalar kullanmaya başlar. COBOL ve Ada, çok fazla 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 veya daha fazla tasarımcıdan geliyordu. Fred Brooks, komitenin sonuçlarını, makalesinde yer alan vizyon temelli yaklaşımların Tasarım Tasarımı ile karşılaştırmaktadır (http://www.youtube.com/watch?v=pC-DlX-PaF4). Bugün evrensel programlama dilini tanımlamak için bir Da Vinci veya bir komite seçmek için oturursak, kimin veya hangi yöntemle tasarlanacağını bilir miyiz?


0

Belki tüm bunlara biraz farklı eğik:

Dil nedir Komik bir şekilde basit olmak gerekirse, kelime hazinesi, sözdizimi ve anlambilimdir.

Bir programlama diliyle ilk yaptığınız şey nedir?
Şeyleri tanımlarsınız - sınıfları, değişkenleri, yöntemleri - kelimeleri ve anlambilimi genişletirsiniz.

Neden? Yani şimdi daha önce söyleyemeyeceğiniz şeyler söyleyebilirsiniz.
Beğenin ya da beğenmeyin, yeni bir özel amaçlı dil yaptınız.

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


0

İsviçre ordusu-bıçak-argümanının dışında (bir anlamı var - etki alanına özgü bir dilden iyi bir geniş spektrumlu dil tasarlamak daha zor - ama bu böyle bir dilin her ikisi de olmayacağı anlamına gelmiyor) mümkün ve iyi bir fikir), "en iyi özellikleri birleştirme" ile ilgili sorunlar var:

  • Dil özellikleri için, "en iyi" özneldir veya en azından (birbiriyle (tartışılabilir) tartışılabilir).
  • Bazı özellikler uyumlu değil; bir dilden iyi bir özellik diğerinden iyi bir özellik ile birleştirildiğinde patlayabilir.
  • Henüz yeni özelliklerle gelmedik.

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



-2

Evrensel bir programlama dili var. Buna "makine dili" denir ve diğer herhangi bir bilgisayar dilindeki her şey sonunda makine dili olarak yürütülür.

Nasıl görünüyor? Bir 0-9 ve AF dizgisi.

Ama kullanmak için bir kaltak. Böylece Alan, makine diline çevrilebilecek bir dil icat eder ve Alan'ın yapmak istediği şeye daha uygundur. Bill, yapmak istediği şey için farklı bir dil icat eder. Çok geçmeden Cobol ve Fortran ile Lisp ve Java'ya sahipsin. Hepsi basitleştirilmiş bir makine dili vesiyonudur, bazı program türlerini yazmak daha kolay ancak diğer program türlerini yazmak daha zor ya da imkansızdır. Biri muhasebe için iyidir, diğeri uzay mekiğini kontrol etmek için iyidir.


6
Makine dili evrensel değil; yakınında bile değil. Her makinenin kendi dili vardır.
hasen

3
Ayrıca, 0-9 ve AF dizileri değildir. 1 ve 0.
David Conrad

@ hasen @David, @Andy gibi, her dilin bir bakış açısına göre, diğer diller üzerine kurulmuş bir alana özgü dil olduğunu iddia etmek mantıklı değildir.
Armand

Ben 0-9 ve AF dedim, çünkü bir tuş delme makinesinde çoklu-delme kodlarını kullanmak için bilmeniz gereken şey buydu. Bir seferde ne kadar büyük olduğuna bağlı olarak, sayı olarak alırsanız 0-1 veya 0-15 veya 0-255 gibi görünür. Ve hansen haklı; Makinenin her bir TİPİ kendi dilindedir. Neredeyse tüm PC'ler bugün 80386 kodları kabul ediyor; telefonum bile olacak! Ancak iPad olmaz.
Andy Canfield

@hasenj ve çok farklı özelliklere sahip. Bir 6502'yi programlamak için gereken zihniyet, bir x86'nın programlanmasından farklıdır ve sırayla bir RISC yongasından farklıdır. Evrensel olmaktan çok uzak.

-2

Sadece, çünkü

UNIVERSAL bir bilgisayar yok.

UNIVERSAL bir plaka şekli değil.

UNIVERSAL bir programcı değil.

ÜNİVERSAL bir müşteri bile değil.

: P

Yani basitçe farklı bir taneye ihtiyacımız var. ;)


-2

Buradaki çoğu cevap, her sorun için en iyi aracı kullanmaya odaklanır. Bunun yeterince iyi bir sebep olduğuna inanmıyorum.

Büyük şirketlere bakarsanız, genellikle belirli bir proje için biraz daha iyi bir dil olsa bile, şirket tek bir (veya az sayıda) dil ve teknoloji kullanma eğiliminde olacaktır.

Bu, gelişmiş standardizasyon, kolay destek, kod paylaşımı vb. Kaynaklı faydaların (çoğu zaman) belirli bir dilin katma değerinden daha büyük olması nedeniyle yapılır.


1
4 farklı dil kullanarak daha önce hiç iyi bir kurumsal proje görmedim. Uygun olmayan araçları seçmenin bu "yararlarının" hiçbirine inanmıyorum. Asla işe yaramaz.
SK-mantık

-3

Bence tüm "çünkü heykelleri kurşun kalemle oymuyorsun" cevapları eksik.

Burada kim, TRULY her yeni projeden önce bir dil seçiyor?

Gerçek şu ki, sadece birkaç programlama diline ihtiyacımız var ve programlama dünyası bu şekilde daha iyi olacaktı: Örneğin, insanlar python / ruby ​​/ perl / younameit'e dağılmak yerine , betik dilini daha iyi hale getirmeye odaklanacaklardı .

C #, Windows için / için programlanmıştır (tamam, Mono var, burada her gün Mono uygulaması altında bir C # çalışanı var mı?) Ve kullanıcıların Windows7 / 8'i satın almasını sağlıyor ve bu da Microsoft için para kazanıyor.
Diğer şirketler de aynısını yapar, sonra açık kaynak daha iyi bilir, daha sonra bayım dahi ... ... ve birçok benzer dillere sahibiz, bu sadece insanlığın öz merkezli doğasıdır.


Anlaştık - çoğunlukla sadece yüksek seviye "güvenli" bir dile, düşük seviye "güvensiz" bir sistem programlama diline, tüm meclis dillerine (CPU başına bir, kaçınılmaz ama gizli) ve bazı özel amaçlara (etki alanına özel) ihtiyacımız var. diller (örneğin, SQL). Asıl sorun, herhangi birinin bir dili “kullanımdan kaldırılmış” olarak ilan etmesinin imkansız olmasıdır (dil tasarımcısı bunu yapmaya çalıştığında bile - örneğin Python 2 vs. Python 3). Her yıl daha fazla yeni dil ve eski dillerin atılmaması, kullanımda olan programcılardan daha fazla dil kullanılması anlamına gelir. ;-)
Brendan

-5

Bu soruyu cevaplamak için ekonomiyi aramalıyız. Sadece bir dile sahip olmak için işletme parası biriktirmiş olsaydı, buna sahip olurduk. Standartlaşacaklar ve herkesin kullanmasını gerektirecekti. Diğer diller tozlu akademik binalarda ve vahşi gözlü meraklıların bodrumlarında zayıflardı. Bu olmadı, bu yüzden onların evrensel bir programlama dilinde kar amacı gütmemesi gerekiyor, yoksa şimdiye kadar doğal olarak gelişti.


1
"Tasarruf edilmiş para" (muhasebecilere en iyi şekilde çaba göstermesine rağmen) yaşam döngüsü boyunca belirsiz ve bereketli bir kavramdır. Mekaniğin tek bir somun anahtarı üzerinde bile standardize edemediği gibi, bütün bir araç setini boşver, yazılım mühendisliği standardize edemedi çünkü bir araç (dil) ya da işlemci / OS / ortam seçmek için çok fazla kriter var
Andrew
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.