OpenLisp - OpenLisp

OpenLisp
GNU Emacs.jpg içinde çalışan 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 ; 33 yıl önce ( 1988-04 )
kararlı sürüm
11.2.0 / 6 Ağustos 2021 ; 0 gün önce ( 2021-08-06 )
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 .eligis .com
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ı.

OpenLisp kilometre taşları
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

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.

Referanslar

Dış bağlantılar