Là mỗi và mọi ngôn ngữ được viết bằng ngôn ngữ C?
Một ngôn ngữ là một tập hợp các quy tắc và hạn chế toán học trừu tượng ("nếu tôi viết điều này , điều đó xảy ra"). Nó không được viết trong bất cứ điều gì, thực sự.
Nó được chỉ định, thường là trong một hỗn hợp của một tập hợp con chính thức của tiếng Anh, ký hiệu toán học và có thể một số ngôn ngữ đặc tả chuyên ngành. Cú pháp thường được chỉ định trong một biến thể của EBNF hoặc ABNF .
Ví dụ, đây là thông số kỹ thuật của for
biểu thức từ Đặc tả ngôn ngữ ISO Ruby:
§11.5.2.3.4 for
Biểu thức
Cú pháp
- for-biểu thức → for for-biến [không có dòng kết thúc ở đây] in biểu thức do-mệnh đề end
- cho biến → bên trái
|
nhiều bên trái
Ngữ nghĩa
Một biểu thức for được đánh giá như sau:
- Đánh giá biểu thức . Nếu việc đánh giá các biểu hiện bị chấm dứt bởi một đột phá thể hiện , tiếp theo thể hiện , hoặc thực hiện lại biểu hiện , hành vi này là không xác định. Nếu không, hãy
O
là giá trị kết quả.
Hãy E
là lệnh gọi phương thức chính của biểu thức chính biểu thức [không có đầu cuối dòng ở đây] .each do | khối thân-tham số-danh sách | khối end , trong đó giá trị của biểu thức chính là O
, danh sách tham số khối là for- biến , thân khối là câu lệnh ghép của mệnh đề do .
Đánh giá E
; tuy nhiên, nếu một khối có thân khối là câu lệnh ghép của mệnh đề do của biểu thức for được gọi trong đánh giá này, các bước trong §11.3.3 ngoại trừ Bước c) và Bước e) 4) sẽ được thực hiện để đánh giá cuộc gọi này.
Giá trị của biểu thức for là giá trị kết quả của lệnh gọi.
Đây là một ví dụ khác với quy tắc tuân thủ kiểu của Scala:
Loại đa hình [a 1 >: L 1 <: U 1 , Sọ, a n >: L n <: U n ] T phù hợp với loại đa hình [a1>: L ′ 1 <: U ′ 1 , Lôi, a n >: L n <: U ′ n ] T ′ if, giả sử L ′ 1 <: a 1 <: U ′ 1 , Câu , L ′ n <: a n <: U′n ai có T <: T ' và L i <: L' i và U ' i<: U i cho i ∈ {1, Mạnh, n} .
Là ngôn ngữ C mẹ / cha của tất cả các ngôn ngữ?
Không có nó không phải là. C còn khá trẻ. Có rất nhiều ngôn ngữ cũ. Vì du hành thời gian là không thể, nên C đơn giản là không thể có bất kỳ ảnh hưởng nào đến những ngôn ngữ cũ đó.
- Plankalkül (1943)
- Mã tốc độ (1953)
- Pháo đài (1954)
- IPL (1956)
- Lisp (1958)
- Algol (1958)
- COBOL (1959)
- CÔNG VIỆC (1960)
- APL (1962)
- SIMULA (1962)
- SNOBOL (1962)
- CPL (1963)
- CƠ BẢN (1964)
- PL / I (1964)
- Game nhập vai (1964)
- BCPL (1966)
- ISWIM (1966)
- MUMPS (1967)
- Forth (1968)
- LOGO (1968)
- REFAL (1968)
- B (1969)
- BLISS (1970)
- Pascal (1971)
- KRL (1971)
- Smalltalk (1972)
Tất cả những thứ tồn tại trước khi C thậm chí được phát minh. Và nhiều người khác không có ảnh hưởng của C trong họ, ngay cả sau khi nó tồn tại. Họ ngôn ngữ PASCAL (ALGOL-58, ALGOL-60, ALGOL-X, ALGOL-W, PASCAL, Modula-2, Oberon, Oberon-2, Active Oberon, Hợp phần Pascal) là một dòng hoàn toàn riêng biệt. Cả gia đình Lisp (LISP, Franz Lisp, InterLisp, MacLisp, Scheme, Flavours, LOOPS, CommonLoops, Dylan, CommonLisp, Arc, Clojure, Vợt, v.v.) cũng không liên quan. Các ngôn ngữ chức năng (ISWIM, KRL, Miranda, ML, SML, CAML, OCaml, F #, Haskell, Gofer, Clean) và toàn bộ gia đình được gõ phụ thuộc (Agda, Coq, GURU, Idris) càng xa C càng tốt. Điều tương tự cũng đúng với gia đình Smalltalk (Smalltalk, Self, Drameak, Us, Korz), gia đình lập trình logic (PLANNER, Prolog, Mercury), SQL và nhiều người khác.
Mỗi khái niệm (OOP, v.v.) đều được thực hiện bằng ngôn ngữ C?
Các ngôn ngữ đầu tiên có khái niệm OO là Simula (1960) và Smalltalk (1972), nhưng các hệ thống hướng đối tượng đã được xây dựng từ năm 1953 (không gọi chúng là như vậy). Một lần nữa, đó là rất lâu trước khi C tồn tại, vì vậy OO không thể có bất kỳ mối quan hệ nào với C.