모든 언어가 C로 작성 되었습니까?


180

때로는 다른 언어 (C / C ++, C #)로 프로그래밍하는 동안이 생각이 떠 오릅니다.

  • 각 언어는 모두 C 프로그래밍 언어로 작성 되었습니까?
  • C 언어는 모든 언어의 어머니 / 아버지입니까?
  • 각 개념 ( OOP 등)이 모두 C로 구현 되었습니까?

내가 올바른 방향으로 가고 있습니까?


58
@XLAnt : 많은 (아마도) C 컴파일러가 C로 작성되었습니다.
Jörg W Mittag

32
@ Neil : C ++은 아무것도 컴파일하지 않습니다. C ++는 언어입니다. 언어는 컴파일되지 않으며 컴파일러도 컴파일됩니다.
Jörg W Mittag

12
@ XLAnt : 그렇게 생각하지 않습니다. 그러나 첫 번째 Oberon 컴파일러는 예를 들어 Oberon으로 작성된 다음 Fortran으로 직접 번역되었습니다 (컴파일 형식입니다). 이 컴파일러는 Fortran 컴파일러로 컴파일되었으며 결과 Oberon 컴파일러는 Oberon 컴파일러를 컴파일하는 데 사용되었으며 그 시점부터 이전 버전의 컴파일러가 다음 컴파일러를 컴파일하는 데 사용되었습니다.
Jörg W Mittag

18
@ Neil 정말 그렇게 pedantic되지 않습니다. 정확합니다 : 언어는 사양입니다. 컴파일러, 인터프리터, 하이브리드 등으로 구현 될 수 있습니다 . 언어에 대한 컴파일러 작성할 수 있지만 컴파일러는 언어가 아닙니다. 참조 구현을 제외하고 는 어느 곳에서도 작성된 사양이없는 언어가 있기 때문에 문제가 혼란스러워집니다 . 그러나 그러한 경우에도 언어 (즉, 저자가 생각한 이상)가 구현 / 컴파일러 / 인터프리터 등과 다르다고 주장합니다.
Andres F.

21
Downvoters : 이것은 분명한 대답이있는 상당히 합리적인 질문입니다. 답이 "아니오"라는 말은 공감할 이유가 없습니다. 대신 대답하고 설명해보십시오.
Andres F.

답변:


207

아니.

Scheme과 같은 OCaml, Haskell, Lisp 방언 및 기타 여러 언어가 종종 취미 언어 개발에 사용됩니다.

유비쿼터스 언어이기 때문에 많은 언어가 C로 구현되며, 렉서 파서 생성기 (예 : yacc 및 bison)와 같은 컴파일러 작성 도구는 잘 이해되고 거의 유비쿼터스입니다.

그러나 C 자체는 처음에 C로 개발 될 수 없었습니다. 실제로는 원래 B 언어를 사용하여 개발되었습니다 . Fortran과 같은 이전 언어는 일반적으로 C가 존재하기 훨씬 전에 네이티브 어셈블리 언어 또는 심지어 기계 코드를 사용하여 부트 스트랩 되었습니다.

관련이없는 OOP와 같은 언어 패러다임은 일반적으로 언어에 구애받지 않습니다. 예를 들어, 기능 패러다임은 프로그래밍 언어가 존재하기 오래 전에 수학의 기초로 (Alonzo Church에 의해) 개발되었습니다. 절차적이고 구조화 된 프로그래밍 패러다임은 John von Neumann과 같은 이론가들의 수학적 연구에서 나왔습니다. 객체 지향은 람다 미적분학 (기능적 패러다임) 중 일부와 Alan Kay의 Xerox PARC의 SmallTalk와 같은 동적 프로그래밍 시스템 중 일부에서 서로 다른 여러 관련 노력에 의해 개발되었습니다 .

C는 이러한 아이디어가 등장한 지 수십 년지난 지금 이야기의 일부일뿐입니다 .


40
최초의 C 컴파일러가 분명히 C로 작성 될 수는 없었지만 지금은 가능합니다.
reirab

17
@reirab 추적 할 수없는 가망 사실. GCC는 C로 작성되고 GCC를 사용하여 정식으로 컴파일 됩니다 .
Darkhogg

9
물론, GCC는 현재 C ++로 다시 작성되고 있지만, 첫 번째 C 컴파일러를 C로 작성할 수 없다는 사실만큼 중요하지는 않습니다.
greyfade

10
@greyfade gcc 는 오랫동안 C가 아니 었습니다. "지금 재 작성되지는 않습니다"는 "2 년 이상 C ++로 작성되었습니다"(하지만 그보다 더 오래된 것은 병합이 발생했을 때 C ++로 옮겼습니다).

13
@greyfade는 "C가 아니라 C ++ 기능을 가진"C ++ 정의의 일종입니까?
KutuluMike

91

모든 언어가 C 언어로 작성 되었습니까?

언어는 추상적 인 수학적 규칙과 제한 ( "내가 작성하는 경우의 집합 , 일이"). 실제로 아무것도 쓰지 않았습니다.

일반적으로 공식화 된 영어 하위 세트, 수학 표기법 및 일부 특수 사양 언어가 혼합되어 지정됩니다. 구문은 종종 EBNF 또는 ABNF 의 변형으로 지정됩니다 .

예를 들어 다음은 forISO Ruby 언어 사양 의 표현식 사양입니다.

§11.5.2.3.4 for표현

통사론

  • for-expression for for-variable [줄 종결 자 없음] in 표현식 do-clause end
  • 변수 용 왼쪽 | 다중 왼쪽

의미론

에 대한 표현은 다음과 같이 평가된다 :

  1. 식을 평가하십시오 . 표현식 평가가 break-expression , next-expression 또는 redo-expression 으로 종료되면 동작이 지정되지 않은 것입니다. 그렇지 않으면 O결과 값이되게하십시오.
  2. 하자 E프라이 메소드 호출 형식의 일차 식 [여기없는 라인 종결] .each do | 블록 파라미터리스트 | 블록 본체 end 의 값 일차 식 이고 O상기 블록 파라미터리스트 는 IS for-은 가변 상기 블록 체 는 IS 화합물 문장DO-절 .

    평가 E; 그 블록 경우, 블록 본체 는 IS 화합물 문장DO 절 중은 피 발현 이 평가 중에 호출되면, 단계 (C)를 제외한 §11.3.3 단계) 상기 단계 e) 4)하여야한다 이 전화의 평가를 위해 사용됩니다.

  3. 의 값 에 대한 표현이 호출의 결과 값이다.

다음은 Scala의 형식 준수 규칙과 다른 예입니다.

다형성 형태 [A (1) > L 1 : <U (1) , ...하는 N > L의 N : <U N ] T는 다형성 형태에 따르는 [A1> L의 ' 1 : <U' 1 , ...하는 N > L ' N : <U' N ] T ' 의 경우를 가정하여 L의' 1 :은 < 1 <: U ' 1 , ..., L' N <하십시오 N : <U'n 하나 갖는 T <: T에게 'L : <L' IU ' I<: U i for i ∈ {1,…, n} .


C 언어는 모든 언어의 어머니입니까?

전혀 그렇지 않다. C는 꽤 어리다. 오래된 언어가 많이 있습니다. 시간 여행은 물리적으로 불가능하기 때문에 C가 구식 언어에 영향을 미치는 것은 불가능합니다.

  • 플랑 칼쿨 (1943)
  • 스피드 코딩 (1953)
  • 포트란 (1954)
  • IPL (1956)
  • 리스프 (1958)
  • 알골 (1958)
  • 코볼 (1959)
  • JOVIAL (1960)
  • APL (1962)
  • 시뮬 라 (1962)
  • 스노볼 (1962)
  • CPL (1963)
  • 베이직 (1964)
  • PL / I (1964)
  • 롤 플레잉 (1964)
  • BCPL (1966)
  • 이심 (1966)
  • 멍청이 (1967)
  • 포스 (1968)
  • 로고 (1968)
  • 리알 (1968)
  • B (1969)
  • 블리스 (1970)
  • 파스칼 (1971)
  • KRL (1971)
  • 스몰 토크 (1972)

C가 발명되기 전에 존재했습니다. 그리고 많은 다른 사람들은 C가 존재하더라도 C에 영향을 미치지 않습니다. 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)는 가능한 한 C에서 멀리 떨어져 있습니다. Smalltalk 제품군 (Smalltalk, Self, Newspeak, Us, Korz), 로직 프로그래밍 제품군 (PLANNER, Prolog, Mercury), SQL 및 기타 여러 제품에 대해서도 마찬가지입니다.

각 개념 (OOP 등)은 모두 C 언어로 구현됩니까?

OO 개념을 가진 최초의 언어는 Simula (1960)와 Smalltalk (1972) 였지만, 객체 지향 시스템은 1953 년까지 (그것을 호출하지 않고) 구축했습니다. 다시 말하지만, C가 존재하기 오래 전부터 OO는 C와 관련이 없을 것입니다



2
@leftaroundabout : 그것은 수년간 제가 가장 좋아하는 블로그 글입니다.
Jörg W Mittag

1
@FrancisDavey : 감사합니다. 메모리에서 목록을 컴파일하기 시작한 후 Wikipedia에서 조회하여 기억하지 못하는 날짜를 추가했습니다. 그 후, Wikipedia에서 언어 타임 라인을 발견하고 거기에서 몇 가지 언어를 더 선택했습니다. BCPL에 관한 기사는 1966 년을 인용했지만 타임 라인은 1967 년을 인용 한 이후로 BCPL을 이미 추가 한 것을 알지 못했습니다. 중복을 제거하겠습니다.
Jörg W Mittag

1
목록에서 "htroF"의 철자가 맞지 않습니까?
chux

2
“시간 여행은 물리적으로 불가능합니다”— 매우 논쟁적인 주장입니다. 물론이 답변의 가치를 떨어 뜨리지 않습니다.
Konrad Rudolph

50

많은 중요한 언어의 핵심은 대부분 C로 작성되었지만 상황이 바뀌고 있습니다.

  • Python의 참조 구현 ( CPython )은 C로 작성되지만 다른 언어로 작성된 다른 구현도 있습니다 (예 : Jython / Java, PyPy / Python, IronPython / C # ...)
  • PHP 젠드 엔진은 C로 작성
  • Sun Microsystems가 개발 한 최초의 Java 컴파일러는 C로 작성되었지만 이제는 클래스 라이브러리는 항상 Java로 작성됩니다 (Java VM 자체를 사용하여 실행되기 때문에). JNI (Java Native Interface)를 사용하는 특정 라이브러리는 JVM 외부에서 사용되기 때문에 다양한 다른 언어로 부분적으로 작성 될 수 있습니다.

    Sun / Oracle VM은 C ++로 작성되었습니다. BEA / Weblogic / Oracle VM은 C로 작성되었지만 Java, Lisp, SmallTalk (IBM)로 작성된 JVM이 있습니다.

  • Perl은 C로 작성된 핵심 인터프리터로 구현 되며 Perl 및 C로 작성된 대규모 모듈 콜렉션과 함께 구현 됩니다 (그러나 Perl 6 프로그래밍 언어의 컴파일러 및 해석기 인 Pugs 는 Haskell로 작성 됨)
  • Matz의 Ruby 인터프리터 또는 MRI라고도하는 공식 Ruby 인터프리터 는 C로 작성되며 자체 Ruby 특정 가상 머신을 사용합니다 (하지만 Java 가상 머신에서 실행되는 Java 구현 인 JRuby는 C ++ Rubinius입니다). 런타임에 머신 코드로 컴파일하기 위해 LLVM을 사용하는 바이트 코드 가상 머신 ...)
  • R의50 %가 C로 작성됩니다
  • 물론 C는 C로 작성되었습니다 ! (그러나 PDP-11을 대상으로 한 첫 번째 C 컴파일러는 B와 어셈블러가 혼합되었습니다).

C를 자주 선택한 이유는 성능, 휴대 성, 경험입니다.

파이썬이 1991 년에 시작되었고 1994/1995 년에 PHP, 1988 년에 Perl, 1995 년에 Ruby가 마지막으로 가장 중요했을 것입니다.


다소 관련 :


5
컴파일러 / 인터프리터 구현의 관점에서 C는 참조 점입니다. 또한, 그것은 이후의 많은 언어들 (적어도 문법적으로)에 직간접 적으로 영향을 미쳤다.
manlio

2
곧 C #이 C #으로 작성되었다고 말할 수 있습니다!
DLeh

1
대부분의 Mono (C # 컴파일러 및 많은 / 대부분의 .NET 기본 클래스 라이브러리 포함)는 C #으로 작성됩니다.
Charlie Kilian

3
질문에 대한 답은 "C는 모든 언어의 어머니 / 아버지입니까?" "아니오"이므로 C로 작성된 많은 예제를 제공하는 것이 도움이되지 않는다고 생각합니다. 카운터 예제는 도움이되지만 선택 사항은 여전히 C의 자손 입니다. 예를 들어 Java, Python 등의 경우에도 마찬가지입니다. 이제는 자체 호스팅이며 C에서 부트 스트랩되었으므로 C의 "손자"와 비슷합니다. LISP, FORTRAN, ML 및 (물론) 기계 코드와 같은 언어는 C가 결코 관여하지 않았기 때문에 실제 반대 예입니다 그들의 창조.
Warbo

2
많은 언어에 대한 열망은 물론 가능한 한 그 자체로 구현되어야합니다. 그러나 대부분의 언어는 C를 호출하여 유용하게 사용할 수 있어야하기 때문에 대부분의 언어는 C에 의존하는 것 같습니다. 최신 운영 체제 API 및 유용한 라이브러리의 대부분은 C 바인딩을 갖는 경향이 있습니다. 또한 "쓰기"의 의미에주의해야합니다. 언어 구현에는 일반적으로 컴파일러와 런타임 시스템 등 여러 부분이 있습니다. 런타임 시스템은 종종 OS와의 인터페이스를 개선하기 위해 C로 작성됩니다.
가명

10

아니요, 일부 언어는 C 이전입니다. 많은 언어는 C와 독립적으로 구현됩니다 (예 : http://en.wikipedia.org/wiki/Lisp_%28programming_language%29 참조) .


2
많은 Java 구현이 있으며 대부분 Java로 작성됩니다. Objective-C의 GNU 구현은 C로 작성되었거나 C ++로 작성되었으며 LLVM 구현은 C ++로 작성되었으며 C #으로 작성된 해석기가 사용되었습니다. 파이썬에는 많은 구현이 있으며, 하나는 RPython으로, 하나는 Java로, 하나는 C #으로, 하나는 C로 작성됩니다. PHP에는 6 가지 주요 구현체가 있습니다. 2 개는 Java, 2 개는 C #, 1 개는 C, 1 개는 C ++입니다.
Jörg W Mittag

1
언어 디자이너는 확실히 다른 언어의 영향을 받지만 원하는 경우 이러한 영향을 무시하도록 선택할 수 있습니다.
Jörg W Mittag

2
@FaizanRabbani 언어는 본질적으로 패러다임, 패턴 및 타협의 개념과 선택입니다. "언어는 다른 언어에서 작성 / 적응"되지만 컴파일러의 구현 언어와는 전혀 관련이 없습니다. 언어 X는 언어 Y에서 파생 될 수 있지만 C 또는 완전히 다른 방식으로 구현 될 수 있습니다. 이 경우 '개념적 조상'이 중요하지만 컴파일러 언어는 시간이 지남에 따라 변경 될 수있는 거의 관련된 기술적 미묘한 차이 일뿐입니다.
Peteris

3
모호한 가치가 있다면 마지막 연결입니다. 실수를 너무 심각하게 받아 들일 수 없습니다.
Unknown Coder

4
@SebastianGodelet : HotSpot은 Java 언어의 구현이 아닙니다. JVM 바이트 코드 언어의 구현입니다. 그것들은 완전히 다른 두 언어입니다. 가장 널리 사용되는 Java 언어 구현은 javacMartin Odersky (Scala Fame)가 100 % Java로 작성한 Oracle JDK / OpenJDK, Eclipse Compiler는 100 % Java (IBM의 Jikes 컴파일러 에서 파생 ), 컴파일러는 IBM의 J9는 Jikes와 100 % Java에서 파생되었습니다. Java로 작성되지 않은 다소 광범위하게 사용되는 유일한 Java 컴파일러 인 AFAIK는 GCJ입니다.
Jörg W Mittag

4

할 수 있다면 이것을 주석으로 만들 겠지만, 그렇게 할 수는 없습니다.

C가 유비쿼터스 인 것처럼 보이는 이유 중 하나는 가장 초기에 개발 된 언어 중 하나이며 많은 현대 언어가 구조 (Java, Go, PHP, Perl 등)를 기반으로하기 때문입니다. 그것보다 더 많은 장소.

잊혀진 또 다른 이유는 1973 년에 Unix가 C로 다시 작성되었고 많은 Unix의 시스템 호출이 C 프로그램 / 함수로 사용 가능하여 두 개가 서로 연결되어 있기 때문입니다. 유닉스는 전체적으로 현대적인 프로그래밍 개발의 강력한 부분 이었기 때문에 C는 그에 맞서게되었다.

모든 것을 말하면, 귀하의 질문에 대한 대답은 "아니오"입니다. C는 ALGOL이라는 언어에 기반을두고 있으며 ALGOL (FORTRAN, Lisp, COBOL) 및 C (아무 생각도하지 않음)와 많은 경쟁자가있었습니다. 프로그래밍 디자인에서 가장 큰 패러다임 전환이었던 객체 지향 프로그래밍은 C에서 유래 한 것이 아닙니다. C ++은 매우 인기있는 OOP 언어이지만 (누가 요청했는지에 따라 Lisp 또는 Simula 67에서 처음으로 나타났습니다). OOP가 시작될 무렵 C는 그렇게 인기가 많았던 언어가 아니 었습니다. C ++ "확장"은 말할 것도없이 주요 OOP 언어 중 하나가되었습니다. 강력한 메모리 제어 기능 (구조가 생성하는 메모리를 직접 할당하고 할당 해제 할 수 있음) 때문에 주로 현대적으로 사용됩니다. 좁은 메모리 예산 (비디오 게임을 생각하십시오)과 고도로 최적화 된 컴파일러 (분명히 컴파일러에 따라 다름)에서 프로그램을 만들 수 있습니다. 분명히 Java JIT 컴파일 및 언어 내 메모리 관리자가 발전함에 따라 이러한 기능조차도 사라지고 있습니다.


1
이것은 "C가 ALGOL이라는 언어에 기반을두고있다"라는 의심스러운 진술을 제외하고 , 이전 답변, 특히 상위 답변에서 제시되고 설명 된 점에 비해 실질적인 점을 제공하지 않는 것 같습니다
gnat

4
ALGOL의 C의 근거는 의문의 여지가 없습니다 ... cm.bell-labs.com/who/dmr/chist.html 참조 , en.wikipedia.org/wiki/C_%28programming_language%29 )
WannabeCoder

실제 이야기는 훨씬 더 복잡하고 흥미로운 그보다; 여기에 배치 된 방식이 독자에게는 도움이되지 않는다고 말하고 싶습니다
gnat

3

당연히 아니. C가 존재하지 않았다면 어떻게 C로 첫 번째 C 컴파일러를 작성할 수 있습니까? 이것은 닭고기와 계란 문제가 아닙니다.

부트 스트랩 이라고하는 언어의 첫 번째 컴파일러를 작성하는 방법에는 여러 가지가 있습니다.

또한 대부분의 컴파일러는 자체 호스팅 을 달성 하거나 자체 언어를 컴파일하여 주로 언어와 컴파일러 자체를 홍보하려고합니다.


12
최초의 Oberon 컴파일러 Oberon 으로 작성되었습니다. 교수이고 당신을 위해 컴파일러를 번역 할 많은 학생들이 있다면 완벽하게 괜찮습니다 (Wirth 교수님).
Jörg W Mittag

그가 너무 위에 링크 된 부트 스트랩 문서에서 언급 한 @Jorg이 질문은 C에 대해하고 있기 때문에 어떤 C 컴파일러는 그런 식으로 작성되지 않았 음을 쓰는 귀찮게하지 않습니다
phuclv

14
@ JörgWMittag-최초의 자동 Oberon 컴파일러는 Oberon으로 작성되었습니다. 실제 Oberon 컴파일러는 많은 학생들이었습니다.
nnnnnn

4
@ nnnnnn : 나는이 "학생 무리"를 컴파일러가 아닌 통역사로 생각합니다.
Paŭlo Ebermann

4
@ Paŭlo Ebermann 다른 인간 요소를 추가하려면 : "컴퓨터"는 원래 직책 이었습니다.
chux

2

여기에 그들은 언어와 함께 C로 작성되지 않은 일부 프로그래밍 언어의 목록입니다 되어 구현은 :

  • 하스켈-하스켈
  • 이드리스-하스켈
  • 아드가-하스켈
  • 충돌-하스켈
  • PureScript-하스켈
  • 엘름-하스켈
  • 머큐리-머큐리
  • 녹-녹 (초기 OCaml)
  • 이동-이동
  • 수정-수정
  • 오캄-오캄
  • Frege-Frege + Java
  • Haxe-OCaml + Haxe
  • 스칼라-스칼라
  • Futhark-하스켈
  • ATS-ATS

컴파일러를 구현하는 데 가장 적합한 언어는 아마도 C와는 거리가 멀 것입니다. 함수 언어는 재귀 구성표 및 모나 딕 파서 조합기 (유형 클래스가있는 경우)와 같은 것들을 제공하므로 컴파일러 작업에 특히 적합합니다.

둘째, C가 "모든 프로그래밍 언어의 어머니 / 아버지"인지에 대한 귀하의 질문을 해결하십시오. C는 처음 등장 할 당시 잘 디자인 된 언어였으며, 언어 디자이너들에게 영향을 미쳤으며, 그 이후로 언어 디자이너들은 다른 일을 계속했습니다. 그러나 하루가 끝나면 Haskell은 본질적으로 가능한 모든 방법으로 C에서 출발합니다. C는 45 세이며 그 동안 더 잘하는 법을 배운 것은 놀라운 일이 아닙니다.

마지막으로, 세 번째 질문에 답하기 위해 C가 "모든 개념"을 구현하는 것은 아닙니다. 특히, C에서 기능 프로그래밍 (예 : 변성 또는 신 금지, 동형화)과 같은 고급 개념을 구현하는 것은 엄청나게 어려울 것입니다. 특히 객체 지향 프로그래밍에 익숙하지는 않지만 일부 객체 지향 언어에 합계 유형이 있다는 사실을 알고 있습니다.


C는 "믿을 수 없을만큼 잘 설계된 언어"가 아닙니다. 오늘날 우리가 보는 사마귀는 처음부터 사마귀로 알려져 있습니다. 그러나 개발자에게 친숙한 Unix 운영 체제의 모국어가되기에 충분했으며 Bell Labs가 Unix를 대학으로 옮긴 후 C / Unix는 컴퓨터 전문가 세대에게 가장 좋아하는 언어 / OS가되었습니다.
Solomon Slow

추신 : C에는 독창적 인 아이디어가 많지 않았습니다. 모든 블록 구조적, 절차 적 프로그래밍 언어의 어머니 / 아버지를 찾고 있다면 ALGOL을 살펴보십시오 .
Solomon Slow

Lisp Macro는 C보다 훨씬 뛰어 났으며 ALGOL과 Smalltalk에는 코드를 구성하는 데 도움이되는 블록, 클로저 및 중첩 함수가있었습니다. 실제로 Lisp는 어셈블러의 매크로 프로세서로 사용될 수 있었으며 C 이전에 나온 C. Simula보다 짧고 빠른 (S- 표현식 사용자 정의 처리) 코드를 만들었습니다. Lisp, APL 및 Smalltalk에는 유닉스의 "sh"와 "C"와는 달리 해석되고 컴파일 된 코드를 인터리브 할 수 있도록하는 "쉘 (shell)"이 포함되어 있습니다 (쉘과 프로그램간에 동일한 코드). Lisp (rplaca / rplacd)에서 포인터가 더 쉬웠습니다.
aoeu256

C의 가장 큰 장점은 C에 대한 "컴파일러"를 쉽게 빌드 할 수있어서 바이러스처럼 더 쉽게 퍼질 수 있다는 점입니다. 그리고 C 현대의 프로그래머 덕분에 프로그램을 빌드하는 방법에 대한 실마리가 모듈화되지 않았습니다. (변동성으로 인해 모듈성이 손상됨) 부사 / 콤비 네이터 / 고차 함수에 대한 개념이없고 [매번 루프를 수동으로 작성] CPU는 OS가 C로 작성되므로 "von neumann"병목 현상에 의해 제한됩니다. 이전 버전과의 호환성을 위해 C 코드를 실행하는 CPU
aoeu256

1

프로그래밍 언어는 일반적으로 일부 영어 문서로 작성된 사양 (소프트웨어가 아님)입니다 (예 : 대부분의 구문에 대해 EBNF 와 같은 일부 형식화, 경우에 따라 의미론 도 부분적으로 형식화 됨).

예를 들어 C11은 n1570에 의해 정의됩니다 (읽어야합니다). Scheme의 일부 방언은 R5RS에 의해 정의됩니다 (이 글도 읽어야합니다).

프로그래밍 언어는 일부 소프트웨어 로 구현 될 수 있습니다 . 때때로 해당 소프트웨어는 프로그래밍 언어 자체로 작성된 컴파일러입니다. 부트 스트랩 컴파일러 에 대해 읽어보십시오 .

컴파일 된 프로그래밍 언어 자체에서 컴파일러를 작성할 수 있습니다. 해당 언어 XX가 새 언어 인 경우 다른 구현 언어 (아마도 C)로 해당 언어의 하위 세트에 대한 최소 인터프리터 또는 컴파일러를 작성하는 임시 단계를 거쳐야하며 나중에 임시 컴파일러를 버릴 수 있습니다. 인터프리터 (다른 컴파일러를 컴파일하기에 충분할 정도로 "좋은"것일 필요는 없습니다). XX로 작성된 XX 컴파일러를 컴파일하면 임시 컴파일러를 버릴 수 있습니다.

종종 (항상 그런 것은 아님) 런타임 시스템 은 C (특히 가비지 수집기 ) 로 부분적으로 작성됩니다 .

것을 알 뼈가 완전히 그 자체로 작성된 제도 컴파일러와 런타임을 (그리고 당신은 완전히 부트 스트랩 구현의 다른 많은 예를 찾을 수 있습니다).

BTW 컴파일러대상 언어로 C를 사용하는 것이 편리합니다 .

오늘날 많은 프로그래밍 언어 구현은 무료 소프트웨어 또는 오픈 소스 입니다. 소스 코드를 자유롭게 공부하고 기여하십시오!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.