Emacs内で動作するOpenLisp | |
| パラダイム | マルチパラダイム:関数型、手続き型、オブジェクト指向、リフレクション型、メタ |
|---|---|
| 家族 | リスプ |
| デザイン: | クリスチャン・ジュリアン |
| 開発者 | クリスチャン・ジュリアン |
| 初登場 | 1988年4月 |
| 安定版リリース | 11.7.0 / 2022年12月13日 |
| タイピングの規律 | ダイナミック、力強い |
| 実装言語 | 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 |
| ライセンス | 独自 |
| Webサイト | エリギス |
| 影響を受けた | |
| Lisp、ISLISP | |
OpenLispは、EligisのChristian Jullien [1]が開発したLispファミリーのプログラミング言語です。国際標準化機構( ISO)と国際電気標準会議(IEC)が共同で発行したISLISPの国際標準であるISO/ IEC 13816:1997(E) [5] [6]に準拠しており、ISO /IEC 13816:2007(E)に改訂されています。[7]
プログラミング言語CとLispで書かれており、ほとんどの一般的なオペレーティングシステムで動作します。OpenLispはISLISP実装として指定されていますが、多くのCommon Lisp互換の拡張機能(ハッシュテーブル、読み取り可能、パッケージ、defstruct、シーケンス、有理数)とその他のライブラリ(ネットワークソケット、正規表現、XML、ポータブルオペレーティングシステムインターフェイス(POSIX)、SQL、軽量ディレクトリアクセスプロトコル(LDAP))も含まれています。[8]
OpenLisp には、読み取り、評価、印刷ループ(REPL)に関連付けられたインタープリター、Lisp アセンブリ プログラム (LAP)、およびC言語用の バックエンドコンパイラが含まれています。
目標
このLispバージョンの主な目標は、完全に準拠した ISLISP システムを実装することです (--islispフラグ付きで起動すると、ISO/IEC 13816:2007(E) 仕様に厳密に制限されます)。2 番目の目標は、C/ C++またはJava ( Java Native Interface (JNI)経由) にリンク可能な、完全に埋め込み可能なLisp システムを提供することです。外部プログラムとの通信には、コールバックメカニズムが使用されます。その他の目標は、スクリプト言語またはグルー言語として使用できるようにすることと、スタンドアロン プログラム実行ファイル
を作成することです。
ライセンス
OpenLisp はその名前にもかかわらず、プロプライエタリ ソフトウェアです。そのインタープリタは非商用目的であれば無料で利用できます。
ユーザーインターフェース
OpenLisp は主に、 Microsoft Windowscmd.exeではコンソール モードで、Unixベースのシステムではターミナル エミュレーターで実行されます。
;; OpenLisp v11.xy (ビルド: XXXX) C. Jullien [Jan 01 20xx - 10:49:13]
;; Copyright (c) Eligis - 1988-20xx. ;; システム 'sysname' (64 ビット、8 CPU) 'hostname'、ASCII。;; ありがとう、OpenLisp がまた戻ってきました! ? ( fib 20 ) ;; 経過時間 = 0.003 秒、(0 gc)。= 6765 ? _
代替の解決策としては、 Emacs をセットアップしてEmacsから OpenLisp を実行するinferior-lisp-modeか、 OpenLisp構文をサポートする統合開発環境(IDE)を使用する方法があります。DaanSystems の LispIDE はこれをネイティブに実行します。
テクノロジー
メモリマネージャー
内部的には、OpenLisp は仮想メモリを使用してオブジェクトを自動的に割り当て、拡張します。同じタイプの小さなオブジェクトは、Bibop (BIg Bag Of Pages) メモリ構成を使用して割り当てられます。大きなオブジェクトは、Lisp ヒープ内の実際のオブジェクトを指すプロキシを使用します。保守的なガベージ コレクションは、ヒープを結合するマーク アンド スイープです(スイープ フェーズはスレッドを使用するように構成できます)。
データ型
OpenLisp は、高速な型チェック (小さい整数、浮動小数点数、シンボル、cons、文字列、ベクトル) のためにタグ付きアーキテクチャ( 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 の背後にある最初の動機は、Emacsクローンである EmACT を拡張するための Lisp サブセットを実装することでした。ISLISP はすぐに当然の選択となり、さらなる開発が続きました。
ポート
OpenLisp は極めて移植性が高いとされており、Windows、ほとんどのUnixおよびPOSIXベース( Linux、macOS、FreeBSD、OpenBSD、NetBSD、Solaris、HP-UX、AIX、Cygwin、QNX )、DOS、OS/2、Pocket PC、OpenVMS、z/OS など、多くのオペレーティング システムで動作します。公式 Web サイトのダウンロード セクションには、50 を超えるさまざまなバージョンが含まれています。
標準ライブラリ
コネクタ
OpenLisp は、外部関数インターフェイス(FFI)を使用して C で記述されたモジュールと対話でき、ISLISP ストリームはネットワーク ソケット(ディレクトリには、ハイパーテキスト転送プロトコル(http)、JavaScript オブジェクト表記法(JSON)、Post Office Protocol 3 (POP3)、簡易メール転送プロトコル(SMTP)、Telnet、Rss の./netサンプルが含まれています) をサポートするように拡張され、簡略化された拡張マークアップ言語 ( XML ) リーダーは XML を Lisp に変換できます。基本的なSQLモジュールは、 MySQL、Odbc、SQLite、PostgreSQLで使用できます。カンマ区切り値(CSV) モジュールは、CSV ファイルの読み取りと書き込みが可能です。
ツール
開発者ツールには、データ ロギング、プリティー プリンタ、プロファイラー、契約プログラミングによる設計、ユニット テストが含まれます。
アルゴリズム
ディレクトリには、よく知られているアルゴリズムがいくつか用意されています./contrib(Dantzig の単体アルゴリズム、Dijkstra のアルゴリズム、Ford–Fulkerson アルゴリズム)。モジュールはBSD ライセンスを使用して出荷されます。
名前の由来
接頭辞「オープン」はオープンソースモデルではなく、オープンシステムを指します。[11]
この名前は、Gosling Emacs ( Mocklispの後継)ですでに使用されていた 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 の命令を変換します。
静的ポインターOLDEFCOMPILED1 ( olfib_00 、p1 ) {ポインターa1 ;ポインターVOLATILEa2 ;
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 ); a1を返します。
スタイルガイド
行の長さ
OpenLisp は、行の長さに制限はありません。コード内の各テキスト行は、1 行あたり最大 80文字にすることが推奨されます。
採択
これは、インターネット上の非営利のパブリックアクセスUnixシステムであるSDFパブリックアクセスUnixシステム[12] [13]によって、オンラインで利用可能なプログラミング言語の1つとして 選択されました。
Bricsysは、 Bricscadコンピュータ支援設計(CAD)システムにAutoLISPを実装するためにOpenLispを使用しています。 [14]
MEVA [15]は完全にOpenLispで書かれています。
パレルモ大学は OpenLisp を使用して Lisp を教えています。[16]
参考文献
- ^ ピエール、パルキエ (2000)。 「JTC1/SC22 N3170」。 ISO/IEC 。2012 年3 月 11 日に取得。[永久リンク切れ ]
- ^ シモンセン、ケルド (1999 年 3 月 13 日)。 「Islisp – よくある質問」。 ISO/IEC 。2016 年11 月 11 日に取得。
- ^ 泉 信人 (東北大学大学院); 伊藤 孝康 (東北大学大学院) (1999). 「ISO標準Lisp ISLISPのインタプリタとコンパイラ」.情報処理学会論文誌. 情報処理学会論文誌. ISSN 0387-5806. 2018年8月26日時点のオリジナルよりアーカイブ。 2013年6月17日閲覧。
{{cite journal}}: CS1 maint: 複数の名前: 著者リスト (リンク) - ^ McJones, Paul (2010). 「ISLISP」. Software Preservation Group . 2012年3月18日閲覧。
- ^ 「ISO/IEC 13816:1997(E)」。国際標準化機構。2018年11月11日閲覧。
- ^ Parquier, Pierre (JTC1 SC22 WG16 コーディネーター) (1996). 「ISO/IEC JTC1 SC22 WG16 N177 – DIS 投票」. ISO/IEC . 2012 年3 月 15 日閲覧。
{{cite web}}: CS1 maint: 数値名: 著者リスト (リンク) - ^ ab "ISO/IEC 13816:2007(E)".国際標準化機構. 2018年11月11日閲覧。
- ^ クリスチャン・ジュリアン (2011). 「OpenLisp v9.8.0 リファレンスマニュアル」。エリギス。2012 年3 月 14 日に取得。
- ^ クリスチャン・ジュリアン (2011). 「OpenLisp変更ログ」。エリギス。2012 年3 月 15 日に取得。
- ^ Rinehuls, William (1999年8月4日). 「JTC1/SC22 N2969」. ISO/IEC . 2016年11月11日閲覧。
- ^ クリスチャン・ジュリアン (2011). 「OpenLisp FAQ」。エリギス。2012 年3 月 15 日に取得。
- ^ Stover, Gene Michael (2005). 「7.2 SDF の言語」 SDF Public Access Unix System, Inc. 2012 年3 月 14 日閲覧。
- ^ 「ホスティング会社」。ALU (Association of Lisp Users)。2011年2月9日時点のオリジナルよりアーカイブ。2012年3月18日閲覧。
- ^ 「Bricscad News」Bricscad、2009年。 2012年3月20日閲覧。
- ^ 「競争情報と意思決定の問題」エイモス・デイビス、2013年。 2014年9月30日閲覧。
- ^ “コルソ ディ インフォマティカ テオリカ”.パレルモ大学。 2013年。2013 年3 月 22 日に取得。
外部リンク
- 公式サイト
- LinkedInグループ
- ソフトウェア保存グループの ISLISP
