見出し語は主にコンピュータ用語です.思いついたときに項目を追加します. 主な更新は Blog でお知らせします.
Lisp で書いたアプリケーションは,実行中に読み込んだデータを簡単に
Lisp プログラムとして実行できるため,
開発時に実装していないはずの機能が実運用中に実現できてしまうこともある.
これを利用して,ソフトウェアのリリース後に発覚した重大な不具合
(ユーザにばれるときっと大目玉を食らったり,訴えられたりする) のパッチを,
ユーザにそれと悟られないように「データファイル」として配布・
適用しているベンダーもあると聞く.
この方法には,
既に稼働しているアプリケーションを停止させずにパッチを当てることができるというもう一つの利点もある.
そのため24時間365日連続運転が要求されるミッションクリティカルなシステムでひそかに多用されていると思われるが,関係者は awk 多くを語らない.
これは非常に便利である反面, 重大なセキュリティホールになる可能性があることは容易に推測できる. また,プログラムが自分自身を書き換えながら実行する自己言及的 Lisp プログラムを書くことも可能であるが,
以上の事実がセキュリティおよびソフトウェア保守性・ 安全性の重大な問題であると考えた一部の人々は, Lisp の能力を著しく制限したプログラミング言語 Java を開発した.(Java の項を参照)
また,データとプログラムが同じ形式であることのもう一つの欠点は, どこまでがプログラムでどこからがデータだかわかりにくいという点である. これは Lisp 初学者が最も混乱する点であるが, 時には Lisp 処理系自身もわからなくなるらしく, さっきまでデータとして扱っていたS式を, 次の瞬間にはプログラムと勘違いして実行してしまうという不具合が多発している (read-eval-print ループやマクロ機能はその勘違い常習犯). この混乱を生み出すバグは eval,apply,funcall 関数にあることはとっくの昔に突き止められているにもかかわらず, なぜかいまだに修正されていない.
なお "Lisp" という名前は,"Lots of Inspid and Stupid Parentheses" (無味乾燥でバカバカしいたくさんの括弧) の略だと言われている.
■参考リンク
その一方で Lisp
のもう一つの最重要機能であるガーベージ・コレクション (GC) はそのまま採用されたが,
それは「世間にはメモリ管理のできないプログラマがあまりに多いため
(C/C++ で実証済),GC
機能を入れないとバグが多発するプログラムが量産されてとんでもないことになる」
という苦い経験 苦渋の決断 配慮からであった.
Java ではポインタをプログラマからほとんど隠蔽しているが,
これも同じ理由による.(それでも NullPointerException
が撲滅される気配は全くない.)
Java は,Lisp があまりに強力すぎるため, セキュリティおよびソフトウェア保守上の問題がある (Lisp の項参照) と考えた一部の人々が開発した.Lisp 界の大物でもある Guy L. Steele, Jr. も参加している. Java は「プログラムの生産性」も謳っているものの, Lisp には遠く及ばないため, Lisp の機能を制限する際の名目の一つとして挙げることはできなかった.
なお "Java" という名称は, "Just Another Vague Acronym" (もう一つのよくわからない略語) の略語だと言われている.
■参考リンク
要素を逆順にした理由は, 単に括弧を削除するだけではどれが最後の要素かわからなくなってしまうため. Lisp では括弧内の最初の要素が関数名であるため, これが最後になるように要素の順序を変更することで, 括弧をすべて削除しても最後の要素を認識できるようになった.
Obi-Wan Kenobi のセリフ "Use the FORTH, Luke. Let go, Luke." によって,FORTH は瞬く間に Star Wars ファンのプログラマの間に普及した.
このページの主な更新は Blog でお知らせします.
Copyright © 1991, 2006-2007 noocyte, All rights reserved. E-mail: relipmoced (a) yahoo.co.jp (" (a) " を半角のアットマークに書き替えてください.) リンクはご自由に. |