오픈리스프
OpenLisp![]() Emacs 내에서 실행되는 OpenLisp | |
패러다임 | 멀티패러다임: 기능, 절차, 객체 지향, 반사, 메타 |
---|---|
가족 | 리스프 |
설계자 | 크리스티안 줄리앙 |
개발자 | 크리스티안 줄리앙 |
처음 등장한 | 4월, 전( |
안정된 릴리스 | 2022년 5월 전( |
타이핑 분야 | 다이내믹하고 강력함 |
구현 언어 | C, OpenLisp |
플랫폼 | x86, x86-64, IA-64, SPARC, PowerPC, MIPS, Alpha, PA-RISC, ARM, AArch64, RISC-V, Loongson |
OS | Windows, 대부분의 Unix 기반, Linux, macOS, FreeBSD, OpenBSD, NetBSD, Solaris, HP-UX, AIX, QNX, DOS, OS/2, Pocket PC, OpenVMS, z/OS, Cygwin |
면허증. | 독자 사양 |
웹 사이트 | www |
영향을 받다 | |
리스프, ISLISP |
OpenLisp는 리퀴디스의 Christian Jullien이[1] 개발한 리스프족 프로그래밍 언어입니다.ISO[2][3][4]/IEC 13816:2007(E)[5][6][7]로 개정된 국제표준화기구(ISO)와 국제전기표준위원회(IEC)가 공동으로 발표한 ISLISP의 국제표준에 준거하고 있다.
프로그래밍 언어 C와 Lisp로 작성되어 있으며 대부분의 일반적인 운영 체제에서 실행됩니다.OpenLisp는 ISLISP 구현으로 지정되어 있지만 많은 공통 Lisp 호환 확장 기능(해시 테이블, 읽기 테이블, 패키지, 디스트럭처, 시퀀스, 합리적 번호)과 기타 라이브러리(네트워크 소켓, 정규 표현, XML, Portable Operating System Interface(POSIX), SQL, Lightweight Directory Access Protocol(LDAP)[8]도 포함되어 있습니다.
OpenLisp에는 Read-Eval-Print Loop(REPL), Lisp Assembly Program(LAP) 및 C 언어용 백엔드 컴파일러가 포함되어 있습니다.
목표들
이 Lisp 버전의 주요 목표는 완전 준거 ISLISP 시스템을 구현하는 것입니다(이 버전에서는-islisp
ISO/IEC 13816:2007(E) 사양에 따라 엄격하게 제한됩니다.두 번째 목표는 (Java Native Interface(JNI)를 통해) C/C++ 또는 Java에 링크할 수 있는 완전한 임베디드 Lisp 시스템을 제공하는 것입니다.콜백 메커니즘은 외부 프로그램과의 통신에 사용됩니다.다른 목표는 스크립트 언어 또는 접착 언어로 사용할 수 있고 독립 실행형 프로그램 실행 파일을 생성하는 것입니다.
면허증.
이름에도 불구하고 OpenLisp는 독점 소프트웨어입니다.통역사는 비상업적인 용도로 무료로 이용하실 수 있습니다.
사용자 인터페이스
OpenLisp는 주로 콘솔모드로 동작합니다.cmd.exe
Microsoft Windows 및 Unix 기반 시스템의 터미널 에뮬레이터.
;; OpenLisp v11.x.y (빌드: XXX) by C.줄리안 [1월 01일 20xx - 10:49:13] ;;; 저작권 (c) 자격 - 1988-20xx. ;; 'hostname', ASCII 상의 시스템 'sysname'(64비트, 8CPU). 감사합니다.OpenLisp가 다시 돌아왔습니다! ? (파이브 20) ;; 경과시간 = 0.003초, (0 gc). = 6765 ? _
대체 솔루션으로는 Emacs 셋업을 통해 Emacs에서 OpenLisp를 실행하는 방법이 있습니다.inferior-lisp-mode
또는 OpenLisp 구문을 지원하는 Integrated Development Environment(IDE; 통합 개발 환경)를 사용합니다.Daan Systems의 LispIDE는 기본적으로 그렇게 합니다.
테크놀로지
메모리 매니저
내부적으로 OpenLisp는 가상 메모리를 사용하여 개체를 자동으로 할당 및 확장합니다.같은 유형의 작은 오브젝트는 Bibop(BIG Bag Of Pages) 메모리 구성을 사용하여 할당됩니다.큰 개체는 Lisp 힙의 실제 개체를 가리키는 프록시를 사용합니다.보수적인 가비지 컬렉션은 병합 힙을 사용한 마크 앤 스위프입니다(스위프 단계는 스레드를 사용하도록 구성할 수 있습니다).
데이터형
OpenLisp는 태그 부착 아키텍처(32비트에서는 4비트 태그, 64비트에서는 5비트 태그)를 사용하여 고속 타입 체크(작은 정수, 플로트, 심볼, 콘스, 스트링, 벡터)를 실시합니다.작은 정수(32비트에서는 28비트, 64비트에서는 59비트)는 언박스로, 큰 정수(32/64비트)는 박스화 됩니다.ISLISP의 요구에 따라 임의의 정밀도 산술(bignums)도 실장됩니다.문자(따라서 문자열)는 8비트(ANSI, EBCDIC) 또는 Unicode 지원이 활성화된 경우 16/32비트입니다.
평가자 및 컴파일러
Lisp 커널, 네이티브 인터프리터 및 기본 라이브러리는 C 언어로 수작업으로 코드화되어 컴파일러에 의해 생성된 LAP 중간 언어가 C 백엔드 코드 생성기에 의해 C로 변환됩니다.
역사
1988년, OpenLisp의 첫 번째 동기는 Lisp 서브셋을 구현하여 Emacs 클론인 EmACT를 확장하는 것이었습니다.ISLISP는 곧 명백한 선택이 되었다.한층 더 발전했다.
연도 | 버전 | 주요 기능 |
---|---|---|
1988 | 1.0 | OpenLisp는 ISLISP 표준 프로세스의 아이디어를 실험하기 위해 MLisp(Minimal Lisp)라는 장난감 언어로 시작되었습니다. |
1993 | 3.3 | 64비트 머신의 첫 번째 포트(DEC Alpha OSF/1), MLisp에서 OpenLisp로 이름 변경 |
1994 | 4.0 | 최초 상용화 |
1995 | 4.5 | 소켓 스트림 지원 |
1997 | 5.7 | OpenLisp는 ISLISP ISO/IEC 13816:1997([10]E) 표준을 구현한 최초의 Lisp입니다. |
1998 | 5.8 | Unicode 옵션 지원 |
2000 | 6.6 | LISP에서 LAP 컴파일러로 전환, LAP은 OpenLisp에 내장된 가상 머신으로 해석, 속도는 약 2배 향상 |
2003 | 7.5 | Lisp to C 백엔드, 다수의 Lisp 파일이 있는 응용 프로그램을 스탠드아론 실행 파일로 컴파일 가능, 속도가 10배에서 20배 향상 |
2007 | 8.7 | ISO/IEC 13816:2007(E[7]) 리비전에 맞게 변경 |
2010 | 9.2 | 네이티브 정수 임의 정밀도 산술 지원 |
2021 | 11.2 | 완전한 CLTL 형식 확장 추가.히프 검출 향상 |
2022 | 11.4 | 액티베이션 블록을 재작업하면 인터프리터가 약 15% 빨라집니다.실험용 ASDF 클론 |
2022 | 11.5 | 일반 함수 호출이 최대 3배 빠릅니다.regex 내부 모듈이 개선되었습니다. |
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 | ||||||||||||||
하이 |
포트
OpenLisp는 매우 휴대성이 뛰어나며 다음을 포함한 많은 운영 체제에서 작동합니다.Windows, 대부분의 Unix 및 POSIX 기반(Linux, macOS, FreeBSD, OpenBSD, NetBSD, Solaris, HP-UX, AIX, Cygwin, QNX), DOS, OS/2, Pocket PC, OpenVMS, Z/OS.공식 웹사이트 다운로드 섹션에는 50개 이상의 버전이 포함되어 있습니다.
표준 라이브러리
커넥터
OpenLisp는 Foreign Function Interface(FFI; 외부 기능 인터페이스)를 사용하여 C로 작성된 모듈과 상호 작용할 수 있습니다.ISLISP 스트림은 네트워크 소켓을 지원하도록 확장됩니다../net
디렉토리에는 Hypertext Transfer Protocol(http), JavaScript Object Notation(JSON), Post Office Protocol 3(POP3), Simple Mail Transfer Protocol(SMTP), Telnet, Rss(XML) 리더로 XML을 Lisp로 변환할 수 있는 샘플이 포함되어 있습니다.기본 SQL 모듈은 MySQL, Odbc, SQLite, Postgre와 함께 사용할 수 있습니다.SQL. CSV(쉼표로 구분된 값) 모듈은 CSV 파일을 읽고 쓸 수 있습니다.
도구들
개발자 도구에는 데이터 로깅, 프리티 프린터, 프로파일러, 계약에 의한 프로그래밍 설계, 유닛 테스트 등이 있습니다.
알고리즘
에서 사용할 수 있는 잘 알려진 알고리즘이 몇 가지 있습니다../contrib
디렉토리(Dantzig의 심플렉스 알고리즘, Dijkstra의 알고리즘, Ford-Fulkerson 알고리즘).모듈은 BSD 라이선스를 사용하여 출하됩니다.
이름 유래
Open 접두사는 오픈 소스 [11]모델이 아닌 오픈 시스템을 나타냅니다.
이 이름은 1993년에 Gosling Emacs(Mocklisp의 후계자로서)에 의해 이미 사용되고 있는 MLISP 내부 코드명을 대체하기 위해 선택되었습니다.
OpenLisp 프로그래밍 언어가 Open과 다릅니다.LISP는 Locator/Identifier Separation Protocol을 구현하기 위해 1997년에 시작된 프로젝트입니다.
컴파일러
이 섹션에서는 컴파일러가 Lisp 코드를 C로 변환하는 방법에 대해 설명합니다.
소스 코드
피보나치 수 함수(대부분 벤치마크에서 사용되는 이 고전적인 정의는 가장 효율적인 계산 방법이 아님)fib
)
(삭제하다 파이브 (n) (견디다 ((이큐 n 1) 1) ((이큐 n 2) 1) (t (+ (파이브 (- n 1)) (파이브 (- n 2))))))
LAP 중간 코드
Lisp 컴파일러는 Lisp 소스 코드를 다음과 같은 중간 코드로 변환합니다.그 다음에 이 중간 형식을 사용하여 명령을 분석하고 최적화하는 피프홀 최적화 패스가 이어집니다.최적화 후 최종 LAP 코드는 다음과 같습니다.
((엔트리 파이브 1 0 0) (PARAM. 0) (제크 _l004 '1) (jneq _l003 '2) (움직이다 a1 '1) (돌아가다) _l003 (gsub1 a1) (재발하다 1) (움직이다 a2 a1) (PARAM. 0) (서브 a1 '2) (재발하다 1) (추가 a2 a1) _l004 (돌아가다) (끝.))
C코드 변환
마지막으로 C 코드 생성기는 LAP 코드를 사용하여 C 명령어를 변환합니다.
정적인 포인터 오래된 컴파일 1(후립_00, p1) { 포인터 a1; 포인터 휘발성 a2; 입력(SN_OLFIB_00); a1 = p1; 한다면 (이큐(a1, olmakefix(1))) 에 가다 _l004; 한다면 (!이큐(a1, olmakefix(2))) 에 가다 _l003; olapleave(SN_OLFIB_00); 돌아가다 olmakefix(1); _l003: a1 = olapgsub(a1, olmakefix(1)); a2 = 후립_00(a1); a1 = olapgsub(p1, olmakefix(2)); a1 = 후립_00(a1); a1 = rollapgadd(a2, a1); _l004: olapleave(SN_OLFIB_00); 돌아가다 a1; }
스타일 가이드
회선 길이
OpenLisp는 길이가 무제한인 행을 허용합니다.권장되는 스타일은 코드의 각 텍스트 행에 80자 이내로 하는 것입니다.
도입
SDF Public Access Unix System 비영리 인터넷상의 퍼블릭[12][13] 액세스 Unix 시스템에 의해 온라인으로 이용 가능한 프로그래밍 언어 중 하나로 선택되었습니다.
Bricsys는 OpenLisp를 사용하여 Bricscad 컴퓨터 지원 설계(CAD)[14] 시스템에 AutoLISP를 구현합니다.
MEVA는 모두 OpenLisp로 작성되어 있습니다.
Universita degli Studi di Palermo는 OpenLisp를 사용하여 [16]리스프를 가르칩니다.
레퍼런스
- ^ Parquier, Pierre (2000). "JTC1/SC22 N3170". ISO/IEC. Retrieved 11 March 2012.[영구 데드링크]
- ^ Simonsen, Keld (13 March 1999). "Islisp – faq". ISO/IEC. Retrieved 11 November 2016.
- ^ Nobuto, Izumi (Tohoku Univ., Grad. Sch.); Takayasu, Ito (Tohoku Univ., Grad. Sch.) (1999). "Interpreter and Compiler of the ISO Standard Lisp ISLISP". Transactions- Information Processing Society of Japan. Transactions of Information Processing Society of Japan. ISSN 0387-5806. Archived from the original on 26 August 2018. Retrieved 17 June 2013.
- ^ McJones, Paul (2010). "ISLISP". Software Preservation Group. Retrieved 18 March 2012.
- ^ "ISO/IEC 13816:1997(E)". International Organization for Standardization. Retrieved 11 November 2018.
- ^ Parquier, Pierre (JTC1 SC22 WG16 Convenor) (1996). "ISO/IEC JTC1 SC22 WG16 N177 – DIS vote". ISO/IEC. Retrieved 15 March 2012.
- ^ a b "ISO/IEC 13816:2007(E)". International Organization for Standardization. Retrieved 11 November 2018.
- ^ Jullien, Christian (2011). "OpenLisp v9.8.0 Reference Manual". Eligis. Retrieved 14 March 2012.
- ^ Jullien, Christian (2011). "OpenLisp ChangeLog". Eligis. Retrieved 15 March 2012.
- ^ Rinehuls, William (4 August 1999). "JTC1/SC22 N2969". ISO/IEC. Retrieved 11 November 2016.
- ^ Jullien, Christian (2011). "OpenLisp FAQ". Eligis. Retrieved 15 March 2012.
- ^ Stover, Gene Michael (2005). "7.2 Languages on SDF". SDF Public Access Unix System, Inc. Retrieved 14 March 2012.
- ^ "Hosting companies". ALU (Association of Lisp Users). Archived from the original on 9 February 2011. Retrieved 18 March 2012.
- ^ "Bricscad News". Bricscad. 2009. Retrieved 20 March 2012.
- ^ "Competitive Intelligence and Decision Problems". Amos Davis. 2013. Retrieved 30 September 2014.
- ^ "Corso di Informatica Teorica". Università degli Studi di Palermo. 2013. Retrieved 22 March 2013.