本日、明治大学で日本語ワークショップが開催されました。

飯箸先生にはじまって、筧先生、私、言霊の岡田さん、プロデルのゆうとさん、マイクロワードの尾崎さん、なでしこユーザーのChocoさん、99yenさんと続いたのですが、非常に素晴らしいプレゼンが多く、とても刺激を受けました!!皆さん、日本語プログラミング言語を極めている方ばかりで、非常に視点も面白く感心するばかりでした。

参加の皆さんのレポート †

他に、より詳しいレポートがあがっています。

クジラ飛行机の個人的な感想 †

とくに、筧先生の招待講演は、心に訴えるものがありました。というのも、かなり私の方を見て語りかけてくださった感じだったのです。皆さんの素晴らしいプレゼンについては、別の機会に詳しく紹介しますので、筧先生が力説していた点だけメモしておきます。

  • すべてのソフトウェアは、舶来のもので、欧米的な考え方に基づいている
  • 日本のソフトウェアが遅れているのは、そのせいもあるのではないか。
  • OSからネットワークの仕組みから「日本語」で考えなおす必要があるのでは?

そして、日本語プログラミング言語がもっと認知されるようになるためには、プログラミングやクラスライブラリなどを日本的に考え直し、使いやすいものとして作っていく必要があるというものでした。そこで、「なでしこが、なでしこで、作られていないのは、なぜか?」というメッセージもいただきました。

それから、発表後の歓談の中でも、ある方から「なでしこがなでしこで出来ていれば、ユーザーがなでしこでライブラリを拡張できるのだから嬉しいはず」とのコメントを頂きました。確かに、理想を言ってそれができれば一番良いと思います。

そうです。その言語で、その言語を作る、いわゆる「セルフコンパイル」は、プログラミング言語作者の夢です!!贅沢な時間ができたなら、ぜひやってみたいです。

…ただ、現実問題としては、それは、現実的ではないのです。とても、やってみたいのに、やらない、それは、次の理由です。ちょっと、自分でも開発方針を考え直す必要があるかもと思って、やらない理由を考えてみました。皆さんからの意見などいただけると嬉しいです。

なでしことセルフコンパイルについて †

一番目の問題は「時間」です。しかし「時間がないことを言い訳にするのはみっともない」と言われますので、次の問題について考えてみます。

二番目の問題は「優先度」です。夢の「セルフコンパイル」よりも、なでしこは「実際に使えて便利」という点を優先しているので、ユーザーは、なでしこがなでしこで作られているということはどうでもよくて、それよりも、もっと時代にあった便利な命令や仕組みを必要としていると思うのです。「動くのが正義」で、どんなコードやツールで実現されていようが、やりたいことが気持ちよく実現できれば「それが一番」というのが、なでしこの開発方針なのです。

そして、三番目の問題は、なでしこや(現在の)日本語プログラミング言語が、詳細なシステム記述には向いていないという点をあげることができます。これは、Perl が Perl で書かれているか、Ruby が Ruby で書かれているか?ということを考えると分かります。確かにライブラリは、言語自身で書かれていますが、本体は、いずれもC言語で記述されています。下層のシステムを記述するのに適した言語と、初心者でも誰でも使える言語では、そもそもの作りが違うと思うのです。

というわけで、当面は、なでしこでなでしこを作らないと言うわけなのですが、でも「セルフコンパイル」って甘い誘惑であることに違いありません!!

それでは、次に、セルフコンパイルを行うことを前提として、新しい日本語プログラミング言語を作る場合について考えてみたいと思います。

日本語プログラミング言語でセルフコンパイルを実現する場合 †

なでしこは、明らかにセルフコンパイルに向いていません。もし、根性で作り上げたとしても、あまりに無駄が多くなってしまって、実用的ではないでしょう。なぜ無駄が多くなってしまうかというと、「なでしこを簡単に使えるため」に、多くの無駄な処理(いやユーザーから見れば、プログラマーの負担を軽減する素晴らしい処理)が随所に仕掛けられているからです。それは、日本語に構文を近づけるための冗長な表記方法であったり、事務や経理で多用されるCSV形式に注視したデータ構造になっている仕様のためです。

そこで、もし、日本語プログラミング言語でOSを記述したり、セルフコンパイルを記述するためには、その目的にあった低レベルな日本語プログラミング言語を作れば良いと思うのです。

C言語の表記はポインタが扱えたり、簡潔な記述を行うための演算子が用意されています。なでしこでは、意図してこうした構文を排除していますが、積極的にこうした構文を取り入れて、システム記述に向いた言語を作れば良いと思います。

そして、理想的には、複雑で速度が求められるところは、C/C++ で、フロントエンドの緩い部分は、VB/C# で書くという選択肢のように、低レベルなところと、高レベルなところをそれぞれカバーする別の言語であればよいと思います。(これは、ちょっと前でいえば、基本的な部分をBASICで書いて、速度が必要だったり何かしらのシステムコールが必要な部分をアセンブラで書くといった役割分担に似ています。)

ですから、セルフコンパイルのできる言語を作るために、以下のような日本語プログラミング言語を提案します!!

  • とにかく文法を単純にする→セルフコンパイルを実現しやすくするため。
  • 型は厳密にする必要がある→メモリ効率を良くするため。(OSのAPIを使いやすくするため。)
  • 日本語でアルゴリズムを簡潔に記述することができる
    • 日本語をベースとしていながらも、記号的な表現も含んでる?
    • これは見た目には、ちょっと日本語には見えない表現も含むが効率重視のため。
  • オブジェクト指向ならば日本的解釈が必要
    • JavaScriptのプロトタイプベースの方がもしかして日本人向け?
    • あるいは、オブジェクト指向を否定して別の考え方を導入する必要があるかも。

ここまで考えて、いやいや、こんな言語仕様は古臭いので、もっと贅沢にセルフコンパイルしても良い時代なのかもと思いなおしました。

  • 多少効率が悪くても、さくっとセルフコンパイルを実現するための富豪的な仕組みを導入する
  • 型は緩い方が今風、OSのAPIは、対応する方に自動変換するような仕組みを考える
  • どこでも動くように、コンパイラは機械語でなく、バイトコードを吐くようにする→今なら、既存のランタイム環境(JREや.net)で動くものにする

それなら、なでしこでもできそうかも?!このあたりは、言語設計者のバランス感覚にかかっていますね。提案しますと言いながら提案できてないですが、気長に(数年のレベルで)考えて、考えがもっとしっかりまとまってから実装に移りたいと思います。

コメント †
さかもと昨日は、お疲れ様でした。私もセルフコンパイルの必要性には疑問でした。美しさと研究的にはおもしろいと思いますが、実用性を大事にしていると思うので逆に使える要素はなんでも使う形でもありかと思います。 (2008-09-28 11:12:33)
mr参加していないので検討はずれかもしれないですけれど、libフォルダに入っているnakoファイルとかについては、なでしこがなでしこで書かれている、ということでよいのでは?と思ったりするのですが・・・。言語のコアの部分(OSだとカーネル?)は別になでしこで各必要はなくて、そこから先については、できるだけなでしこでかけて、かつ速度を求められないところはなでしこで書く、という風にすみ分けることができれば、なでしこ2.0の開発の実現が近づくのではないかと思ったりします。まあ、GUIとかは楽できそうにありませんが・・・ (2008-09-28 18:37:38)
クジラ皆さんコメント感謝です。参考になります。このあたりは、まだまだいろいろ考え中です。 (2008-09-30 02:15:48)
お名前:
 


作成:2008-09-28 00:26:54/更新:2008-10-03 12:57:05

→テキスト形式で見る

くじらぶろぐD by kujirahand RSS

konawiki 0.23