flat7th

# プログラミング言語「残心」

created 2012-06-06 modified 2012-06-06 

2012/6/6

Programing Language Zanshin

名称の由来は、日本の武道の残心。
残心とは、自分がやっつけたモノに配慮すること。
Zanshin is a common concept of all Japanese martial arts.
Zanshin means "keeping a consideration to the object that you defeated."

オブジェクトに対しデストラクタが起動するタイミングを厳密に規定することが特徴。その意味で、Javaと正反対。

あるオブジェクトがスコープから外れるとき、言語処理系がかならずデストラクタを起動する。C++のように。
呼び出し木構造の深い階層で発生した例外を、はるか上位の例外ハンドラで補足するときであっても、スコープに結びついたオブジェクトに対しては言語処理系が必ずデストラクタを呼ぶ。

いわゆる new/delete を、言語機能として持たない。
その代わりに、システム クラス ライブラリが、オブジェクトを動的に追加できる方法を提供する。
プログラムソース上、動的なオブジェクトが、プロセス、スレッド、クラスなど、どの記憶クラスに対し追加されるのかが、わかる。




箇条書き:
  • C++での auto_ptr の実装テクニックを、言語全体に広げるということ。
  • オブジェクトの動的な追加を行う際、プログラマは、そのオブジェクトのライフタイム(何と同時に削除するべきか)を知っている。だから、ひもづく対象に対して動的に追加できればよい。
  • 現在のほとんどのプログラミング言語は、言語に対し new というキーワードが1つしかない。
  • プロセスに対するnewなのか、スレッドに対するnewなのか、Webサービスの1回の処理に対するnewなのか、プログラマは知っている。それを言語処理系に伝えれば、言語処理系はもっと能率的に動けて、かつプログラマの負担もない。
  • その概念を、賢いプログラマは自分のライブラリで実装し、利用している。しかし言語の標準に含まれていないので、各現場で応用できない。


(ポインタの循環参照はできない仕組みとする。循環的に参照しなければならないプログラムは、インデックスで実装すればよい。 -> と思ったけど、それって 弱い参照 と同じじゃんね。うまい方法はないかな。)



よく考えたら、独立したプログラミング「言語」である必要はなく、プログラミング「スタイル」であってもよいな。だけど、混ざってると台無し。なので、たとえばC++上に乗せることはできるけど、Javaの上に乗せることはできない。



開発に用いる第一言語はLojban。と、日本語。おまけで英語。

コンセプトイメージは、刀で両断にされたコーヒーカップと、残心をとっているサムライの影絵。