Neden birkaç popüler programlama dili C'den etkilenir? [kapalı]


23

En iyi 10 programlama dili, TIOBE endeksine göre, C:

1. Java

Dil, sözdiziminin çoğunu C ve C ++ 'dan alır, ancak daha basit bir nesne modeline ve daha düşük seviyeli olanaklara sahiptir. - wikipedia.org

2. C

C, tüm zamanların en yaygın kullanılan programlama dillerinden biridir ve bir C derleyicisinin bulunmadığı çok az bilgisayar mimarisi vardır. - wikipedia.org

3. C #

.NET Framework'ün geliştirilmesi sırasında, sınıf kütüphaneleri başlangıçta Basit Yönetilen C (SMC) adı verilen yönetilen bir kod derleyici sistemi kullanılarak yazıldı. Ocak 1999'da Anders Hejlsberg, “C-benzeri Nesneye Yönelik Dil” anlamına gelen Cool adında yeni bir dil oluşturmak için bir ekip kurdu. - wikipedia.org

4. C ++

B dilini geliştirmek için 1979'da Bell Laboratuarlarında başlayan Bjarne Stroustrup tarafından geliştirilmiştir. - wikipedia.org

5. Amaç-C

Objective-C, C programlama diline Smalltalk tarzı mesajlaşma ekleyen yansıtıcı, nesne yönelimli bir programlama dilidir. - wikipedia.org

6. PHP

Bu komut dosyalarını C programlama dili Ortak Ağ Geçidi Arabirimi (CGI) ikili dosyaları olarak yeniden yazdı ve Web formlarıyla çalışma ve veritabanlarıyla iletişim kurma yeteneklerini artırmalarını sağladı ve bu uygulamaya "Kişisel Ana Sayfa / Formlar Tercüman" veya PHP / FI adını verdi. - wikipedia.org

8. Python

Python 1980'lerin sonlarında tasarlandı ve uygulamaya geçmesi Aralık 1989'da, Hollanda'daki CWI'deki Guido van Rossum tarafından Amoeba işletim sistemiyle istisna işleme ve etkileşime girme yeteneğine sahip ABC programlama dilinin (SETL'den ilham alan) halefi olarak başladı. - wikipedia.org

ABC (programlama dili) Tasarımcıları, ABC programlarının tipik olarak eşdeğer Pascal veya C programlarının boyutunun dörtte biri civarında olduğunu ve daha okunaklı olduğunu iddia ediyor. - wikipedia.org

9. Perl

Perl, C, kabuk komut dosyası (sh), AWK ve sed gibi diğer programlama dillerinden özellikleri ödünç alır. - wikipedia.org

10. JavaScript

JavaScript C'nin etkilendiği sözdizimini kullanır - wikipedia.org

Birçoğunun sözdizimlerini C'den ödünç aldıkları ve / veya en azından başlangıçlarında birçok şekilde ağır etkilendikleri görülmektedir. Niye ya?


15
C'ye benzeyen bir sözdizimine sahip olmak c'ye dayanmakla aynı değildir.
Oded

15
Ayrıca, TIOBE bir önemsiz endeksidir.
DeadMG

3
Aksine, neden C ye dayalı programlama dillerinin daha popüler olduğunu sorabilir miyim?
Manoj R

3
@YannisRizos Sorunun büyük kurtarma! Bu şimdi gerçekten harika bir soru.
maple_shaft

16
Çünkü C, ALGOL'un soyundan gelir ve ALGOL, İbrahim'in Hristiyanlar, Yahudiler ve Müslümanlar için olan zorunluluk laboratuvarlarını bloke etmesine engel olur.
Ingo,

Yanıtlar:


40

1970'lerde UNIX yükselişi ile, dil C programlama standart sistemler hızla haline ortak dil programlama dünyasının. Bir süredir, C her programcı için pratik olarak zorunluydu. Bu nedenle, C'nin bir ya da diğerinden sonra gelen hemen hemen her programlama dilini etkilediği gerçeği, iki nedenden ötürü şaşırtıcı değildir:

  • Yeni bir dil tasarlarken, sözdizimini, mümkünse, ortak bir bilgi olarak bilinen popüler bir dile dayandırmak mantıklıdır.
  • Öğrenme eğrisinin sığ olması durumunda yeni bir dilin başarılı olması daha olasıdır ve önceden bilinen bir dile benzeyen bir sözdiziminin öğrenilmesi genellikle daha kolaydır (görünen benzerliklere rağmen radikal bir şekilde hareket etmiyorsa). Bu nedenle, C'den sözdizimi ödünç alan diller genellikle çekmeyenlerden daha çabuk çekiş kazanır.

Ancak, diğer diller de vardı ve hala bazıları C'yi yerken bile var - LISP ailesi var (CL, Clojure ve Şeması en popüler modern lehçeler), ML ailesi (birkaç modern lehçeyle), ordusunun bir ordusu var. TEMEL lehçeler (VB.NET ve VBA modern uygulamalardır), Pascal ve akrabaları (Delphi en iyi bilinen olanıdır) ve birçok dilden etkilenen ve birkaç şeyi kendi icat eden birçok “garip” dil var; örnek olarak Go, Python, Lua, Haskell (ve selefi, Miranda), Prolog ve Erlang sayılabilir. Bu dillerden hiçbiri (Python hariç) ilk 10'unuzda olsa da, birçoğunun istikrarlı bir kullanıcı tabanı ve aktif bir topluluğu vardır; kesinlikle gitmiyorlar.

Ayrıca, bu dillerdeki C etkisinin miktarının çılgınca değiştiğine dikkat edilmelidir, neredeyse% 100 C uyumlu dillerden C ++ ve Objective-C'den Python'a (kasıtlı olarak C'nin birçok sözdizimi özelliğini bırakan). Ve bu sadece sözdizimidir: anlambilim açısından, listedeki dillerin çoğunun C ile pek ortak bir yanı yoktur. Ezici çoğunluğun dilde yerleşik bir hafıza yönetimi vardır ve sonuç olarak anlambilim, argüman geçirme vb. , çok farklılar. Örneğin, JavaScript, Scheme'den güçlü bir anlamsal etkiye sahipken, sözdizimi Java'ya benzeyecek şekilde tasarlandı (bu da bit ve parça sözdizimini C ile değil, anlambilimine dayandırmıyor). Diğer farklılıklar (C ++ ve çoğunlukla C ile geriye dönük olan C ++ hariç) hata işleme, kapsam kuralları,#include) ve bu dillerin çoğunun “sanallaştırılmış” olması, yani bir tercüman, JIT derleyici veya sanal bir makinede çalıştırılması.

Bu arada, Python'un bazı C etkileri vardır, ancak bu kesinlikle "C" ye dayalı değildir. Hem sözdizimi hem de anlambilim, C'den oldukça radikal bir şekilde farklılık gösterir ve bu, tasarım gereğidir. Python sadece diğer alternatiflerin eşit derecede "iyi" olduğu C özelliklerini ödünç alır (“Python Zen” ine göre - import thisbir python yorumlayıcısında yazın).

Programlamanın geleceği için; Tahminler değişebilir. C'nin etkisi ortadan kalkmıyor, fakat donanımdaki son gelişmeler (çok çekirdekli makineler yaygınlaşıyor, güçlü GPU'lar, CPU tipik performans darboğazı olmaktan çıkıyor, hızlı güvenilir ağ bağlantıları vb.) Programlama için çok farklı yaklaşımlar gerektiriyor Genel olarak. Zorunlu bir dilde çok iş parçacıklı bir dağıtılmış uygulama yazan herkes inanılmaz zor olduğunu söyleyebilirken Haskell gibi diller, tipik sorunların çoğunu kaldıran ve dağıtılmış, eşzamanlı ve paralel işleme için daha soyut ve daha yapısal bir yaklaşım sunan özelliklere sahiptir. (Bu bağlamda saflık önemli bir kavramdır). Daha yeni programlama dilleri (örneğin, C # veya D) zaten böyle bir deyimi destekleyen birçok özellik içermektedir. Her durumda,


Güzel cevap, ama "CPU tipik performans darboğazı olmaktan çıkıyor"? Tecrübelerime göre, performans sorunları boldur - CPU, IO, siz adlandırın. Olmazsa, çok etkili olmasalar da profilerlere ihtiyaç duyulmaz.
Mike Dunlavey

6
@MikeDunlavey: Genellikle karşılaştığım darboğazlar G / Ç, ağ iletişimi, CPU önbellek performansı, veri yolu çıkışı ve (verimsiz) işlemler arası iletişimden kaynaklanıyor. Günümüzde, CPU neredeyse kaçınılmaz bir şekilde tıkanıklıktı; bu artık doğru değil.
tdammers

1

Bu, ABD’de neden İngilizce’nin baskın dil olduğunu sormak gibi bir şey. Neden İspanyolca ya da Fransızca değil? ABD topraklarının İngiliz kolonilerinden daha fazlasını kontrol ediyorlardı. Neden Hollandalı değil? İlk ABD başkenti eski bir Hollanda kolonisinde idi. Bunun için bir "cevap" olabileceğinden emin değilim.

Ancak, "Bilgisayar Dilleri Tarihi" zaman çizelgesi ( http://www.levenez.com/lang/ ), olabilecek tüm cevapları sağlar.


6
Çünkü 1600-1880 arasındaki Büyük Britanya, kabaca dünyanın en büyük sanayi ve finans santraliydi, ardından ABD 1880'den günümüze (<- tartışmalı). Uluslararası ticaretin dili haline geldi ve dünya çapında 2 milyardan fazla insan tarafından akıcı bir şekilde konuşuldu. O ve hiç kimse İspanyolca ya da Hollandaca konuşmak istemiyor :)
maple_shaft

6
@maple_shaft - "kimse İspanyolca konuşmak istemiyor" ?! ... kaç ülkede konuşulduğunu bile biliyor musunuz? en.wikipedia.org/wiki/Spanish_language
Rook

12
@ S.Lott: İngiliz İmparatorluğunun var olan en büyük imparatorluğun olduğu ve tüm dünya yüzeyinin% 25'ini işgal ettiği kısmı mı kastediyorsunuz? Bu tür "güçlü değil"?
DeadMG

3
@DeadMG: Dünya hakkında konuşmuyorum. 1700'lerde, İngilizlerin kıyı boyunca küçük bir bölgeye girdiğini gösteren ABD'den bahsediyorum. İngilizlerin sadece bu tiyatrodaki askeri çatışmalarını kaybediyorlarından bahsediyorum. Fransızlar, ABD olanların çoğunu açıkça kontrol ettiler. Oysa. ABD ingilizce konuşarak yaralandı. Fransızca değil. Aynı analiz, C için de geçerlidir. Çok sayıda etkileyen faktör içeren karmaşık bir geçmiş. Önemsiz, pat cevabı yok.
S.Lott

4
@ S.Lott Fransızlar her karşılaşmayı kazanamadılar. Sadece Kuzey Amerika'ya baktığımızda çoğunluğu kazandılar; ancak 1559/60 döneminde NA'daki 5 büyük savaşın 4'ünü kaybetmek, tiyatroda ezici bir yenilgiye yol açtı. Forts Ticonderoga ve Niagara, Abraham Ovaları ve Restigouche savaşı esirlerinin hepsi İngiliz zaferleridir. Arzı / takviyeyi keserek ikincisi, Sainte-Foy'de Fransız zaferini önemsiz hale getirdi.
Dan Neely,

0

Yeni bir programlama dili yaparsanız, popüler dillere benzer bir sözdizimine sahip olmak, yeni kullanıcılarınız için öğrenmeyi kolaylaştırır. Özellikle, birçok kavram diller arasında benzer olduğunda.

Ayrıca C tarzı sözdiziminin okunması kolay olduğunu düşünüyorum. Pascal ile karşılaştırmak için, kod blokları için "{" ve "}" sembollerini kullanmak, tanımlayıcılara optik olarak çok benzer olan "başlangıç" ve "bitiş" ten daha okunur. Python daha okunaklı olsa da, sözdiziminde boşluk eklemek, düzenleme ile ilgili yeni bir sorun kümesi açar. Başka bir örnek: Lisp ve JavaScript birkaç fikri paylaşıyor, ancak aynı şey C tarzı sözdiziminde yazıldığında daha az belirsiz.

Birçok insanın ikinci paragrafa katılmayacağından eminim, çünkü herkesin kendi favori dili vardır, ancak C tarzı sözdiziminin popülaritesinin kısmen tarihsel bir tesadüf olduğunu düşünüyorum, ama kısmen C yazarlarının birkaçını iyi yaptığını gösteriyor kararlar.


-1

Programlama dilleri zamanla tıpkı doğal diller gibi gelişir, bazı eski diller bu evrimi diğerlerinden daha güçlü bir şekilde etkiler, bazıları ise belirsizlik içinde kaybolur ve etkilerinin yüzey düzeyinde, yani sözdizimi üzerinde izlenmesi zordur.

C'nin etkisi birçok kaynaktan geliyor - düşük seviyede, yaygın, hem Unix hem de Microsoft çevrelerinde destek oldu. Aynı zamanda en uygun sorunun hayatta kalmasıdır - kısa C benzeri sentaksın, Pascal ve 1970'lerde ve 1980'lerde diğer C rakiplerinden daha fazla Algol türevli sözdiziminden daha çekiciliğini görmek kolaydır. Dolayısıyla, daha sonra gelen diller tarafından yaygın olarak benimsendi.

Çok iş parçacıklı programlama ve işlevsel dillerin önemine özellikle uygun olması nedeniyle, etkilerinin gelecekte de arttığını göreceğimizi söyleyebilirim. Örnek olay: Python, bu soruyu soru listesinde bile yaptı.

Üzerinde durulacak dil tarihinin güzel bir zaman çizelgesi görünümü


Yanlış anladın. Hem PASCAL hem de C ALGOL torunlarıdır.
Ingo,

Doğru, ama Algol'ün kendisi Fortran soyundan geliyor ve burada bahsettiğim yapıların bazılarını seçti (c, köşeli ayraçlarla karşılaştırıldığında program, son, alt yordam). Yine de aklımdaki şey aslında Algol benzeri bir sözdizimiydi. Düzenlenen.
scrwtp

terse C-benzeri sözdizimi daha fazla çekiciydi ve bunun için Pascal'ın Algol türevli sözdizimini, 70'li ve 80'li yıllardaki +1'deki C ve diğer rakiplerini daha iyi anlattı . başlamak programcılar insanların da vardır sonlandırmak başlamak inananlar bu sözler küme parantezleri onların savaşı kaybetti sonu başlayacak sevmeye noktalama işaretleri haritaya uygun olduğunu hikayenin sonu
tatarcık

Çoğu geliştiricinin C veya bir tür C ile ilgili dili bildiği ve bu yüzden daha tanıdık geldiği durumlar dışında, C sözdiziminin daha az belirsiz olduğuna dair hiçbir kanıt göremiyorum. AFAICT, C yapısı nedeniyle Pascal'ı kazandı ve uygulamaların sözdizimini değil kendi bağlantılarını yuvarlamaları gerekmedi.
David Thornley

@ David-Hatırladığım kadarıyla, C’nin diğer dillere göre kazanmasının sebeplerinden biri, C’deki belleğe erişimin kolay olmasıydı (örn. İşaretçiler). Şu an çevrede olduklarını biliyorum, ancak 1 KB RAM çok fazla bellek olduğunda, bu dilin çok güçlü bir özelliği idi. İşaretçi gibi özellikler sağlayan diğer dilleri biliyorum, ama hiçbiri C kadar kolay değil
Dunk

-3

Listelenen dillerin çoğunun, alakasız sözdizimsel benzerliklerin dışında, C ile ilgisi yoktur. Sadece iki gerçek C türevi Objective-C ve C ++.


Eğer sözdizimi düşünmüyorsak, herhangi bir dil arasındaki tek fark, genel dil yapılarının (döngüler, şartlamalar, değişkenler, bu gibi sınıfların ve kapanışların vb. kodu. Tüm düşük seviyeli diller birbirine benzer ve tüm yüksek seviyeli diller bu noktada birbirlerine çok benzer.
maple_shaft

2
Bir dili, hangi işlevselliğe sahip olduğunu değil, uygulama davranışını nasıl ilettiğini düşünmemelisiniz. Sizin kaynak kod belgeleri sizin en düşük seviyesidir ve bir kaynak kodunu yazıyor insanlar ve DEĞİL için makineler . Makinelere kesinlikle kod yazarsak, o zaman hepimiz montajda kodlama yapardık.
maple_shaft

1
@maple_shaft: Çok doğru! Bir röportajda makine dili (assembler) ile programlama dili arasındaki farkı açıklamam istendi. Cevabım şuydu: "Makine dili makineler için, programlama dili programcılar için."
Treb

1
@maple_shaft: Sözdizimi, insanlarla iletişimiyle ilgili değildir . İngilizce bir kelimeyi farklı bir imla ile değiştirirsem İngilizce hala aynı dilde olur. Sözdizimsel biçim önemsiz, iletişimsel olan dil anlambilimidir.
DeadMG

3
@DeadMG: Ama soru sözdizimi ile ilgili . Sen sözdizimsel benzerlikler alakasız olarak düşünebilirsiniz, ama soruyu soran kişi bilmek istiyor neden bu alakasız benzerlikler var .
Nicol Bolas
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.