Nim (Nimrod) で hello world (alt.js編)

Nim言語がちょっと前に微妙に話題になってたので少し触ってみました。
ターゲットとしてjavascriptが選べる=alt.jsとしても使えるようです。

コンパイラの導入などはこちらの日本語記事が詳しいです。
Nimの紹介 − Python風静的型付言語 〜コンパイラと型推論を添えて〜
別途Cコンパイラが必要なのと config/nim.cfg を少し書き換えが必要かも

<<追記>>
組み込み関数logでconsole.log使えるようです。assertなども。
(ただし、引数は文字列一個のみ可)


log("hello world")
あと、インラインアセンブラで生JSを埋め込み可能みたいです。

proc consoleLog[T](msg:ref T)=
asm """
console.log(`msg`)
"""
consoleLog(document)



下のhello.nimをエディタで作り、こんな感じでコンパイルして hello.jsを作製、ブラウザの開発ツール等が表示された状態で hello.htmlを表示すると、コンソールにassert失敗が一回と hello worldの文字が表示されるはず
あと、ブラウザのメインの画面にもdoneが表示されるはず


nim js -o:hello.nim hello.nim

標準ライブラリに入ってるdomモジュールからいくつかコピペしてconsoleオブジェクトのwrapperを書いてみます

hello.nim


type #型定義
TConsole* {.importc.} = object of RootObj
assert:proc (cond:bool) {.nimcall.}
clear:proc(){.nimcall.}
log:proc(msg: cstring) {.varargs,nimcall.} #複数引数可
#第1引数が文字列しか受け入れないの なんとかしたい
var
console* {.importc, nodecl.}: ref TConsole

console.clear()
console.assert(true)
console.assert(false)
console.log("hello world")
console.log("hello", "world",2015)
echo "done"

hello.html

<html>
<head>
<script type="text/javascript" src="hello.js"></script>
</head>
<body>
</body></html>

該当部分をみると、ちゃんとconsole.logとして実行されてます
hello.js 抜粋

console.clear();
console.assert(1);
console.assert(0);
console.log("hello world");
console.log("hello", "world", 2015);
jsバックエンド自体は そんなにカリカリ・チューンされてない印象ですが、部分的には人間でも読めなくもないので 学習用にはよいかもです (?)