¿Todos y cada uno de los idiomas están escritos en lenguaje C?
Un lenguaje es un conjunto de reglas y restricciones matemáticas abstractas ("si escribo esto , eso sucede"). No está escrito en nada, realmente.
Se especifica, generalmente en una mezcla de un subconjunto formalizado de inglés, notación matemática y quizás algún lenguaje de especificación especializado. La sintaxis a menudo se especifica en una variante de EBNF o ABNF .
Por ejemplo, aquí está la especificación de la for
expresión de la Especificación del lenguaje ISO Ruby:
§11.5.2.3.4 La for
expresión
Sintaxis
- para-expresión → for para-variable [sin terminador de línea aquí] in expresión do-cláusula end
- para-variable → lado izquierdo
|
múltiple-lado izquierdo
Semántica
Una expresión for se evalúa de la siguiente manera:
- Evalúa la expresión . Si la evaluación de la expresión termina con una expresión de ruptura , siguiente expresión o rehacer expresión , el comportamiento no se especifica. De lo contrario,
O
sea el valor resultante.
Deje que E
sea el principal método de invocación de la forma primaria de expresión [ninguna línea-terminador aquí] .each do | -parámetro-lista de bloqueo | bloque de cuerpo end , donde el valor de la primaria-expresión es O
, el parámetro-lista de bloqueo es la for- variable , el cuerpo de bloque es la declaración compuesta de la cláusula do .
Evaluar E
; sin embargo, si se llama a un bloque cuyo cuerpo de bloque es la declaración compuesta de la cláusula do de la expresión for durante esta evaluación, los pasos en §11.3.3 excepto el Paso c) y el Paso e) 4) ser tomado para la evaluación de esta convocatoria.
El valor de la expresión for es el valor resultante de la invocación.
Aquí hay un ejemplo diferente de las reglas de conformidad de tipo de Scala:
El tipo polimórfico [a 1 >: L 1 <: U 1 , ..., a n >: L n <: U n ] T se ajusta al tipo polimórfico [a1>: L ′ 1 <: U ′ 1 , ..., a n >: L ′ n <: U ′ n ] T ′ si, suponiendo que L ′ 1 <: a 1 <: U ′ 1 ,…, L ′ n <: a n <: U′n uno tiene T <: T ′ Y L i <: L ′ i y U ′ i<: U i para i ∈ {1, ..., n} .
¿Es el lenguaje C madre / padre de todos los idiomas?
No, no es. C es bastante joven. Hay muchos idiomas antiguos. Como el viaje en el tiempo es físicamente imposible, es simplemente imposible que C haya tenido influencia alguna en esos viejos idiomas.
- 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)
- BÁSICO (1964)
- PL / I (1964)
- RPG (1964)
- BCPL (1966)
- ISWIM (1966)
- MOMPS (1967)
- Adelante (1968)
- LOGOTIPO (1968)
- REFALACIÓN (1968)
- B (1969)
- BLISS (1970)
- Pascal (1971)
- KRL (1971)
- Smalltalk (1972)
Todo eso existió antes de que C fuera inventado. Y muchos otros no tienen influencia de C en ellos, incluso después de que existiera. La familia de idiomas PASCAL (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Oberon Activo, Componente Pascal) es un linaje completamente separado. Toda la familia Lisp (LISP, Franz Lisp, InterLisp, MacLisp, Scheme, Flavors, LOOPS, CommonLoops, Dylan, CommonLisp, Arc, Clojure, Racket, etc.) tampoco está relacionada. Los lenguajes funcionales (ISWIM, KRL, Miranda, ML, SML, CAML, OCaml, F #, Haskell, Gofer, Clean) y toda la familia de tipo dependiente (Agda, Coq, GURU, Idris) están lo más lejos posible de C. Lo mismo es cierto para la familia Smalltalk (Smalltalk, Self, Newspeak, Us, Korz), la familia de programación lógica (PLANNER, Prolog, Mercury), SQL y muchos otros.
¿Cada concepto (OOP, etc.) está implementado en lenguaje C?
Los primeros lenguajes con conceptos OO fueron Simula (1960) y Smalltalk (1972), pero los sistemas orientados a objetos se habían construido ya en 1953 (sin llamarlos así). Nuevamente, eso es mucho antes de que C existiera, por lo que OO no puede tener ninguna relación con C.