作成した言語の名前はJ--(ジェイマイナスマイナス。マイナス記号がマズイ場合はJmmと略します)です。これはインタプリタ型のスクリプト言語(静的型付け)です。対応OSは今のところAndroidのみ(アプリとしてランタイム、または組み込み版を提供)ですが、そのうちLinux版とかも出すかも。オブジェクト指向では無く、関数などの作り方が普通のプログラミング言語とかなり異なります。人工知能から利用しやすいように作っているため、既存の言語とは色々異なる部分があって最初戸惑うかもしれません。
基本型のBaseType、変数型のVarType、コンテナのStructureTypeという3つの大きなくくりがあり、普通の変数はVarTypeです。
BaseTypeは大きく分けるとActor、Order、Fnの三種類です。
例えるならActorがバイト君、Orderが命令書、Fnは料理・・・?。
和風に例える方が分かりやすいかも。
Actorが式神。Orderが命令、Fnは呪符(必ず一定の効果を出し、副作用が無い)。
Actorが忍者。Orderが命令の巻物、Fnは忍術。とかの方が海外の方にはいいか。
この言語は基本的にマルチスレッド(最小で3スレッド)で動きます。画面操作と通常の演算を最初から別スレッド(実装によるが、想定はCPUの別々のコア)で動かしているため、アプリの利用者側からするとサクサクです。このため、まだ言語自体の処理速度は遅いのですが、実用上は気にならないと思います。プログラマーはこの3スレッドについて意識することはありません。ランタイムが処理を勝手に分離してくれます。
また、Actorは固有の領域を持つスレッドであるため、いくつ並列で動かしても基本的にメモリを壊しません。IOもランタイムレベルで管理されているため、入力と出力が同時に起こらないようになっていたり、入出力が循環して無限コピーになっていたら例外を出すなど、他の言語でありがちなミスのいくつかはそもそも起きないようになっています。このため、かなり安全に並列処理できます。今はマルチコア時代なので、上手く使えば爆速です。
・・・とりあえず今出せる情報はこんなものかな。では恒例のやつを。
(Sys@s).log("J--", "Hello, world!")
これで、AndroidのLogcatにJ--タグで「Hello, world!」が表示されます。@マークは他の言語でいうところのnewですね。J--は変数型@変数名で変数を新しく定義した後、その部分に変数が残るので、そのまま.log()などのコマンドを呼べます。J--ではvoid(戻り値が無い)なコマンドが「存在しない」ため、基本的にどのコマンドも連鎖できます。画面の方にトースト出力も同時にしたい場合は以下のように
(Sys@s).log("J--", "Hello, world!").toast("Hello, world!", true)
でトーストも同時に出せます。logやtoastの戻り値はs自身となっています。早い話が、レイアウトもこのように作れるので、かなり素早くプログラミングできます。IT系スタートアップには便利ではないでしょうか。
ある程度バグが無くなってきたら、ストアの方でランタイムアプリのβ版を出したいと思いますー。
※2016_9_27にちょっと修正しました。J--の動作は最小2スレッドでは無く3スレッドに変更されました。現在、ユーザーのタップなどに対するコールバックも専用スレッドで処理されるようになっています。これにより、最新のα版ではコールバックで重い処理を行ってもANRが発生しなくなりました(一時停止時、復帰時、及びアプリ終了時の逐次呼び出しが必須のコールバックを除く)。
※2017_2_7の修正で、Fx型をFn型に改名しました。
0 件のコメント:
コメントを投稿