GNU Guile

GNU Guile
GNU Guile
GNU-Guile-logo.svg
가족리스프
설계자오브리 제퍼, 톰 로드, 마일스 베이더
개발자GNU 프로젝트
처음 등장한1993년; 29년 전(1993년)[1]
안정된 릴리스
3.0.8[2] / 2022년 2월 11일; 5개월 전(2022-02-11)[2]
플랫폼IA-32, x86-64, AArch64, armel, armhf, mips64el, mipsel, ppc64el, s390x
OSLinux, BSD, Windows (MinGW 또는 Cygwin 경유)
면허증.LGPL-3.0 이후
파일 이름 확장자.scm . go (Guile 객체)
웹 사이트gnu.org/software/guile
영향을 받다
리스프, 스킴, SCM

GNU 유비쿼터스 확장용[3] 인텔리전트 언어(GNU Guile)는 GNU[4] 프로젝트에서 선호하는 확장 언어 시스템이며 프로그래밍 언어 스킴의 구현을 특징으로 합니다.첫 버전은 1993년에 [1]출시되었습니다.Guile Scheme는 Scheme 표준의 많은 부분 외에도 많은 다른 프로그래밍 작업을 [5][6]위한 모듈화된 확장을 포함합니다.

확장 프로그램을 위해 Guile은 언어를 다른 프로그램에 포함시키고 C 언어 애플리케이션 프로그래밍 인터페이스(API)를 통해 긴밀하게 통합할 수 있는 libguile을 제공합니다. 마찬가지로, C API를 통해 정의된 새로운 데이터 유형과 서브루틴을 Guile의 [7]확장으로 사용할 수 있습니다.

Guile은 GnuCash, LilyPond, GNU Guix, GNU Debugger, GNU TeXmacsGoogle의 [8]분할과 같은 프로그램에서 사용됩니다.

Guile 계획

Guile Scheme는 C와 같은 언어에서 가능한 것보다 적은 수의 코드로 개념을 표현할 수 있는 유연성을 가진 범용, 고급 프로그래밍 언어입니다.를 들어, 위생적인 매크로 시스템을 통해 Guile을 수정하지 않고도 도메인 고유의 구문 요소를 추가할 수 있습니다.Guile은 스킴 표준 R5RS, 대부분의 R6RS 및 R7RS,[9] 여러 스킴 요구 구현(SRFI) 및 다수의 자체 확장을 구현합니다.

Guile Scheme의 핵심 아이디어는 "개발자는 C 또는 C++에서 중요한 알고리즘과 데이터 구조를 구현하고 해석된 코드에 의해 사용되는 함수와 유형을 내보내는 것이다.애플리케이션은 인터프리터가 조정한 원시 요소의 라이브러리가 되어 컴파일된 코드의 효율성과 [10]해석의 유연성을 결합합니다."따라서 Guile Scheme(및 Guile에 의해 구현된 다른 언어)는 C API를 통해 구현된 새로운 데이터 유형 및 서브루틴으로 확장할 수 있습니다.

표준 디스트리뷰션에서는 Portable Operating System Interface(POSIX) 시스템콜, 스케줄링, 외부 기능 인터페이스, SXML, SXPath SXLT, HTTP기타 월드 와이드 웹 API, 구분된 연속, 어레이 프로그래밍 [11]및 기타 기능을 [5][6]위한 모듈을 제공합니다.Guile 프로그램은 휴대용 Scheme [12]라이브러리인 SLIB의 설비를 사용할 수 있습니다.

구현 상세

Scheme 표준의 요건인 call/cc를 사용하여 계속을 사용하는 경우 Guile은 실행 스택을 힙에 복사하여 [13]되돌립니다.이 매뉴얼에서는 딜리미터로 구분된 연속성을 사용하는 것이 권장되고 있습니다.이는 [14]구현이 보다 효율적이기 때문입니다.

외국 코드에는 Scheme 객체에 대한 포인터가 있을 수 있기 때문에 Guile은 보수적인 Boehm-Demers-를 사용합니다.Weiser(BDW) 가비지 [15]콜렉터.

역사

Guile 매뉴얼은 언어의 [16]시작과 초기 역사에 대한 자세한 내용을 제공합니다.다음은 간단한 요약입니다.

자유 소프트웨어 커뮤니티에서 Emacs가 성공한 후 확장(및 부분적으로 구현) 언어 Emacs Lisp를 통해 확장성과 맞춤성이 뛰어난 애플리케이션으로서 커뮤니티는 이 설계 전략이 GNU 시스템의 나머지 부분에 어떻게 적용될 수 있는지 검토하기 시작했습니다.Tom Lord는 처음에 GNU 확장 언어(GEL)라는 이름의 임베디드 언어 런타임에 대한 작업을 시작했는데, 이것은 Oubrey Jaffer의 Scheme 구현 SCM에 기반을 두고 있었다(이것이 차례로 George Carrette의 [17][18]SIOD에 기반을 두고 있었다).Lord는 Scheme가 Emacs Lisp보다 더 깨끗한 리스프 방언이며, GEL이 같은 런타임에 다른 언어, 즉 Emacs Lisp를 구현하도록 진화할 수 있다는 주장을 바탕으로 GNU 프로젝트의 공식 확장 언어로 만들도록 Richard Stallman을 설득했습니다.Lord는 GEL이 다른 프로그래밍 언어와의 명명 충돌을 발견한 후 새로운 이름을 제안할 것을 요청했습니다.몇몇 유즈넷 뉴스 그룹에서의 여러 기고문에서, 로드는 논쟁적으로 [19][20][21][22]Lee Thomas의 제안에서 Guile을 선택했다.

Guile(당시 GEL)의 개발 기간과 공개 전에 Tcl이라는 확장 언어가 인기를 끌면서 보편적인 확장 언어로 추진되었습니다.스톨먼은 Tcl이 확장 언어로서 힘이 떨어진다고 보고 comp.lang.tcl 뉴스 그룹에 비판을 게시하여 "Tcl 전쟁"[23]으로 알려진 불꽃 전쟁을 일으켰다.Tcl 토론과 맞물려 Guile 프로젝트의 공개 발표 이후 Guile이 이에 대한 반응으로 시작됐다는 것은 일반적인 오해가 되었다.

Guile의 최초 출시 이후 개발은 수년간 지연되었지만, 2009-2010년에는 [24]대폭 개선되었으며, Guile 2.0은 새로운 컴파일러 인프라스트럭처, 가상 머신 구현, Boehm-Demers로의 전환을 통해 2011년에 출시되었습니다.Weiser 쓰레기 수집기, Guile Scheme 언어의 많은 개선 및 기타 주요 [25]변경.

Guile의 목표 중 하나는 Scheme와 함께 다른 언어를 사용할 수 있도록 허용하여 Guile이 효과적으로 언어 중립 런타임 환경이 되도록 하는 것입니다.이전 버전에서는 C와 같은 구문에서만 본질적으로 다른 Scheme의 방언, Emacs Lisp의 번역, tkWWW에 의해 동기부여된 TCL 변환기, 언어 [26]로고와 거의 비슷한 것이 시도되었습니다.버전 2.0에서는 프로젝트가 성공적으로 컴파일러 타워 접근 방식으로 전환되어 컴파일러를 언어 간에(일반적으로 상위 레벨에서 하위 레벨 중간 표현으로), 최종적으로 가상 머신의 바이트 코드 또는 네이티브 머신 [27][28]코드로 정의할 수 있게 되었습니다.

2017년 3월 16일, Guile 2.2.0은 새로운 최적화 컴파일러와 고성능 레지스터 가상 머신과 함께 출시되었습니다.Andy Wingo의 출시 발표에 따르면, 실제 프로그램들은 이전 2.0 시리즈와 비교했을 때 Guile 2.2에서 30% 이상의 속도를 보였다.또한 Guile 2.2.0은 메모리 사용량을 낮추고, "평가" 인터프리터의 속도를 높이고, 멀티코어 프로그래밍을 더 잘 지원하며, 재귀 함수 호출에 대한 고정 제한을 없앴다.또한 수백만 개의 동시 경량 "파이버"를 다중화하는 사용자 공간 동시성 기능의 생성을 지원하며, Emacs [29]호환 Elisp 구현을 제공하여 Elisp의 모든 기능과 기호가 Emacs와 동일한 방식으로 구현됩니다.

2020년 1월 16일, 훨씬 더 뛰어난 성능을 위해 JIT(Just-in-Time) 네이티브 코드 생성과 함께 Guile 3.0.0이 출시되었습니다.2.2에 비해 마이크로벤치마크의 퍼포먼스는 전체적으로 약 2배 우수하며, 일부 벤치마크의 퍼포먼스는 최대 32배 빠릅니다.또한 어휘적 맥락에서의 인터리브 정의 및 표현식 지원, 구조화된 예외에 대한 네이티브 지원, R6RS 및 R7RS 체계 표준 및 많은 [30][31]최적화에 대한 더 나은 지원이 특징이다.

1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 2020
LISP 1, 1.5, LISP 2(abandoned)
마클리스프
인터리스크
MDL
리스프 기계 리스프
스킴 R5RS R6RS R7RS 소형
없음
ZIL(Zork 구현 언어)
프란츠 리스프
일반적인 리스프
르 리스프
MIT 스킴
T
체즈 스킴
Emacs 리스프
자동 LISP
피코리스프
EuLisp
ISLISP
오픈리스프
PLT 방식 라켓
GNU Guile
비주얼 LISP
클로쥬르
LFE
하이

Emacs 통합

Emacs의 Emacs Lisp(Elisp) 확장 언어를 Guile로 대체하거나 보완하려는 미완성 시도는 Guile의 [citation needed]다른 언어 지원 노력과 유사합니다.

Guile 버전 2.0에서는 Elisp를 Guile 컴파일러 타워에 구현하고 Emacs의 Elisp 구현을 libguile로 대체하려는 새로운 시도가 시작되었으며 Google Summer of Code 프로젝트[32]통해 큰 진전을 이루었습니다.Guile 기반의 Emacs는 Emacs Lisp의 실행 성능을 향상시키고 새로운 Emacs Lisp 언어 기능을 보다 쉽게 지원하며, Emacs Lisp 코드에서 다른 프로그래밍 언어로 작성된 Guile 라이브러리를 사용할 수 있도록 하며, Guile이 지원하는 다른 프로그래밍 언어로 Emacs 확장자를 쓸 수 있도록 합니다.기존 Emacs Lisp 코드 베이스로 ble을 실행합니다.

2014년 10월 현재, 구현은 Guile Emacs가 대부분의 Emacs Lisp 코드를 안정적으로 실행할 수 있는 단계에 도달했습니다.기타 문제 또는 생각할 수 있는 문제에는 Scheme 문자열과의 Emacs Lisp 문자열의 내부 표현 차이, Emacs Lisp 및 Scheme가 Boolean false 및 빈 목록오브젝트를 처리하는 방법의 차이, Scheme와 통합되지 않음Emacs Lisp 매크로, 동시성을 위해 설계되지 않음Emacs Lisp가 있습니다.Emacs에서 지원되는 플랫폼으로 이동합니다.Emacs 커뮤니티에 의해 제기된 다른 우려 사항으로는 Emacs 커뮤니티와 Guile 커뮤니티의 상대적 규모, Emacs가 Emacs [33]Lisp 이외의 프로그래밍 언어로 확장 가능한 경우 커뮤니티에서 분열이 발생할 수 있는지 여부 등이 있습니다.

GNU 통합 만들기

GNU make는 임베디드 확장 [34]언어로서 GNU Guile을 지원하여 구축될 수 있습니다.

레퍼런스

  1. ^ a b 블랜디 1997, 페이지 102
  2. ^ a b "GNU Guile 3.0.8 released". gnu.org.
  3. ^ "GNU Guile (About Guile)". GNU Project. Guile is the GNU Ubiquitous Intelligent Language for Extensions, the official extension language for the GNU operating system.
  4. ^ "GNU coding standards, Which Languages to Use". GNU Project.
  5. ^ a b "Guile Manual, API Reference". GNU Project.
  6. ^ a b "Guile Manual, Guile Modules". GNU Project.
  7. ^ "맞춤을 장려하기 위해 Guile은 광범위한 인터페이스를 제공하여 C 코드가 Scheme 세계와 상호 작용할 수 있도록 합니다.C코드는 자유롭게 Scheme 오브젝트를 작성, 액세스 및 변환할 수 있습니다.C 함수는 Scheme 함수를 호출할 수도 있고 반대로 호출할 수도 있습니다.C코드는 Scheme 월드에 새로운 유형을 추가하여 Guile의 가비지 컬렉션을 이용할 수도 있습니다.표준 Scheme 프로시저의 대부분은 Guile 클라이언트에 표시되는 C 함수에 의해 구현됩니다.예를 들어 어플리케이션은 C 함수를 호출할 수 있습니다.scm_cons이것은 스킴 순서의 기본 구현입니다.cons" 블랜디 1997, 페이지 94, 96.
  8. ^ "Applications using Guile". GNU Project. Archived from the original on 2017-11-24.
  9. ^ "R7RS Incompatibilities (Guile Reference Manual)". GNU Project. Retrieved 2020-01-20.
  10. ^ 블랜디 1997, 87페이지
  11. ^ "Guile Manual, Arrays". GNU Project.
  12. ^ "Guile Manual, SLIB". GNU Project. SLIB is not included in the Guile distribution, but can be installed separately.
  13. ^ "Guile은 외부 함수와 Scheme 함수가 서로 자유롭게 호출할 수 있도록 허용하기 때문에 Guile 연속에는 C와 Scheme 스택 프레임이 모두 포함될 수 있습니다.단순화를 위해 Guile의 구현은call/ccC 스택 전체를 힙에 복사합니다.계속을 호출하면 스택이 에서 복사되어 사용됩니다.longjmp기능을 합니다.이 구현에는 여러 가지 단점이 있습니다...," Blandy 1997, 페이지 99.
  14. ^ "Guile Manual, Continuations". GNU Project.
  15. ^ "Guile Manual, Conservative GC". GNU Project.
  16. ^ "Guile Manual, History".
  17. ^ "누가 Guile을 디자인했는지는 알 수 없습니다.이 크레딧의 상당 부분은 확실히 Oubrey Jaffer의 것으로, 뛰어난 스킴 인터프리터(SCM)가 실장의 핵심을 형성하고 있습니다.모듈 시스템은 Miles Bader에 의해 설계 및 구축되었습니다."An Anatomy of Guile, The Interface to Tcl/Tk", 1995
  18. ^ 여기 이 통역사의 아주 간단한 역사가 있습니다.나는 이 문서에 관련된 사람들이 더 많이 기여하기를 바란다.SIOD: George Carrette는 SIOD를 썼는데, 가장 오래된 버전입니다.이 코드의 대부분은 시간이 지남에 따라 다시 작성되거나 대체되었지만 SIOD의 가비지 컬렉터는 여전히 Guile의 중요한 부분입니다.SIOD는 여전히 활발하게 개발되고 있으며 자유롭게 사용할 수 있습니다.설치 공간이 매우 작습니다."1995년 Guile Scheme.
  19. ^ "길레라는 이름은 리 토마스에 의해 유스넷 토론에서 처음 제안되었습니다."1995년 Guile Scheme.
  20. ^ Lee Thomas (1994-11-04). "The Name of the Rose". Newsgroup: gnu.misc.discuss.
  21. ^ "GUILE - two more reasons to prefer it".
  22. ^ "GEL:Important Name Change".
  23. ^ TCL 전쟁 문서
  24. ^ Wingo, Andy. "Older blog entries for wingo (starting at number 328)". Advogato.
  25. ^ "Guile News". GNU Project. Archived from the original on 2014-03-28.
  26. ^ Lord, Thomas (July 1995). "An Anatomy of Guile The Interface to Tcl/Tk" (PostScript). Third Annual Tcl/Tk Workshop. Toronto, Ontario, Canada: Usenix. Retrieved 23 November 2010.
  27. ^ "Guile Manual, Other Languages". GNU Project. Guile is still fundamentally a Scheme, but it tries to support a wide variety of language building-blocks, so that other languages can be implemented on top of Guile.
  28. ^ "Guile Manual, Compiler Tower". GNU Project. Guile defines a tower of languages, starting at Scheme and progressively simplifying down to languages that resemble the VM instruction set.
  29. ^ "GNU Guile 2.2.0 released". 2017-03-16. Retrieved 2020-01-20.
  30. ^ "GNU Guile 3.0.0 released". 2020-01-16. Retrieved 2020-01-20.
  31. ^ "GNU Guile 3.0.0 released". 2020-01-16. Retrieved 2020-01-20.
  32. ^ "Re. Elisp implementation?". BT Templeton.
  33. ^ "The future of Emacs, Guile, and Emacs Lisp".
  34. ^ "12.1 GNU Guile Integration". gnu.org. Retrieved 16 March 2020.

추가 정보

외부 링크