You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
κeenです。これはRust Advent Calendar 2017の記事です。 RustのORM、クエリビルダ、マイグレーションツールのdieselについて。 dieselについては公式チュートリアルを読めばだいたい使い始められるのですが、それだけでは足りないのでいくつか持ちネタを書きます。 diesel-1.0.0-beta1での情報です。 table! マクロ チュートリアルにはinfer_schema!を使ったDSLの自動生成が書かれてますが、table!マクロを使って自分で書くこともできます。 table! { posts { id -> Integer, Title -> Text, body -> Text, published -> Bool } } このときの型はdieselで定義されているSQL型を書きます。 このSQL型は特定のDBMにあるものも用意されていて、例え
はじめに クライアントサイドでのWebアプリケーション開発の発展は留まるところを知りません。しかし、JavaScriptは 型安全ではない ビルドのための環境構築が大変 といった課題をずっと抱えています。前者はTypeScriptでかなり改善されていますが、ベースがJavaScriptなので当初から型をもつ言語には及びません。後者もWebpackでかなり改善されましたが、依然としてビルドの設定は一番苦労するところです。WebAssemblyが主要ブラウザでサポートされた今、これらのソリューションとしてRust+WebAssemblyのフレームワークを提案します。 フレームワークの要件 フレームワークは既存の課題を解決するだけでなく、使いやすいことが重要だと思います。今回フレームワークを設計するにあたり、4つの要件を定義しました。 型安全 ビルドツール不要 標準HTMLに近いテンプレート記法
これはRust Advent Calendar 2017 16日目の記事です。 Rust でサーバーを動かしてみたく、探してみたところrustful を見つけたので、使ってみました。 API サーバーでデータベースを扱う上で良さそうなマイグレーションツールはないかと探してみたら、diesel を利用した diesel_cli を見つけたので紹介します。 diesel_cli は diesel を利用しており、同じ人たちが開発しているようです。現在(diesel 1.0.0-beta1)は PostgreSQL や MySQL、SQLite に対応しています。 以下の環境で動作確認をしています rustc 1.22.1 (05e2e1c41 2017-11-22) Ubuntu 16.04.3 LTS(Windows Subsystem for Linux) まずは diesel_cli を
ちょっと煽ってみました 誰も書いていなかったのでreqwestについて書きます。 TL;DR HTTP系crateのデファクトスタンダードであったhyperは0.11.0からtokioとfuturesを採用した複雑なAPIに変わりました。 simpleでstableなHTTP clientが使いたければhyperの作者でもあるseanmonstar氏のreqwestを使うのがいいです。 もちろん、reqwestにデフォルトでついてくる機能がいらない場合や、高次元なcrateを自作したい場合はhyperを使うのが正しいです。 現在のhyper clientの公式exampleがこことここに載っています。 かなり単純な形でも以下のようになりますね。 extern crate futures; extern crate hyper; extern crate tokio_core; use st
同じ記事を別のカレンダーに登録できないことに気づいて必死にネタを探しました。 うちのソフトウェアで必要に駆られて製作したappinstanceクレートを少し前に切り出して正式にpublishしたのでその紹介です。 つかいかた appinstanceは主にアプリケーションの実行と同じライフタイムを持つ唯一のオブジェクト(つまりシングルトン)を定義するためのライブラリです。 appinstanceの実態はひとつのマクロなので、利用は次の一行を追加するだけでおしまいです。 staticとDrop Rustにはすでにstaticというキーワードが存在しており、これを使うとアプリケーションと同等のライフタイムを持つデータを定義することが可能になっています。ただしこの定義はコンパイル時の定数を必要としており、HashMapやその他複雑な初期化を必要とするオブジェクトをstatic変数に持つことは難しい
Rust Advent Calendarの13日めです。 イントロダクション Rustを語るときしばしば「RustはWebフロントエンド開発もできる」ということが言われます。もちろん、RustはLLVMフロントエンドであり(LLVMから見てClangっぽく見えるように頑張っている)、emscriptenを使うことで用意にasm.js/wasmにできるわけですが、そこにとどまらずRust自体がオフィシャルにemscriptenバックエンドをサポートしています。更にごく最近、LLVM自体のwasm backendもサポートされました。 さて、では実際RustでWebフロントエンド開発はできるのでしょうか。もちろん、コストの掛かる何らかの特別な処理を行うためにJavascriptからRustの関数を呼び出したり、あるいはこちらの方がされているように、emscriptenのOpenGL imple
はじめに Rustコミュニティーのみなさんこんにちは。 私はRobotの専門家であるRoboticistの @OTL です。この記事ではみなさんにRust x Roboticsの世界の一端を感じていただければと思います。 Rust is for Robotics 言語としてのRustとRoboticsの相性 Rustを知ったのはおおよそ半年前という新参なのですが、RustはRoboticsに向いた言語であると思っています。 詳しくは↓に書きました。 要約すると Roboticsでは実行時間=性能であるため、性能重視 される。そのためC++が基本的に使わている。(性能いらないところはPythonなどが使われている) ロボットはテストを書くのがしんどい(実際にロボットを動かすか、重いシミュレータを起動するか)ので、なるべくテスト書きたくない。Rustはコンパイル大変だからテストはゆるくても良さ
RustはMozillaが開発するプログラミング言語で以下のような特徴のあるらしい。 Rust は安全性、速度、並列性にフォーカスした現代的なシステムプログラミング 用のプログラミング言語です。 ガベージコレクション無しでメモリ安全であることが、これを可能にしています。 from http://rust-lang-ja.org/rust-by-example/ 速度、並列性、GC無し、などは制御の人だったら魅力的に感じるのではないだろうか。 ロボットのプログラミングというと、C++かPythonあたりを使っている人が多いだろう。私はPythonが大好きで趣味ではPythonばかり書いていた。そして仕事ではC++がほとんどだ。 だが、ここ2ヶ月くらいRustにハマっている。ひょっとしたらRustはロボットと非常に相性がいいのではないかと思っている。 Rustのいいところ RustはC++に似
これはRust Advent Calendar 2017 11日目の記事です。 今回はRustを用いてファイルシステムを作ることができるrust-fuseを紹介します。 FUSE(Filesystem in Userspace)とは? FUSEは、通常カーネル空間で提供するファイルシステムの機能をユーザ空間上で定義し動作させることができるものです。 ユーザ空間とカーネル空間の橋渡しをするインターフェースとカーネル内での処理を提供しています。実装者はカーネルのコードをいじることなくファイルシステムを作成できます。 リファレンス実装はlibfuseとして提供されています。 FUSEを使ったファイルシステムとしては、SSHFSやGlusterFS、gitfsなどがあります。 rust-fuse rust-fuseはRustでFUSEを実装できることを目的としたcrateで、単純なlibfuseの
少し前に作った双方向の MessagePack-RPC 実装に関する知見をまとめておきます. 成果物は以下の通り. https://github.com/ubnt-intrepid/msgpack-rpc-rs はじめに MessagePack-RPC について MessagePack-RPC は MessagePack を使用した RPC であり,JSON や XML ベースのものと比較し非常にコンパクトなフォーマットで通信を行うことが出来る.各メッセージは MessagePack の配列として表現され,それぞれ次のような要素を持つ. Request = [0, msgid, method, params] msgid: integer method: string params: array Response = [1, msgid, error, result] msgid : in
tl;dr Rustの練習のためゲームを作った Boxを用いればtraitでもstructのフィールドの型にできる(トレイトオブジェクト) RustはDSTという仕組みを用いて継承の様な仕組みを取り入れている はじめに 8月末からRustを始めました。勉強のために何か作ろうと思いRust-SDL2を使ったパックマン風(※1)のゲーム「rust_pack_man」を作成しました。以下みたいなやつです。ゲームのフィールド作成に苦戦したので、そこの実装について書きます。 フィールドの作成 フィールドの情報を定義したtextファイルを読み込むことでrust_pack_manはゲームのフィールドを作成します。上のgifの様なステージであれば以下の様なtextファイルになります。1セルごとに情報が設定できる様になっていて、このセルはアイテムだ。このセルは敵キャラだという形になっているシンプルなやつです
Rustは「学習コストが高い?」「関数型プログラミング言語?」 と思っていた私が、実際にRustに触れてみて得られた知見をまとめました。 プログラミング言語の多くの課題を解決してくれる言語 Rustは「安全性」「速度」「並列性」を考慮して設計されています。 言語セマンティクスを強く定義し(Ownershipやlifetime 後述)、ネットワークコネクションなどのリソース管理全般に関するバグを、コンパイル時に発見してくれることで実現しているといえます。 最初はコンパイルが厳しくて「書いたコードはあってるはず...」 と、陥るほどに暗黙的な印象を感じます。コンパイルの厳格さは、人間が間違えないようにするために、静的に解析できる情報をなるべく多く与え、機械的に検証するためだと考えます。 ひと言でまとめると「コンパイルへの押し付け」です。 安全性に重きをおきながら、zero cost abstr
IronでWebサービスを作りました IronというWeb Frameworkがありまして、以前から気になっていたのですがちゃんと書けていなかったので趣味プロジェクトとして短縮URLサービスを作りました。 Ironを使って開発していくにあたって必要となったミドルウェアや書き方などを紹介していきます。 公式リポジトリのこのあたりのサンプルコードを使って自分で動かしながら読んでいく方法がおすすめです。 まずはルーティング このままでは動かないコードですが、雰囲気だけでも伝えたいので一部省略したコードを載せます。 実際にWebサービスとして必要となるルーティングを行った際、下記のような構成になりました。 let mut index_chain = Chain::new(application::service::index_service::index_service); let mut rou
Rust Advent Calendar 2017 6日目の記事です。 rust-autograd というライブラリを作りました。https://github.com/raskr/rust-autograd もともとニューラルネットのライブラリのつもりだったんですが、GPUの知識がなさすぎて無理だと気づき、一般的な名前にしました。一応ドキュメント(兼テスト)もあります。例えば行列積の計算はこんな感じです: extern crate autograd as ag; let a: ag::Tensor = ag::zeros(&[4, 2]); let b: ag::Tensor = ag::zeros(&[2, 3]); let c: ag::Tensor = ag::matmul(&a, &b); println!("{}", c.eval(&[]).unwrap()); // [[0,
はじめに これはRustその2 Advent Calendar 2017の9日目の記事です。 @hgsgtkです。 著書「テスト駆動開発」をrustで書いていきます。 「テスト駆動開発」は、Kent Beck著、和田 卓人さん翻訳の書籍です。この著書では、第1章から第17章にかけて、「多国通貨」というテーマでテスト駆動開発のプロセスを写経しながら体感することができる構成になっています。 著作はJavaで進められていますが、今回はそれをrustで進めていきます。 最終的に目指すコードは以下のテストが通るコードです。 通貨の異なる2つの金額を足し、通貨間の為替レートに基づいて換算された金額を得る。 金額(通貨単位あたりの額)に数値(通貨単位数)を掛け、金額を得る 目次 概要 第1章 仮実装 第2章 明白な実装 第3章 三角測量 最後に 概要 本ページでは、第1章から第4章までを進めていきます。
fn main() { let listener = TcpListener::bind("127.0.0.1:8080").unwrap(); for stream in listener.incoming() { match stream { Ok(stream) => { thread::spawn(move || { handle_client(stream) }); } Err(_) => { panic!("connection failed") } }; } } TCPの接続周りはstd::netモジュールを使用しました。TcpListener.bindでipアドレスとポート番号を割り当てたTcpListenerを作成します。 incoming()はloop~acceptと同様の動きをしているらしいのでそれによって、接続をループで待ち受けます。 接続が来た場合、スレッドを作成
これはRust Advent Calendar 2017 3日目の記事です 今回は現在開発中であるRustによるGPGPUプログラミングのためのフレームワークAccelを紹介します。 GPUを使った汎用計算の技術(GPGPU)は伝統的なHigh Performance Computing (HPC)業界だけでなく、機械学習等への応用も広がり現代では欠かせない技術です。GPUの利用には大きく分けて3つの段階があります: 高速化されたライブラリを使用する(cuBLAS, cuDNN等) CPU用のコードに僅かな変更を加えてGPUで動くようにする(OpenACC) GPU用のコードを設計・開発する(CUDA) 下に行くほど開発難度が増大します。 最近はOpenACCに力を入ているようで、ごく僅かな変更で大幅な高速化が期待できると宣伝しているのをよく見ます 1。 Accel: GPGPU fram
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く