neden tüm mevcut programlama dillerinin en iyi özelliklerini bir araya getirip evrensel bir programlama diline sığdırmıyor?
neden tüm mevcut programlama dillerinin en iyi özelliklerini bir araya getirip evrensel bir programlama diline sığdırmıyor?
Yanıtlar:
Aynı sebepten dolayı, bir tavuk bıçaklamak için İsviçre çakısı kullanmıyorsunuz ...
İ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ı ...
Çünkü
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.
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.
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.
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.
"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.
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.
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.
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.
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ı ...
“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 .
Bu konuda Bob Amca Martin - Son Programlama Dili harika bir konuşma yaptı
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).
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. :-)
Çü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.
Ş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?
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.
İ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:
Kısacası, dil tasarımı bundan daha zor ve daha karmaşıktır. Yine de, Scala'ya bakmak isteyebilirsiniz .
Görsel Toplu, özelleştirilebilir programlama dilinde bir girişimdir. Aşağıdaki Bağlantı, bu programlama arayüzünün bir Evrensel Programlama Dilinin ihtiyaçlarına göre nasıl uyarlanabileceğini göstermektedir.
http://sourceforge.net/apps/phpbb/visualbatch/viewtopic.php?f=4&t=4
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.
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.
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.
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.