Onyx 入門
Onyx とは
wasm を第一のコンパイルターゲットとした新しいプログラミング言語です。
コンパイラ、パッケージマネージャ、LSP、VSCode Extension などのエディタサポート、などを公式で用意しています。
構文的には、 Go, Jai, Odin などの影響を受けています。ベースはC言語ライクな文法です。個人的にはカスタムアロケータや data-oriented なメモリレイアウト機能、などは特徴的に見えます。また、 パイプ演算子 |>
で関数型ライクな処理チェーンの記述が可能です。
LLVM や Binaryan などを使用せず直接 wasm バイナリにコンパイルされます。コンパイラは C で書かれています。
インストール
Homebrew や npm のパッケージはないようなので、インストールスクリプトを実行するしかなさそうです、今のところ。
最初にランタイムもインストールするか聞かれます。 wasmer
, OVM
(Onyx VM?), None
、の3択です。
$ sh <(curl https://get.onyxlang.io -sSfL)
######
####++++++###
###+++++++++++++###
###+++++++++++++++++++###
###++++++++++++++++++++++++++###
###+++++++++++++++++++++++++++++++++###
#++++++++++++++++++++++++++++++++++++#-#
#--------------------------------++#####
#-----------------------------+##+++####
#--------------------------+##+++++##### The Onyx Programming Language
#-----------------------+##+++++++######
#--------------------##++++++++++####### Brendan Hansen
#----------------+##+++++++++++#########
#-------------+##+++++++++++++##########
#----------##++++++++++++++++###########
#------+##++++++++++++++++++############
#---+##++++++++++++++++++++#############
####++++++++++++++++++++++##############
###++++++++++++++++++++++##############
####+++++++++++++++++############
###+++++++++++++##########
###+++++++++########
####++++######
######
Please choose a WebAssembly runtime to use with your Onyx installation.
1) Wasmer: An industry standard WebAssembly runtime. Very fast. (default)
2) OVM: A custom, lightweight runtime made for Onyx. Supports debugging. Slower than Wasmer.
3) None: Omit using a runtime and only use Onyx as a compiler to WebAssembly.
Which runtime would you like to use? [1/2/3] 1
downloading: onyx-darwin-wasmer-arm64
Latest release: v0.1.8-beta
Downloading archive from https://github.com/onyx-lang/onyx/releases/download/v0.1.8-beta/onyx-darwin-wasmer-arm64.tar.gz
100.0%
installing: /Users/****/.onyx
Updating bash profile /Users/****/.zshrc
we've added the following to your /Users/****/.zshrc
If you have a different profile please add the following:
# Onyx config
export ONYX_PATH="/Users/****/.onyx"
export PATH="$ONYX_PATH/bin:$PATH"
check: Error: ONYX_PATH environment variable is not set. Please set this to the location of your Onyx installation. installed successfully ✓
onyx will be available the next time you open the terminal.
Which runtime would you like to use? [1/2/3]
で 2 を選ぶと Apple Silicon に対応していないのか、次のように吐いて落ちました。残念。なので↑ではランタイムとしては 1 の wasmer
を指定しています。
downloading: onyx-darwin-ovm-arm64
Latest release: v0.1.8-beta
Downloading archive from https://github.com/onyx-lang/onyx/releases/download/v0.1.8-beta/onyx-darwin-ovm-arm64.tar.gz
100.0%
error: Your platform is not yet supported (darwin-ovm-arm64).
Please open an issue on the Onyx repository if you want to use Onyx in your project: https://github.com/onyx-lang/onyx
インストールの確認
パスが勝手に通って、自分の環境だと zshrc にパス設定か何かが書き込まれたよう。
$ tail -3 ~/.zshrc
# Onyx config
export ONYX_PATH="~/.onyx"
export PATH="$ONYX_PATH/bin:$PATH"
自分はこの記述は適切なところに移動。そのままでも良いと思います。
インストール先を見てみると、サンプルコードのファイルがたくさん入ってた。
$ ls ~/.onyx
LICENSE bin core examples include lib misc tests tools
$ ls ~/.onyx/bin
onyx
$ ls ~/.onyx/examples
01_hello_world.onyx 04_fixed_arrays.onyx 07_structs.onyx 10_switch_statements.onyx 13_use_keyword.onyx 16_pipe_operator.onyx 19_do_blocks.onyx 22_interfaces.onyx
02_variables.onyx 05_slices.onyx 08_enums.onyx 11_map.onyx 14_overloaded_procs.onyx 17_operator_overload.onyx 20_auto_return.onyx 50_misc.onyx
03_basics.onyx 06_dynamic_arrays.onyx 09_for_loops.onyx 12_varargs.onyx 15_polymorphic_procs.onyx 18_macros.onyx 21_quick_functions.onyx
しかし、このサンプル群にブラウザで実行するサンプルらしきものはなかったです。
onyx
コマンドを実行してみる
$ onyx
zsh: command not found: onyx
インストール時のメッセージで言われたとおりシェルを開き直して再度試してみる。
$ onyx
Onyx toolchain version v0.1.8
Built on Wed Nov 29 01:49:45 2023
Runtime: wasmer-custom
The toolchain for the Onyx programming language, created by Brendan Hansen.
Usage:
onyx <subcommand>
Subcommands:
help Shows this help message. Use "onyx help <subcommand>".
build Compiles an Onyx program into an executable.
run Compiles and runs an Onyx program, all at once.
check Checks syntax and types of an Onyx program.
package Package manager
version Prints version information
問題なく実行できてた。
Hello, World
hello.onyx
というファイルを作って次のように書き込む
use core {*}
main :: () {
println("Hello, World!");
}
run
サブコマンドでコンパイルと実行を一気にやってくれる
$ onyx run hello.onyx
Hello, World!
続いて wasm バイナリにコンパルする。run
ではバイナリは生成されない。
build
コマンドを使う。
$ onyx build hello.onyx -o hello.wasm
$ onyx run hello.wasm
Hello, World!
wat
は生成しないようなので、バイナリを覗いてみる
4F 4E 59 58
で O N Y X
で先頭バイトが始まっている。
あれ、普通 wasm バイナリの先頭バイトって
00 61 73 6D
の \0 a s m
[1] というマジックナンバーのはずでは?
(追記 2024-01-08) Discord 上のやり取りで作者の Brendan Hansen さんが、 Onyx が非標準の方法でwasmバイナリを作るこの挙動は nightly では既に修正されていて v0.19 に含まれる、とのこと。
https://discord.com/channels/1180961614984388683/1181249331630719036/1190788434378358956 より
👋 To compile Onyx to be able to be run in the browser, you need to specify the
-r js
flag. This tell it to use the javascript platform layer. The error you are hitting is that in the 0.1.8 and previous versions, Onyx made WASM binaries in a non-standard way when compiling for Onyx's runtime (not WASI or JS). The magic bytes were changed from\x00asm
toONYX
, hence the bytes being4f 4e 59 58
. This was deemed a very bad decision and in the nightly release of the compiler, this is fixed. The nightly version will become version0.1.9
soon, there are just a couple of outstanding thing I am working on first
開発環境
VSCode の Extension が公式から出ている
入れると Syntax Highlight されるよ
README がないので機能がよく分からないけどデバッガもあると書いてはある。
リポジトリは onyx 自体にモノレポとして入っている → https://github.com/onyx-lang/onyx/tree/master/misc/vscode
続き
続きも書きました
-
asm.js とかの頃からの経緯とかなんだと思う。 ↩︎
Discussion