맨위로가기

GNU 가일

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

GNU 가일(Guile)은 C와 같은 언어보다 적은 코드 줄 수로 개념을 표현할 수 있는 범용 프로그래밍 언어이자 고수준 프로그래밍 언어이다. Emacs Lisp를 대체하거나 보완하기 위한 시도와 함께 Scheme을 포함한 다양한 언어를 지원하며, 언어 중립적인 런타임 환경을 목표로 한다. Guile은 1995년 GNU 프로젝트의 확장 언어로 시작되었으며, Tcl과의 논쟁을 거쳐 개발되었다. Guile 2.0부터 컴파일러 타워 접근 방식을 통해 다른 언어로의 컴파일러 정의를 지원하며, 2.2 및 3.0 버전에서 성능과 기능을 개선했다. Guile은 Scheme 표준을 준수하며, GNU Make, Emacs Lisp 등과의 통합을 지원한다.

더 읽어볼만한 페이지

  • 자유 컴파일러와 인터프리터 - Tcl
    Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다.
  • 자유 컴파일러와 인터프리터 - PHP
    PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
  • 스크립트 언어 - Tcl
    Tcl은 존 오스터하우트가 개발한 명령어 기반의 프로그래밍 언어로, Tk 툴킷과 결합하여 GUI 스크립팅 환경으로 발전했으며, 다양한 운영체제에서 사용 가능하고 C, C++, Java 등 다른 언어와의 인터페이스를 지원한다.
  • 스크립트 언어 - PHP
    PHP는 라스무스 러도프가 개발한 범용 스크립팅 언어로, 웹 개발에 널리 사용되며 LAMP 아키텍처의 핵심 요소이다.
  • GNU 프로젝트 소프트웨어 - GNU 코어 유틸리티
    GNU 코어 유틸리티는 유닉스 계열 운영체제에서 파일, 셸, 텍스트 조작을 위한 기본적인 명령어 모음으로, GNU 파일 유틸리티에서 시작하여 3개의 패키지가 통합되어 발전했으며 셸 스크립트 및 시스템 관리에 필수적인 도구를 제공한다.
  • GNU 프로젝트 소프트웨어 - GNU 허드
    GNU 허드는 유닉스 운영 체제를 대체하는 것을 목표로 개발된 GNU 프로젝트의 커널로, 마이크로커널 기반의 서버-클라이언트 아키텍처를 사용하며, 파일 시스템 기능을 확장하는 트랜슬레이터 개념을 제공한다.
GNU 가일 - [IT 관련 정보]에 관한 문서
기본 정보
이름GNU 가일
원어 이름GNU Guile
로고
종류프로그래밍 언어
개발자자유 소프트웨어 재단
최신 버전3.0.10
최신 릴리스 날짜2024년 6월 24일
운영 체제GNU 프로젝트
리눅스
BSD
윈도우 (MinGW 또는 시그윈을 통해)
라이선스LGPL-3.0-or-later
파일 확장자.scm .go (가일 오브젝트)
웹사이트//gnu.org/software/guile
기술 정보
계열리스프
설계자Aubrey Jaffer, Tom Lord, Miles Bader
플랫폼IA-32
x86-64
AArch64
armel
armhf
mips
mips64el
mipsel
ppc64el
s390x
영향 받은 언어리스프
스킴
SCM
기타
표준R5RS

2. 역사

Emacs가 자유 소프트웨어 커뮤니티에서 Emacs Lisp라는 확장 언어를 통해 성공을 거두자, 자유 소프트웨어 진영에서는 이러한 방식을 GNU 시스템 전반에 적용하려는 움직임이 있었다. 톰 로드(Tom Lord)는 오브리 재퍼(Aubrey Jaffer)의 Scheme 구현인 SCM을 기반으로 GNU 확장 언어(GEL)라는 임베디드 가능한 언어 런타임 작업을 시작했다. SCM은 다시 조지 카레트(George Carrette)의 SIOD를 기반으로 만들어졌다. 로드는 Scheme이 Emacs Lisp보다 더 간결한 Lisp 방언이며, GEL이 Emacs Lisp 또한 구현할 수 있다고 주장하며 리처드 스톨만을 설득하여 GEL을 GNU 프로젝트의 공식 확장 언어로 채택하게 했다.

GEL 개발 중, Tcl이 범용 확장 언어로 인기를 얻자 스톨만은 Tcl의 성능 부족을 비판했고, 이는 "Tcl 전쟁"으로 알려진 논쟁을 일으켰다.[4] Guile 프로젝트 발표는 Tcl 논쟁과 시기적으로 겹쳐 Guile이 Tcl에 대한 반작용으로 시작되었다는 오해를 낳기도 했다.

로드가 GEL이 다른 프로그래밍 언어와 이름이 충돌한다는 사실을 발견하고 새 이름을 제안받았을 때, 여러 뉴스그룹 기고자들이 참여했고, 결국 리 토머스(Lee Thomas)가 제안한 Guile이 선택되었다.

Guile의 초기 출시 후 개발은 수년간 정체되었으나, 2009-2010년에 주요 개선이 이루어졌다. 2011년, Guile 2.0은 새로운 컴파일러 인프라, 가상 머신 구현, 뵈흠-데머스-바이저 가비지 컬렉터로의 전환, 그리고 Guile Scheme 언어 자체의 개선 등 많은 변화와 함께 출시되었다.

Guile은 Scheme 외 다른 언어도 지원하여 언어 중립적인 런타임 환경을 목표로 했다. 이전 버전에서는 C와 유사한 구문을 가진 Scheme 방언, Emacs Lisp 번역, tkWWW에서 영감을 받은 Tcl 변환기, Logo와 유사한 언어 등이 시도되었다. 2.0 버전에서는 '컴파일러 타워' 접근 방식을 통해 한 언어에서 다른 언어로, 최종적으로는 가상 머신 바이트코드나 네이티브 기계어로 컴파일하는 방식을 채택했다.

2017년 3월 16일, Guile 2.2.0은 새로운 최적화 컴파일러와 고성능 레지스터 가상 머신을 탑재하고 출시되었다. 앤디 윙고(Andy Wingo)에 따르면 실제 프로그램에서 이전 2.0 시리즈보다 30% 이상 속도 향상을 보였다. 또한 메모리 사용량 감소, "eval" 인터프리터 가속화, 멀티 코어 프로그래밍 지원 개선, 재귀 함수 호출 제한 제거 등의 기능이 추가되었다.

2020년 1월 16일, Guile 3.0.0은 즉시(JIT) 네이티브 코드 생성을 통해 더욱 향상된 성능으로 출시되었다. 2.2와 비교했을 때 마이크로 벤치마크 성능은 평균 2배, 최대 32배까지 향상되었다. 렉시컬 컨텍스트에서 정의와 식의 인터리빙, 구조화된 예외 기본 지원, R6RS 및 R7RS Scheme 표준 지원 개선 등도 이루어졌다.

Guile는 SXML, SXPath영어, SXSLT영어를 통해 XML, XPath영어, XSLT를 지원하며, guile-lib영어는 S식 기반 XML 처리를 제공한다. 또한 포터블한 Scheme영어 라이브러리 SLIB를 지원한다.

Lisp 방언의 타임라인은 다음과 같다.

19581960196519701975198019851990199520002005201020152020
LISP 1, 1.5, LISP 2colspan="10" |
colspan="2" |Maclispcolspan="6" |
colspan="3" |Interlispcolspan="5" |
colspan="3" |MDLcolspan="5" |
colspan="4" |Lisp Machine Lispcolspan="4" |
colspan="4" |SchemeR5RSR6RSR7RS small
colspan="4" |NIL
colspan="5" |ZIL
colspan="5" |Franz Lisp
colspan="5" |Common LispANSI 표준
colspan="5" |Le Lisp
colspan="5" |MIT Scheme
colspan="5" |XLISP
colspan="6" |Tcolspan="4" |
colspan="6" |Chez Scheme
colspan="6" |Emacs Lisp
colspan="6" |AutoLISP
colspan="6" |PicoLisp
colspan="6" |Gambit
colspan="7" |EuLisp
colspan="7" |ISLISP
colspan="7" |OpenLisp
colspan="7" |PLT SchemeRacket
colspan="7" |newLISP
colspan="7" |GNU Guile
colspan="9" |Visual LISP
colspan="10" |Clojure
colspan="10" |Arc
colspan="10" |LFE
colspan="11" |Hy


2. 1. Tcl 논쟁과 GNU 확장 언어

Emacs가 자유 소프트웨어 커뮤니티에서 Emacs Lisp를 통해 확장 가능하고 사용자 정의가 가능한 응용 프로그램으로 성공한 후, 실천 공동체는 이러한 설계 전략을 GNU 시스템에 적용하는 방법을 고민하기 시작했다. 톰 로드(Tom Lord)는 SCM을 기반으로 한 GNU 확장 언어(GEL)라는 임베디드 가능한 언어 런타임 작업을 시작했다. 로드는 Scheme이 Emacs Lisp보다 깔끔한 Lisp 방언이며, GEL이 동일 런타임에서 Emacs Lisp를 구현할 수 있다는 주장을 바탕으로 리처드 스톨만에게 GEL을 GNU 프로젝트의 공식 확장 언어로 만들도록 설득했다.

GEL 개발 중, 확장 언어인 Tcl이 인기를 얻으며 범용 확장 언어로 추진되었다. 스톨만은 Tcl이 확장 언어로서 성능이 부족하다고 보고 comp.lang.tcl 뉴스 그룹에 비판을 게시했는데, 이는 "Tcl 전쟁"으로 알려진 flamewar를 시작했다.[4] Guile 프로젝트의 공개 발표가 Tcl 논쟁과 일치했기 때문에 Guile이 이에 대한 반작용으로 시작되었다는 오해가 일반화되었다.

Guile(당시 GEL)는 리처드 스톨만에 의해 시작되었으며, (이후 "Tcl 전쟁"이라고 불리게 된) 격렬한 논쟁에 그 기원을 두고 있다. 스톨만은 Tcl이 애플리케이션을 기술하기에는 역부족이라고 주장하며, GNU 애플리케이션 확장에 적합한 언어로서 Scheme영어을 제창했고, 그 결과 Guile영어 프로젝트가 시작되었다.[17]

2. 2. 초기 개발과 SCM, SIOD

자유 소프트웨어 커뮤니티에서 Emacs가 Emacs Lisp를 통해 확장 가능하고 사용자 정의가 가능한 응용 프로그램으로 성공한 후, GNU 프로젝트는 이러한 설계 전략을 GNU 시스템에 적용하는 방법을 고려하기 시작했다. 톰 로드(Tom Lord)는 오브리 재퍼(Aubrey Jaffer)의 Scheme 구현인 SCM을 기반으로 하는 임베디드 가능한 언어 런타임인 GNU 확장 언어(GEL) 작업을 시작했으며, SCM은 다시 조지 카레트(George Carrette)의 SIOD를 기반으로 했다. 로드는 Scheme이 Emacs Lisp보다 더 깔끔한 Lisp 방언이며, GEL이 동일한 런타임에서 다른 언어, 즉 Emacs Lisp을 구현하도록 발전할 수 있다는 주장을 바탕으로 리처드 스톨만에게 GEL을 GNU 프로젝트의 공식 확장 언어로 만들도록 설득했다.

2. 3. 명칭 선정

Emacs가 자유 소프트웨어 커뮤니티에서 Emacs Lisp라는 확장 언어를 통해 확장 가능하고 사용자 정의가 가능한 응용 프로그램으로서 성공을 거둔 후, 실천 공동체는 이러한 설계 전략을 나머지 GNU 시스템에 어떻게 적용할 수 있을지 고려하기 시작했다. 톰 로드(Tom Lord)는 처음에 GNU 확장 언어(GEL)라는 임베디드 가능한 언어 런타임에 대한 작업을 시작했는데, 이는 오브리 재퍼(Aubrey Jaffer)의 Scheme 구현인 SCM을 기반으로 했으며, 이는 다시 조지 카레트(George Carrette)의 SIOD를 기반으로 했다. 로드는 Scheme이 Emacs Lisp보다 더 깔끔한 Lisp 방언이며, GEL이 동일한 런타임에서 다른 언어, 즉 Emacs Lisp을 구현하도록 발전할 수 있다는 주장을 바탕으로 리처드 스톨만에게 GEL을 GNU 프로젝트의 공식 확장 언어로 만들도록 설득했다. 로드는 GEL이 다른 프로그래밍 언어와 이름이 충돌한다는 것을 발견한 후 새로운 이름에 대한 제안을 요청했다. 여러 Usenet newsgroup의 여러 기고에서 로드는 리 토머스(Lee Thomas)의 제안에서 논란의 여지가 있는 Guile을 선택했다.

2. 4. 개발 정체와 Guile 2.0

Guile의 초기 출시 이후 개발은 수년간 정체되었지만, 2009–2010년에 주요 개선이 있었다. 2011년에는 새로운 컴파일러 인프라, 가상 머신 구현, 뵈흠-데머스-바이저 가비지 컬렉터로의 전환, Guile Scheme 언어에 대한 많은 개선 사항 및 기타 주요 변경 사항과 함께 Guile 2.0이 출시되었다.

Guile의 목표 중 하나는 Scheme과 함께 다른 언어를 사용할 수 있도록 하여 Guile이 효과적으로 언어 중립적인 런타임 환경이 되도록 하는 것이었다. 과거 버전에서 이에 대한 다양한 시도가 이루어졌는데, Scheme의 방언은 본질적으로 C와 유사한 구문만 달랐으며, Emacs Lisp의 번역, tkWWW에서 동기를 부여받은 Tcl 변환기, 그리고 Logo 언어와 대략적으로 유사한 것 등이 있었다. 버전 2.0에서는 프로젝트가 성공적으로 ''컴파일러 타워'' 접근 방식으로 전환하여, 한 언어에서 다른 언어로의 컴파일러 정의, 일반적으로 더 높은 수준의 언어에서 더 낮은 수준의 중간 표현으로, 그리고 결국 가상 머신 바이트코드 또는 네이티브 기계어로의 컴파일러 정의를 허용했다.

2. 5. Guile 2.2, 3.0의 발전

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

2020년 1월 16일, Guile 3.0.0이 훨씬 더 나은 성능을 위해 즉시(JIT) 네이티브 코드 생성을 통해 출시되었다. 2.2와 비교하여 마이크로 벤치마크 성능은 전체적으로 약 2배 향상되었으며, 일부 개별 벤치마크는 최대 32배까지 빨라졌다. 또한 렉시컬 컨텍스트에서 정의와 식의 인터리빙을 지원하고, 구조화된 예외에 대한 기본 지원, R6RS 및 R7RS Scheme 표준에 대한 더 나은 지원 및 많은 최적화를 제공했다.

3. 특징

Guile Scheme은 C와 같은 언어보다 더 적은 코드 줄 수로 개념을 표현할 수 있는 범용 프로그래밍 언어이자 고수준 프로그래밍 언어이다. 위생적 매크로 시스템을 통해 Guile을 수정하지 않고도 특정 도메인 구문 요소를 추가할 수 있다. Guile은 Scheme 표준 R5RS, R6RS 및 R7RS의 대부분, 여러 Scheme 구현 요청 (SRFI), 그리고 자체적으로 많은 확장을 구현한다.

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

표준 배포판은 POSIX 시스템 호출, 스케줄링, 외부 함수 인터페이스, S-표현식 기반 XML 처리 (SXML을 통해), SXPath 및 SXSLT, HTTP 및 기타 월드 와이드 웹 API, 구분된 지속성, 배열 프로그래밍, 그리고 다른 기능을 위한 모듈을 제공한다. Guile 프로그램은 휴대용 Scheme 라이브러리인 SLIB의 기능을 사용할 수 있다.

3. 1. 범용 프로그래밍 언어

Guile Scheme은 C와 같은 언어보다 더 적은 코드 줄 수로 개념을 표현할 수 있는 범용 프로그래밍 언어이자 고수준 프로그래밍 언어이다. 예를 들어, 위생적 매크로 시스템을 통해 Guile을 수정하지 않고도 특정 도메인 구문 요소를 추가할 수 있다. Guile은 Scheme 표준 R5RS, R6RS 및 R7RS의 대부분, 여러 Scheme 구현 요청 (SRFI), 그리고 자체적으로 많은 확장을 구현한다.

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

표준 배포판은 POSIX 시스템 호출, 스케줄링, 외부 함수 인터페이스, S-표현식 기반 XML 처리 (SXML을 통해), SXPath 및 SXSLT, HTTP 및 기타 월드 와이드 웹 API, 구분된 지속성, 배열 프로그래밍, 그리고 다른 기능을 위한 모듈을 제공한다. Guile 프로그램은 휴대용 Scheme 라이브러리인 SLIB의 기능을 사용할 수 있다.

3. 2. 확장성 및 C API

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

3. 3. 모듈 시스템

표준 배포판은 POSIX 시스템 호출, 스케줄링, 외부 함수 인터페이스, S-표현식 기반 XML 처리 (SXML을 통해), SXPath 및 SXSLT, HTTP 및 기타 월드 와이드 웹 API, 구분된 지속성, 배열 프로그래밍 등을 위한 모듈을 제공한다. Guile 프로그램은 휴대용 Scheme 라이브러리인 SLIB의 기능을 사용할 수 있다.

3. 4. SLIB 지원

Guile 프로그램은 휴대용 Scheme 라이브러리인 SLIB의 기능을 사용할 수 있다.

3. 5. 구현 세부 사항

call/cc를 사용하여 연속체를 구현할 때, GNU 가일은 실행 콜 스택을 힙 메모리 할당에 복사했다가 다시 복사한다. Guile 매뉴얼에서는 더 효율적인 구현을 위해 제한된 연속체를 대신 사용할 것을 제안한다.

외부 코드가 Scheme 객체에 대한 포인터를 가질 수 있기 때문에 Guile은 보수적인 Boehm–Demers–Weiser (BDW) 가비지 수집을 사용한다.

4. Scheme 표준 준수

Guile Scheme은 Scheme 표준 R5RS, R6RS 및 R7RS의 대부분, 여러 Scheme 구현 요청 (SRFI), 그리고 자체적으로 많은 확장을 구현한다.

GNU 가일은 역사적인 부분에서 Scheme 표준을 엄격하게 따르지 않았다. 현재의 가일에서는 빈 리스트와 불리언 `#f`는 구분된다. 심볼의 대소문자는 구분되지만, 가일의 렉시컬 스캐너 겸 파서인 reader procedure영어에서의 분기에 의해, 가일은 심볼에서의 대소문자 구분을 없앨 수 있다. 최근 채택된 Scheme 표준 R6RS는 R5RS 이전 표준에서 벗어나 대소문자 구분을 기본값으로 채택했다.

Scheme은 재귀를 빈번하게 사용하므로, 꼬리 재귀 최적화 구현이 필요하다. 하지만, 대부분의 기법은 상호 운용성을 손상시킨다. Guile은 순수 Scheme 함수나 프로그램 내에서만 꼬리 재귀를 최적화하고, C 언어 함수가 관여될 때는 꼬리 재귀 최적화를 포기한다.[14]

call/cc영어 (call-with-current-continuation)의 구현도 만족스럽지 못하다. C 언어로 계속을 다루려면, C 언어의 스택 전체를 에 복사해야 한다.[15] 가비지 컬렉션 또한 효율적이지 못하다. C 언어 코드는 Scheme 코드에 대한 포인터를 가질 수 있어야 하기 때문이다. 필요한 cons영어 셀의 소실을 피하기 위해 가일의 가비지 컬렉터는 보수적이 될 수 밖에 없으며, 재사용될 가능성이 있는 셀을 잃을 수 있다.[16]

4. 1. 대소문자 구분 및 불리언 자료형

초기 Guile 버전에서는 심볼(Symbol)의 대소문자를 구분하지 않았고, 빈 리스트(`'()`)와 불리언(Boolean) 값 `false`(`#f`)를 동일하게 취급했다.[13]

하지만 현재 버전의 Guile에서는 빈 리스트와 불리언 `#f`는 서로 다르게 구분된다. 심볼의 대소문자는 기본적으로 구분되지만, Guile의 reader procedure 설정을 통해 대소문자 구분을 해제할 수도 있다. 최근 채택된 Scheme 표준인 R6RS는 이전 표준(R5RS)과 달리 대소문자 구분을 기본값으로 설정하였다.

4. 2. 꼬리 재귀 최적화

Scheme은 재귀를 빈번하게 사용하므로, 꼬리 재귀를 최적화한 구현을 요구하지만, 대부분의 기법은 상호 운용성을 손상시킨다. 가일은 순수하게 Scheme 함수나 프로그램 안에서 꼬리 재귀를 최적화하도록 타협하고, C 언어의 함수가 시야에 들어올 때는 꼬리 재귀를 포기하는 것을 강요받는다.[14]

5. 다른 언어와의 통합

Guile은 다른 프로그래밍 언어를 지원하고, 언어 중립적인 런타임 환경을 목표로 하는 프로젝트이다. Guile의 목표 중 하나는 다른 언어에서 Scheme, 더 나아가 포터블한 바이트코드로의 변환을 가능하게 하는 것이다.

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

표준 배포판은 POSIX 시스템 호출, 스케줄링, 외부 함수 인터페이스, S-표현식 기반 XML 처리 (SXML을 통해), SXPath 및 SXSLT, HTTP 및 기타 월드 와이드 웹 API, 구분된 지속성, 배열 프로그래밍 등 다양한 기능을 위한 모듈을 제공한다. Guile 프로그램은 휴대용 Scheme 라이브러리인 SLIB의 기능을 사용할 수 있다.

Guile는 S식에 기반한 XML 처리를 지원하며, 이는 guile-lib영어에 의해 제공된다. 또한, XML, XPath영어, XSLT를 (각각 SXML, SXPath영어, SXSLT에서) 지원한다.

5. 1. 컴파일러 타워

Guile 2.0부터는 "컴파일러 타워" 접근 방식을 도입하여, 다양한 프로그래밍 언어를 Guile에서 사용할 수 있도록 지원한다. 이 방식을 통해 Guile는 효과적인 언어 중립적인 런타임 환경이 될 수 있다. C 언어와 유사한 구문을 갖지 않는 다른 Scheme 방언, Emacs Lisp, TkWWW 관계에서 구현된 Tcl, LOGO 유사 언어로부터의 변환이 보고되었다.

5. 2. Emacs Lisp 통합

Guile 2.0 버전부터, Guile 컴파일러를 이용하여 Elisp를 구현하고 Emacs의 Elisp 구현을 libguile로 대체하려는 새로운 시도가 시작되었다. 구글 썸머 오브 코드 프로젝트를 통해 상당한 진전을 이루었다. Guile 기반 Emacs는 Emacs Lisp의 실행 성능을 개선하고, 새로운 Emacs Lisp 언어 기능을 쉽게 지원할 수 있게 한다. 또한, 다른 프로그래밍 언어로 작성된 Guile 라이브러리를 Emacs Lisp 코드에서 사용할 수 있으며, 기존 Emacs Lisp 코드와 완벽한 역호환성을 유지하면서 Guile에서 지원하는 다른 프로그래밍 언어로 Emacs 확장을 작성할 수 있다.

2014년 10월 기준으로, 이 구현은 Guile Emacs가 대부분의 Emacs Lisp 코드를 안정적으로 실행할 수 있는 단계에 도달했다. 남아있는 문제로는 Emacs Lisp 문자열과 Scheme 문자열의 서로 다른 내부 표현, Emacs Lisp와 Scheme이 부울 false와 빈 리스트 객체를 처리하는 방식의 차이, Emacs Lisp 매크로가 Scheme과 통합되지 않는 점, Emacs Lisp가 동시성을 위해 설계되지 않았다는 점, Guile의 Emacs에서 지원하는 플랫폼으로의 이식성 등이 있다. Emacs 커뮤니티에서 제기된 다른 우려 사항으로는 Emacs 및 Guile 커뮤니티의 상대적인 규모와 Emacs Lisp 이외의 프로그래밍 언어로 Emacs를 확장할 경우 커뮤니티가 분열될 수 있는지 여부 등이 있다.[5]

5. 3. GNU Make 통합

GNU Make는 임베디드 확장 언어인 GNU 가일 지원을 통해 빌드될 수 있다.[6]

6. Guile을 사용하는 프로그램


  • GNOME 게임 패키지의 일부인 AisleRiot[23]
  • gEDA
  • GNU Anubis
  • GnuCash
  • Denemo
  • GNU LilyPond
  • GNU MDK
  • GNU Robots
  • GNU Serveez
  • GNU TeXmacs
  • GnoTime[24]
  • Liquid War 6
  • mcron — Vixie cron의 대체품이며 상위 호환[25]
  • OpenCog[26]
  • Scwm
  • Skribilo
  • TkWWW — GNU가 제작한 무료 웹 브라우저. Tk를 사용하여 제작되었으며, 확장 가능.
  • GNU make
  • GNU GUIX
  • GNU DMD
  • GNU Artanis

참조

[1] 서적 Blandy 1997, p. 102
[2] 웹사이트 GNU Guile 3.0.10 released https://www.gnu.org/[...] gnu.org
[3] 서적 Blandy 1997, p. 87
[4] 웹사이트 Archives of the Tcl War http://www.vanderbur[...]
[5] 웹사이트 The future of Emacs, Guile, and Emacs Lisp https://lwn.net/Arti[...]
[6] 웹사이트 12.1 GNU Guile Integration https://www.gnu.org/[...] 2020-03-16
[7] 서적 Blandy 1997, p. 102
[8] 서적 "「Strictly speaking, Guile is an object library, not an executable.」 、Blandy、1997年, p.89."
[9] 서적 "「To encourage customization, Guile provides extensive interfaces, allowing C code to interact with the Scheme world. C code can freely create, access, and mutate Scheme objects; C functions may call Scheme functions and vice versa; C code may add new types to the Scheme world and take advantage of Guile's garbage collection… Most of the standard Scheme procedures are implemented by C functions, visible to Guile clients; for example, applications can call the C function scm_cons, which is the underlying implementation of the Scheme procedures cons.」Blandy、1997年, pp. 94, 96."
[10] 기타 Internet Archive Weyback Machine で確認。2011年1月1日のスナップショットには無いが、同年5月14日のアーカイブにはある。1997年7月のGNU's Bulletin, vol. 1 no. 23 で確認できるので、後付けではない。
[11] 기타 "「The name Guile was first suggested in a Usenet discussion by Lee Thomas.」、Guile Scheme 1995年"
[12] 기타 "Blandy 1997年、pp 87."
[13] 기타 "「An Anatomy of Guile, The Interface to Tcl/Tk」、1995年"
[14] 서적 Blandy 1997, p. 99
[15] 서적 "「Because Guile allows C functions and Scheme functions to call each other freely, a Guile continuation may include both C and Scheme stack frames. For simplicity, Guile's implementation of call/cc copies the entire C stack into the heap; invoking a continuation copies the stack back from the heap and uses the longjmp function to reactivate it. This implementation has a number of drawbacks…」Blandy、1997年、p. 99."
[16] 서적 "Blandy、1997年、pp. 99–100."
[17] 웹사이트 Tcl war http://www.vanderbur[...]
[18] 기타 Tom Lord
[19] 기타 Cygnus Solutions。後にレッドハットによって買収された。
[20] 웹사이트 SIOD http://www.cs.indian[...]
[21] 기타 "「It's hard to determine just who designed Guile. A large share of the credit surely belongs to Aubrey Jaffer whose excellent Scheme interpreter, SCM, forms the core of the implementation. The module system was designed and built by Miles Bader…」、 An Anatomy of Guile, The Interface to Tcl/Tk、1995年"
[22] 기타 "「Here is a very, very brief history of this interpreter. I hope that people involved in its past will contribute more to this document. SIOD: George Carrette wrote SIOD, the earliest version. Although most of this code as been rewritten or replaced over time, the garbage collector from SIOD is still an important part of Guile. SIOD is still actively developed and freely available (search for 'siod'). It has a very small footprint.」Guile Scheme、1995年"
[23] 기타 "「The rules for the games have been coded for your pleasure in the GNOME scripting language (Scheme).」"
[24] 웹사이트 GnoTime http://gttr.sourcefo[...]
[25] 기타 "「It is written in pure Guile, and allows configuration files to be written in scheme (as well as Vixie's original format) for infinite flexibility in specifying when jobs should be run.」GNUプロジェクト mcron"
[26] 웹사이트 OpencCog http://opencog.org
[27] 서적 Blandy 1997, p. 102
[28] 웹인용 GNU Guile 3.0.9 released https://www.gnu.org/[...] gnu.org
[29] 웹인용 GNU Guile (About Guile) https://www.gnu.org/[...] GNU Project
[30] 웹인용 GNU coding standards, Which Languages to Use https://www.gnu.org/[...] GNU Project
[31] 웹인용 Guile Manual, API Reference https://www.gnu.org/[...] GNU Project
[32] 웹인용 Guile Manual, Guile Modules https://www.gnu.org/[...] GNU Project
[33] 기타 "To encourage customization, Guile provides extensive interfaces, allowing C code to interact with the Scheme world. C code can freely create, access, and mutate Scheme objects; C functions may call Scheme functions and vice versa; C code may add new types to the Scheme world and take advantage of Guile's garbage collection… Most of the standard Scheme procedures are implemented by C functions, visible to Guile clients; for example, applications can call the C function scm_cons, which is the underlying implementation of the Scheme procedures [[cons]]."
[34] 웹인용 Applications using Guile https://www.gnu.org/[...] GNU Project



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com