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 for
ekspresi dari Spesifikasi Bahasa ISO Ruby:
§11.5.2.3.4 for
Ekspresi
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:
- Mengevaluasi ekspresi . Jika evaluasi ekspresi diakhiri oleh ekspresi break , ekspresi berikutnya , atau redo-ekspresi , perilaku tidak ditentukan. Kalau tidak, biarkan
O
menjadi nilai yang dihasilkan.
Biarkan E
menjadi 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.
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.