EusLispについて
Simple Wiki Based Contents Management System
ソフトウェア関連 >> アプリケーション >> EusLispについて

EusLispとは?

電子技術総合研究所(現 産業技術総合研究所)松井俊浩氏によって開発されたオブジェクト指向Lispの1つ。その他のLispを基礎としたオブジェクト指向プログラム言語(例えばCLOS )と異なり、オブジェクト指向を基礎とした Lispシステムである。
オリジナルは、SunOS4の上で実装されていたが、原により1993年にPC9801上の386BSDに移植されました。1994年にSolaris 5へ移植するために、大幅なソースコードの変更が行われ、それを契機に、Linux, Cygwin, IRIX等のUNIX OS上に移植され続けました。
当時は、Windows版もありましたが、ソースコードが統合されていなかったため、VC++でのコンパイルはできなくなっています。
またその頃、Linuxへ移植を始めた頃に、X-Windowのツールキット作成やOpenGLへのインターフェースの実装、Solaris LWPをpthreadへ置き換えなどもしていました。
EusLispは、ロボットのプログラミングのために、様々な機能が追加され、非常に便利で高速に動作するLispシステムだと思います。ただ、目的に応じて機能の取捨選択が、できなかったのが残念です。

現在の管理状態

現在、EusLispは、東京大学 情報システム工学研究室(JSK)でメンテナンスされています。
ソースコードのリポジトリは、Souceforgeで公開されています。
EusLispは、JSKを中心にまだまだ機能拡張が続いています。ROSやOpenRTM-aistとの接続などもできるようになっているようです。

EusLispの特徴

  • オブジェクト指向プログラミング: EusLispは、単一継承オブジェクト指向プログラミングである。数値を除いた全てのデータ型は、オブジェクトで表現され、その動作はそれらのクラスの中に定義されている。
  • Common Lisp: EusLispは、EusLispのゴールやオブジェクト指向と一致する限りにおいて、 [2]や[3]に書かれているCommon Lispの文法に従う。次の節に互換性について記述する。
  • コンパイラ: EusLispのコンパイラは、インタプリタによる実行よりも5〜30倍実行速度を上げることができる。コンパイラは、インタプリタと同一の構文を持っている。
  • メモリ管理: フィボナッチバディ方法は、メモリ制御・GC・ロバスト制御に有効なため、メモリ管理手法として、使用されている。 EusLisp は、比較的に平均的な量のメモリを持つシステムで動作できる。ユーザーは、それぞれのデータ型毎のページアロケーションの最適化を考える必要がない。
  • 幾何学関数: 数値は、いつも直接データとして表現されるため、数値計算によってゴミは発生しない。任意の大きさのベクトル・行列におけるたくさんの幾何学関数は、内部関数となっている。
  • 幾何学モデラー: 立体モデルは、CSGの処理を使用して、基本的な形から定義することができる。質量や干渉チェックや接触判別等を備えている。
  • グラフィックス: 描画時の陰線処理やレンダリング時の陰面処理を備えている。画像をポストスクリプトデータとして出力できる。画像処理 エッジ抽出機能を備えている。
  • マニピュレータモデル: 6自由度を持つロボットマニピュレータを簡単にモデル化できる。
  • Xwindowインターフェース: Xlibの関数呼び出しとXlibのクラスおよび独自のXToolKit?クラスの3つのレベルのXwindowインターフェースを備えている。
  • 他言語インターフェース: Cや他の言語で書かれた関数をEusLispの中から呼び出すことができる。 EusLispと他言語間の両方向呼びだしを備えている。 LINPACKのようなライブラリ内の関数は、このインターフェースを通して実行される。 X toolkitのCall-back関数はLispへ定義することができる。
  • UNIX依存関数: ほとんどのUNIXのシステム呼びだしおよびライブラリ関数は、Lisp関数として揃っている。通信処理や非同期入出力も可能である。
  • マルチスレッド: グローバルデータを分割してマルチ処理を実現するマルチスレッドプログラミングが Solaris 2オペレーティングシステムの上で可能となった。マルチスレッドは、非同期プログラミングを容易にし、実時間応答を改善する。もし、マルチプロセッサのマシン上でEuslispを実行するならば、並列プロセッサの高い計算能力を利用することができる。