Все ли языки написаны на языке Си?
Язык - это набор абстрактных математических правил и ограничений («если я напишу это , это произойдет»). На самом деле это ни в чем не написано.
Он указывается, как правило, в виде смеси формализованного подмножества английского языка, математической записи и, возможно, некоторого специализированного языка спецификаций. Синтаксис часто указывается в варианте EBNF или ABNF .
Например, вот спецификация for
выражения из спецификации языка Ruby ISO:
§11.5.2.3.4 for
Выражение
Синтаксис
- for-expression → for for-variable [здесь нет терминатора строки] in выражение do-clause end
- для переменной → левая сторона
|
множественная левая сторона
Семантика
For -выражение оценивается следующим образом:
- Оцените выражение . Если оценка выражения прекращается путем обкатки выражения , следующего выражения , или Redo-выражения , поведение не определено. В противном случае, пусть
O
будет результирующим значением.
Позвольте E
быть вызовом первичного метода формы первичное выражение [здесь нет разделителя строк] .each do | block-параметр-list- | block block-body end , где значение первичного выражения равно O
, block-parameter-list является for-for переменная , block-body является составным оператором предложения do .
Оценивать E
; Однако, если блок , чей блок-тело является соединение-утверждение о сделае п из для-выражения называется в ходе этой оценки, шагов , описанных в §11.3.3 , за исключением стадии с) и стадией е) , 4), принять для оценки этого вызова.
Значение for-expression является результирующим значением вызова.
Вот пример, отличный от правил соответствия типов Scala:
Полиморфный тип [a 1 >: L 1 <: U 1 ,…, a n >: L n <: U n ] T соответствует полиморфному типу [a1>: L ′ 1 <: U ′ 1 ,…, a n >: L ′ n <: U ′ n ] T ′ если, предполагая, что L ′ 1 <: a 1 <: U ′ 1 ,…, L ′ n <: a n <: U′n один имеет T <: T ′ И L i <: L ′ i и U ′ i<: U i для i ∈ {1,…, n} .
Является ли язык C матерью / отцом всех языков?
Нет это не так. С довольно молод. Есть много старых языков. Поскольку путешествие во времени физически невозможно, просто невозможно, чтобы Си оказал какое-либо влияние на эти старые языки.
- Планкалкюль (1943)
- Speedcoding (1953)
- Фортран (1954)
- IPL (1956)
- Лисп (1958)
- Алголь (1958)
- КОБОЛ (1959)
- JOVIAL (1960)
- APL (1962)
- СИМУЛА (1962)
- СНОБОЛ (1962)
- CPL (1963)
- Бейсик (1964)
- PL / I (1964)
- РПГ (1964)
- BCPL (1966)
- ISWIM (1966)
- MUMPS (1967)
- Форт (1968)
- ЛОГОТИП (1968)
- РЕФАЛ (1968)
- B (1969)
- БЛИСС (1970)
- Паскаль (1971)
- KRL (1971)
- Smalltalk (1972)
Все это существовало до того, как С был изобретен. И многие другие не имеют влияния С в них, даже после того, как он существует. Языки семейства PASCAL (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Active Oberon, Component Pascal) представляют собой совершенно отдельную линию. Все семейство Lisp (LISP, Franz Lisp, InterLisp, MacLisp, Scheme, Flavors, LOOPS, CommonLoops, Dylan, CommonLisp, Arc, Clojure, Racket и т. Д.) Также не связано. Функциональные языки (ISWIM, KRL, Miranda, ML, SML, CAML, OCaml, F #, Haskell, Gofer, Clean) и все семейство с зависимой типизацией (Agda, Coq, GURU, Idris) находятся как можно дальше от Си. То же самое относится к семейству Smalltalk (Smalltalk, Self, Newspeak, Us, Korz), семейству логического программирования (PLANNER, Prolog, Mercury), SQL и многим другим.
Каждая концепция (ООП и т. Д.) Реализована на языке Си?
Первыми языками с концепциями ОО были Simula (1960) и Smalltalk (1972), но объектно-ориентированные системы были созданы еще в 1953 году (не называя их так). Опять же, это задолго до того, как существовал C, поэтому OO не может иметь никакого отношения к C.