Apakah setiap bahasa ditulis dalam bahasa C?

180

Terkadang saat pemrograman dalam berbagai bahasa (C / C ++, C #), pemikiran ini muncul di benak saya:

  • Apakah setiap bahasa ditulis dalam bahasa pemrograman C?
  • Apakah bahasa C ibu / ayah dari semua bahasa?
  • Apakah setiap konsep ( OOP , dll.) Semuanya diimplementasikan dalam C?

Apakah saya ke arah yang benar?

FaizanRabbani
sumber
58
@ XLAnt: banyak (bahkan mungkin sebagian besar) kompiler C ditulis dalam C.
Jörg W Mittag
32
@ Neil: C ++ tidak dapat dikompilasi dengan apa pun. C ++ adalah bahasa. Bahasa tidak dikompilasi, kompiler lakukan.
Jörg W Mittag
12
@ XLAnt: Saya kira tidak. Tetapi kompiler Oberon pertama, misalnya, ditulis dalam Oberon dan kemudian diterjemahkan dengan tangan (yang merupakan bentuk kompilasi, saya kira) ke Fortran. Kompiler ini kemudian dikompilasi dengan kompiler Fortran, kompiler Oberon yang dihasilkan digunakan untuk mengkompilasi kompiler Oberon dan sejak saat itu, versi kompiler sebelumnya digunakan untuk mengkompilasi yang berikutnya.
Jörg W Mittag
18
@ Neil Ini tidak terlalu bagus. Itu akurat: bahasa adalah spek. Ini dapat diimplementasikan sebagai kompiler, sebagai penerjemah, hibrida, dll. Anda dapat menulis kompiler untuk suatu bahasa, tetapi kompiler bukanlah bahasa. Saya kira masalah menjadi membingungkan karena ada bahasa yang tidak ada spesifikasi tertulis di mana pun kecuali untuk implementasi rujukannya. Tetapi bahkan dalam kasus-kasus itu, saya berpendapat bahasa (yaitu cita-cita penulis dalam pikirannya) berbeda dari implementasi / kompiler / interpreter / dll.
Andres F.
21
Downvoters: ini adalah pertanyaan yang cukup masuk akal dengan jawaban yang jelas. Bahwa jawabannya adalah "tidak" bukanlah alasan untuk tidak memilih. Sebagai gantinya, pertimbangkan untuk menjawab dan menjelaskan.
Andres F.

Jawaban:

207

Tidak.

OCaml, Haskell, Lisp dialek seperti Skema, dan beberapa bahasa lain sering digunakan dalam pengembangan bahasa hobi.

Banyak bahasa diimplementasikan dalam C karena itu adalah bahasa di mana-mana, dan alat penulisan kompiler seperti generator lexer-parser (seperti yacc dan bison) dipahami dengan baik dan hampir sama di mana-mana.

Tapi C sendiri awalnya tidak bisa dikembangkan di C saat pertama kali dibuat. Itu, pada kenyataannya, awalnya dikembangkan menggunakan bahasa B. Bahasa sebelumnya (seperti Fortran) biasanya bootstrap menggunakan bahasa assembly asli atau bahkan kode mesin jauh sebelum C pernah ada.

Tidak terkait, paradigma bahasa seperti OOP umumnya adalah bahasa-agnostik. Paradigma fungsional, misalnya, dikembangkan (oleh Gereja Alonzo) sebagai dasar matematika jauh sebelum bahasa pemrograman pernah ada. Paradigma pemrograman prosedural dan terstruktur keluar dari karya matematika ahli teori seperti John von Neumann. Orientasi objek dikembangkan oleh beberapa upaya yang berbeda dan tidak terkait , beberapa dari kalkulus lambda (paradigma fungsional) dan beberapa dari sistem pemrograman dinamis seperti SmallTalk di Xerox PARC oleh Alan Kay.

C hanyalah sebagian kecil dari cerita, beberapa dekade setelah ide-ide ini muncul.

greyfade
sumber
40
Meskipun benar bahwa kompiler C pertama jelas tidak dapat ditulis dalam C, itu mungkin sekarang.
reirab
17
@reirab Kemungkinan DAN benar. GCC ditulis dalam C dan biasanya dikompilasi menggunakan GCC .
Darkhogg
9
Tentu saja, GCC sekarang sedang ditulis ulang dalam C ++, tetapi itu tidak sepenting fakta bahwa kompiler C pertama tidak dapat ditulis dalam C.
greyfade
10
@greyfade gcc belum menjadi C untuk beberapa waktu. Ini bukan "sekarang sedang ditulis ulang" itu "telah ditulis dalam C ++ selama lebih dari dua tahun" (bahkan lebih tua dari itu, saat itulah penggabungan terjadi yang memindahkannya ke C ++).
13
@greyfade bukan "C tetapi dengan fitur C ++" semacam-definisi C ++?
KutuluMike
91

Apakah setiap bahasa ditulis dalam bahasa C?

Bahasa adalah seperangkat aturan dan batasan matematika abstrak ("jika saya menulis ini , itu terjadi"). Itu tidak ditulis dalam apa pun, sungguh.

Ini ditentukan, biasanya dalam campuran dari subset resmi bahasa Inggris, notasi matematika, dan mungkin beberapa bahasa spesifikasi khusus. Sintaksis sering ditentukan dalam varian EBNF atau ABNF .

Misalnya, berikut adalah spesifikasi forekspresi dari Spesifikasi Bahasa ISO Ruby:

§11.5.2.3.4 forEkspresi

Sintaksis

  • untuk-ekspresi for untuk-variabel [tidak ada terminal-terminator di sini] in ekspresi do-clause end
  • untuk-variabel sisi-kiri | beberapa-sisi-sisi

Semantik

Sebuah untuk ekspresi dievaluasi sebagai berikut:

  1. Mengevaluasi ekspresi . Jika evaluasi ekspresi diakhiri oleh ekspresi break , ekspresi berikutnya , atau redo-ekspresi , perilaku tidak ditentukan. Kalau tidak, biarkan Omenjadi nilai yang dihasilkan.
  2. Biarkan Emenjadi primary-metode-doa dari bentuk utama ekspresi [ada garis-terminator di sini] .each do | blok-parameter-list | blok-tubuh end , di mana nilai utama ekspresi adalah O, yang blok-parameter-list adalah untuk- variabel , blok-tubuh adalah pernyataan-majemuk dari do-klausa .

    Evaluasi E; Namun, jika blok yang blok-tubuh adalah senyawa-pernyataan dari do-klausul yang untuk ekspresi disebut selama evaluasi ini, langkah-langkah dalam §11.3.3 kecuali Langkah c) dan Langkah e) 4) harus diambil untuk evaluasi panggilan ini.

  3. Nilai untuk-ekspresi adalah nilai yang dihasilkan dari doa.

Berikut adalah contoh berbeda dari aturan kesesuaian jenis Scala:

The polimorfik tipe [a 1 >: L 1 <: U 1 , ..., a n >: L n <: U n ] T sesuai dengan jenis polimorfik [a1>: L ' 1 <: U' 1 , ..., a n >: L ′ n <: U ′ n ] T ′ jika, dengan asumsi L ′ 1 <: a 1 <: U ′ 1 ,…, L ′ n <: a n <: U onen seseorang memiliki T <: T ′ Dan L i <: L ′ i dan U ′ i<: U i for i ∈ {1,…, n} .


Apakah bahasa ibu C / ibu dari semua bahasa?

Tidak, bukan. C cukup muda. Ada banyak bahasa lama. Karena perjalanan waktu secara fisik tidak mungkin, maka tidak mungkin bagi C untuk memiliki pengaruh apa pun pada bahasa-bahasa lama tersebut.

  • Plankalkül (1943)
  • Speedcoding (1953)
  • Fortran (1954)
  • IPL (1956)
  • Lisp (1958)
  • Algol (1958)
  • COBOL (1959)
  • JOVIAL (1960)
  • APL (1962)
  • SIMULA (1962)
  • SNOBOL (1962)
  • CPL (1963)
  • BASIC (1964)
  • PL / I (1964)
  • RPG (1964)
  • BCPL (1966)
  • ISWIM (1966)
  • MUMPS (1967)
  • Keempat (1968)
  • LOGO (1968)
  • REFAL (1968)
  • B (1969)
  • BLISS (1970)
  • Pascal (1971)
  • KRL (1971)
  • Smalltalk (1972)

Semua itu ada sebelum C bahkan ditemukan. Dan banyak yang lain tidak memiliki pengaruh C di dalamnya, bahkan setelah itu ada. Keluarga bahasa PASCAL (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Oberon Aktif, Oberon Aktif, Komponen Pascal) adalah garis keturunan yang sepenuhnya terpisah. Seluruh keluarga Lisp (LISP, Franz Lisp, InterLisp, MacLisp, Skema, Flavours, LOOPS, CommonLoops, Dylan, CommonLisp, Arc, Clojure, Racket, dll.) Juga tidak terkait. Bahasa fungsional (ISWIM, KRL, Miranda, ML, SML, CAML, OCaml, F #, Haskell, Gofer, Clean) dan seluruh keluarga tipe-dependen (Agda, Coq, GURU, Idris) sekitar sejauh mungkin dari C. Hal yang sama berlaku untuk keluarga Smalltalk (Smalltalk, Self, Newspeak, Us, Korz), keluarga pemrograman logika (PERENCANAAN, Prolog, Merkuri), SQL, dan banyak lainnya.

Setiap konsep (OOP dll) semuanya diimplementasikan dalam bahasa C?

Bahasa pertama dengan konsep OO adalah Simula (1960) dan Smalltalk (1972), tetapi sistem berorientasi objek telah dibangun sejauh tahun 1953 (tanpa menyebut mereka itu). Sekali lagi, itu jauh sebelum C ada, jadi OO tidak mungkin memiliki hubungan dengan C.

Jörg W Mittag
sumber
2
@leftaroundabout: Itu blogpost yang bagus, salah satu favorit saya selama bertahun-tahun.
Jörg W Mittag
1
@FrancisDavey: Terima kasih. Saya mulai menyusun daftar dari memori, kemudian saya menambahkan tanggal yang tidak saya ingat dengan melihat mereka di Wikipedia. Setelah itu, saya menemukan garis waktu bahasa di Wikipedia, dan memilih beberapa bahasa lagi dari sana. Karena artikel tentang BCPL mengutip 1966, tetapi timeline mengutip 1967, saya tidak melihat bahwa saya telah menambahkan BCPL. Saya akan menghapus duplikatnya.
Jörg W Mittag
1
Dalam daftar Anda, bukankah "htroF" dieja terbalik?
chux
2
"Perjalanan waktu secara fisik tidak mungkin" - Itu klaim yang sangat kontroversial. Tentu saja tidak mengurangi nilai dari jawaban ini.
Konrad Rudolph
50

Sebagian besar inti dari banyak bahasa penting ditulis dalam C, tetapi banyak hal berubah:

  • implementasi referensi Python ( CPython ) ditulis dalam C (tetapi ada implementasi lain yang ditulis dalam bahasa lain, misalnya Jython / Java, PyPy / Python, IronPython / C # ...)
  • PHP Zend Engine ditulis dalam bahasa C
  • kompiler Java pertama yang dikembangkan oleh Sun Microsystems ditulis dalam C, tetapi sekarang perpustakaan kelas selalu ditulis dalam Java (karena mereka dimaksudkan untuk dijalankan menggunakan Java VM itu sendiri). Perpustakaan tertentu yang menggunakan JNI (Java Native Interface) mungkin sebagian ditulis dalam berbagai bahasa lain, karena mereka dimaksudkan untuk digunakan DI LUAR JVM.

    Sun / Oracle VM ditulis dalam C ++. BEA / Weblogic / Oracle VM ditulis dalam C. Tetapi ada JVM yang ditulis dalam Java, Lisp, SmallTalk (IBM) ...

  • Perl diimplementasikan sebagai interpreter inti, ditulis dalam C, bersama-sama dengan banyak koleksi modul, ditulis dalam Perl dan C (tetapi Pugs , kompiler dan interpreter untuk bahasa pemrograman Perl 6, ditulis dalam Haskell)
  • penerjemah Ruby resmi, sering disebut sebagai Penerjemah Ruby atau MRI Matz, ditulis dalam C dan menggunakan mesin virtual khusus Ruby miliknya (tetapi ada JRuby, implementasi Java yang berjalan pada mesin virtual Java; Rubinius, a C ++ mesin virtual bytecode yang menggunakan LLVM untuk dikompilasi ke kode mesin saat runtime ...)
  • sekitar 50% dari R ditulis dalam C
  • dan, tentu saja, C ditulis dalam bahasa C ! (tapi kompiler C pertama, yang ditargetkan ke PDP-11, adalah campuran B dan assembler).

Ada banyak alasan mengapa C sering dipilih: kinerja, portabilitas, pengalaman.

Yang terakhir mungkin yang paling penting: Python dimulai pada tahun 1991, PHP pada tahun 1994/1995, Perl pada tahun 1988, Ruby pada tahun 1995. Pada tahun-tahun itu Jawa baru saja dirilis dan C ++ belum distandarisasi dengan baik.


Agak terkait:

manlio
sumber
5
Dari perspektif implementasi kompiler / juru bahasa, C telah / merupakan titik referensi. Selain itu ia telah secara langsung atau tidak langsung mempengaruhi banyak bahasa kemudian (setidaknya secara sintaksis).
manlio
2
sebentar lagi, Anda akan dapat mengatakan bahwa C # ditulis dalam C #! (agak)
DLeh
1
Sebagian besar Mono (yang mencakup kompiler C # dan banyak / sebagian pustaka kelas dasar .NET) ditulis dalam C #.
Charlie Kilian
3
Jawaban atas pertanyaan "apakah C ibu / ayah dari semua bahasa?" adalah "tidak", jadi saya pikir tidak membantu untuk menyediakan banyak contoh yang ditulis dalam C. Counter- example akan membantu, tetapi pilihan Anda masih diturunkan dari C. Misalnya, bahkan jika Java, Python, dll. sekarang menjadi hosting sendiri, mereka masih bootstrap dari C, jadi mereka seperti "cucu" dari C. Bahasa seperti LISP, FORTRAN, ML dan (tentu saja) kode mesin adalah contoh tandingan yang benar, karena C tidak pernah terlibat dalam ciptaan mereka.
Warbo
2
Aspirasi untuk banyak bahasa, tentu saja, harus dilaksanakan sejauh mungkin dengan sendirinya. Namun, sepertinya sebagian besar bahasa bergantung pada C karena sebagian besar bahasa harus dapat memanggil C agar berguna; sebagian besar API sistem operasi modern dan perpustakaan yang bermanfaat cenderung memiliki ikatan C. Anda juga harus berhati-hati tentang apa yang Anda maksud dengan "dituliskan". Implementasi bahasa biasanya memiliki beberapa bagian: setidaknya kompiler dan sistem runtime. Sistem runtime sering ditulis dalam C untuk antarmuka yang lebih baik dengan OS.
Nama samaran
10

Tidak, beberapa bahasa sudah ada sebelum C. Dan banyak diimplementasikan secara independen dari C, misalnya lihat http://en.wikipedia.org/wiki/Lisp_%28programming_language%29

Ofir
sumber
2
Ada banyak implementasi Java, sebagian besar ditulis dalam Java. Implementasi GNU dari Objective-C ditulis dalam C (atau C ++, mereka berubah baru-baru ini, saya percaya), implementasi LLVM ditulis dalam C ++, dan dulu ada penerjemah yang ditulis dalam C #. Ada banyak implementasi Python, satu ditulis dalam RPython, satu di Jawa, satu di C #, dan satu di C. PHP memiliki enam implementasi utama, dua di Jawa, dua di C #, satu di C dan satu di C ++.
Jörg W Mittag
1
Tidak. Desainer bahasa tentu saja dipengaruhi oleh bahasa lain, tetapi mereka dapat memilih untuk mengabaikan pengaruh itu jika mereka mau.
Jörg W Mittag
2
@FaizanRabbani bahasa, pada dasarnya, adalah konsep dan pilihan paradigma, pola dan kompromi - sangat sering suatu "bahasa dibuat / diadaptasi dari bahasa lain" tetapi itu sama sekali tidak terkait dengan bahasa implementasi kompilernya; bahasa X dapat diturunkan dari bahasa Y tetapi diimplementasikan dalam C atau sesuatu yang lain - dan itu sering terjadi. Dan dalam hal ini, 'leluhur konseptual' adalah penting tetapi bahasa penyusun hanya sedikit nuansa teknis yang relevan yang dapat berubah seiring waktu.
Peteris
3
Tautan terakhir itu jika bernilai meragukan - terlalu banyak kesalahan di dalamnya sehingga benar-benar menganggapnya serius.
Coder Tidak Dikenal
4
@SebastianGodelet: HotSpot bukan implementasi dari bahasa Java. Ini merupakan implementasi dari bahasa bytecode JVM. Itu adalah dua bahasa yang sangat berbeda. Implementasi bahasa Jawa yang paling banyak digunakan adalah javacdari Oracle JDK / OpenJDK yang ditulis oleh Martin Odersky (dari Scala fame) di 100% Java, Eclipse Compiler, ditulis dalam 100% Java (berasal dari kompiler Jikes IBM ), kompilator dari IBM J9, juga berasal dari Jikes dan 100% Java. AFAIK, satu-satunya kompiler Java dalam penggunaan agak meluas yang tidak ditulis di Jawa adalah GCJ
Jörg W Mittag
4

Saya akan berkomentar jika saya bisa, tetapi saya tidak bisa melakukannya:

Salah satu alasan C tampak sangat umum adalah karena ia adalah salah satu bahasa paling awal yang dikembangkan, dan sejumlah besar bahasa modern didasarkan pada strukturnya (Java, Go, PHP, Perl, dll.) - membuatnya tampak seperti itu lebih banyak tempat daripada itu.

Alasan lain yang sering dilupakan adalah bahwa pada tahun 1973 Unix ditulis ulang dalam C dan banyak panggilan sistem Unix juga tersedia sebagai program / fungsi C, membuat keduanya sangat saling terkait. Karena Unix adalah bagian yang kuat dari pengembangan pemrograman modern secara keseluruhan, C diseret ke dalam keburukan dengannya.

Setelah mengatakan semua itu, jawaban untuk pertanyaan Anda adalah "Tidak". C didasarkan dari bahasa yang disebut ALGOL, dan ada banyak pesaing baik dengan ALGOL (FORTRAN, Lisp, COBOL) dan C (tidak ada yang terlintas dalam pikiran). Pemrograman berorientasi objek, bisa dibilang paradigma-pergeseran terbesar dalam desain pemrograman, tidak berasal dengan C - meskipun C ++ menjadi bahasa OOP yang sangat populer (itu muncul pertama kali di Lisp atau Simula 67, tergantung pada siapa Anda bertanya). Pada saat OOP muncul, C adalah bahasa yang begitu populer sehingga tidak perlu menjadi yang pertama - itu sangat populer sehingga "ekspansi" C ++, bisa dikatakan, menjadi salah satu bahasa OOP utama juga. Itu tetap digunakan modern terutama karena fitur kontrol memori yang kuat (Anda dapat langsung mengalokasikan dan membatalkan alokasi memori struktur Anda buat), memungkinkannya untuk membuat program dengan anggaran memori yang ketat (pikirkan video game) dan kompiler yang sangat dioptimalkan (jelas tergantung pada kompiler). Diakui, bahkan fitur-fitur ini kehilangan landasan ketika kompilasi Java JIT dan manajer memori dalam bahasa menjadi lebih maju.

WannabeCoder
sumber
1
ini tampaknya tidak menawarkan sesuatu yang substansial atas poin-poin yang dibuat dan dijelaskan dalam jawaban sebelumnya, terutama dalam yang teratas , kecuali untuk pernyataan yang meragukan bahwa "C didasarkan pada bahasa yang disebut ALGOL"
agas
4
Basis C di ALGOL hampir tidak dipertanyakan ... Lihat cm.bell-labs.com/who/dmr/chist.html , en.wikipedia.org/wiki/C_%28programming_language%29 )
WannabeCoder
yang cerita yang sebenarnya jauh lebih rumit dan menarik dari itu; Saya akan mengatakan cara meletakkan hal-hal di sini hampir tidak membantu bagi pembaca
nyamuk
3

Tentu saja tidak. Bagaimana kompiler C pertama ditulis dalam C jika C tidak ada sebelumnya? Ini bukan masalah ayam dan telur.

Ada banyak cara untuk menulis kompiler pertama dari suatu bahasa yang disebut bootstrap

Terlebih lagi kebanyakan kompiler mencoba mencapai hosting sendiri , atau mengkompilasi sendiri bahasanya, terutama untuk mempromosikan bahasa dan kompiler itu sendiri

phuclv
sumber
12
Compiler Oberon pertama yang ditulis di Oberon. Tidak apa-apa, asalkan Anda seorang profesor dan memiliki banyak siswa yang akan menerjemahkan sendiri kompiler untuk Anda (yang dimiliki oleh Prof. Wirth).
Jörg W Mittag
@ Jorg yang disebutkan dalam artikel bootstrap yang ditautkan di atas, jadi saya tidak repot-repot menulisnya karena pertanyaan ini tentang C dan tidak ada kompiler C yang ditulis seperti itu
phuclv
14
@ JörgWMittag - kompiler Oberon otomatis pertama ditulis dalam Oberon. Kompiler Oberon pertama yang sebenarnya adalah sekelompok siswa.
nnnnnn
4
@nnnnnn: Saya akan menganggap "sekelompok siswa" ini seorang juru bahasa, bukan kompiler.
Paŭlo Ebermann
4
@ Paŭlo Ebermann Untuk menambahkan elemen manusia lain: "komputer" pada awalnya merupakan jabatan .
chux
2

Berikut adalah daftar dari beberapa bahasa pemrograman yang tidak ditulis dalam C, di samping bahasa mereka yang dilaksanakan di:

  • Haskell - Haskell
  • Idris - Haskell
  • Adga - Haskell
  • Clash - Haskell
  • PureScript - Haskell
  • Elm - Haskell
  • Merkuri - Merkuri
  • Karat - Karat (awalnya OCaml)
  • Pergi pergi
  • Kristal - Kristal
  • OCaml - OCaml
  • Frege - Frege + Java
  • Haxe - OCaml + Haxe
  • Scala - Scala
  • Futhark - Haskell
  • ATS - ATS

Bahasa terbaik untuk mengimplementasikan kompiler mungkin akan cukup jauh dari C. Bahasa fungsional memberi Anda hal-hal seperti skema rekursi dan kombinator pengurai monadik (asalkan Anda memiliki kacamata), yang membuatnya sangat cocok untuk pekerjaan kompiler.

Kedua, untuk menjawab pertanyaan Anda, apakah C adalah "ibu / ayah dari semua bahasa pemrograman" - tidak juga. C adalah bahasa yang dirancang dengan baik pada saat itu muncul, dan tidak diragukan lagi telah mempengaruhi desainer bahasa yang kemudian melakukan hal-hal yang sangat berbeda. Tetapi pada akhirnya, Haskell berangkat dari C pada dasarnya dengan segala cara yang mungkin. C berusia 45 tahun dan tidak mengherankan bahwa kami telah belajar untuk melakukan yang lebih baik sementara itu.

Akhirnya, untuk menjawab pertanyaan ketiga Anda, C tidak mengimplementasikan "semua konsep". Secara khusus, mencoba menerapkan beberapa konsep lanjutan dari pemrograman fungsional (seperti metamorfisme, atau, dilarang, sinkromorfisme) dalam C akan sangat sulit. Saya tidak terlalu akrab dengan pemrograman berorientasi objek, tetapi saya tahu pasti bahwa beberapa bahasa berorientasi objek memiliki tipe penjumlahan.


sumber
C tidak pernah "bahasa yang dirancang dengan sangat baik." Kutil yang kita lihat sekarang dikenal sebagai kutil sejak awal. Tapi, itu cukup baik untuk menjadi bahasa asli dari sistem operasi Unix yang ramah pengembang, dan setelah Bell Labs mendorong Unix ke universitas, C / Unix menjadi bahasa / OS favorit bagi generasi profesional komputer.
Solomon Slow
PS., Tidak ada banyak ide orisinal dalam C. Jika Anda mencari ibu / ayah dari semua bahasa pemrograman prosedural blok, Anda mungkin ingin melihat ALGOL .
Solomon Slow
Lisp Macros jauh lebih baik daripada C, dan ALGOL dan Smalltalk memiliki fungsi blok, penutup, dan bersarang untuk membantu mengatur kode. Memang Lisp dapat digunakan sebagai prosesor Makro untuk assembler dan membuat kode yang lebih pendek dan lebih cepat (pemrosesan kustom ekspresi-S) daripada awal C. Simula yang keluar sebelum C memiliki polimorfisme. Lisp, APL, dan Smalltalk memiliki "shell" yang berfungsi penuh (kode yang sama antara shell dan program) tidak seperti "sh" vs Unix "C" yang memungkinkan kode yang ditafsirkan dan dikompilasi untuk disisipkan. Pointer lebih mudah di Lisp (rplaca / rplacd).
aoeu256
Keuntungan terbesar dari C adalah lebih mudah untuk membangun "kompiler" untuk C, dan sehingga dapat menyebar dengan lebih mudah ... seperti virus, dan terima kasih kepada C programmer modern tidak memiliki petunjuk tentang bagaimana membangun program modular. (Mutability menyakiti modularitas), tidak memiliki gagasan adverbia / kombinator / fungsi tingkat tinggi [secara manual menulis loop Anda setiap waktu], dan CPU kami dibatasi oleh bottleneck "von neumann" karena OS kami ditulis dalam C sehingga kami membutuhkan CPU untuk menjalankan kode C untuk kompatibilitas ke belakang.
aoeu256
1

Bahasa pemrograman adalah spesifikasi (bukan perangkat lunak!) Yang biasanya ditulis dalam beberapa dokumen bahasa Inggris (dengan beberapa formalisasi, misalnya EBNF untuk sebagian besar sintaksis; terkadang semantik mereka juga sebagian diformalkan).

Misalnya, C11 didefinisikan oleh n1570 (yang harus Anda baca). Beberapa dialek Skema didefinisikan oleh R5RS (yang juga harus Anda baca, ditulis dengan sangat baik).

Bahasa pemrograman dapat diterapkan oleh beberapa perangkat lunak. Terkadang perangkat lunak itu adalah kompiler yang ditulis dalam bahasa pemrograman itu sendiri. Baca tentang kompiler bootstrap .

Seseorang dapat menulis kompiler dalam bahasa pemrograman yang dikompilasi itu sendiri. Jika bahasa XX itu baru, Anda harus melalui langkah sementara yang melibatkan penulisan penerjemah minimal atau kompiler dari subset bahasa tersebut dalam beberapa bahasa implementasi lainnya (mungkin C), dan kemudian Anda dapat membuang kompiler sementara itu atau interpreter (yang tidak harus "baik", cukup untuk mengkompilasi kompiler yang lain). Setelah Anda mengkompilasi kompiler XX Anda yang ditulis dalam XX Anda dapat membuang kompiler sementara Anda.

Seringkali (tetapi tidak selalu) sistem runtime sebagian ditulis dalam C (khususnya pengumpul sampah ).

Perhatikan bahwa tulang adalah kompiler Skema dan runtime yang seluruhnya ditulis dalam dirinya sendiri (dan Anda dapat menemukan banyak contoh implementasi sepenuhnya bootstrapped).

BTW lebih nyaman menggunakan C sebagai bahasa target dari kompiler .

Saat ini, banyak implementasi bahasa pemrograman adalah perangkat lunak bebas atau sumber terbuka . Jangan ragu untuk belajar (dan mungkin berkontribusi untuk) kode sumber mereka!

Basile Starynkevitch
sumber