Mokkosuの始め方 (プログラミング経験者向け)

ここではC、C++、C#などの手続型プログラミング言語経験者を 対象としてMokkosuでのプログラミングについて説明します。

はじめに

Mokkosuは関数型プログラミング言語です。 関数型プログラミング言語では変数の値は不変(再代入できない)で、 ループの代わりに再帰を多用するなど、手続型言語とは異なる スタイルでプログラミングを行います。

関数型プログラミングの主な目的はプログラムを宣言的に記述することです。 具体例としてMokkosuで記述したクイックソートのプログラムを以下に示します。

fun qsort list =
  match list {
    []          -> [];      # listが空の場合は空リストを返す
    key :: rest ->          # listを先頭(key)と残り(rest)に分割できる場合
      let larger =
        # restの各要素をxとしたとき、x > keyを満たすものを集めてくる
        for x <- rest; if x > key in x        
      in
      let smaller =
        # restの各要素をxとしたとき、x <= keyを満たすものを集めてくる
        for x <- rest; if x <= key in x
      in
      qsort smaller ++ [key] ++ qsort larger   # qsortを再帰的に呼び出して結果を連結する
  };

上のプログラムをみると、ちょうどアルゴリズムの教科書に書かれているような表現になっている ことがお分かりいただけると思います。 このようにアルゴリズムを直接表現するのを宣言的なプログラミングと呼びます。

アルゴリズムをいちいち手順(手続き)に分解する必要がないことから、 宣言的なプログラミングはラピッドプロトタイピングに向いています。

逆にコンピュータの性能をぎりぎりまで引き出すようなプログラミングには 残念ながら向いていません。 現在のコンピュータのアーキテクチャは手続的なモデルになっているので、 性能を引き出す場合はどうしても手続的な記述が必要になります。

また、アルゴリズムによっては手続的な記述を行った方が分かりやすい場合もあます。 宣言的なプログラミングと手続的なプログラミングは適材適所で使い分ける必要があります。

Mokkosuは関数型プログラミング言語であり、宣言的なプログラミングを強力にサポートしています。 しかし、同時に手続的な表現も可能なように言語の構文を工夫しています。 Mokkosuを使えば、対象とするプログラムの種類に応じて柔軟にプログラミングスタイルを 切り替えることが可能です。

MokkosuのコンパイラはC#で記述されています。 Mokkosuの最初の実装は、2015年2月5日から2015年2月18日までの わずか2週間の期間で開発されました。 2週間の期間で言語の設計、コンパイラの実装、簡易統合開発環境の実装、 ライブラリの実装、最低限のドキュメントの執筆に取り組みました。 取り組みの過程はブログに記事としてまとめてあります。

次のステップ

関数型言語が初めての方を対象としたチュートリアル を用意したのでそちらを参照してください。

サンプルプログラムをいじりながら言語を覚えたい方は、 以下のリソースが参考になると思います。

あなたのオリジナルの作品をお待ちしています。