Her dil C ile yazılmış mı?


180

Bazen farklı dillerde programlama yaparken (C / C ++, C #), bu düşünce aklıma geliyor:

  • Her dil C programlama dilinde yazılmış mı?
  • C dili tüm dillerin ana babası mı?
  • Her bir konsept ( OOP , vb.) Hepsi C de uygulanmış mı?

Doğru yönde miyim?


58
@XLAnt: birçok (belki de çoğu) C derleyicisi C ile yazılmıştır
Jörg W Mittag

32
@Neil: C ++ hiçbir şey için derleme yapmıyor. C ++ bir dildir. Dilleri derlemez, derleyiciler yapar.
Jörg W Mittag

12
@ XLAnt: Sanmıyorum. Fakat ilk Oberon derleyicisi, örneğin Oberon'da yazılmış ve daha sonra Fortran'a elle çevrilmiştir (bu bir derleme biçimidir). Bu derleyici daha sonra bir Fortran derleyicisiyle derlendi, elde edilen Oberon derleyicisi Oberon derleyicisini derlemek için kullanıldı ve bu noktadan sonra derleyicinin önceki sürümü bir sonraki derleyiciyi derlemek için kullanıldı.
Jörg W Mittag

18
@Neil Gerçekten o kadar bilgiçlik edici değil. Bu doğru: bir dil bir özelliktir. Derleyici, tercüman, melez vb. Olarak uygulanabilir . Bir dil için bir derleyici yazabilirsiniz , ancak derleyici dil değildir. Sanırım bu konu kafa karıştırıcı hale geliyor; çünkü referans uygulaması dışında hiçbir yerde yazılı olmayan diller var . Ancak bu durumlarda bile, dilin (yani yazarın aklında sahip olduğu ideal) uygulama / derleyici / tercüman / vb'den farklı olduğunu iddia ediyorum.
Andres F.

21
Downvoters: Bu açık bir cevap ile oldukça makul bir sorudur. Cevabın "hayır" olduğu için oy kullanmamayı tercih etmek gerekmiyor. Bunun yerine, cevaplamayı ve açıklamayı düşünün.
Andres F.

Yanıtlar:


207

Hayır.

OCaml, Haskell, Lisp, Scheme gibi lehçeler ve diğer birçok dil hobi dillerinin geliştirilmesinde sıklıkla kullanılmaktadır.

Her dil bir dildir, çünkü her yerde bir dildir ve lexer-parser jeneratörleri (yacc ve bison gibi) gibi derleyici yazma araçları anlaşılır ve neredeyse her yerde olduğu gibi.

Fakat C'nin kendisi ilk yaratıldığında ilk olarak C'de geliştirilemezdi. Aslında, aslında B dili kullanılarak geliştirilmiştir . (Fortran gibi) Daha önce diller genellikle edildi bootstrapped C hiç var çok önce yerli montaj dili ve hatta makine kodunu kullanarak.

Ne yazık ki, OOP gibi dil paradigmaları genellikle dille agnostiktir. Örneğin, işlevsel paradigma, herhangi bir programlama dili bulunmadan çok önce bir matematiğin temeli olarak (Alonzo Church tarafından) geliştirildi. Usul ve yapılandırılmış programlama paradigmaları, John von Neumann gibi teorisyenlerin matematiksel çalışmalarından ortaya çıktı. Nesne yönelimi , bazıları lambda matematiği (fonksiyonel paradigma) ve bazıları Alan Kay tarafından Xerox PARC'da SmallTalk gibi dinamik programlama sistemleri dışında, birkaç farklı ve ilgisiz çaba ile geliştirilmiştir .

C, bu fikirlerin ortaya çıkmasından on yıllar sonra hikayenin yalnızca küçük bir parçası .


40
İlk C derleyicisinin açıkça C'ye yazılamadığı doğru olsa da, şimdi kesinlikle mümkün.
reirab

17
@reirab Posible AND true. GCC C dilinde yazılmıştır ve genel olarak GCC kullanılarak derlenmiştir .
Darkhogg

9
Tabii ki, GCC şimdi C ++ yeniden yazılıyor, ama bu ilk C derleyicisi C ile yazılmış edilemedi gerçeği kadar önemli değil
greyfade

10
@greyfade gcc bir süredir C olmadı. "Şimdi yeniden yazılıyor" değil, "+" iki yıldan fazla bir süredir C ++ 'da yazılmıştır "(bundan daha da eski, birleşme C ++' a taşındığında böyle oldu).

13
@greyfade "C değil, C ++ özelliklerine sahip" C ++ tanımının ne tür?
KutuluMike

91

Her dil C dilinde yazılmış mı?

Bir dil soyut matematiksel kurallara ve kısıtlamalara ( "Ben yazarsam bir dizi bu , o olur"). Gerçekten de hiçbir şeyle yazılmış değil.

Genellikle resmi bir İngilizce alt kümesinin, matematiksel gösterimin ve belki de bazı özel şartlandırma dillerinin bir karışımında belirtilmiştir. Sözdizimi, genellikle bir EBNF veya ABNF varyantında belirtilir .

Örneğin, işte forISO Ruby Language Spesifikasyonundaki ifadenin özelliği:

§11.5.2.3.4 forİfade

Sözdizimi

  • for-expression for için-değişken [burada hiçbir sonlandırıcı yok] in ifade do-clause end
  • değişken için sol taraf | çoklu taraf

semantik

Bir ifade ifadesi aşağıdaki şekilde değerlendirilir:

  1. İfadeyi değerlendirin . İfadenin değerlendirmesi bir ara ifade , bir sonraki ifade veya yeniden ifade etme ile sonlandırılırsa , davranış belirtilmez. Aksi takdirde, Oortaya çıkan değer olsun.
  2. Let Eolmak birincil yöntem,-çağırma biçimi birinci ifade [burada bir hat-sonlandırıcı] .each do | blok parametre listesi | blok gövdenin end değeri, birincil ifade olup O, blok parametre listesi olan için- değişken , blok gövdesi olan bileşik-ifadesi bir do-maddesi .

    Değerlendirin E; olan bir blok durumunda, ancak blok gövdesi olan bileşik-ifadesi bir do-madde bölgesinin için ifade bu değerlendirme sırasında çağrılan, Aşama c dışında §11.3.3 adımları) ve Aşama e) 4) 'de belirtilen Bu görüşmenin değerlendirilmesi için alınmalıdır.

  3. Değeri için ifade çağırma elde edilen değerdir.

Scala'nın uygunluk kurallarından farklı bir örnek:

Polimorfik tip [a 1 >: L 1 <: U 1 ,…, a n >: L n <: U n ] T , polimorfik tip [a1>: L ′ 1 <: U ′ 1 ,…, a n >: L < n <: U ′ n ] T ′ ise, L ′ 1 <: a varsayarak 1 <: U ′ 1 ,…, L ′ n <: a n <: U′n var T <: T ′ Ve L i <: L ′ i ve U ′ i<: U i için i ∈ {1, ..., n} .


C dili tüm dillerin ana babası mı?

Hayır öyle değil. C oldukça genç. Çok fazla eski dil var. Zaman yolculuğu fiziksel olarak imkansız olduğundan, C'nin bu eski dilleri ne olursa olsun herhangi bir etkisi olması imkansızdır.

  • Plankalkül (1943)
  • Hız kodu (1953)
  • Fortran (1954)
  • IPL (1956)
  • Lisp (1958)
  • Algol (1958)
  • COBOL (1959)
  • JOVIAL (1960)
  • APL (1962)
  • SIMULA (1962)
  • SNOBOL (1962)
  • CPL (1963)
  • TEMEL (1964)
  • PL / I (1964)
  • RPG (1964)
  • BCPL (1966)
  • ISWIM (1966)
  • MUMPS (1967)
  • İleri (1968)
  • LOGO (1968)
  • REFAL (1968)
  • B (1969)
  • BLISS (1970)
  • Pascal (1971)
  • KRL (1971)
  • Küçük konuşma (1972)

C bile icat edilmeden önce var olanların hepsi. Ve diğerlerinin çoğunda, C varlığından sonra bile hiçbir etkisi yoktur. PASCAL dil ailesi (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Aktif Oberon, Bileşen Pascal) tamamen ayrı bir soyağaçtır. Bütün Lisp ailesi (LISP, Franz Lisp, InterLisp, MacLisp, Şema, Tatlar, LOOPS, CommonLoops, Dylan, CommonLisp, Arc, Clojure, Racket, vb.) İle de ilgilidir. İşlevsel diller (ISWIM, KRL, Miranda, ML, SML, CAML, OCaml, F #, Haskell, Gofer, Temiz) ve bütünüyle bağımlı tipte aile (Agda, Coq, GURU, Idris) mümkün olduğunca C kadardır. Aynısı Smalltalk ailesi (Smalltalk, Ben, Newspeak, Biz, Korz), mantık programlama ailesi (PLANNER, Prolog, Mercury), SQL ve diğerleri için de geçerlidir.

Her kavram (OOP vb.) Hepsi C dilinde mi uygulanıyor?

OO kavramlarına sahip ilk diller Simula (1960) ve Smalltalk (1972) idi, ancak nesne yönelimli sistemler 1953 yılına kadar inşa edildi (bunu söylemeden). Yine, C'nin varlığından çok önce, OO muhtemelen C ile bir ilişkiye sahip olamaz.



2
@leftaroundabout: Harika bir blog yayını, yıllardır favorilerimden biri.
Jörg W Mittag

1
@ FrancisDavey: Teşekkürler. Listeyi hafızadan derlemeye başladım, daha sonra Wikipedia'da onları arayarak hatırlamadığım tarihleri ​​ekledim. Ondan sonra Wikipedia'da dillerin zaman çizelgesini buldum ve oradan birkaç dil daha seçtim. BCPL'deki makalenin 1966'dan, ancak zaman çizelgesinin 1967'den kaynaklandığından beri, BCPL'yi zaten eklediğimi fark etmedim. Kopyayı kaldıracağım.
Jörg W Mittag

1
Listenizde "htroF" geriye doğru yazılmıyor mu?
chux

2
“Zaman yolculuğu fiziksel olarak imkansız” - Bu oldukça çekişmeli bir iddia. Elbette bu cevabın değerinden düşmez.
Konrad Rudolph

50

Birçok önemli dilin çekirdeğinin çoğu C ile yazılmıştır, ancak işler değişmektedir:

  • Python'un ( CPython ) referans uygulaması C dilinde yazılmıştır (ancak başka dillerde yazılmış başka uygulamalar da vardır, örneğin Jython / Java, PyPy / Python, IronPython / C # ...)
  • PHP Zend Engine C ile yazılmıştır.
  • Sun Microsystems tarafından geliştirilen ilk Java derleyicisi C dilinde yazılmıştır, ancak sınıf kütüphaneleri her zaman Java dilinde yazılmıştır (çünkü Java VM'nin kendisi kullanılarak çalıştırılmak üzere tasarlanmıştır). JNI (Java Native Interface) kullanan bazı kütüphaneler, JVM DIŞINDA kullanılmaları amaçlandığı için, kısmen başka dillerde de yazılabilir.

    Sun / Oracle VM, C ++ dilinde yazılmıştır. BEA / Weblogic / Oracle VM C ile yazılmıştır. Ancak Java, Lisp, SmallTalk (IBM) ile yazılmış JVM vardır.

  • Perl edilir uygulanan (ancak birlikte Perl ve C ile yazılmış modüllerin geniş bir koleksiyona sahip, C dilinde yazılmış bir çekirdek tercüman olarak Pugs Haskell yazılır, Perl 6 programlama dili için bir derleyici ve yorumlayıcı)
  • Genellikle Matz'un Ruby Tercümanı veya MRI olarak adlandırılan resmi Ruby tercümanı, C dilinde yazılmıştır ve kendi Ruby'ye özgü sanal makinesini kullanır (ancak, Java sanal makinesinde çalışan bir Java uygulaması olan JRuby vardır; Rubinius, C ++ çalışma zamanında makine kodunu derlemek için LLVM kullanan bytecode sanal makinesi ...)
  • R'nin yaklaşık % 50'si C ile yazılmıştır.
  • ve elbette, C , C ile yazılmış (yazılmıştır) ! (ancak PDP-11'i hedef alan ilk C derleyicisi, B ve assembler karışımı idi).

C'nin sıklıkla seçilmesinin birçok nedeni vardır: performans, taşınabilirlik, deneyim.

Sonuncusu muhtemelen en önemlisi: Python 1991'de, 1994/1995'te PHP, 1988'de Perl, 1995'te Ruby ile başladı. O yıllarda Java henüz piyasaya sürüldü ve C ++ henüz iyi bir şekilde standartlaştırılmadı.


Biraz ilgili:


5
Derleyiciler / tercümanlar uygulaması açısından, C bir referans noktası olmuştur / olmuştur. Ayrıca, daha sonra birçok dili doğrudan veya dolaylı olarak etkiledi (en azından sözdizimsel olarak).
manlio

2
Çok yakında, C # C # ile yazılmış olduğunu söyleyebileceksiniz! (tür)
DLeh

1
Mono’nun çoğu (bir C # derleyicisi ve .NET temel sınıf kütüphanesinin çoğunu / çoğunu içerir) C # dilinde yazılmıştır.
Charlie Kilian

3
“C, tüm dillerin ana babası / babası mı?” Sorusunun cevabı. "hayır" dır, bu yüzden yardımcı olacağını C. Karşı örneklerde yazılır çokça örnek sağlanması yararlı olur sanmıyorum, ancak seçimler hala vardır soyundan Örneğin C'den bile vb Java, Python, eğer şimdi kendi kendilerini barındırıyorlar, hala C'den önyüklendiler, bu yüzden C'nin "torunları" gibiler. LISP, FORTRAN, ML ve (elbette) makine kodu gibi diller, C'nin hiçbir zaman yer almadığı için gerçek örneklerdir. onların yaratılışı.
Warbo

2
Elbette, birçok dile yönelik istek, kendi içinde mümkün olduğunca uygulanmalıdır. Bununla birlikte, çoğu dil C'ye bağlı gibi görünmektedir, çünkü çoğu dil yararlı olmak için C'yi arayabilmelidir; Modern işletim sistemi API'lerinin ve faydalı kütüphanelerin çoğunluğu C bağlanma eğilimindedir. Ayrıca, "yazıldığı" ile ne demek istediğine dikkat etmelisin. Bir dil uygulamasının tipik olarak birden fazla bölümü vardır: en azından bir derleyici ve bir çalışma zamanı sistemi. Çalışma zamanı sistemleri, işletim sistemi ile daha iyi bir arayüz oluşturmak için genellikle C ile yazılmıştır.
Sahte

10

Hayır, bazı diller C’den önce gelir ve çoğu C’den bağımsız olarak uygulanır, örneğin bkz. Http://en.wikipedia.org/wiki/Lisp_%28programming_language%29


2
Java'nın birçok uygulaması vardır, çoğu Java ile yazılmıştır. Amaç-C'nin GNU uygulaması C (veya C ++ dilinde yazılmıştır, yakın zamanda değiştiler, inanıyorum), LLVM uygulaması C ++ dilinde yazılmıştır ve orada C # ile yazılmış bir tercüman kullanılmıştır. Python'un birçok uygulaması vardır, biri RPython'da, biri Java'da, biri C # ve biri C'de yazılmıştır. PHP'nin altı ana uygulaması vardır: ikisi Java'da, ikisi C #, biri C'de ve biri C ++ da.
Jörg W Mittag

1
Hayır. Dil tasarımcıları kesinlikle diğer dillerden etkilenir, ancak isterlerse bu etkileri göz ardı etmeyi seçebilirler.
Jörg W Mittag

2
@FaizanRabbani dilleri, özünde, paradigmaların, kalıpların ve uzlaşmaların kavramları ve seçimleridir - çoğu zaman bir "dil (ler) den diğer dillerden yaratılır / uyarlanır" fakat derleyicisinin uygulama dili ile tamamen ilgisizdir; X dili Y dilinden türetilebilir, ancak C dilinde veya tamamen başka bir şeyde uygulanabilir - ve bu genellikle böyledir. Ve bu durumda, 'kavramsal ata' önemlidir, ancak derleyici dili zamanla değişebilecek ancak ilgili bir teknik nüanstır.
Peteris

3
Bu son bağlantı şüpheli bir değerse - gerçekten ciddiye almak için çok fazla hata.
Bilinmeyen Kodlayıcı

4
@SebastianGodelet: HotSpot, Java dilinin bir uygulaması değildir. JVM bayt kodu dilinin bir uygulamasıdır. Bunlar iki farklı dildir. Java dilinin en yaygın kullanılan uygulamalar şunlardır javac% 100 (IBM'in türetilen Java ile yazılmış% 100 Java, Eclipse derleyicisi, içinde (Scala şöhret) Martin Odersky tarafından yazılan Oracle JDK / OpenJDK dan Jikes derleyici), derleyici dan IBM'in J9, ayrıca Jikes ve% 100 Java'dan türemiştir. AFAIK, Java'da yazılmayan bir şekilde yaygın kullanımdaki tek Java derleyicisi GCJ'dir
Jörg W Mittag

4

Bunu yapabilseydim bunu bir yorum yapardım, ama yapamam:

C'nin bu kadar yaygın görünmesinin nedenlerinden biri, geliştirilen ilk dillerden biri olması ve çok sayıda modern dilin yapısından (Java, Go, PHP, Perl, vb.) Dayanmasıdır - öyle görünüyor. ondan daha fazla yer.

Unutulan bir başka neden de, 1973'te Unix'in C'ye yeniden yazılmış olması ve Unix'in sistem çağrılarının birçoğunun , ikisi birbirine bağlı kılan C programları / işlevleri olarak da mevcut olmasıdır. Unix, bir bütün olarak modern programlamanın gelişiminin güçlü bir parçası olduğu için, C onunla meşhur oldu.

Bunları söyledikten sonra, sorunuzun cevabı "Hayır" dır. C, ALGOL adında bir dilden yola çıkmıştır ve hem ALGOL (FORTRAN, Lisp, COBOL) hem de C (hiçbiri akla gelmez) ile birçok rakip vardı. Program tasarımındaki tartışmasız en büyük paradigma kayması olan nesne yönelimli programlama, C ++ ile popüler değildi - C ++ çok popüler bir OOP dili olmasına rağmen (kime sorduğunuza bağlı olarak Lisp veya Simula 67'de ilk olarak ortaya çıktı). OOP ortaya çıktığında, C o kadar popülerdi ki ilk olması gerekmiyordu - o kadar popülerdi ki, tabiri caizse C ++ "genişlemesi" de birincil OOP dillerinden biri oldu. Temelde güçlü bellek kontrol özellikleri nedeniyle modern kullanımda kalır (yapılarınızın oluşturduğu belleği doğrudan tahsis edebilir ve kaldırabilirsiniz), Sıkı bellek bütçeleri (video oyunları düşünün) ve yüksek derecede optimize edilmiş derleyici (derleyiciye bağlı olarak) program oluşturma olanağı sağladı. Kuşkusuz, bu özellikler bile Java JIT derlemesi ve dil içi bellek yöneticileri daha gelişmiş hale geldikçe kaybediyor.


1
Bu yapılan puan üzerinden önemli bir şey sunmak gibi görünüyor ve özellikle de, önceki cevapları açıklandığı gelmez üst one "C ALGOL denilen bir dilin kapalı dayanır" diye şüpheli bir açıklamada hariç
tatarcık


Gerçek bir hikaye çok daha karmaşık ve ilginç bundan daha olduğu; İşlerin burada ortaya konma şeklinin okuyucular için pek faydalı olmadığını söyleyebilirim
gnat

3

Belli ki değil. Daha önce C olmasaydı ilk C derleyicisi C'ye nasıl yazılabilir? Bu tavuk ve yumurta problemi değil.

Bootstrapping denilen bir dilin ilk derleyicisini yazmanın birçok yolu vardır.

Üstelik çoğu derleyici , çoğunlukla dilin ve derleyicinin kendisini tanıtmak için kendi kendini barındırabilmeyi veya kendisini kendi dilinde derlemeyi dener.


12
İlk Oberon derleyici edildi Oberon yazılmış. Profesör olmanız ve derleyiciyi sizin için çevirecek çok sayıda öğrenciniz olması koşuluyla (Prof. Wirth’in sahip olduğu), bu gayet iyi.
Jörg W Mittag

Yukarıdaki bağlantılı bootstrapping makalesinde bahsedilen @Jorg, bu soruyu C ile ilgili olduğundan ve hiçbir C derleyicisinin bu şekilde yazıldığından
rahatsız etmiyorum

14
@ JörgWMittag - ilk otomatik Oberon derleyicisi Oberon'da yazılmıştır. Gerçek olan ilk Oberon derleyicisi bir sürü öğrenciydi.
nnnnnn

4
@ nnnnnn: Bu “öğrenci grubunu” derleyici değil tercüman olarak düşünürdüm.
Paŭlo Ebermann

4
@ Paŭlo Ebermann Başka bir insan unsuru eklemek için: "bilgisayar" aslen bir ünvanıydı .
chux

2

İşte onlar dillerde yanında C ile yazılmış olmayan bazı programlama dilleri, listesidir edilir uygulanan:

  • Haskell - Haskell
  • İdris - Haskell
  • Adga - Haskell
  • Çatışma - Haskell
  • PureScript - Haskell
  • Karaağaç - Haskell
  • Merkür - Merkür
  • Pas - Pas (başlangıçta OCaml)
  • Git git
  • Kristal - Kristal
  • OCaml - OCaml
  • Frege - Frege + Java
  • Haxe - OCaml + Haxe
  • Scala - Scala
  • Futhark - Haskell
  • ATS - ATS

Bir derleyiciyi uygulamak için en iyi diller muhtemelen C'den oldukça uzakta olacak. İşlevsel diller size özyinelemeler ve monadik ayrıştırıcı birleştiriciler (tipik bir sınıf dersi olması koşuluyla) özellikle onları derleyici çalışmaları için uygun kılan şeyler verir.

İkincisi, sorunuzu C'nin "tüm programlama dillerinin ana babası" olup olmadığı olarak ele almak - aslında değil. C göründüğü zaman iyi tasarlanmış bir dildi ve kuşkusuz dil tasarımcılarını daha sonra çok farklı şeyler yapmaya devam etti. Ancak günün sonunda Haskell, C'den aslında mümkün olan her şekilde ayrılıyor. C 45 yaşında ve bu arada daha iyisini yapmayı öğrenmemiz şaşırtıcı değil.

Son olarak, üçüncü sorunuzu cevaplamak için, basitçe C'nin "tüm kavramları" uyguladığı bir durum değildir. Özellikle, C'deki fonksiyonel programlamanın (metamorfikler veya tanrı korusun, senkromorfizmler gibi) bazı gelişmiş kavramlarını uygulamaya çalışmak canavarca zor olacaktır. Özellikle nesne yönelimli programlamaya aşina değilim, ancak bazı nesne yönelimli dillerin toplam türlerinin olduğu gerçeğini biliyorum.


C asla "inanılmaz derecede iyi tasarlanmış bir dil" değildi. Bugün üzerinde gördüğümüz siğiller en baştan siğiller olarak biliniyordu. Ancak, geliştirici dostu Unix işletim sisteminin ana dili olacak kadar iyiydi ve Bell Labs, Unix'i üniversitelere ittikten sonra, C / Unix, bir nesil bilgisayar uzmanı için favori bir dil / işletim sistemi haline geldi.
Süleyman Yavaş

PS., C'de pek çok orijinal fikir yoktu. Eğer ALGOL'e bakmak isteyebileceğiniz tüm blok yapılı, prosedürel programlama dillerinin annesini / babasını arıyorsanız .
Süleyman Yavaş

Lisp Makroları C'den çok daha iyiydi ve ALGOL ve Smalltalk kod düzenlemeye yardımcı olmak için bloklar, kapaklar ve yuvalanmış işlevler içeriyordu. Gerçekten de Lisp, montajcı için bir Makro işlemci olarak kullanılabilir ve C'nin polimorfizminden önce çıkan C Simula'dan daha kısa ve daha hızlı olan (S ifadelerinin özel işlemesi) kod oluşturmuş olabilir. Lisp, APL ve Smalltalk, Unix'in "sh" vs "C" den farklı olarak, tamamen işlevsel olan (kabuk ve programlar arasında aynı kod) "kabuklarına" yorumlanmış ve derlenmiş kodun birleştirilmesine izin vermiştir. İşaretçiler Lisp'te daha kolaydı (rplaca / rplacd).
aoeu256

C'nin en büyük avantajı C için "derleyiciler" oluşturmak daha kolaydı ve böylece virüs gibi daha kolay yayılabilirdi ... (değişkenlik modülerliğe zarar verir), zarf / birleştirici / yüksek dereceli işlev kavramı yoktur (her seferinde döngülerinizi manuel olarak yazın) ve CPU'larımız "von neumann" darboğazı ile sınırlıdır, çünkü işletim sistemimiz C yazılmıştır. Geriye dönük uyumluluk için C kodunu çalıştırmak için CPU.
aoeu256

1

Programlama dilleri genellikle bazı İngilizce belgelerde yazılan spesifikasyonlar (yazılım değil!) (Bazı resmi düzenlemelerle, örneğin sözdiziminin çoğu için EBNF ; bazen onların semantikleri de kısmen resmileştirilmiştir).

Örneğin, C11 n1570 (hangi okumanız gerekir) tarafından tanımlanır . Bazı Şema lehçeleri R5RS tarafından tanımlanmıştır (ayrıca okumalısınız, çok iyi yazılmıştır).

Programlama dilleri bazı yazılımlar tarafından uygulanabilir . Bazen bu yazılım programlama dilinde yazılmış bir derleyicidir. Bootstrapping derleyicileri hakkında bilgi edinin .

Derlenmiş programlama dilinde bir derleyici yazılabilir. Bu dil XX yepyeni ise, başka bir uygulama dilinde (belki de C) asgari bir tercüman veya bir alt kümenin derleyicisini başka bir uygulama dilinde (belki de C) yazmayı içeren geçici bir adım atmanız gerekir ve daha sonra bu geçici derleyiciyi veya tercüman ("iyi" olması gerekmeyen, sadece diğer derleyiciyi derlemeye yetecek kadar). XX derleyicinizi XX ile yazılmış bir kez derledikten sonra geçici derleyicinizi atabilirsiniz.

Genellikle (ancak her zaman değil) çalışma zamanı sistemi kısmen C (özellikle çöp toplayıcı ) ile yazılmıştır .

Kemiklerin bir Scheme derleyici ve çalışma zamanının tamamen kendi içinde yazılmış olduğuna dikkat edin (ve tamamen önyüklemeli uygulamaların birçok başka örneğini de bulabilirsiniz).

BTW, C'nin derleyicilerin hedef dili olarak kullanılması uygundur .

Günümüzde, birçok programlama dili uygulaması, özgür yazılım veya açık kaynaktır . Kaynak kodlarını incelemek (ve belki katkıda bulunmak için) çekinmeyin!

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.