コンテンツにスキップ

利用者:Gosyoku/OpenLisp

OpenLisp
登場時期 1988年4月 (36年前) (1988-04)
設計者 Christian Jullien
開発者 Christian Jullien
最新リリース 11.5.0/ 2022年5月23日 (2年前) (2022-05-23)
型付け Dynamic, strong
影響を受けた言語 Lisp, ISLISP
プラットフォーム Windows, most Unix-based, Linux, macOS, FreeBSD, OpenBSD, NetBSD, Solaris, HP-UX, AIX, QNX, DOS, OS/2, Pocket PC, OpenVMS, z/OS, Cygwin
ライセンス Proprietary
ウェブサイト www.eligis.com
関連言語 Lisp
テンプレートを表示

OpenLispは、 Eligis の Christian Jullien [1]によって開発された Lispファミリーのプログラミング言語です。 [2] [3] [4]国際標準化機構(ISO)と国際電気標準会議(IEC)が共同で発行した ISLISP の国際規格、ISO/IEC 13816:1997(E)に準拠し、[5] [6] ISO/IEC 13816:2007(E) で改訂されました。 [7]

プログラミング言語 Cと Lisp で書かれており、ほとんどの一般的なオペレーティング システムで動作します。 OpenLisp は ISLISP の実装として指定されていますが、多くの Common Lisp 互換の拡張機能 (hashtable、readtable、package、defstruct、sequence、有理数)やその他のライブラリ(ネットワーク ソケット、正規表現XML、Portable Operating System Interface(POSIX)、SQLLightweight Directory Access Protocol(LDAP))も多く含まれています。[8]

OpenLisp には、 read–eval–print ループ(REPL)) に関連付けられたインタープリター、Lisp アセンブリ プログラム (LAP)、C言語用のバックエンドコンパイラーが含まれています。

目標[編集]

この Lisp バージョンの主な目標は、完全に準拠した ISLISP システムを実装することです ( -islisp フラグで起動すると、ISO/IEC 13816:2007(E) 仕様に厳密に制限されます)。第 2 の目標は、C/C++ または JavaJava Native Interface (JNI) 経由)にリンク可能な、完全な埋め込み可能な Lisp システムを提供することです。外部プログラムとの通信には、コールバックメカニズムが使用されます。

その他の目標は、スクリプト言語またはグルー言語として使用できるようにすることと、スタンドアロン プログラムの実行可能ファイルを生成することです。

ライセンス[編集]

その名前にもかかわらず、OpenLisp はプロプライエタリ ソフトウェアです。そのインタープリターは、非営利目的の使用であれば無料で利用できます。

ユーザーインターフェース[編集]

OpenLisp は主にコンソール モードで実行されます。Microsoft Windowsではcmd.exeUnixベースのシステムではターミナル エミュレーターです。

;; 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
? _

別の解決策としては、Emacs inferior-lisp-mode をセットアップしてEmacsから OpenLisp を実行する方法や、OpenLisp構文をサポートする統合開発環境(IDE) を使用する方法があります。 DaanSystems による LispIDE はネイティブ対応しています。

テクノロジー[編集]

メモリーマネージャー[編集]

内部的に、OpenLisp は仮想メモリを使用してオブジェクトを自動的に割り当て、拡張します。同じタイプの小さなオブジェクトは、Bibop (BIg Bag Of Pages) メモリ構成を使用して割り当てられます。大きなオブジェクトは、Lisp ヒープ内の実際のオブジェクトを指すプロキシを使用します。保守的なガベージ コレクションは、合体ヒープを使用したマーク アンド スイープです(スイープ フェーズは、スレッドを使用するように構成できます)。

データ型[編集]

OpenLisp はタグ付けされたアーキテクチャ(32ビットでは 4 ビット タグ、 64ビットでは 5 ビット タグ)を使用して、高速な型チェック (小さな整数、浮動小数点数、シンボル、コンス、文字列、ベクトル)を行います。小さな整数 (32ビットでは 28ビット、64ビットでは 59ビット) はボックス化されず、大きな (32/64ビット)整数はボックス化されます。 ISLISP の要求に応じて、任意精度演算(bignum)も実装されています。文字(したがって文字列)は、 8 ビットANSIEBCDIC)または 16/32 ビット(Unicodeサポートが有効になっている場合)です。

エバリュエーターとコンパイラー[編集]

Lisp カーネル、ネイティブインタープリタ、および基本ライブラリはC言語で手作業でコーディングされ、コンパイラによって生成された LAP中間言語は、C バックエンドコード ジェネレータによって C に変換されます。

歴史[編集]

1988年、OpenLisp の背後にある最初の動機は、 Emacsクローンである EmACT を拡張するために Lisp サブセットを実装することでした。 ISLISP はすぐに当然の選択となりました。さらなる発展が続いた。

OpenLisp マイルストーン[9]
バージョン 主な特徴
1988年 1.0 OpenLisp は MLisp (Minimal Lisp) というおもちゃの言語として始まり、 ISLISP標準プロセスからのアイデアを実験しました。
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(E) 標準を実装した最初の Lisp です。 [10]
1998年 5.8 Unicodeオプションのサポート
2000年 6.6 LAP コンパイラへの Lisp。 LAP は、OpenLisp に組み込まれた仮想マシンによって解釈されます。速度が約 2 倍向上
2003年 7.5 Lisp から 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 倍高速です。改善された正規表現内部モジュール。

Template:Lisp

ポート[編集]

OpenLisp は非常に移植性が高いと主張しており、以下を含む多くのオペレーティング システムで実行されます:Windows, 殆どの UnixPOSIX ベース (Linux, macOS, FreeBSD, OpenBSD, NetBSD, Solaris, HP-UX, AIX, Cygwin, QNX), DOS, OS/2, Pocket PC, OpenVMS, z/OS。公式 Web サイトのダウンロード セクションには、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)、TelnetRss のサンプルが含まれています)、単純化された Extensible Markup Language (XML) リーダーは、XML を Lisp に変換できます。

基本的なSQLモジュールは、 MySQLOdbcSQLitePostgreSQLで使用できます。コンマ区切り値(CSV) モジュールは、CSV ファイルの読み取りと書き込みを行うことができます。

ツール[編集]

開発者ツールには、データ ロギング、 pretty-printer 、プロファイラー契約プログラミングによる設計、および単体テストが含まれます。

アルゴリズム[編集]

./contribディレクトリには、いくつかのよく知られたアルゴリズムがあります (Dantzig のシンプレックス アルゴリズムDijkstra のアルゴリズムFord–Fulkerson アルゴリズム)。モジュールはBSD ライセンスを使用して出荷されます。

名前の由来[編集]

Openという接頭辞は、オープン ソース モデルではなく、オープン システムを指します。 [11]

この名前は、(Mocklispの後継として) Gosling Emacsで既に使用されていた MLisp 内部コード名を置き換えるために 1993 年に選択されました。

OpenLispプログラミング言語は、 Locator/Identifier Separation Protocol を実装するために 1997 年に開始されたプロジェクトである OpenLISP とは異なります。

コンパイラ[編集]

このセクションでは、コンパイラが Lisp コードを C に変換する方法について説明します。

ソースコード[編集]

フィボナッチ数関数(ほとんどのベンチマークで使用されるこの古典的な定義は、 fibを計算する最も効率的な方法ではありません)

(defun fib (n)
   (cond ((eq n 1) 1)
         ((eq n 2) 1)
         (t (+ (fib (- n 1)) (fib (- n 2))))))

LAP中間コード[編集]

Lisp コンパイラは、Lisp ソース コードを次の中間コードに変換します。その後、この中間形式を使用して命令を分析および最適化するピープホール最適化パスが続きます。最適化後の最終的な LAP コードは次のとおりです。

((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コード変換[編集]

最後に、C コード ジェネレーターは LAP コードを使用して C の命令を変換します。

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;
}

スタイルガイド[編集]

線の長さ[編集]

OpenLisp は、無制限の長さの行を受け入れます。推奨されるスタイルは、コード内のテキストの各行が1 行あたり最大 80 文字である必要があることです。

可決[編集]

SDF Public Access Unix System 非営利のインターネット[12] [13]上のパブリック アクセス Unix システムによって、オンラインで利用できるプログラミング言語の 1 つとして選ばれました。

Bricsys は OpenLisp を使用して、 AutoLISP を BricsCADコンピュータ支援設計(CAD) システムに実装しています。 [14]

MEVA [15]はすべて OpenLisp で書かれています。

Università degli Studi di Palermo は、OpenLisp を使用して Lisp を教えています。 [16]

参考文献[編集]

外部リンク[編集]

Template:Lisp programming language [[Category:LISP]]

  1. ^ Parquier (2000年). “JTC1/SC22 N3170”. ISO/IEC. 2012年3月11日閲覧。[リンク切れ]
  2. ^ Simonsen (1999年3月13日). “Islisp – faq”. ISO/IEC. 2016年11月11日閲覧。
  3. ^ 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. http://sciencelinks.jp/j-east/article/200003/000020000399A0922596.php 2013年6月17日閲覧。. 
  4. ^ McJones (2010年). “ISLISP”. Software Preservation Group. 2012年3月18日閲覧。
  5. ^ ISO/IEC 13816:1997(E)”. International Organization for Standardization. 2018年11月11日閲覧。
  6. ^ Parquier (1996年). “ISO/IEC JTC1 SC22 WG16 N177 – DIS vote”. ISO/IEC. 2012年3月15日閲覧。
  7. ^ a b ISO/IEC 13816:2007(E)”. International Organization for Standardization. 2018年11月11日閲覧。
  8. ^ Jullien (2011年). “OpenLisp v9.8.0 Reference Manual”. Eligis. 2012年3月14日閲覧。
  9. ^ Jullien (2011年). “OpenLisp ChangeLog”. Eligis. 2012年3月15日閲覧。
  10. ^ Rinehuls (1999年8月4日). “JTC1/SC22 N2969”. ISO/IEC. 2016年11月11日閲覧。
  11. ^ Jullien (2011年). “OpenLisp FAQ”. Eligis. 2012年3月15日閲覧。
  12. ^ Stover (2005年). “7.2 Languages on SDF”. SDF Public Access Unix System, Inc.. 2012年3月14日閲覧。
  13. ^ Hosting companies”. ALU (Association of Lisp Users). 2011年2月9日時点のオリジナルよりアーカイブ。2012年3月18日閲覧。
  14. ^ Bricscad News”. Bricscad (2009年). 2012年3月20日閲覧。
  15. ^ Competitive Intelligence and Decision Problems”. Amos Davis (2013年). 2014年9月30日閲覧。
  16. ^ Corso di Informatica Teorica”. Università degli Studi di Palermo (2013年). 2013年3月22日閲覧。