2018年2月12日月曜日

Picat言語の将来性

また新しいプログラム言語かと思い少しうんざりしていた、今日この頃ですが、どうやらそうも言っていられないかも知れません。

この言語の特徴をあげると(本家サイトの情報から)
1.マルチパラダイムプログラム、PythonとPrologの側面
2.ルールベース言語
3.記述が非常にシンプル
4.制約論理を実装している
5.テーブリング、メモ化して最適化計算
6.仮想マシンで動作し、スケーラブル
7.SATのアルゴリズムでも賞を最近とっている
8.アクター(イベントハンドリング)

この他、基本的な情報はウィキを参照してください。

これだけの理想的な特徴を持っている言語は他にはないような気がする。
Haskellは殆どが満たしているが、コードが読みにくい。
試しにサイトのコードやライブラリを眺めて見ると、びっくりするほどシンプルに記述されている。

本家サイトには大量のサンプルプログラムがあり、使う上で
のフレームワークは殆ど揃っている。

今まで、PythonやPrologで記述しづらいアルゴリズムがこのPicatで解決できるような気がする。

そういう意味では、Prologに慣れている人(殆どいないかも)には待ち焦がれた実用システムが構築可能なプログラム言語と言える。(ちなみにPrologの特徴であるassertが見つからないが、cl_factsが同じ意味を持つらしい。違うのは述語を全リストで登録し、更新するときは毎回全述語入れ替えが起こる。つまりバッチ化されたということ。)

アクターとイベントハンドリングは、UIやWeb等の仕組みで使われることを前提にしているようです。Webの説明の切り口が少ないので、今はどうやって利用するか調査中です。

今は、TensorFlowのようなニューロン系のAIが大注目されているが、いずれSATによる手法もクローズアップされる時期も来るかも知れない、その時の為にPicatのようなクールな言語は最適かも知れない。
この意味で、人工知能系のアルゴリズムの研究には適していると感じている。

改めて、現在ライブラリーやサンプルコードを眺めた限りは、制約論理系に重点を置いている感じがするが、NLPもターゲットにしているようなので、是非新しいアルゴリズムが開発されることを期待したい。

「Picatに将来性あれ!!」

追伸:3月27日
この記事を書いてから、PicatをPrologの代わりに使い続けて、約1ヶ月半が経ちました。これまでの感想そ追加します。
利点:
Prologよりも遥かに綺麗なコードが書ける。
カットがないので、無限ループに遭遇することが少ない。
エンジンとして使うのに適している。
Prologで遅いアルゴリズムで使えないアイデアも使えるようになった。
まさしくルールに集中できるので、思考にもいい影響がある。(Prologのコードを再構築できるようになった。)
tableを使い、組み合わせの最適化解を求めたいのであれば、絶対的に使うべき言語です。
欠点:
汎用的なコードはまだPrologの方が早い。
メモリが巨大化するので、これを防ぐようにアルゴリズムを考える必要がある。

追記:20181229
Picatを使い始めてから実際のところ、言語の使い方は習得できましたが、メモリのガーベージがだめなようで、まだまだPrologに頼るところが多い状態です。現状報告まで。
追記:20190223
garbage_collect関数を呼ぶとき、sysをインポートすれば、正常にガーベージできました。誤報を流してしまい申し訳ありませんでした。

2 件のコメント:

  1. 「これだけの理想的な特徴を持っている言語は他にはないような気がする」とHamadaさんがお書きになっているのを読んで、同好の士を得た思いです。私も、2年ほど前にこの言語に出会ったとき、やはり同じように感じました。それ以来、この言語の魅力を多くの人に知ってもらいたいと考え、ウィキペディアにPicatの項目を作ったり、初心者向けのチュートリアル*1を書いたりして布教活動に励んできたのですが、同好の士がほとんどいなくて寂しい思いをしていたところでした。そんなときにHamadaさんのこのブログと出会えて、非常にうれしく思っております。

    *1 「Picat実習マニュアル」 http://tutorial.jp/prog/picat/picatman.pdf

    返信削除
  2. 大黒学さんコメントありがとうございます。
    大黒学さんのサイトにあるマニュアルも拝見し非常によくまとめられていて、関心いたしました。
    現在Picat、Pytorch、PythonとPrologでもっと実用的なツールが作れないか検討をすすめています。記事は「TakioQ AI」で少しづつ検討の結果を公開していきます。
    そこにPicatの色々書いていきます。
    Picatは世界中でもまだ存在すら感じられていないようですので、何か本格的に使える事例を構築していきたいと思っています。私も同士としてこれから参加させていただきます。

    返信削除