2014年10月27日月曜日

プログラミング言語と静的処理系の駄考察

今日はドラゴンブックから離れて、自分が日頃考えている俺言語のあり方(カッコイイw)について少し駄文を連ねてみたいと思う次第です。

まず、プログラミング言語処理系と静的処理系についてです。プログラミング言語で何かを書いて実行するには、勿論処理系が必要となります。プログラミング言語にとってプログラミング言語処理系はマンダトリです。それに対して静的処理系はあったらうれしいな♡とか、コーディング規約守ってるか、メモリーリークしてないか、とか、わりと書いたあと知りたい事実を知るために必要になる感じで、やや一歩遅れて歩んでる感じがします。

そして大事なことは、すべてのプログラミング言語処理系が対応する静的処理系を持っている訳ではないということです。プロセデュアルなプログラミング言語では、CFG(Control Flow Graph)を使った静的解析が手法として確立されている感がありますが、より高次の記述ができる言語やスクリプト言語などは、静的処理系が発達している例があまり無いような気がしています。

理由はおそらく次の通りです。


  1. CFGを作るだけではダメで、alias解析など、いろいろ解析しないとプログラムのデーターフローが解析できない
  2. そもそもCFGとはかけ離れた言語の構造を持っている
  3. 関数型言語のように、カリッカリに最適化されるため、コード断片との一対一対応が取れない
  4. (そして)静的処理系の作成にモチベーションを見出せない(=マニーにならない、など)
そこで私はこう考えます。

プログラミング言語にとって、視覚化はまさしく、これからのコンパイラにとって必要な機能になるのではないかと考えています。なぜなら、従来のプログラミング言語は闇を探るような作業を強いられる場面があまりにも多かったと考えるからです。私たち(プログラミング言語設計者)は言語の構造や細かい設定、そしてデータフローなどをもっと様々な表現形で表出すべきだと思うのです。

そして、そのためにプログラミング言語を二つの層に分け、静的処理系の対象をより低次の言語に限定し、その言語自体は静的解析が可能である、単純な構造を持たせるべきなのでは、と私は考えています。そしてできれば高次の表現において新しいプログラムのデータフローなどを新しい表現形で表現できればいいな、と思うのです。

よって、次の二つの言語を作ることを本ブログの目的としています。

  1. HL(High Level Language): スクリプト言語のような高次の記述を持つ言語。
    LL(後述)の操作が可能
  2. LL(Low Level Language): 制限されたLLVM IRに簡単に変換できるような低次の言語。HLの内部に(GCCのasm記述のように)LLを記述することが可能
そしてそのLLの静的処理系を作りたいなと考えています。夢は大きいですね!

0 件のコメント:

コメントを投稿