タグ

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

  • プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog

    κeenです。最近JEITAのソフトウェアエンジニアリング技術ワークショップ2020に参加したんですが、そこで五十嵐先生、柴田さん、Matzとパネルティスカッションをしました。その議論が面白かったので個人的に話を広げようと思います。 年末年始休暇に書き始めたんですが体調を崩したりと色々あって執筆に時間がかかってしまいました。 時間を置いて文章を書き足していったので継ぎ接ぎ感のある文体になってるかもしれませんがご容赦下さい。 というのを踏まえて以下をお読み下さい。 いくつか議題があったのですが、ここで拾うのは一番最後の「プログラミング言語の未来はどうなるか」という話題です。 アーカイブが1月末まで残るようです。もうあと数日しかありませんが間に合うかたはご覧下さい。 そのとき各人の回答を要約すると以下でした。 五十嵐先生:DSLを簡単に作れる言語というのが重要。それとプログラム検証、プログラム

    プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog
    clavier
    clavier 2021/01/27
  • Rustでインメモリキャッシュ作った話 | κeenのHappy Hacκing Blog

    κeenです。先日発表したRustで作るインメモリキャッシュが全然話し足りなかったので色々補足します。 実は今回の話題はソフトウェアというよりはハードウェアの仕組みに由来するものなのですが、ソフトウェアにも応用できるだろうということで試してみた結果です。 ハードウェアでもソフトウェアでもアクセスするデータは時間局所性、つまり短期間にアクセスするデータには偏りがあるというのが仮定としてあります。 よくある例が冪乗則、あるいは80:20の法則とよばれるもので、アクセス数上位20%のものが全体の80%のアクセスを占めたりします。 データ全部はメモリに乗らないけど20%くらいだったら載るようなケースではその20%を上手く選んでメモリに載せられる仕組みがあればパフォーマンスがあがるはずです。 ということでそのような仕組み、キャッシュがほしいよねというのがモチベーションです。 キャッシュの話 まずはキ

    Rustでインメモリキャッシュ作った話 | κeenのHappy Hacκing Blog
    clavier
    clavier 2020/10/22
  • シャドイングの嬉しさ | κeenのHappy Hacκing Blog

    κeenです。 Rustに限った話ではないのですが、よくRustを触ってみた人がシャドイングが気持ち悪いという反応をしているのを見かけるのでシャドイングがどういう機能かを解説します。 Rustのシャドイング まずは「気持ち悪い」と言われることもあるRustのシャドイングについて。 Rustでは以下のコードが合法です。 let input = "42"; let input = input.parse::<i32>().unwrap(); // 以後、i32 型のinputが見える let result = input * 2; input という名前の変数を2回導入しています。 最初の input は &str 型で、2つ目の input は i32 型です。 このコード以降では後に定義した i32 型の方の input が有効になっています。 後から導入した変数が先にあった変数を覆い隠す

    シャドイングの嬉しさ | κeenのHappy Hacκing Blog
    clavier
    clavier 2020/06/22
  • 手続き型脳で型推論を実装してみた | κeenのHappy Hacκing Blog

    このエントリは型 Advent Calendar 2019 - Qiita 2日目に遡って投稿しているエントリです。 担当に遅刻した訳ではなくて空いてたので前から詰めて投稿しただけです。 κeenです。世の中に型推論アルゴリズムは色々知られていると思いますが、それを一切無視して型推論を実装してみたので報告します。 型推論の基的理解 式に型変数を割り当てて、既に分かっている型から制約条件をつけてその制約の連立方程式を解けばいいです。 例えば以下のようなSMLの式を考えましょう。

    手続き型脳で型推論を実装してみた | κeenのHappy Hacκing Blog
  • 安全なシステムプログラミング言語Rustへの招待 | κeenのHappy Hacκing Blog

    # 安全なシステムプログラミング言語Rustへの招待 ---------------------- [IIJ Labセミナー](https://iijlab-seminars.connpass.com/event/152079/) === # About Me --------- ![κeenのアイコン](/images/kappa.png) * κeen * [@blackenedgold](https://twitter.com/blackenedgold) * Github: [KeenS](https://github.com/KeenS) * GitLab: [blackenedgold](https://gitlab.com/blackenedgold) * [Idein Inc.](https://idein.jp/)のエンジニア + 2年半くらい仕事Rustを書いている

    clavier
    clavier 2019/11/20
  • お薦めのコンパイラの本とか | κeenのHappy Hacκing Blog

    κeenです。たまにお薦めコンパイラの教えてなどのやりとりをTwitterで見かけるのでまとめておきます。 私の主観が入っているので他の方の意見も参考にして下さい。 普通の入門書三書 よく挙げられるのは通称「ドラゴンブック」、「タイガーブック」、「中田先生の最適化なんちゃらの」です。 このうちのどれかを読むと良いでしょう。 こういう教科書系のによくあることですが、だけでなく挙げられている参考文献の情報も重要なので読み終わっても売らないで棚に残しておくことをお薦めします。 コンパイラ[第2版]~ 原理・技法・ツール ~ いわゆるドラゴンブックです。結構古くからあるです。前半が構文解析の理論で、後半でコンパイラ関連の技法などが載っています。 割と技法の紹介が多く、幅は広いですがそれぞれの説明に割かれた紙面は小さいです。 章分けが雑なので目次だけで内容を判断せず、手にとって確かめたほ

    お薦めのコンパイラの本とか | κeenのHappy Hacκing Blog
  • druidというリアルタイムデータ分析ツールを知った | κeenのHappy Hacκing Blog

    κeenです。社内ハッカソンに出てきた。そこでdruidというツール(?)を触ったのでそれについて。 読み方は「ドゥルイド」でいいのかな?公式ページはこちら。Metamarketsが主導で開発しているようで、オープンソースになっている。 公式サイトを少し回遊してもらうと分かると思うが、時系列データを分散環境でストリーミング処理出来るツール。分散環境で動くだけあってコンポーネントはいくつかある。 主にはストリーミングデータを取り込む「REALTIME」、クライアントからのクエリを処理する「BROKER」、過去のデータを処理する「HISTORICAL」があるようだ。 BROKERがDEEP STORAGE(s3などの永続データストア)にデータを保存し、HISTORICALがオンデマンドにそのデータを読み出してBROKERに返す。 イメージとしてはこんな感じだが、実際に動かすのには他のコンポーネ

    druidというリアルタイムデータ分析ツールを知った | κeenのHappy Hacκing Blog
    clavier
    clavier 2018/11/15
  • 雰囲気でシェルを使っている人のためのシェル入門 | κ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
  • Rustで高速な標準出力 | κeenのHappy Hacκing Blog

    κeenです。Rustで何も考えずに標準出力に吐いてると遅いよねーって話です。 今回、標準出力に「yes」と1000万回出力するアプリケーションを書いてみたいと思います。 println! まあ、最初に思いつくのはこれでしょうか。

    Rustで高速な標準出力 | κeenのHappy Hacκing Blog
  • Rustのトランザクション抽象化ライブラリ作った | κeenのHappy Hacκing Blog

    κeenです。最近KeenS/transaction-rs: The transaction abstraction library and its executors for rustというライブラリをリリースしたのでそれについて。 モチベーション Rustでドメインロジックを書いていると以下のようなコードが出てきました。 (実際はもうちょっと複雑ですが質ではないので簡略化します) struct GroupPgDao(r2d2::Pool<ConnectionManager<PgConnection>>); impl GroupPgDao { fn get_conn(&self) -> &PgConnection { /*... */ } fn delete_user(&self, user: &User, group: &Group) -> Result<()> { let cn =

    Rustのトランザクション抽象化ライブラリ作った | κeenのHappy Hacκing Blog
  • 非同期とノンブロッキングとあと何か | κeenのHappy Hacκing Blog

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

    非同期とノンブロッキングとあと何か | κeenのHappy Hacκing Blog
  • Rust in Production | κeenのHappy Hacκing Blog

    Rustプログラマミートアップでの発表用

  • メモリとスタックとヒープとプログラミング言語 | κeenのHappy Hacκing Blog

    κeenです。 今回の話は別にRustに限ったものではないのですが、よくRustを始めたばかりの人がスタックとヒープが分からないと言っているのをみかけるので少しメモリの話をしますね。 厳密な話というよりは雰囲気を掴んで欲しいという感じです。 メモリは配列 プログラム(プロセス)のメモリには実行するプログラム(機械語)やグローバル変数/定数、関数の引数やローカル変数、その他プログラムで使うデータ領域などを置きます。 プロセスに割り当てられるメモリというのは、1つの巨大なのっぺらな配列みたいなものです。サイズも決まってます。64bit OSなら2^64 byteです。 0 2^64 +--------------- ----+ | | | | | ~~ | | +--------------- ----+ これは仮想的なメモリなので実際の物理メモリに2^64 byteの配列がドンと確保される訳

    メモリとスタックとヒープとプログラミング言語 | κeenのHappy Hacκing Blog
    clavier
    clavier 2017/04/30
  • 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
    clavier
    clavier 2017/03/03
  • コンパイラの人からみたWebAssembly | κeenのHappy Hacκing Blog

    コンパイラ勉強会での発表用

    clavier
    clavier 2017/01/28
  • GCの話 | κeenのHappy Hacκing Blog

    #関数型なんたら でGCの話を聴いて、SML#のGCの論文を読んで色々感じたのでエントリー。 Snapshot GC まず、湯浅先生のSnapshot GC (解説)。並列、並行、インクリメンタルにGCが出来る。恐らく一番性能が出るとのこと。解説ではmark & sweepだけど私が聴いたのはCopyingだった。 勿論並行にするにはライトバリアが必要なんだけどその辺にまつわる話。並行じゃなくても世代別GCでもライトバリアが必要になるからその辺も頭に入れて聴いてほしい。Copyingはアロケーションが鬼のように速いのが特徴。mallocの感覚でメモリ確保が重いとか思ってると感覚が狂う。なので新たなオブジェクトを作るコストは非常に低い。そこにオブジェクトの変更にはライトバリアが付くとなると、大きくないオブジェクトの場合 オブジェクトを変更するより新たに作った方がコストが低くなる 。一応言って

    GCの話 | κeenのHappy Hacκing Blog
  • 分散VCSのモデル、あるいはPijulについて | κeenのHappy Hacκing Blog

    先日、Pijulという分散VCSについて知って、それについて調べてみたら少し面白かったのでメモ。 DVCSで一番有名なのは間違いなくGitだろう。あれは分散グラフ理論木モデルに基いているらしい。ベースになったモデルがあることに驚いたが、調べても出てこなかった。 Gitは高速で信頼性が高い一方、コミット同士をチェーンのように繋げてしまうので柔軟性を欠き、例えばCherry Pickなんかがやりづらい。 あるいはリモートのmasterを取り込まずにローカルのmasterにコミットすると互いに独立した変更であっても一旦remote masterをマージしないとプッシュ出来ず、コミットグラフが汚れてしまう。 また、CUIが直感的でなく、理解しづらいという声もある。それはこういう皮肉にも現れている まあ、言われてみれば私もこのスライドを見てようやく理解した。 他のVCSにも色々特色はあって、歴史は神

    分散VCSのモデル、あるいはPijulについて | κeenのHappy Hacκing Blog
  • 独学でプログラミングをやってきた中で良かった技術書50選 | κeenのHappy Hacκing Blog

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

    独学でプログラミングをやってきた中で良かった技術書50選 | κeenのHappy Hacκing Blog
  • 2016年注目していきたい技術 | κeenのHappy Hacκing Blog

    2016年個人的に注目したいというか力を入れたいというか成行を見守りたいというか、そんな技術達を書き連ねていく。ものによっては「何を今更」と思うかもしれないがあくまで私にとって、だ。 順不同。 Apache Drill 公式。様々なデータソースに対してANSI SQLでクエリを投げれるやつ。 ビッグデータの時代にETL無しで迅速にデータを分析出来るようにするために開発されてるらしい。 様々なデータソースというのは当に凄くて、CSVとJSONをJOIN出来たりする。 あるいはTSVの生ログとRDBにあるマスタデータをJOIN出来たりする。 個人的にはデータベースから抽出したCSVにクエリを投げたい時に便利かな、と思って注目してる。viewや一時テーブルを作る権限がないデータベースだってある。 あるいは、Zookeeperを使って分散モードで実行も出来るのでBigQueryみたいなのをオンプ

    2016年注目していきたい技術 | κeenのHappy Hacκing Blog
    clavier
    clavier 2016/01/05
  • Rustで小さなツールを作ってみる(前編) | κeenのHappy Hacκing Blog

    この記事はRust Advent Calendar 2015 1日目の記事です。 次 Rustで小さなツールを作ってみる(後編) κeenです。Rust Advent Calendar初日ということで軽い話から。 小さなツールって何だよって感じですが手元にIRCの生ログが大量にあるのでそれをDBにインポートしてみましょう。 あまりRustに向いた仕事じゃなさそうですが手始めとして。 前編でログのパースを、後編でDBへのインポートをやります。 IRCの生ログはtiarraが吐いたものです。 #emacs@freenodeのようにチャネル名@サーバ名のディレクトリに入っていて、ファイル名はYYYY-mm-dd.txtで、 13:43:24 <#emacs@freenode:codingquark> Such key generation, much wow. 13:43:59 ! Vejeta

    Rustで小さなツールを作ってみる(前編) | κeenのHappy Hacκing Blog