noocyte のプログラミング研究室 〜プログラムは楽しげに走らねばならない♪〜

noocyte の私家版:悪魔の辞典

公開:2006/09/15(金)
最終更新:2007/10/28(日)


見出し語は主にコンピュータ用語です.思いついたときに項目を追加します. 主な更新は Blog でお知らせします.

AI (えー・あい)
【略語】Artificial Idiot (人工痴呆). "Artificial Intelligence" (人工知能) の略であると誤解している (あるいは,幻想を抱いている) 人が非常に多い.
四苦ハック (しくはっく)
四苦 (速度不足,メモリ不足,バグ多発,納期切迫) に苦しみながらハックすること.
原始再帰的 (げんしさいきてき,primitive recursive)
「環境破壊と退廃をもたらす現代文明を捨て, 素朴な原始時代の生活に再び立ち帰ろう!」 という過激な復古思想および運動を形容するのに用いられる.
一般再帰的 (いっぱんさいきてき, general recursive)
「昔は良かった.昔に帰りたい.」という懐古趣味を表す. 「原始再帰的 (別項参照)」が原始時代への憧憬に基づいているのに対し, 「一般再帰的」は原始時代に限らず, より一般的な過去全般への憧憬に基づいている.
Lisp
自己言及的な構造と単純な構文 (S式) により, 高度な機能を持つソフトウェアを簡単に開発することのできる強力なプログラム言語. データとプログラムを同じS式という形式で表現する.

Lisp で書いたアプリケーションは,実行中に読み込んだデータを簡単に Lisp プログラムとして実行できるため, 開発時に実装していないはずの機能が実運用中に実現できてしまうこともある. これを利用して,ソフトウェアのリリース後に発覚した重大な不具合 (ユーザにばれるときっと大目玉を食らったり,訴えられたりする) のパッチを, ユーザにそれと悟られないように「データファイル」として配布・ 適用しているベンダーもあると聞く. この方法には, 既に稼働しているアプリケーションを停止させずにパッチを当てることができるというもう一つの利点もある. そのため24時間365日連続運転が要求されるミッションクリティカルなシステムでひそかに多用されていると思われるが,関係者は awk 多くを語らない.

これは非常に便利である反面, 重大なセキュリティホールになる可能性があることは容易に推測できる. また,プログラムが自分自身を書き換えながら実行する自己言及的 Lisp プログラムを書くことも可能であるが,

  • いかなる天才ハッカーにも理解不能な自己言及的 Lisp プログラムが存在する.
  • そのようなプログラムの無矛盾性 (要するにバグがないこと) を証明することは不可能である.
ということが,ゲーデルの不完全性定理を用いて数学的に証明されている.
(ただし,この証明の無矛盾性はまだ証明されていない.)

以上の事実がセキュリティおよびソフトウェア保守性・ 安全性の重大な問題であると考えた一部の人々は, Lisp の能力を著しく制限したプログラミング言語 Java を開発した.(Java の項を参照)

また,データとプログラムが同じ形式であることのもう一つの欠点は, どこまでがプログラムでどこからがデータだかわかりにくいという点である. これは Lisp 初学者が最も混乱する点であるが, 時には Lisp 処理系自身もわからなくなるらしく, さっきまでデータとして扱っていたS式を, 次の瞬間にはプログラムと勘違いして実行してしまうという不具合が多発している (read-eval-print ループマクロ機能はその勘違い常習犯). この混乱を生み出すバグは eval,apply,funcall 関数にあることはとっくの昔に突き止められているにもかかわらず, なぜかいまだに修正されていない.

なお "Lisp" という名前は,"Lots of Inspid and Stupid Parentheses" (無味乾燥でバカバカしいたくさんの括弧) の略だと言われている.


■参考リンク

Java
セキュリティおよびソフトウェアの安全性・ 保守性という名目で Lisp (別項参照) の表現力および機能を著しく制限し,C++ 風の構文を採用したプログラム言語. この構文にこだわってS式を採用しなかったため,Lisp の最も重要な機能の一つであるリフレクションを別途改めて実装せざるを得なかった.

その一方で Lisp のもう一つの最重要機能であるガーベージ・コレクション (GC) はそのまま採用されたが, それは「世間にはメモリ管理のできないプログラマがあまりに多いため (C/C++ で実証済),GC 機能を入れないとバグが多発するプログラムが量産されてとんでもないことになる」 という苦い経験 苦渋の決断 配慮からであった. Java ではポインタをプログラマからほとんど隠蔽しているが, これも同じ理由による.(それでも NullPointerException が撲滅される気配は全くない.)

Java は,Lisp があまりに強力すぎるため, セキュリティおよびソフトウェア保守上の問題がある (Lisp の項参照) と考えた一部の人々が開発した.Lisp 界の大物でもある Guy L. Steele, Jr. も参加している. Java は「プログラムの生産性」も謳っているものの, Lisp には遠く及ばないため, Lisp の機能を制限する際の名目の一つとして挙げることはできなかった.

なお "Java" という名称は, "Just Another Vague Acronym" (もう一つのよくわからない略語) の略語だと言われている.


■参考リンク

FORTH
Lisp (別項参照) のS式の括弧内の要素を逆順に並べ替えた後, すべての括弧を削除してできたプログラム言語.Lisp を学ぼうとしたが, あの大量の括弧に嫌気がさして止めてしまった人たちに歓迎された.

要素を逆順にした理由は, 単に括弧を削除するだけではどれが最後の要素かわからなくなってしまうため. Lisp では括弧内の最初の要素が関数名であるため, これが最後になるように要素の順序を変更することで, 括弧をすべて削除しても最後の要素を認識できるようになった.

Obi-Wan Kenobi のセリフ "Use the FORTH, Luke. Let go, Luke." によって,FORTH は瞬く間に Star Wars ファンのプログラマの間に普及した.

後向き推論
物事を悪い方へ悪い方へと解釈して推論を重ねること.(⇔ 前向き推論)
前向き推論
物事を良い方へ良い方へと解釈して推論を重ねること.(⇔ 後向き推論)

更新履歴

このページの主な更新は Blog でお知らせします.

  1. 1991/03 頃? 内容考案 (AI四苦ハック原始再帰的一般再帰的)
  2. 2006/09/15(金) 公開
  3. 2007/03/06(火) FORTH を追加.
  4. 2007/03/11(日) LispJava を追加,FORTH および AI にほんの少し追記.
  5. 2007/03/18(日) FORTH に追記,Lisp にリンクを追加.
  6. 2007/10/28(日) 後向き推論前向き推論を追加.


Copyright © 1991, 2006-2007 noocyte, All rights reserved.
E-mail: relipmoced (a) yahoo.co.jp
  (" (a) " を半角のアットマークに書き替えてください.)
リンクはご自由に.