タグ

ブックマーク / keens.github.io (15)

  • isucon7予選のアプリをRustに移植したから解説するね | κeenのHappy Hacκing Blog

    κeenです。こういう流れがあったので移植しました。 keenさんが「2028年、Rust でイケてる web application framework はこれだ!」みたいな記事を書くとと "余力" が生まれるかもしれません…!! — FUJI Goro (@__gfx__) 2018年8月28日 まずISUCONを知らない方に雑に説明しておくと、意図的に遅く作られたWebアプリケーションが与えられるので7時間くらいでどれくらい高速化できるかを競うコンテストです。 このお題のWebアプリケーションが参加者や流行りに合わせて複数言語で提供されるのですが、今年はRustが来そうだということで参加者の肩慣らしのために過去問を移植しましたというお話。 ひとまずソースコードは こちら 手元でベンチマークをしてみた限り、Pythonの2倍くらいは速いもののGoには劣るようでした。これの考察については

    isucon7予選のアプリをRustに移植したから解説するね | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2018/09/02
  • Rustのバイナリが大きい理由 | κeenのHappy Hacκing Blog

    κeenです。方々で言われる話ですがRustコンパイラの吐くバイナリはそこそこ大きいです。 この理由を自分で納得してなかったので追います。 様々な理由からnightlyを使います。 初期 $ cat hello.rs fn main() { println!("Hello, World"); } $ rustc +nightly hello.rs $ ls -l hello -rwxr-xr-x 1 kim kim 5049344 12月 18 23:30 allocator 5MBくらいあります。等価なCのコード(gccでオプションなし)が8.2Kだったのでかなり大きいですね 最適化 cargo --releaseと同じく-Copt-level=3を付けましょう。-Copt-level=sの方が小さくなりますが普段やらないので。 $ rustc +nightly -Copt-level=

    Rustのバイナリが大きい理由 | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2017/12/19
  • クレートを公開する前に埋めておくべきメタデータ | κeenのHappy Hacκing Blog

    κeenです。Rustその2 Advent Calendar 20173日目の記事です。 クレートをcargo publishする前に何すればいいんだっけと毎回なるので備忘録 publishするまでの手順自体は過去記事を参考にして下さい version 上げ忘れないようにしましょう。cargo-bumpが便利かもしれません。 license 独自記法のライセンス表記をします。例えばMITとApache-2.0のデュアルライセンスなら"MIT OR Apache-2.0"など。略称はここで調べられます。 1つ気をつけないといけないのが依存ライブラリのライセンスに違反しないように気をつけないといけないということです。Rust体がそうなのでMIT OR Apache-2.0が多いようですがGPLのものもあるかもしれません。一々調べるのは難しいのでcargo-licenseを使うと便利です。

    クレートを公開する前に埋めておくべきメタデータ | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2017/12/04
  • 雰囲気でシェルを使っている人のためのシェル入門 | κeenのHappy Hacκing Blog

    κeenです。雰囲気でシェルを使ってる人が多いとのことだったので少しばかり込み入った知識を。 あと一応POSIX準拠かどうかも気にしながらやっていきます。 基礎知識編 シェルの種類 まず、POSIXにシェルが定義されています。 これに最低限の機能で準拠しているものをPOSIXシェルと呼ぶことにします。いわゆる/bin/shです。具体的な実装はbsh、ash、dashあたりでしょうか。 最低限の機能以上に色々拡張されているシェルを拡張POSIXシェルと呼ぶことにします。具体的な実装はbash、zsh、kshなどでしょうか。 ここでは触れませんがPOSIX準拠でないシェルも存在してcshやtcshなどのシェルがあります。あと確か最近話題のfishも違ったような。 さて、1つ問題になるのは普段使いのコマンドラインはおおむね拡張POSIXシェルでしょうが、サーバで使うシェルやデプロイスクリプトで呼

    雰囲気でシェルを使っている人のためのシェル入門 | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2017/10/30
  • 非同期とノンブロッキングとあと何か | κeenのHappy Hacκing Blog

    κeenです。最近同期/非同期、ブロッキング/ノンブロッキング、直接形式/継続渡し形式あたりが混乱してきたので個人的に整理します。 あくまで私個人の理解を纏めただけなので誤謬などに注意して下さい。 追記: @tanaka_akrさんから指摘されたのですが、用語の説明が間違っていそうだったので書き直しました。 diffはこちら 非同期とノンブロッキングはよく混同されます。また、非同期処理の記述形式として直接形式や継続渡し形式などがあります。 私自身違う言葉だなとは思いつつも混同したり違いを忘れたりしています。 非同期もノンブロッキングもナイーブなIOに比べると速い方式だな程度の理解でいてそんなに困らないと思ってますし混同や誤用に目くじらを立てるつもりもありません。 しかしながら3者を区別しないと意味を成さない文脈で3者を混同している技術を何度か見掛けたので(自分の中で)整理しようと思ったのが

    非同期とノンブロッキングとあと何か | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2017/05/20
  • Rust風にデザインパターン23種 | κeenのHappy Hacκing Blog

    κeenです。 GoFのデザインパターンは有名ですが、言語機能によっては単純化できたりあるいは不要だったりするのでRust風に書き換えたらどうなるか試してみます。 発端はこのツイート。 デザインパターン、古いJavaの機能の足りなさのワークアラウンド的なテクニックも含まれてるからあまり宜しくないんだよね。enumやクロージャで十分なのもいくつかある。 Rustで写経、デザインパターン23種 - Qiitahttps://t.co/MhpS3Z2OlF — κeen (@blackenedgold) 2017年5月5日 一応誤解のないように説明しておくと、該当のQiitaの記事に不満がある訳ではなくてGoFのデザインパターンついての言及です。 リンク先のコードで十分な時にはここでは流すのでリンク先も同時に参照下さい。 また、比較しやすいようにサンプルコードはリンク先のものに則って書きます。

    Rust風にデザインパターン23種 | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2017/05/07
  • RustのちょっとやりすぎなBuilderパターン | κeenのHappy Hacκing Blog

    κeenです。Rustでちょっとやりすぎだけど使う側の自由度が高くて安全なBuilderパターンを思い付いたので紹介しますね。 ※2017-02-11T13:18:58Z+09:00 最下部に追記しました 目的コード 以下のような構造体のビルダーを作りたいとします。 #[derive(Debug)] struct Person { id: u32, name: String, age: u32, address: Option<String>, zipcode: Option<String>, } struct PersonBuilder { id: Option<u32>, name: Option<String>, age: Option<u32>, address: Option<String>, zipcode: Option<String>, } impl PersonBuild

    RustのちょっとやりすぎなBuilderパターン | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2017/02/10
    こう https://gist.github.com/qnighy/e7a833eebd57ef778eaff3a8ab3649d7 やったらunwrapしなくてすみそう?
  • 気付いたらRustの環境構築がかなり楽になってた | κeenのHappy Hacκing Blog

    κeenです。ここのところRustの開発ツール回りでリリースが続いてセットアップが楽になってるようだったので最新の情報をお届けします。 とりあえず私は既存の環境があるので一旦全て破棄してから再度セットアップしてみます。 Rustのインストール rustup.rs - The Rust toolchain installerがリリースされたので以下で一発です。 $ curl https://sh.rustup.rs -sSf | sh そして をシェルのrcファイルに書き加えたらOKです。 今のシェルにも反映するには同じく上記のコマンドを打ちます。 周辺ツールのインストール cargoがあるので楽ですね # コードフォーマッタ $ cargo install rustfmt # 補完、定義ジャンプなど $ cargo install racer まあまあ時間がかかります。 エディタ(Emac

    気付いたらRustの環境構築がかなり楽になってた | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2016/12/29
  • Rustの所有権/ミュータビリティの分割 | κeenのHappy Hacκing Blog

    κeenです。昔所有権/ミュータビリティを分割したくなったけどぱっと方法が思いつかなくて困ったことがあるので今更ながら備忘録として残しておきます。 ミュータビリティ 例えば、HTTPパーサを作ろうとしてるとしましょう。 受け取ったバイト列のバッファをパースしてヘッダやらボディやらのサブスライスを返します。この時、返り値のサブスライスはユーザへの自由を与えるために mut にしたいですよね。 そう思ってこういうコードを書くと use std::io; fn parse(buf: &mut [u8]) -> io::Result<(&mut [u8], &mut [u8])> { ... Ok((&mut buf[hstart..hend], &mut buf[bstart..bend])) } mutability_split.rs:4:31: 4:34 error: cannot borr

    Rustの所有権/ミュータビリティの分割 | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2016/06/19
  • 独学でプログラミングをやってきた中で良かった技術書50選 | κeenのHappy Hacκing Blog

    今まで読んできた技術書の中で良かったものを挙げていく。 そろそろ棚が溢れるので捨てる前に書き留めておく。 私は独学でプログラミングを始めたので情報系専攻の人には何をそんなというも混っているだろうが価値は人それぞれ違う。 一応私自身について語っておくと学生時代はプログラミングに興味を持ちつつも数学科に進んだ。 しかしそこでもプログラミングへの興味は薄れず、色々を読んだり同学年の情報科学科の真似をしたりしていた。 今思えば日の精鋭たる東大情報科学科の人達に勝てる筈もなかったのだが学生時代に我武者羅になれたのは悪い経験ではなかった。 私が興味があったのは主にプログラミング言語そのもの、特にLispとその周辺。 何故か 挙げていく前に1つだけ。Webに大量に情報がある今、何故かについて説明したい。簡潔に言うと 文章が推敲されていて読み易い 1つの情報ソースに多彩な内容が載っている 巨大

    独学でプログラミングをやってきた中で良かった技術書50選 | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2016/01/18
  • ATS2の依存型を使ってAVL木 | κeenのHappy Hacκing Blog

    κeenです。少しばかりATS2を触ってみたので成果報告でも。 AVL木は左右のノードの高さが高々1しか違わない平衡二分木です。OCamlやSMLでナイーブに実装すると当に1しか違わないことを保証するのは難しく、精々テストなどで部分的に検査するだけです。 ところがSMLに似た文法を持つATS2には依存型があり、左右のノードの高さが高々1しか違わないことを型で保証出来ます。 つまり、左右のノードの高さが2以上違う木を作ろうとしてもコンパイルエラーになるのでコンパイルが通れば高さについてはバグがないこと保証されます。 そういうAVL木を使ってTreeSetを作ってみたので紹介します。 私のブログ(のこの記事)の読者ならATS2も依存型もAVL木も知ってそうですが一応説明します。 ATS2って何? 詳しい説明は日ATSユーザグループに譲るとして、この記事にて重要な点を挙げます。 SMLに似た

    ATS2の依存型を使ってAVL木 | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2015/12/30
  • 構文解析にまつわる小話たち | κeenのHappy Hacκing Blog

    # 構文解析にまつわる小話たち ---------------------- [#peg_study](https://twitter.com/search?q=%23peg_study&src=typd&vertical=default&f=tweets) === # About Me --------- ![κeenのアイコン](/images/icon.png) + κeen + [@blackenedgold](https://twitter.com/blackenedgold) + Github: [KeenS](https://github.com/KeenS) + サイバエージェントの新卒エンジニア + Lisp, ML, Shell Scriptあたりを書きます === # ウォームアップ === # 構文解析はバッドノウハウ -----------------------

    qnighy
    qnighy 2015/08/08
  • 正規表現技術入門を読んだ | κeenのHappy Hacκing Blog

    κeenです。正規表現技術入門という書評が望まれているようなので今日買ってきて読みました。 私のバックグラウンドと目的 バックグラウンドは RubyとUnixの正規表現はそこそこ使ってる ドラゴンブックは読んだことある RE2の概略も知ってる VMベースの言語処理系のコミッタなのでVMへの理解もある Standard MLの正規表現エンジンを開発中。機能はほぼ揃ってる な感じです。で、実装中の正規表現エンジンがこので紹介されてるVM型でもDFA型でもなくVM型の素朴な形、ASTのインタプリタで 実装されてるので インタプリタのまま追加出来る機能はないか 高速化を目指すならVM化とDFA化どちらがいいか (既存のSMLの正規表現エンジンではVMバックエンドやDFAバックエンドでグルーピングが使えないので)高速な手法でのグルーピングの実装方法が知りたい 後方参照の実装方法が知りたい など

    正規表現技術入門を読んだ | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2015/05/22
  • 面接でLispを口にして落ちない企業、私気になります! | κeenのHappy Hacκing Blog

    κeenです。先日の記事がやたら拡散しました。その中で 「面接でLispは口にしない方が良い。100%落ちる。」 の一文がえらく気に入られたようです。Lispの風評被害を防ぐために1つアンケートにご協力下さい。 このスプレッドシートです。 面接でLispを口にして落ちない企業調査表 - Google スプレッドシート 「うちの会社は面接でLispを口にしても落ちないぜ」って方はお手隙ならば書いて下さると嬉しいです。単純な興味目的のゆるふわなアンケートです。調査項目は 会社名 会社のURL 書いた人(名、スクリーンネーム、なんかのIDかは任意。IDにすると連絡がとれて便利かも) コメント、会社のアピールなど(長文可、任意) で。 利用規約(?)は 社員が書く。会社に全く書かない人は勝手に書かない。 改竄を防ぐために一度書いたら同じ人しか編集してはいけない。同じ会社の人でもダメ。 どっかのメ

    qnighy
    qnighy 2015/02/10
  • 就活について思ったことをここに書き記す | κeenのHappy Hacκing Blog

    私は今4年生なので去年の今頃は就活なんてものをしていた。下の代から若干日程が変わっているがそろそろ就活ムードが出てきているのでなんか吐いておく。思い出かもしれないし愚痴かもしれないし毒かもしれない。経験かもしれないし他人の代弁かもしれない。後輩の役に立つかもしれないし人事の方に向けたメッセージかもしれない。 念のために書いておくが私はIT系の会社のプログラマ、エンジニア職ばかり応募していた。他の業界、職種に当て嵌まるとは限らない。 注意 良かった企業は名前を出す、悪かった企業はここには名前を書かない方針にする。悪かった企業の具体名が知りたかったら@blackenedgoldに訊いて下さい。 リクナビ、メール 周りの流れに乗せられてリクナビに登録することになる。個人情報を大量に打ち込む。すると大量のメールが届く。正直、情報量はゼロに近い。メールは受信しないにチェックした方が良い。 リクナビの

    就活について思ったことをここに書き記す | κeenのHappy Hacκing Blog
    qnighy
    qnighy 2015/02/08
  • 1