タグ

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

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

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

    プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2021/01/27
  • RustのHashMapはentryが便利 | κeenのHappy Hacκing Blog

    κeenです。個人的によく設計したなと思っているRustのEntry APIについて紹介します。 標準ライブラリのHashMapの操作を無駄なく書きたい人におすすめ。 Entry APIとは HashMap のEntry APIというのは私が勝手に呼んでる名前ですが、 HashMap::entry を起点にして使えるメソッド群のことを指しています。 これは「HashMap に に対応する値があればそれにXXし、なければYYする」をするときに使います。 例えば HashMap<String, Vec<String>> にキーに対応する値(Vec<String>)があれば新たな文字列をpushし、なければ空 Vec を作って新たに文字列をpushするという操作をしてみましょう。 素直に HashMap::get_mut とパターンマッチを使って書くとこうなりますね。 // 準備 let mut

    RustのHashMapはentryが便利 | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2020/05/25
    Entry自体はJavaとかにもあるけど、安全に操作できるのはこれぞRustってかんじ
  • 安全なシステムプログラミング言語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を書いている

    zetta1985
    zetta1985 2019/11/20
  • Rustで強めに型をつけるPart 2: Type Level State Machine | κeenのHappy Hacκing Blog

    このエントリはRustその2 Advent Calendar 2018 7日目の記事を時空を遡って書いています。 κeenです。寝れないので空いてる日の分を埋めに行きます。次はType Level State Machine。あるいはやりすぎてない方のBuilderバターン。 過去記事で当たり前のように書いたコードをもう少し丁寧に説明します。 以下のようなデータ型のビルダーを作りたいとします。 #[derive(Debug)] struct Person { id: u32, name: String, age: u32, address: Option<String>, zipcode: Option<String>, }

    Rustで強めに型をつけるPart 2: Type Level State Machine | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2019/08/14
  • 雰囲気でシェルを使っている人のためのシェル入門 | κ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
    zetta1985
    zetta1985 2019/05/25
  • お薦めのコンパイラの本とか | κeenのHappy Hacκing Blog

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

    お薦めのコンパイラの本とか | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2019/04/30
  • 「実践Rust入門」を書いたよ | κeenのHappy Hacκing Blog

    κeenです。実践Rust入門 言語仕様から開発手法まで(技術評論社)を書いた(3人で共著)のでどういうなのか解説します。 5/8発売です。電子版もありますよ。Gihyo Digital PublishingだとPDFが手に入るので人気らしいです。 See Also 書籍『実践Rust入門』の詳細な目次です 目指したもの Rustの入門書といえば公式ドキュメントのThe Book、TRPLなどと呼ばれるThe Rust Programming Languageやその有志による和訳が一番に挙がるでしょう。 それ以外にもオライリーよりProgramming Rustやその和訳版も出ています。 どちらもRustについてよく書かれており、書の購入を検討されている方は上記2冊との違いが気になるかと思います。 書の大きな特徴は以下の2点です。 Rust 2018 Editionに対応している 実

    「実践Rust入門」を書いたよ | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2019/04/25
  • プログラミングを目的にしてもいいと思う | κeenのHappy Hacκing Blog

    文系でプログラマーになったけど色々失敗して3年半で会社を辞めた話|denkigainoteという記事を読みました。 この記事に書かれていることが私の身にも覚えがあります。特に私と同い年の方のようなので自分に重ねてしまうところもあります。 ですが多少似たところはあってもやっぱり他人なので全然違う体験もしています。そういう体験を書いてみようと思います。もし該当記事を読んで絶望した人がいるなら別の例もあるよということで参考にしてください。 私は「パソコンの中身が知りたい。多分プログラミングとかいうやつを勉強したら分かる気がする。」くらいのモチベーションでプログラミングをはじめました。 ゴールがあやふやですし、結局のところ「プログラミングをする」が目標になってるので迷子になるのは必至ですね。実際そういう時期がありました。 そんな私でも今はプログラマとして生きています。以下に、私が遭遇した課題とそ

    プログラミングを目的にしてもいいと思う | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2019/01/22
  • Rustのモジュールの使い方 2018 Edition版 | κeenのHappy Hacκing Blog

    このエントリーはRust Advent Calendar 20187日目の記事です。 κeenです。Rust 2018が来ましたね。最近業も副業(?)も大詰めで中々時間がとれずAdvent Calendarに遅刻してしまいました。 それはさておき、私はRustのモジュールの使い方を過去に書きました。 この記事は中々好評だったようですが、状況が変わりまして2018 Editionでモジュールが大幅に変更され、分かりやすくなりました。 巷に2018での変更点は多く喧伝されていますが2015との差分ばかりで、今からモジュールシステムを学ぶ方はまず複雑な2015を理解してから差分を読んで、簡単な2018を理解しないといけなくなっています。 そこで2018からはじめて学習する方向けにモジュールシステムの解説をしようと思います。 とりあえずサンプルプロジェクトを作ります。 $ cargo new m

    Rustのモジュールの使い方 2018 Edition版 | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2019/01/02
  • rust初心者へのガイド | κeenのHappy Hacκing Blog

    シルバーウィークの進捗が芳しくなかったので雑な記事書いてお茶を濁しとく。rustをそれなりに(といっても1000行くらい)書いて溜まった知見をとりあえず出す。rust1.3時点。 最初の方で熱く語ってるが多くの人にとって欲しい情報は下の方にあると思う。 どんな言語 公式から持ってくるとこんな感じ。 zero-cost abstractions C++くらいの性能と思えばいい。 move semantics 他にはない難しい概念。しかしこれのおかげで様々な機能を教授出来る。 guaranteed memory safety move semanticsにより安全でない操作はコンパイル時に弾ける。 threads without data races move semanticsその他により安全でない操作は(ry trait-based generics 継承ベースとは違って開いている。型を定

    rust初心者へのガイド | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2019/01/01
  • JITあれこれ | κeenのHappy Hacκing Blog

    κeenです。遅刻してしまいましたがこのエントリーは 言語実装 Advent Calendar 2018 1日目の記事です。 最近私の観測範囲内でJITが流行っているのですが一口にJITと言っても色々あるよなーと思ったので私がJITについて知っていることをグダクダ話します。 このブログでも何度がJITや周辺技術について取り上げてますが話の流れがスムーズになるので最初から説明していきます。 2018-12-03: 加筆修正しました。差分はこちら JITって? Just in Time(コンパイル)のことで、日語にすると「間に合ってコンパイル」になりますかね。 インタプリタの高速化テクニックの1つです。 最初はインタプリタのようにコードをコンパイルせずプロセスが起動しますが、メソッドを実行するまでにはメソッドをコンパイルして、ネイティブコードで実行する方式です。 来ならJITはこのような意

    JITあれこれ | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2018/12/02
  • 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
    zetta1985
    zetta1985 2018/08/29
  • 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
    zetta1985
    zetta1985 2018/08/29
  • Rustのこれまでとこれから | κeenのHappy Hacκing Blog

    # Rustこれまでとこれから ---------------------- [Learn Languages 2018 in ODC (LL2018) ](https://llevent.connpass.com/event/95443/) === # About Me --------- ![κeenのアイコン](/images/kappa.png) * κeen * [ちゅーんさんだよー](https://shindanmaker.com/789932) * [@blackenedgold](https://twitter.com/blackenedgold) * Github: [KeenS](https://github.com/KeenS) * [Idein Inc.](https://idein.jp/)のエンジニア + Rustで開発してるよ * Lisp, ML, Rus

    zetta1985
    zetta1985 2018/08/26
  • 2018年注目していきたい技術 | κeenのHappy Hacκing Blog

    κeenです。毎年恒例です。個人的に注目していきたい技術と飛び込んでみたい技術を書いていきます。 あくまで個人的な内容なので悪しからず。 Swagger (OpenAPI Specifitation) YAMLで書いたREST APIの仕様からドキュメント、クライアントコード、サーバコードのテンプレートを生成するツール。 ネットワーク経由でなんらかのプロトコルを喋るとき、仕様とクライアントとサーバで独立してしまうとそれぞれで齟齬が出る。 プロトコルの詳細以外コードはどれも似たようなものになる訳だし自動生成できると望ましい。 仕様からクライアントとサーバのテンプレートが出てくる感じ。 一応「コードが仕様だ」みたいなものはいっぱいあるしサーバコードから生成も考えられる。 けどサーバが出来上がるまでクライアントが生成できないのはいただけないし何より言語に依存してしまう。 言語非依存に書けるのはや

    2018年注目していきたい技術 | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2018/06/14
  • Rustでstructのmutableなfieldあれこれ | κeenのHappy Hacκing Blog

    κeenです。人々にRustを薦めておきながら人は昨日ようやく入門しました。その時に困ったことをメモ。タイトルがルー語になってますが気にしない。 因みにこれはRust 1.0の情報です。 導入 Rustを知らない人のために説明すると、Rustの値はデフォルトでイミュータブルです。デフォルトで、というのはもちろんミュータブルにすることも出来ます。 標準ライブラリにも値がイミュータブルであることを要求するものもあります。 そしてミュータビリティはmutとして型にも現れます。厳密に同じかは知りませんがconstの逆、と思えばいいでしょう。 struct Point { x: isize, y: isize } fn double(p: &mut Point) { p.x = p.x * 2; p.y = p.y * 2; } fn main(){ let mut p1 = Point{x: 1

    Rustでstructのmutableなfieldあれこれ | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2018/06/07
  • Cargoの使い方 | κeenのHappy Hacκing Blog

    この記事はRust Advent Calendar 2015 3日目の記事です。 前 Rustで小さなツールを作ってみる(後編) 次 szkttyさん インデックス構文によるアクセスを実装する κeenです。Rustを使うにはCargoを使う必要がありますが、cargo helpを見てもあまり情報が載っていないので少しばかり書きましょう。 new Create a new cargo package at <path> Usage: cargo new [options] <path> cargo new -h | --help Options: -h, --help Print this message --vcs VCS Initialize a new repository for the given version control system (git or hg) or do

    Cargoの使い方 | κ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
    zetta1985
    zetta1985 2018/02/26
  • エンジニアの働き方とかについてのエモい記事 | κeenのHappy Hacκing Blog

    κeenです。 非エンジニアのマネージャがエンジニアチームと上手くやる方法の記事に影響を受けてエンジニアとしての意見を書いてみようかなと。 非エンジニア向けのつもりです。 ここでいうエンジニアはソフトウェアエンジニアのことです。 Disclaimer ある程度客観的になるように気をつけてますがあくまで私個人の意見です。エンジニアを代表するようなものではありません。 κeenはまだエンジニア3年目くらいの若造なのて「それは違うんじゃねーの」と思ったところがあったら多分あなたが正しいです。 仕事内容 エンジニア仕事は外から見たら何してるかよくわからないらしいですね。 ふつう仕事の成果物はエンジニアの間でしか共有してないのでまあ、そうなるでしょう。 なので「何をしているか」を説明するのはやめて「仕事しているときにどんな気持ちか」を話しましょう。 エンジニア仕事は頭脳労働です。 それも問題解決

    エンジニアの働き方とかについてのエモい記事 | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2018/01/15
    朝遅く仕事を始めるのは本当に集中力を高めるためだろうか?脳科学的な根拠に基づく理由があるのだろうか?
  • diesel小ネタ集 | κeenのHappy Hacκing Blog

    κeenです。これはRust Advent Calendar 2017の記事です。 RustORM、クエリビルダ、マイグレーションツールの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にあるものも用意されていて、例え

    diesel小ネタ集 | κeenのHappy Hacκing Blog
    zetta1985
    zetta1985 2017/12/17