OpenLisp - OpenLisp
|
Emacs içinde çalışan OpenLisp
| |
| paradigmalar | Çoklu paradigma : işlevsel , prosedürel , nesne yönelimli , yansıtıcı , meta |
|---|---|
| Aile | Lisp |
| Tarafından tasarlandı | Christian Jullien |
| geliştirici | Christian Jullien |
| İlk ortaya çıktı | Nisan 1988 |
| kararlı sürüm | 11.2.0 / 6 Ağustos 2021
|
| Yazma disiplini | Dinamik , güçlü |
| uygulama dili | C , OpenLisp |
| platformu | x86 , x86-64 , IA-64 , SPARC , PowerPC , MIPS , Alpha , PA-RISC , ARM , AArch64 , RISC-V |
| işletim sistemi | Windows , çoğu Unix tabanlı, Linux , macOS , FreeBSD , OpenBSD , NetBSD , Solaris , HP-UX , AIX , QNX , DOS , OS/2 , Pocket PC , OpenVMS , z/OS , Cygwin |
| Lisans | tescilli |
| İnternet sitesi | www |
| Tarafından etkilenmiş | |
| LISP , ISLISP | |
OpenLisp bir olan programlama dili içinde Lisp tarafından geliştirilen ailesinden Christian Jullien dan Eligis . Bu uyan uluslararası standartta için ISLISP tarafından ortaklaşa yayınlanan Uluslararası Standardizasyon Örgütü (ISO) ve Uluslararası Elektroteknik Komisyonu ISO / IEC 13816 olarak revize 1997 (E): 2007 (E) (IEC), ISO / IEC 13816.
C ve Lisp programlama dillerinde yazılmıştır ve en yaygın işletim sistemlerinde çalışır . OpenLisp bir ISLISP uygulaması olarak belirlenmiştir , ancak aynı zamanda birçok Common Lisp uyumlu uzantı (karma tablo, okunabilir, paket, defstruct, diziler, rasyonel sayılar) ve diğer kitaplıkları ( ağ soketi , düzenli ifade , XML , Taşınabilir İşletim Sistemi Arayüzü ( POSIX ), SQL , Basit Dizin Erişim Protokolü (LDAP)).
OpenLisp, bir okuma-değerlendirme-yazdırma döngüsü (REPL), bir Lisp Assembly Programı (LAP) ve C dili için bir arka uç derleyicisi ile ilişkili bir yorumlayıcı içerir .
Hedefler
Bu Lisp versiyonunun ana amacı, tam uyumlu bir ISLISP sistemi uygulamaktır ( -islispbayrak ile başlatıldığında , kesinlikle ISO/IEC 13816:2007(E) spesifikasyonu ile sınırlıdır). İkincil amaç, C/ C++ veya Java'ya ( Java Yerel Arabirimi (JNI) aracılığıyla) bağlanabilen eksiksiz bir gömülebilir Lisp sistemi sağlamaktır . Harici programla iletişim kurmak için bir geri arama mekanizması kullanılır. Diğer hedefler, betik dili veya yapıştırıcı dili olarak kullanılabilir olmak ve bağımsız program yürütülebilir dosyaları üretmektir .
Lisans
Onun rağmen adıyla , OpenLisp olan tescilli yazılım . Onun tercüman herhangi ticari olmayan kullanım için ücretsiz olarak temin olduğunu.
Kullanıcı arayüzü
: OpenLisp esas konsol modunda çalışan cmd.exeüzerinde Microsoft Windows ve terminal emülatörü üzerinde Unix sistemleri tabanlı.
;; OpenLisp v11.x.y (Build: XXXX) by C. Jullien [Jan 01 20xx - 10:49:13]
;; Copyright (c) Eligis - 1988-20xx.
;; System 'sysname' (64-bit, 8 CPU) on 'hostname', ASCII.
;; God thank you, OpenLisp is back again!
? (fib 20)
;; elapsed time = 0.003s, (0 gc).
= 6765
? _
Alternatif çözümler arasında, Emacs kurarak inferior-lisp-modeveya OpenLisp sözdizimini destekleyen entegre bir geliştirme ortamı (IDE) kullanarak Emacs'tan OpenLisp'i çalıştırma yer alır . DaanSystems tarafından sağlanan LispIDE bunu doğal olarak yapar.
teknoloji
Bellek yöneticisi
Dahili olarak OpenLisp, nesneleri otomatik olarak tahsis etmek ve genişletmek için sanal bellek kullanır . Aynı türdeki küçük nesneler, bir Bibop (Big Bag Of Pages) bellek organizasyonu kullanılarak tahsis edilir. Büyük nesneler , Lisp yığınındaki gerçek nesneye işaret eden bir proxy kullanır . Muhafazakar çöp toplama , birleştirici yığın ile bir işaret ve süpürme işlemidir (süpürme aşaması, iplik kullanmak üzere yapılandırılabilir ).
Veri tipleri
OpenLisp, hızlı tip kontrolü (küçük tamsayı, kayan nokta, sembol, eksiler, dize, vektör) için etiketli mimariyi ( 32 bitte 4 bitlik etiket, 64 bitte 5 bitlik etiket ) kullanır. Küçük tamsayılar (32 bitte 28 bit, 64 bitte 59 bit) kutusuz , büyük (32/64 bit) tam sayılar kutuludur. ISLISP'in gerektirdiği gibi, keyfi kesinlikli aritmetik (bignums) da uygulanmaktadır. Karakterler (dolayısıyla dizeler) 8 bit ( ANSI , EBCDIC ) veya Unicode desteği etkinse 16/32 bittir .
Değerlendirici ve derleyici
Lisp Çekirdeği, yerel yorumlayıcı ve temel kitaplıklar C dilinde elle kodlanır , derleyici tarafından üretilen LAP ara dili daha sonra C arka uç kod üreteci tarafından C'ye çevrilir .
Tarih
1988'de OpenLisp'in arkasındaki ilk amaç, bir Emacs klonu olan EmACT'i genişletmek için bir Lisp alt kümesi uygulamaktı . ISLISP kısa sürede bariz bir seçim haline geldi. Daha fazla gelişme ortaya çıktı.
| Yıl | Sürüm | Ana özellik |
|---|---|---|
| 1988 | 1.0 | OpenLisp , ISLISP standartları sürecinden gelen fikirleri denemek için MLisp (Minimal Lisp) adlı bir oyuncak dil olarak başladı |
| 1993 | 3.3 | 64 bit makinedeki ilk bağlantı noktası ( DEC Alpha OSF/1 ); MLisp'ten OpenLisp'e isim değişikliği |
| 1994 | 4.0 | İlk ticari kullanım |
| 1995 | 4.5 | Soket akışları desteği |
| 1997 | 5.7 | OpenLisp, ISLISP ISO/IEC 13816:1997(E) standardını uygulayan ilk Lisp'tir. |
| 1998 | 5.8 | Unicode isteğe bağlı desteği |
| 2000 | 6.6 | LAP derleyicisine Lisp; LAP, OpenLisp'e gömülü bir sanal makine tarafından yorumlanır ; hız yaklaşık 2 kat arttı |
| 2003 | 7.5 | Lisp'ten C'ye arka uç; birçok Lisp dosyası içeren bir uygulamayı bağımsız bir yürütülebilir dosyaya derleyebilme; hız 10x'ten 20x'e yükseltildi |
| 2007 | 8.7 | ISO/IEC 13816:2007(E) revizyonuna uygun değişiklikler |
| 2010 | 9.2 | Yerel tamsayı keyfi kesinlikli aritmetik desteği |
| 2021 | 11.2 | En son sürüm; tam CLtL format uzantısı eklendi; yığın algılamayı iyileştirmek; 2021-04-30 |
| 1955 | 1960 | 1965 | 1970 | 1975 | 1980 | 1985 | 1990 | 1995 | 2000 | 2005 | 2010 | 2015 | 2020 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LISP 1, 1.5, LISP 2 (terk edilmiş) | ||||||||||||||
| Maclisp | ||||||||||||||
| interlisp | ||||||||||||||
| MDL (programlama dili) | ||||||||||||||
| Lisp Makinesi Lisp | ||||||||||||||
| Şema | R5RS | R6RS | R7RS küçük | |||||||||||
| NIL | ||||||||||||||
| ZIL (Zork Uygulama Dili) | ||||||||||||||
| Franz Lisp | ||||||||||||||
| Ortak Lisp | ||||||||||||||
| Le Lisp | ||||||||||||||
| T | ||||||||||||||
| Chez Programı | ||||||||||||||
| Emacs Lisp | ||||||||||||||
| AutoLISP | ||||||||||||||
| PicoLisp | ||||||||||||||
| EuLisp | ||||||||||||||
| ISLISP | ||||||||||||||
| OpenLisp | ||||||||||||||
| PLT Şeması | raket | |||||||||||||
| GNU Guile | ||||||||||||||
| Görsel LISP | ||||||||||||||
| Clojure | ||||||||||||||
| yay | ||||||||||||||
| LFE | ||||||||||||||
| Merhaba | ||||||||||||||
Limanlar
OpenLisp iddialar birçok çalışır, son derece portatif olması işletim sistemleri de dahil olmak üzere: Windows'un çoğu Unix ve POSIX'e tabanlı ( Linux , MacOS , FreeBSD , OpenBSD , NetBSD , Solaris , HP-UX , AIX , Cygwin , QNX ), DOS , OS / 2 , Cep Bilgisayarı , OpenVMS , z/OS . Resmi web sitesi indirme bölümü 50'den fazla farklı sürüm içerir.
Standart kitaplıklar
Konnektörler
OpenLisp, yabancı işlev arabirimi (FFI) kullanılarak C ile yazılmış modüllerle etkileşime girebilir , ISLISP akışları ağ soketini destekleyecek şekilde genişletilir ( ./netdizin, Köprü Metni Aktarım Protokolü (http), JavaScript Nesne Gösterimi (JSON), Postane Protokolü 3 (POP3) için örnekler içerir , Basit Posta Aktarım Protokolü (SMTP), Telnet , Rss ), basitleştirilmiş bir Genişletilebilir İşaretleme Dili ( XML ) okuyucusu, XML'i Lisp'e dönüştürebilir. MySQL , Odbc , SQLite , PostgreSQL ile temel bir SQL modülü kullanılabilir . Bir virgülle ayrılmış değerler (CSV) modülü okuma ve yazma CSV dosyaları olabilir.
Araçlar
Geliştirici araçları arasında veri kaydı , güzel yazıcı , profil oluşturucu , sözleşmeli programlama ile tasarım ve birim testleri bulunur .
algoritmalar
Bazı iyi bilinen algoritmalar ./contribdizinde mevcuttur (Dantzig'in simpleks algoritması , Dijkstra'nın algoritması , Ford–Fulkerson algoritması ). Modüller, BSD lisansları kullanılarak gönderilir .
adın kökeni
Açık öneki , açık kaynak modeline değil , açık sistemlere atıfta bulunur .
Ad, Gosling Emacs ( Mocklisp'in halefi olarak ) tarafından zaten kullanılan MLisp dahili kod adının yerini almak üzere 1993 yılında seçildi .
OpenLisp programlama dili , Locator/Identifier Ayırma Protokolünü uygulamak için 1997'de başlatılan bir proje olan OpenLISP'den farklıdır .
Derleyici
Bu bölüm, bir derleyicinin Lisp kodunu C'ye nasıl dönüştürdüğünü açıklar.
Kaynak kodu
Fibonacci sayı fonksiyonu (deneylerin çoğunda kullanılan bu klasik tanım bilgi işlem için en etkili yol değildir fib)
(defun fib (n)
(cond ((eq n 1) 1)
((eq n 2) 1)
(t (+ (fib (- n 1)) (fib (- n 2))))))
LAP ara kodu
Lisp derleyicisi, Lisp kaynak kodunu aşağıdaki ara koda çevirir. Bunu, talimatları analiz etmek ve optimize etmek için bu ara biçimi kullanan bir gözetleme deliği optimizasyon geçişi takip eder. Optimizasyondan sonra son LAP kodu:
((fentry fib 1 0 0)
(param 0)
(jeq _l004 '1)
(jneq _l003 '2)
(move a1 '1)
(return)
_l003
(gsub1 a1)
(recurse 1)
(move a2 a1)
(param 0)
(gsub a1 '2)
(recurse 1)
(gadd a2 a1)
_l004
(return)
(end))
C kodu çevirisi
Son olarak, C kodu oluşturucu, C'deki talimatları çevirmek için LAP kodunu kullanır.
static POINTER
OLDEFCOMPILED1(olfib_00, p1) {
POINTER a1;
POINTER VOLATILE a2;
ollapenter(SN_OLFIB_00);
a1 = p1;
if (eq(a1, olmakefix(1))) goto _l004;
if (!eq(a1, olmakefix(2))) goto _l003;
ollapleave(SN_OLFIB_00);
return olmakefix(1);
_l003:
a1 = ollapgsub(a1, olmakefix(1));
a2 = olfib_00(a1);
a1 = ollapgsub(p1, olmakefix(2));
a1 = olfib_00(a1);
a1 = ollapgadd(a2, a1);
_l004:
ollapleave(SN_OLFIB_00);
return a1;
}
Stil rehberi
çizgi uzunluğu
OpenLisp, sınırsız uzunluktaki satırları kabul eder. Önerilen stil, koddaki her metin satırının satır başına en fazla 80 karakter içermesidir .
Benimseme
SDF Kamu Erişimi Unix Sistemi tarafından İnternet'teki kar amacı gütmeyen kamu erişimli Unix sistemleri tarafından çevrimiçi olarak sunulan programlama dillerinden biri olarak seçilmiştir .
Bricsys , Bricscad bilgisayar destekli tasarım (CAD) sisteminde AutoLISP'i uygulamak için OpenLisp'i kullanır .
MEVA tamamen OpenLisp ile yazılmıştır.
Università degli Studi di Palermo, Lisp'i öğretmek için OpenLisp'i kullanır.