Czy każdy język jest napisany w języku C?
Język jest zbiorem abstrakcyjnych reguł matematycznych i ograniczeń ( „jeśli piszę tego , że dzieje się”). Tak naprawdę to nic nie jest zapisane.
Jest on określony, zwykle w mieszaninie sformalizowanego podzbioru angielskiego, notacji matematycznej i być może jakiegoś specjalistycznego języka specyfikacji. Składnia jest często określana w wariancie EBNF lub ABNF .
Na przykład, oto specyfikacja for
wyrażenia ze specyfikacji języka Ruby ISO:
§11.5.2.3.4 for
Wyrażenie
Składnia
- dla-wyrażenia → for dla-zmiennej [tutaj nie ma terminatora linii] in wyrażenie do-klauzula end
- dla zmiennej → po lewej stronie
|
wiele po lewej stronie
Semantyka
Formę wyrażenia ocenia się w następujący sposób:
- Oceń wyrażenie . Jeśli ocena wyrażenia zostanie zakończona wyrażeniem przerywającym , wyrażeniem następnym lub powtórzeniem , zachowanie jest nieokreślone. W przeciwnym razie niech
O
będzie wartością wynikową.
Niech E
będzie podstawowej metody, wywołania na formę pierwotnego wyrażenia [żadnej linii terminatora tutaj] .each do | Blok parametr-listy | blokowej ciała end , gdzie wartość pierwotnego wyrażenia jest O
The bloku lista-parametrów jest FOR zmienna , ciało-blok jest wyrażeniem złożonym z klauzuli do .
Oceń E
; Jednakże, jeśli w bloku, którego blok ciała jest związek, sprawozdanie z do-klauzuli z do ekspresji jest wywoływana podczas tej oceny, etapy w §11.3.3 wyjątkiem etapu c), oraz 4) Etap e), są wziąć pod uwagę ocenę tego zaproszenia.
Wartość wyrażenia to wynikowa wartość wywołania.
Oto inny przykład niż reguły zgodności typu Scali:
Typ polimorficzny [a 1 >: L 1 <: U 1 ,…, a n >: L n <: U n ] T jest zgodny z typem polimorficznym [a1>: L ′ 1 <: U ′ 1 ,…, a n >: L ′ n <: U ′ n ] T ′, jeżeli przy założeniu L ′ 1 <: a 1 <: U ′ 1 ,…, L ′ n <: a n <: U'n ma T <: T ′ I L i <: L ′ i i U ′ i<: U i dla i ∈ {1,…, n} .
Czy język C jest matką / ojcem wszystkich języków?
Nie, nie jest. C jest całkiem młody. Istnieje wiele starych języków. Ponieważ podróże w czasie są fizycznie niemożliwe, po prostu niemożliwe jest, aby C miał jakikolwiek wpływ na te stare języki.
- 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)
- Forth (1968)
- LOGO (1968)
- REFAL (1968)
- B (1969)
- BLISS (1970)
- Pascal (1971)
- KRL (1971)
- Smalltalk (1972)
Wszystkie istniały jeszcze przed wynalezieniem C. I wiele innych nie ma w nich wpływu C, nawet po jego istnieniu. Rodzina języków PASCAL (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Active Oberon, Component Pascal) to całkowicie odrębna linia. Cała rodzina Lisp (LISP, Franz Lisp, InterLisp, MacLisp, Scheme, Flavours, LOOPS, CommonLoops, Dylan, CommonLisp, Arc, Clojure, Racket itp.) Również nie są ze sobą powiązane. Języki funkcjonalne (ISWIM, KRL, Miranda, ML, SML, CAML, OCaml, F #, Haskell, Gofer, Clean) i cała rodzina o typie zależnym (Agda, Coq, GURU, Idris) są w przybliżeniu jak najdalej od C. To samo dotyczy rodziny Smalltalk (Smalltalk, Self, Newspeak, Us, Korz), rodziny programowania logiki (PLANNER, Prolog, Mercury), SQL i wielu innych.
Każda koncepcja (OOP itp.) Jest zaimplementowana w języku C?
Pierwszymi językami z koncepcjami OO były Simula (1960) i Smalltalk (1972), ale systemy obiektowe zostały zbudowane już w 1953 roku (nie nazywając ich tak). Znów, to długo zanim istniało C, więc OO nie może mieć żadnego związku z C.