Odinを触ってみる
OdinというCの代替を目指したデータ指向な言語がある。気になったので触ってみる。
きっかけ
この記事で触れられていて、そこから知った。
Odinでできること
公式でCのwrapperが提供されている
顧客の欲しかったものを出されてる感じでとても好感が持てる。
ドキュメントにも「実用性」というワードが出てくるあたり、実際に使われる事をよく考えているんだなぁと感じる。
SDLが公式でサポートされているのでゲーム開発にも用いられている[1]。実際にOdinで書かれたゲームが売られたりしている。[2]
あとWasmにも対応している。
ライブラリ一覧を眺めていて、この言語はゲームプログラミングにステータスをかなり振っている気がしてきた。
スポンサーにゲーム企業がいるのもあって、ゲーム開発にかなり向いていそう。逆にそれ以外での利用はいまいち進んでなさそう。
-
というより公式でサポートされているライブラリがグラフィックス系に偏っている気がする... ↩︎
インストール
インストーラでインストールすることは可能だけど、手動でインストールすることをおすすめする。
なぜかというと、最新版(dev-2024-04-nightly)だと依存しているLLVMの共有ライブラリ(libLLVM)が参照するlibeditの共有ライブラリの参照先が違っていて、そもそも起動すらできないため。[1]
まず始めにソースをダウンロードする。
このリンクから最新版がダウンロードできる。
するとodin-ubuntu-amd64-dev-2024-04a.zip
みたいなzipファイルがダウンロードされる。
このファイルを解凍すると、更にdist.zip
というzipファイルが現われるので、それも解凍する。
すると./dist
というディレクトリが生成される。以下からはこの./dist
内にいると仮定して解説する。
恐らくディレクトリ内にある./odin
ファイルを実行すると、以下のようなエラーがでる。
(出なかったらラッキーなのでそのままPATHを通してインストールを完了する。)
./odin: error while loading shared libraries: libedit.so.2: cannot open shared object file: No such file or directory
これを解決するには以下のコマンドでlibLLVM
が参照するlibedit
の共有ライブラリ名を変える必要がある。patchelfはArchならparu -S patchelf
でインストールできる。
patchelf --replace-needed libedit.so.2 libedit.so.0 libLLVM-14.so.1
odin version
でバージョンが表示されたら成功。あとはodin
という名前の実行ファイルにPATHを通せばインストールは完了。自分は~/.bin
に./dist
ディレクトリを配置しているので、odin
とう名前のシンボリックリンクを作成してPATHを通している。
サンプルコードを書いたので上げてみる。
mainにコメントアウトされた関数呼び出しがあるので、そのコメントを解除すると色々試せるようにしてある。
-
array
配列の宣言、インデックス -
swizzle_operation
入れ替え操作を完結に行えるスウィズル演算 -
dyn_array
動的配列 -
fizzbuzz
お馴染のFizzBuzz -
structure
構造体 -
maps
マップ型
タプルみたいなやつ -
defer_block
任意の処理を終了時に実行できる機能 -
maybe
例外処理に使うmaybe型。あまり使われないらしい -
normal_error
maybeを使わない従来のCスタイルな例外処理のサンプル
(Cの例外処理はよく分からないので当てずっぽうなところがある)