-1

프로그래밍 언어와 스크립트 언어의 차이점을 찾고있었습니다. 난 단지 독일어 (기계 언어)로 작성 명령을 실행할 수있는 CPU입니다다음 비유가 옳은가 또는 뭔가 잘못 이해 한 것입니까?

: 여기

내가 그것을 이해하는 방법을 내 비유입니다.

누군가 이제 영어로 명령을 쓸 수 있습니다.

컴파일러는 전체 코드를 독일어로 번역하므로 하나씩 명령을 실행할 수 있습니다. 이것은 프로그래밍 언어가 작동하는 방식입니다. 프로그래밍 언어로 작성된 코드가 있으며이 코드를 컴퓨터 코드로 변환하는 컴파일러가 필요하므로 컴퓨터에서 이러한 명령을 실행할 수 있습니다. 이 번역은 한 번만 작성되었습니다.

인터프리터는 다른 사람이 명령을 번역하는 제 3 자와 비슷하기 때문에 me (CPU)가 영어 (스크립트 언어)를 이해할 수 있습니다.

필자가 명령을 실행하려면 인터프리터가 필수적이거나 그렇지 않으면 언어 (스크립트 언어)를 이해할 수 없지만 컴파일 된 (번역 된) 명령 텍스트의 경우 텍스트가 있기 때문에 인터프리터가 필요하지 않습니다. 내 언어로.

내가 실수 한 경우 알려 주시기 바랍니다.

+2

x86은 스크립트라고 할 수 있습니다. 이것은 프로세서의 기본 스크립트 일 뿐이지 만 파이썬 스크립트와 달리 사람에게는 읽기 쉽지 않습니다. – sashoalm

+0

http://stackoverflow.com/help/dont-ask 때문에 주제가 벗어난 것보다 동화에 대해 토론하고 싶다면 해결할 실제 문제는 없습니다. "나는 궁금합니다. 다른 사람들이 내가 좋아하는 것처럼 느껴지면 ... "라고 대답하십시오. 그렇지 않으면 해결해야 할 프로그래밍 문제가 무엇인지 더 자세히 설명하십시오. – xmojmr

+0

http://programmers.stackexchange.com/ –

답변

2

오른쪽 유익이기 때문에 입니다 (단, "악한 것은 자세히"입니다). 언어는 종종 영어 문서 (C11에 대한 예를 들어, n1570 또는 ISO/IEC 9899:2011)에서는, 사양입니다

알 수 있습니다. 일부 언어로 된 프로그램을 "실행"하기 위해 컴퓨터가 필요하지 않습니다 (비 윤리적으로 많은 인간 노예를 사용하거나 프로그램을 머리 속에 넣을 수 있습니다). 언어는 여러 가지 구현을 가질 수 있습니다 (일부는 해석기이고 다른 것은 컴파일러입니다). 기계어를 컴퓨터 언어로 쓰는 것으로 생각할 수 있습니다. (실제로는 ENIAC과 같은 첫 번째 컴퓨터의 경우였습니다. 1940 년대에는 기계 언어로 프로그래밍되었지만, 1975 년 십대로 박물관에 프로그래밍되었습니다. IBM1620 기계어).

그러나 사용자 컴퓨터 코드를 번역하려는 경우는 드뭅니다. 일부 비효율적 인 opcode를 사용하는 바이너리 프로그램을 상상해보십시오. 좀 더 적절한 기계 코드로 이들을 번역하는 다른 프로그램을 가질 수 있습니다. compilers

읽기 wikipages, interpreters, machine code, compiler optimization, object code, bytecode, JIT compilation, emulators, microarchitecture, micro-operation, homoiconicity, partial evaluation, eval, closures

많은 컴파일 언어는 일부 C에 printf을 예를 들어 측면 (해석이). 일부 언어 구현은 즉석에서 기계 코드를 생성 할 수 있습니다 (Common Lisp) SBCL. 따라서 인터프리터와 컴파일러의 차이는 모호합니다.

컴파일 된 언어를 사용하는 경우에도 일부 운영 체제에서는 프로그램이 컴파일 한 후 일부 코드 (예 : C 또는 C++)를 컴파일하고 dynamically load을 생성 할 수 있습니다.나는 MELT에서 그런 일을하고있다.

일부 스크립팅 언어는 구현에 따라 바이트 코드 또는 기계 코드로 변환됩니다 (예 : V8 javascript engine). 제 생각에는 turing-completeness이 컴파일되는 것보다 (더 많은 스크립팅 언어와 컴파일 된 언어로 공유되는) 더 중요한 기능입니다.

나는 스크립팅 언어와 컴파일 언어 사이에 명확한 구분이 컴파일러는 또한 통역을 수있는 몇 가지 언어 (그리고 같은 언어의 구현이 특히 때문에,이 있다는 것을 확실하지 않다 : Ocaml가있다 ocaml - 최상위 인터프리터 - ocamlc - 바이트 코드 컴파일러 - 및 ocamlopt - 네이티브 컴파일러 -); 나는 반대로 컴파일 된 해석과 해석 된 구현 사이의 연속체를 보았다.

+0

x86 및 x64도 스크립트가 아닌가요? opcode의 시퀀스는 프로세서가 따르는 스크립트라고 말할 수 있습니다. 허락하신다면, 그들은 인간을 위해 읽을 수 없습니다 ... – sashoalm

+0

예, 당신은 말할 수 있습니다; ENIAC은 기계어로 프로그래밍되었습니다. –

+0

정말 스크립트/스크립트가 아닌 부분이 있습니까? 유일한 부분은 이러한 스크립트 중 하나가 CPU의 원시 스크립트 인 반면 다른 모든 스크립트는 CPU가 따라야한다는 것입니다. – sashoalm

0

요즘 인터프리터와 컴파일러의 구분은 도구가 훨씬 복잡해 지므로 더 이상 명확하지 않습니다. 예. 자바 가상 머신은 읽기 소스 파일을 컴파일하고, 바이트 코드로 컴파일하고, 실행하고, 실행 중일 때 머신 코드로 컴파일하고, 바이트 코드로 다시 디 컴파일하고, 실행하고, 코드를 다시 컴파일합니다. 프로그램을 멈추지 않고 코드를 바꿀 수 있습니다.

관련 문제