문제

언어 디자이너가 있거나 단순히 알고 있는 사람이 있다면 해석된 언어에 대한 표준 라이브러리를 만드는 방법론이 궁금합니다.구체적으로 어떤 접근 방식이 가장 좋은 것 같나요?해석된 언어로 표준 함수/메소드를 정의합니까, 아니면 인터프리터가 작성된 컴파일된 언어로 해당 호출 처리를 수행합니까?

내가 이것에 대해 생각하게 된 것은 Python의 스트립슬래시()와 유사한 함수에 대한 SO 질문이었습니다.내 첫 번째 생각은 "직접 정의하고 필요할 때 호출하면 어떨까"였지만 다음과 같은 질문이 제기되었습니다.그러한 함수의 경우 해석된 언어가 해당 오버헤드를 처리하도록 하는 것이 더 바람직합니까, 아니면 확장을 작성하고 인터프리터 뒤에서 컴파일된 언어를 활용하는 것이 더 낫습니까?

도움이 되었습니까?

해결책

요즘에는 "해석된" 언어와 "컴파일된" 언어 사이의 경계가 매우 모호합니다.예를 들어, Python이 소스 코드를 볼 때 가장 먼저 하는 일은 이를 바이트코드 표현으로 컴파일하는 것입니다. 이는 기본적으로 Java가 클래스 파일을 컴파일할 때 하는 것과 동일합니다.이것이 *.pyc 파일에 포함된 내용입니다.그런 다음 Python 런타임은 원본 소스를 참조하지 않고 바이트코드를 실행합니다.전통적으로 순수 해석 언어는 프로그램을 실행할 때 계속해서 소스 코드를 참조합니다.

언어를 구축할 때 더 높은 수준의 기능을 구현할 수 있는 견고한 기반을 구축하는 것은 좋은 접근 방식입니다.견고하고 빠른 문자열 처리 시스템이 있다면 언어 디자이너는 기본 런타임 외부에서 Stripslashes()와 같은 것을 구현할 수 있고 구현해야 합니다.이는 최소한 몇 가지 이유로 수행됩니다.

  • 언어 디자이너는 언어가 그러한 종류의 작업을 처리할 수 있을 만큼 유연하다는 것을 보여줄 수 있습니다.
  • 언어 디자이너는 실제로 언어로 실제 코드를 작성하는데, 이는 테스트를 거쳐 기초가 탄탄하다는 것을 보여줍니다.
  • 다른 사람들은 언어 핵심을 구축하거나 이해하지 않고도 더 쉽게 상위 수준 기능을 읽고, 빌리고, 변경할 수도 있습니다.

Python과 같은 언어가 바이트코드로 컴파일되고 실행된다고 해서 그것이 느리다는 의미는 아닙니다.성능을 더욱 향상시키기 위해 Java 및 .NET이 이미 수행하고 있는 것과 마찬가지로 Python용 JIT(Just-In-Time) 컴파일러를 작성하지 못할 이유가 없습니다.실제로 IronPython은 Python을 .NET 바이트코드로 직접 컴파일한 다음 JIT를 포함한 .NET 시스템을 사용하여 실행합니다.

귀하의 질문에 직접 대답하기 위해, 언어 디자이너가 런타임 뒤의 언어로 함수를 구현하는 유일한 경우입니다(예:Python의 경우 C)는 해당 기능의 성능을 최대화하는 것입니다.이것이 정규식 파서와 같은 모듈이 기본 Python이 아닌 C로 작성된 이유입니다.반면, getopt.py와 같은 모듈은 순수 Python으로 구현됩니다. 왜냐하면 모든 작업이 거기에서 수행될 수 있고 해당 C 라이브러리를 사용해도 이점이 없기 때문입니다.

다른 팁

또한 전통적으로 "해석"된 것으로 간주되는 언어를 JVM 또는 CLR과 같은 플랫폼에 다시 구현한 다음 상호 운용성을 위해 "네이티브" 코드에 쉽게 액세스할 수 있도록 하는 추세가 증가하고 있습니다.따라서 Jython 및 JRuby에서는 Java 코드에 쉽게 액세스할 수 있고 IronPython 및 IronRuby에서는 .NET 코드에 쉽게 액세스할 수 있습니다.

이와 같은 경우에는 "통역사 뒤에서 컴파일된 언어를 활용"하는 능력이 새로운 구현의 주요 동기로 설명될 수 있습니다.

'논문' 섹션을 참조하세요. www.lua.org.

특히 Lua 5.0 구현

Lua는 기본(ANSI C) 코드에서 모든 표준 함수를 정의합니다.나는 이것이 주로 성능상의 이유라고 생각합니다.최근, 즉'string.*' 함수는 순수 Lua에서 대체 구현을 얻었으며 이는 Lua가 .NET 또는 Java 런타임(C 코드를 사용할 수 없는 경우) 위에서 실행되는 하위 프로젝트에 필수적일 수 있습니다.

다음과 같이 컴파일된 코드 기반에 이식 가능한 API를 사용하는 한 ANSI C 표준 라이브러리 또는 STL C++에서는 이러한 기능을 활용하면 수레바퀴를 다시 만들 필요가 없고 더 작고 빠른 인터프리터를 제공할 수 있습니다. 루아 이 접근 방식을 취하면 다른 많은 접근 방식에 비해 확실히 작고 빠릅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top