Ogni lingua è scritta in linguaggio C?
Una lingua è un insieme di regole matematiche astratte e restrizioni ( "se scrivo questo , che succede"). Non è scritto in niente, davvero.
È specificato, di solito in una miscela di un sottoinsieme formalizzato di inglese, notazione matematica e forse un linguaggio di specifica specializzato. La sintassi è spesso specificata in una variante di EBNF o ABNF .
Ad esempio, ecco la specifica for
dell'espressione dalla specifica ISO Ruby Language:
§11.5.2.3.4 L' for
espressione
Sintassi
- for-expression → for for-variabile [nessuna terminazione di riga qui] in espressione do-clausola end
- per variabile → lato sinistro
|
multiplo lato sinistro
Semantica
Una di espressione è valutata come segue:
- Valuta l' espressione . Se la valutazione dell'espressione viene terminato da una pausa-espressione , di nuova espressione , o rifare-espressione , il comportamento è specificato. Altrimenti, lascia che
O
sia il valore risultante.
Sia E
l' invocazione del metodo primario del form espressione-primaria [qui non c'è un terminatore di riga] .each do | blocco-elenco-parametri- | blocco-corpo end , dove il valore dell'espressione primaria è O
, l' elenco di parametri-blocco è il for- variabile , il blocco-corpo è l' istruzione composta della clausola do .
Valutare E
; tuttavia, se durante questa valutazione viene chiamato un blocco il cui corpo del blocco è l' istruzione composta della clausola do dell'espressione for , le fasi in §11.3.3 eccetto la Fase c) e la Fase e) 4) devono essere preso per la valutazione di questo invito.
Il valore dell'espressione for è il valore risultante dell'invocazione.
Ecco un esempio diverso dalle regole di conformità del tipo di Scala:
Il tipo polimorfico [a 1 >: L 1 <: U 1 ,…, a n >: L n <: U n ] T è conforme al tipo polimorfico [a1>: L ′ 1 <: U ′ 1 ,…, a n >: L ′ n <: U ′ n ] T ′ se, assumendo L ′ 1 <: a 1 <: U ′ 1 ,…, L ′ n <: a n <: U'n uno ha T <: T ′ E L i <: L ′ i e U ′ i<: U i for i ∈ {1, ..., n} .
La lingua C è madre / padre di tutte le lingue?
No non lo è. C è piuttosto giovane. Ci sono molte vecchie lingue. Poiché il viaggio nel tempo è fisicamente impossibile, è semplicemente impossibile che C abbia avuto alcuna influenza su quelle vecchie lingue.
- 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)
- GDR (1964)
- BCPL (1966)
- ISWIM (1966)
- MUMPS (1967)
- Forth (1968)
- LOGO (1968)
- REFAL (1968)
- B (1969)
- BLISS (1970)
- Pascal (1971)
- KRL (1971)
- Smalltalk (1972)
Tutti quelli esistevano prima ancora che C fosse inventata. E molti altri non hanno influenza di C in essi, anche dopo che esisteva. La famiglia di lingue PASCAL (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Active Oberon, Component Pascal) è una discendenza completamente separata. Tutta la famiglia Lisp (LISP, Franz Lisp, InterLisp, MacLisp, Scheme, Flavors, LOOPS, CommonLoops, Dylan, CommonLisp, Arc, Clojure, Racket, ecc.) Non ha alcuna relazione. I linguaggi funzionali (ISWIM, KRL, Miranda, ML, SML, CAML, OCaml, F #, Haskell, Gofer, Clean) e l'intera famiglia tipicamente dipendente (Agda, Coq, GURU, Idris) sono il più lontano possibile da C. Lo stesso vale per la famiglia Smalltalk (Smalltalk, Self, Newspeak, Us, Korz), la famiglia di programmatori logici (PLANNER, Prolog, Mercury), SQL e molti altri.
Ogni concetto (OOP ecc.) È tutto implementato in linguaggio C?
Le prime lingue con concetti OO furono Simula (1960) e Smalltalk (1972), ma i sistemi orientati agli oggetti erano stati costruiti già nel 1953 (senza chiamarli così). Ancora una volta, molto prima che esistesse C, quindi OO non può avere alcuna relazione con C.