Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今を発信しています。Scalaお久しぶりでございます。Scalaでバックエンドを開発しているaxtstar(@axtstart)です。みなさまゴールデンウィークはいかがお過ごしだったでしょうか?我が家はあまり旅行に行くということもなく、近場のドライブや、ちょい大き目の公園などで過ごすことが多かったです。新たにRustとWebAssemblyに入門してきたので今回はそのあたりの話を、書きたいと思います。Languageの勉強をGWを利用して初めて見ました。Basicで呼び出すのが最強と思っていた時があります。それと似た世界が、JavascriptとRust(WebAssembly)なのではないかと、最近考えていました。少々遅い気もしますが、何事もはじめないよりは、はじめた方が面白いし何かの役に立つことがあればいいなと。普段はScalaで開発する事が多いので、そのScalaとの比較として書いていきたいと思います。Rust、Scala比較さて、早速RustとScalaを比較してみます。◎RustはScalaとは違ってガーベージコレクションを持たない→自分でメモリ管理をする必要がある*1とは言え、強力な言語システムのサポートがあるため、昔のように、メモリの解放もれを気にすることはかなり減っているようです。Scopeを抜けると確保したメモリは解放される*2などなど→OwnershipメカニズムやScopeメカニズムによって、極力バグをcompile時に発見できる仕組みがある。s1);参照渡しにした場合はこの限りではありません。//OKもちろん上記のようなことはScalaではおこらず、コンパイルは通ります*3。◎StatementとExpressionが異なる概念として扱われるScalaだとあまり意識しない*4セミコロン(「;」)の有る無しによって、StatementなのかExpressionなのかが決まります。None,}◎nullが無いその発明者自身*6が10億ドルの過ちといった「null」がRustには存在しません。Scalaはnullそのものを消去することはできていません。使わないようにプログラミングすることはもちろん可能ではあります。Scopeになっている◎Cargoという、パッケージ管理ツールがある→Scalaのsbt、gradle、mavenのような存在。tomlという形式で、設定ファイルを記述します。ここで紹介した機能以外にも、似た機能や全然似てない機能はたくさんあります。私も今回はこの*7チュートリアルで学習しました。以前ではできなかったようなウェブ上で動作するクライアントアプリケーションのために、複数の言語で記述されたコードをウェブ上でネイティブに近いスピードで実行する方法を提供します。world!した、Rustとも相性の良いものです。world!するには今は、wasm-bindgenを使用するのが一番簡単なようですね。Rust側からJavascriptのalertを呼べるようにする。JavascriptからRustの関数を呼び出せるようにする。hello-world!");}上記の2ファイルの状態で、下記を実行すると、しばらくかかりますが、target、pkgというフォルダができて、そこにJavascript*8からRust側を呼び出す、glueスクリプト*9みたいなものを吐き出してくれます。buildさらに下記で、wwwディレクトリを作成してそこに、webの開発に必要なwebpackなど一式を作成してくれます。installして必要なライブラリを取得します。..pkgをlinkします。..pkgを利用したい側でリンクを呼び出します。..ローカルのwebサーバを起動します。world!が表示されます。ここまでここの内容だいたい、そのままです。RustからのDomアクセスなどWebのDocumentやElementなどにアクセスしたい場合は、Cargo.tomlにfeatureを追加する必要があります。Ok(())}速度を比較してみるあまりいい例ではないのですが、(スタックオーバフローになるような何も考えてない方法の)フィボナッチ数列による速度比較をして見ました。}}3回実施した平均です。1.27Rust版の方が2割増し程度の性能が出ました。アルゴリズムが大変悪いので比較的低いnでPageがクラッシュしました。これだけなのに、速度差を体感できます。画像を受け渡してみるRust側に、canvasのイメージバイナリを渡して透過度をあげてみます。↓こちらに置いておきます。github.comRust側は比較的簡単に実装できます。バイナリは直列データとして扱う必要があるようです。線の描画などはもっと別の方法が良いかもです。}}htmlはVue.jsの読み込みと、canvas、inputを置いています。v-on:click="to_transparent">to_transparent</button>glue以外の記述部分です。}})上記でアップロードした画像の透明化ができます。まとめRustは非常に面白い特徴を持った言語ですね。WebAssemblyへの対応も進んでおり、比較的楽に開発を進めて行く事ができそうです。限定した環境をうたえるなら結構アリだなと思わせるものでした。Specificationを出力する。開発部のyanagitaです。機械学習を社内データに適用してみた山縣です。夏休みの宿題のようにブログの当番が回ってきました...2018-04-06おためしpuppeteerお久しぶりでございます。Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今をブログとTwitterで発信しています。@astamuseLabアスタミューゼで働きませんか?アスタミューゼでは現在エンジニア、デザイナーを募集中です。興味のある方はぜひご応募ください。(1)@astamuseLabさんのツイートastamuseサービスサイトastamuse世界中のinnovatorのために、創造活動を可視化し未来を創るためのプラットフォームです。活用や新規事業に役立つ様々な機能を提供します。ビッグデータ分析から情報提供し、あなたの知らない未来を発見するメディアです。reserved.スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。