Chaque langue est-elle écrite en langage C?
Un langage est un ensemble de règles et de restrictions mathématiques abstraites ("si j'écris ceci , cela se produit"). Ce n'est écrit dans rien, vraiment.
Il est spécifié, généralement en mélangeant un sous-ensemble formalisé d'anglais, une notation mathématique et peut-être un langage de spécification spécialisé. La syntaxe est souvent spécifiée dans une variante de EBNF ou ABNF .
Par exemple, voici la spécification de l' for
expression à partir de la spécification du langage ISO Ruby:
§11.5.2.3.4 L' for
expression
Syntaxe
- for-expression → for for-variable [pas de fin de ligne ici] in expression do-clause end
- pour variable → gauche gauche
|
multiple gauche
Sémantique
Une expression for est évaluée comme suit:
- Évaluez l' expression . Si l'évaluation de l'expression se termine par une pause-expression , suivant l' expression , ou refaire l' expression , le comportement est non spécifiée. Sinon, laissez
O
être la valeur résultante.
Laissez - E
être la principale méthode invocation de la forme d'expression primaire [aucune ligne de terminaison ici] .each do | bloc paramètres liste | bloc-corps end , où la valeur de la première expression est O
, le bloc paramètre liste est le lucratif variable , le bloc-corps est l' instruction composée de la clause do .
Évaluer E
; cependant, si un bloc dont le corps est block- statement de la clause do de l' expression for est appelé pendant cette évaluation, les étapes décrites au § 11.3.3, à l'exception de l'étape c) et de l'étape e) 4), doivent être pris pour l'évaluation de cet appel.
La valeur de l' expression for est la valeur résultante de l'invocation.
Voici un exemple différent des règles de conformité de type de Scala:
Le type polymorphe [a 1 >: L 1 <: U 1 ,…, a n >: L n <: U n ] T est conforme au type polymorphe [a1>: L ' 1 <: U' 1 ,…, a n >: L ' n <: U' n ] T ' si, en supposant que L' 1 <: a 1 <: U ' 1 ,…, L' n <: a n <: U′n a T <: T ′ Et L i <: L ′ i et U ′ i<: U i pour i ∈ {1,…, n} .
La langue C est-elle mère / père de toutes les langues?
Non ce n'est pas. C est assez jeune. Il y a beaucoup de vieilles langues. Comme le voyage dans le temps est physiquement impossible, il est tout simplement impossible que C ait eu une quelconque influence sur ces anciennes langues.
- Plankalkül (1943)
- Code de vitesse (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)
Tous ceux qui existaient avant même que C n'ait été inventé. Et beaucoup d'autres n'ont aucune influence de C en eux, même après son existence. La famille de langues PASCAL (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Oberon actif, Component Pascal) est une lignée complètement séparée. Toute la famille Lisp (LISP, Franz Lisp, InterLisp, MacLisp, Scheme, Flavors, LOOPS, CommonLoops, Dylan, CommonLisp, Arc, Clojure, Racket, etc.) n’a pas non plus de relation. Les langages fonctionnels (ISWIM, KRL, Miranda, ML, SML, CAML, OCaml, Fa #, Haskell, Gofer, Clean) et toute la famille dépendante (Agda, Coq, GURU, Idris) sont aussi éloignés que possible de C. Il en va de même pour la famille Smalltalk (Smalltalk, Self, Newspeak, Us, Korz), la famille de programmation logique (PLANNER, Prolog, Mercury), SQL et bien d’autres.
Chaque concept (OOP, etc.) est-il entièrement implémenté en langage C?
Simula (1960) et Smalltalk (1972) ont été les premières langues à utiliser des concepts orientés objet, mais des systèmes orientés objet avaient été construits dès 1953 (sans les appeler ainsi). Encore une fois, c’est bien avant que C n’existe, donc OO ne peut avoir aucune relation avec C.