タグ

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

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

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

    プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog
    todesking
    todesking 2021/01/27
  • シャドイングの嬉しさ | κ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
    todesking
    todesking 2020/06/21
  • Twitter上のプログラミング入門者観察記 | κeenのHappy Hacκing Blog

    κeenです。 ここ半年くらいTwitter上でプログラミングに入門してる人、入門してエンジニアとして働きはじめたばかりの人を観察していました。 そろそろ潮時かなと思ったので観察結果を報告します。 観察結果をまとめようと思ったのは、どっかのタイミングで書こうと思っていたところに丁度いい記事が目に入ったからです。 プログラミングスクールに通わず、プログラミングを学ぶ方法 プログラミングをともに学ぶ仲間をTwitterで探すのはやめておこう(追記) 私が初心者を観測していて、これらの記事と概ね同じ意見に至ったので補足説明として記事を書きます。 観察に至るまで 結果を書く前に、どういう経緯で観察をはじめてどうやって観察対象を集めたかを記しておきたいと思います。 モチベーション だいたいこの2ツイートに要約されます。 小耳に挟んだ話なので眉唾ものなんですがXSSとかSQLインジェクションみたいな古

    Twitter上のプログラミング入門者観察記 | κeenのHappy Hacκing Blog
    todesking
    todesking 2020/05/21
    つらい……
  • async/awaitと合成可能性 | κeenのHappy Hacκing Blog

    κeenです。async/awaitって実装の都合と利便性の良い所取ってるよなーと常々思ってるのを言語化してインターネットに放流します。 何度か似たようなことを言ってるのですがスライドであることが多くてあまり情報量を詰め込めなかったのでブログにまとめます。 非同期処理と継続 非同期処理は時間のかかる処理を待ち合わせずに別の処理をし、時間のかかる処理が終わってから元の処理を継続する仕組みです。 let url = "http://example.com" let html = fetch url (* この結果を待たずに別の計算をする *) (* fetch urlが終わったあとでここに戻ってきて後続の処理をする *) print html 「継続」や「後続」などのキーワードが出てきているとおり、継続の影がチラチラ見えます。 継続とはいってもスレッドのようなタスク単位で分割したいのでフルの継

    async/awaitと合成可能性 | κeenのHappy Hacκing Blog
    todesking
    todesking 2020/05/09
  • Dependency Analysis入門 | κeenのHappy Hacκing Blog

    このエントリは言語実装 Advent Calendar 2019 - Qiita 16日目の記事です。1日ばかりフライングですが先に記事が完成してしまったので投稿します。 κeenです。最近最適化コンパイラの読書会をやっているのですが、そこで学んだことの一部をアウトプットします。 Dependencyとは ここで扱うDependencyとは何なのか、Dependencyが分かると何が嬉しいのかを見ていきます。 例えば以下のプログラムを考えましょう。

    Dependency Analysis入門 | κeenのHappy Hacκing Blog
    todesking
    todesking 2019/12/22
  • 論文メモ: HHVM JIT: A Profile-Guided, Region-Based Compiler for PHP and Hack | κeenのHappy Hacκing Blog

    G. Ottoni. “HHVM JIT: A Profile-Guided, Region-Based Compiler for PHP and Hack,” PLDI 2018 を読んだメモ。 PLDIのaccepted paper。FacebookよりHHVMの第2世代JITエンジンで使われている手法の紹介。 Method JITでもTracing JITでもなくRegionベースでJITする話。 HHVMはHackとPHPを動かすが、Hackの型情報は捨ててしまう。Hackの型システムはunsoundらしい。世知辛い。 バイトコードインタプリタとJITでOSRして相互に実行を交代できる「よくある」JITエンジン。 HHVMのJITでは以下の4つをしている。 type specialization profile-guided optimizations side exits reg

    論文メモ: HHVM JIT: A Profile-Guided, Region-Based Compiler for PHP and Hack | κeenのHappy Hacκing Blog
    todesking
    todesking 2019/02/17
  • 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
    todesking
    todesking 2018/12/10
  • Graal/Truffleについて軽く | κeenのHappy Hacκing Blog

    κeenです。これは言語実装 Advent Calendar 201714日目の記事です。 JVMのコンパイラエンジンGraalと高速インタプリタ作成フレームワークのTruffleについて。 この記事の前に昨日の記事を読んでおくと理解の助けになるかもしれません。 Graalについて 公式ページ/GitHubOracle Labで開発されているJavaのJITエンジンの1つです。 JVMのコンパイラインタフェース(JVMCI)を利用してJavaでコンパイラを書いたものです。 従来はコンパイル部分はC++で書かれてましたが曰くJavaも十分速くなったし高級で安全なJavaでコンバイラを書いてもいいだろとのこと。 この絶妙にランタイムが拡張可能でかつパフォーマンスを損なわない感じはJavaならではですね。 また、Javaで書かれているのでユーザがJavaで拡張可能でもあり、最適化や機械語生成

    Graal/Truffleについて軽く | κeenのHappy Hacκing Blog
    todesking
    todesking 2017/12/17
  • RPythonについて軽く | κeenのHappy Hacκing Blog

    κeenです。これは 言語実装 Advent Calendar 201713日目の記事です。 RPythonやPyPyについて勘違いしてる人向けに誤解を解こうかと。あんまコードは出てこないやつです。 いきなり話が逸れますが、PyPyとRPythonの話前に二村射影を知っておくと理解が深まるかもしれないので触れて起きます。 二村射影と部分評価 詳しくはWikipediaを見て下さい。 ここでは直感的な話をします。 第一: インタプリタとExecutable インタプリタは抽象的にはソースコードと入力データを受け取って出力データを出しています。 +---------+ +--------+ | in/data | | source | +---------+ +--------+ | | +-------------+ | interpreter | +-------------+ | +--

    RPythonについて軽く | κeenのHappy Hacκing Blog
    todesking
    todesking 2017/12/17
  • 非同期とノンブロッキングとあと何か | κeenのHappy Hacκing Blog

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

    非同期とノンブロッキングとあと何か | κeenのHappy Hacκing Blog
    todesking
    todesking 2017/05/20
  • 関数型プログラマからみたRust | κeenのHappy Hacκing Blog

    C++からRustに入った人あたりから「関数型言語から来た人のRustの感想を知りたい」とたまに言われるのでいつかブログ書こうか。 — κeen (@blackenedgold) 2017年4月3日 イントロ 私はRustをやる前にはCommon LispやSMLを主に使っていましたが、仕事ではScalaを使っていましたし他にもOCamlやSchemeやClojureやATS2やHaskellなどを書くこともありました。 私を含めた多くの関数型言語経験者人が一度は Rust for functional programmers を読んだことがあるかと思います。 このように関数型言語と比較して書かれるといかにも似た言語に見えるので私は興味を持ちました。そこで私は実際にRustに触れ始めたのです。 構文 let があるのでおよそOCamlなどに似ているという印象を受けました。 デフォルトでイミ

    関数型プログラマからみたRust | κeenのHappy Hacκing Blog
    todesking
    todesking 2017/04/05
  • Idein Incに入社しました | κeenのHappy Hacκing Blog

    κeenです。日を以ちましてIdein Inc.に入社したので報告します。 退職エントリはこちら 経緯 Lisp Meet Upで社長の@9_tiesさんと知り合う その他勉強会で何度か一緒になってよく喋るようになる オフィス訪問に誘われて行ったら入社を誘われる(7月末) 入社することにする(9月半ば) 入社(現在) わさびずとideinに遊びに来たよ。噂のpi zero クラスタとかPEZYとかあった。熱い。 pic.twitter.com/MEc7qdosrk — κeen (@blackenedgold) 2016年7月31日 結構前から水面下で話は進んでました。 割と「PEZYに行くの?」という質問が多かったのですが中らずとも遠からずといったところでしょうか。PEZY Computingとも取引があったりする会社です。 どんな会社? 私が7人目(バイトを抜いたら6人目)の社員にな

    Idein Incに入社しました | κeenのHappy Hacκing Blog
    todesking
    todesking 2017/01/06
    oh
  • サイバーエージェントを退職しました | κeenのHappy Hacκing Blog

    このエントリはEx CyberAgent Developers Advent Calendar 2016 - Adventar1日目の記事です。 元サイバーエージェントの人がわいわいやります。 κeenです。二年弱勤めたサイバーエージェント退職したのでその旨について。 サイバーエージェントの思い出 サイバーエージェントに興味をもつきっかけになったのも入社することになったのも学生の頃からずっと参加し続けていたLispMeetUpでした。 LispMeetUpでは長らく会場としてCAのセミナールームを使わせてもらっていました。 そこでエンジニアに対して気軽に施設を提供するCAや社員の@potix2さんを知って、そのまま@potix2さんの手引でCAに入社する運びとなりました。 「面接でLispは口にしない方が良い。100%落ちる。」なんて言ってた割にはLisp繋りで入社しました。 Cyber

    サイバーエージェントを退職しました | κeenのHappy Hacκing Blog
    todesking
    todesking 2016/12/01
    oh???????!!!?!!?!?!?!!!!??!!!?!!!!!?
  • Rustのゼロコスト抽象化 | κeenのHappy Hacκing Blog

    κeenです。今日Twitter上でのやりとりから少し面白いことが分かったのでそれについて。 最近1.0が出たKotlinについて、水島さんがツイートしてました。 nullableに対してはmapとかの高階関数を一切使えないのが痛い。 ?. でカバーできるケースは一部だけだ。zero-overhead null-safetyと唄っとるが、代わりにnullチェックお化けになるわけで、どこがzero-overheadだ #kotlin_dis — 水島 宏太(Klassic作成中) (@kmizu) 2016年2月29日 それについて私が無関係なツイートを。 全く無関係だけどRustはOptionみたいな0-1の型をnull or valueに最適化するそうな。これこそがゼロコスト抽象かな https://t.co/5Y7cBEyrMe — κeen (@blackenedgold) 2016

    Rustのゼロコスト抽象化 | κeenのHappy Hacκing Blog
    todesking
    todesking 2016/03/25
  • リージョンについて | κeenのHappy Hacκing Blog

    このエントリは言語実装Advent Calendar 2015 10日目の記事です κeenです。今日はある程度gcに頼らずメモリを管理する手法、リージョンについて話そうと思います。 リージョン推論とそのアルゴリズムまで話せればよかったのですがサーベイが間に合わず… スタックベースのメモリ管理 gcのない言語、例えばcでも自動で解放される類のメモリがあります。ローカル変数です。 ローカル変数のメモリ確保/解放戦略は単純です。ブロックの開始に確保され、ブロックの終わりに解放されます。 { int x; // <- xが確保される { int y = 2; // <- yが確保される { int z = 3; // <- zが確保される x = y + z; } // <- zが解放される } // <- yが解放される } // <- xが解放される ブロックはネスト構造をとるのでメモリ管理

    リージョンについて | κeenのHappy Hacκing Blog
    todesking
    todesking 2016/03/25
  • 分散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
    todesking
    todesking 2016/02/14
  • Onigmoを最大49%高速化した話 | κeenのHappy Hacκing Blog

    κeenです。Rubyでも使われてる高速な正規表現エンジン、Onigmo(鬼雲)を高速化したのでその話を。 先日、正規表現技術入門を読んだというエントリの中で ところでに載ってた鬼雲のコードはDT(編注: Direct Threaded)にしてなかったけど簡単のためなのかな?あるいは厳格にC89に準拠するため?picrinみたくプリプロセッサで分岐すれば使えるのに。 と書いたところ、鬼雲の作者、K.Takataさんから @k_takata 「picrinみたくプリプロセッサで分岐すれば使えるのに。」これも知らなかった。 — K.Takata (@k_takata) 2015, 5月 11 という反応を頂きました。そしてイシューにも乗ったので言い出しっぺとして実装してみました。こちらのプルリクです。 Direct Threaded VM自体の解説はRubyist Magazineに載ってい

    Onigmoを最大49%高速化した話 | κeenのHappy Hacκing Blog
    todesking
    todesking 2015/12/22
    これだけ単純ならコンパイラが最適化してくれるだろうと思ったらとくにそういうことはなかった事例だ、最適化は難しい
  • SMLでPNGデコーダを作ろうとして分かったこと | κeenのHappy Hacκing Blog

    月初会で飛び入りLTのために作った雑なスライド。

    todesking
    todesking 2015/09/04
    やっていく若者だ
  • 1