2022-12-30
JavaScriptのランタイム(実行環境)、Denoをインストールするだけ、WebAssemblyを楽しめる環境ができたので、Geo3x3を移植してみました。これで対応94言語!


「Geo3x3 - Supported Languages」

94のプログラミング言語に対応 (JavaScript / TypeScript / Zen / C / C++ / C# / Swift / Java / Python / Ruby / PHP / Go / Kotlin / Dart / Rust / Haskell / OpenVBS / VBScript / Visual Basic / Scala / R / GAS / Nim / Lua / Perl / Elixir / Groovy / D / Julia / Racket / OCaml / Erlang / Clojure / F# / Haxe / Scheme / Common Lisp / Elm / Hack / PureScript / CoffeeScript / Objective-C / Frege / Eiffel / Ada / Free Pascal / Crystal / Forth / Bash / AWK / Vim script / Vim9 script / IchigoJam BASIC / GnuCOBOL / MoonScript / Octave / Emacs Lisp / Fortran 90 / MariaDB SQL/PSM / PL/pgSQL / Tcl / V / Pike / Io / Wren / GNU Smalltalk / JScript / Pharo / Scratch / Standard ML / なでしこ / Kuin / ClojureScript / HSP / Reason / THPL / Janet / Phel / Raku / 文言 / Vala / SmileBASIC / Small Basic / Flix / PowerShell / Koka / Zig / BanchaScript / AssemblyScript / Clawn / FORTRAN 77 / orelang / Laze / WebAssembly)


「in WebAssembly」

同じアルゴリズムを書いているので、どんな言語かざっくり見るのにも便利です!お気に入りの言語、ありますか?


「geo3x3.wat - Geo3x3」

WebAssemblyのテキスト表現WATファイルでのGeo3x3はこんな感じで、LISPで有名、S式で記述します。変数取得が local.get、変数への代入が local.set と、先頭に必ず命令が登場するので冗長になり勝ちです。コンパイラさんの気持ちになれます。


「Index of Instructions — WebAssembly 2.0 (Draft 2022-12-15)」

命令はこちらに全部載ってます。欲しい命令を探してやってみて動けばOK!ローカル変数は local で関数の先頭で宣言して、メモリに1byte書き出す i32.store8、整数を実数にする f32.convert_i32_u、逆の i32.trunc_f32_u など、いろいろ駆使して作ります。

1ファイルで完結させるため、main関数を作り、外部に出力用の関数があることを想定した作りになっています。実行ランタイムは一緒に作った、DenoだけでOK、WebAssemblyのアセンブラ&ランタイム「wata.js」です。WASI対応もいいかも。

WebAssemblyの歴史について
誕生して5年、今ではどのブラウザでも普通に使えるようになった「WebAssembly」。その歴史がまとまった記事がありました。NaCl+asm.jsWebAssembly だったんですね!LLVMに組み込まれたのも大きい!


「Issues - Geo3x3」

Geo3x3に、もしお気に入りの言語がなければぜひ、対応予定言語が並べているIssuesに追記ください。最近見つけた4言語を追記しています。チャレンジしたい方、ぜひ!

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS