scala-nativeを試してみる 1.hello world

scala-nativeが出ました。

Scalaは JVM 上で動かす事が出来る言語なのですが、このScala言語をllvmでコンパイルしてバイナリで動かせるようになったのが scala-native です。

正直jvmがコンパイル遅くて起動も遅いのでそんなに好きではなくて、趣味ではよくRust
を触っています。それが今回 Scala が Nativeコードを吐くようになったので試してみました。

はじめに

2016/05/15の時点では、 scala-native に簡単なhello worldが含まれていませんでしたので作ってみようと思います。

こちらの記事は、 Getting started with scala-native を参考にしています。

IntelliJ IDEA で リポジトリ(ディレクトリを読み込む)

IntelliJ IDEA で scala-nativeを開いて見たらエラーが出ました。解決策としてはhomebrew install sbtで入れたsbtの launch.jar を SBT Option で指定してあげたら動きました。

build.sbt の修正

build.sbt を 開いたら最後の行に

を追加します。
なぜか、こちらの環境では ScalaNativePlugin, ScalaNativePluginInternal が赤くなり依存関係の解決ができませんがコンソールでのコンパイルは通ります。

次に、 helloworld-nativeというディレクトリと
その中に、 helloworld.scala を作ります。

ファイル内容は下のとおりです。

実行

コンソールからsbtを起動し、sbtシェルに入ったら下記のように実行します。

Hello World: Scala Native!!! と実行されたら成功です。

バイナリが作られたか確かめる

runcompileを実行すると、バイナリが下記ディレクトリに作られます。
./target/scala-2.11/helloworldnative-out

これをそのまま実行することができます。
サイズは 14Kでした。

Rust で ファイルダウンロード

そんなに難しいわけではないです。

Rust で Webスクレイピング 途中経過

毎日ぼちぼちとRustでWebスクレイピングするライブラリを作っています。
と言ってもServoが開発している、html5ever のラッパーなんですけどね。

前回の記事で作っていたものがよく見てみたら、getElementByIdGetElementsByTagNameが、子孫ノードを持っていなくて、ちょっと改修しました。html5ever は NodeNodeEnumCrone Traitを実装しておらず、cloneができなくて困っていたんですが、どうやらHandleはcloneができることに気づいた。それを利用して、HandleをVecに追加する際にHandleごとCloneする方法を取りました。

とりあえずこの二つさえあればなんとかスクレイピングできそうですが、jQueryに寄せたいとも思っているので 少しだけでもjQueryライクにできればなと思ってます。