タグ

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

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

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

    プログラミング言語の未来はどうなるか | κeenのHappy Hacκing Blog
  • Idrisの標準ライブラリを解説していくよ | κeenのHappy Hacκing Blog

    igrep
    igrep 2020/12/28
  • Idris面白機能:with構文と依存型、View | κeenのHappy Hacκing Blog

    このエントリはIdris Advent Calendar 2020の18日目の記事です。 κeenです。Idrisで個人的に面白いなーと思ってる機能、 with 構文とそれを利用したViewについて紹介します。 パターンマッチを補助する with 構文 関数を書くときに条件分岐したくなることがありますよね。 データ型の構造に沿う条件であれば引数でのパターンマッチで済むんですが、もう少し複雑な条件だと if や case を使わざるを得なくなります。 例えば「リストに値がなければ追加する」関数 addToList はこう書けるでしょう。 addToList : Eq a => a -> List a -> List a addToList x xs = if elem x xs then xs else x::xs こういうのも引数のパターンマッチで書けると綺麗ですよね。 これは with

    Idris面白機能:with構文と依存型、View | κeenのHappy Hacκing Blog
    igrep
    igrep 2020/12/22
  • Idrisdocの使い方 | κeenのHappy Hacκing Blog

  • 自作コンパイラをブラウザ上で動かす | κeenのHappy Hacκing Blog

    このエントリは言語実装 Advent Calendar 2020の1日目の記事です。 次はsisshiki1969さんで「RustでつくるRuby、その後の進捗」です。 κeenです。 昔からちまちま作ってるSML処理系をブラウザ上で動かすことができたのでその進捗報告です。 ちまちま作ってるSML処理系とはこれのことです。 KeenS/webml: A Standard ML Compiler for the Web 今回実装したオンラインコンパイラは以下で試すことができます: WebML Online Compiler まあ、ブラウザで動くのでここに貼ることもできるんですけどね。 こういうのどうやって作ったの?っていうのを話していけたらなと思います。 設計 そもそもの話、WebMLはブラウザで動かすために設計、実装されています。 スタートから違うじゃんと思うかもしれませんが、スタートから

    自作コンパイラをブラウザ上で動かす | κeenのHappy Hacκing Blog
    igrep
    igrep 2020/12/01
    今MLというと機械学習関連と紛らわしくなってしまう時代なのがつらいな...
  • Twitter上のプログラミング入門者観察記 | κeenのHappy Hacκing Blog

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

    Twitter上のプログラミング入門者観察記 | κeenのHappy Hacκing Blog
    igrep
    igrep 2020/05/21
    こういう混沌に悩まされることなくプログラマーになれたことを幸運に思う。大変やね…
  • 最小限のELF | κeenのHappy Hacκing Blog

    κeenです。 先日の記事で言及した最小限のELFが需要ありそうだったので解説してみます。 コンパイラを作るときの参考にしてみて下さい ELFはExecutable and Linkable Formatを表わし、Linuxなどで標準の実行可能ファイルのフォーマットとなっています。 なんらかの形でこのファイルを生成するのがコンパイラの最終目標となります。 一般にはアセンブラまで吐いて外部のアセンブラやリンカにELFファイルの生成を任せることが多いのですが、自作するなら最後までやりたいという人向けにとっかかりになる最小限のELFファイルを解説します。 まずはこのファイルを生成するのを目指して、後から色々追加していけばインクリメンタルにできるよね、という訳です。 一部、「どうしてかは分からないけどこうしたら動く」みたいな箇所もあるので詳しい人がいたら教えて下さい。 全体構成 プログラムそのもの

    最小限のELF | κeenのHappy Hacκing Blog
    igrep
    igrep 2020/04/12
  • タネ明かし: Whitespaceコンパイラを作った話の裏側 | κeenのHappy Hacκing Blog

    κeenです。今朝、エイプリルフールのネタ記事を書いたのでそのタネ明かしをします。タネとはいっても、ほぼ手書きなんですけどね。 WhitespaceはEdwin BradyとChris Morrisにより2003年4月1日に発表された言語です。 この言語自体エイプリルフールのジョークなんですね。 公式ページはあるのですが、繋がらないのでWebArchiveとかからアクセスして下さい。 特徴としては空白文字、タブ文字、改行文字だけで構成されているのでパッと見では何も書いてないようになる点があります。 いわゆるesoteric languageです。 今回の私のエイプリルフールのジョークは、Whitespaceを知らない人には「正直者にしか見えないコードですか?」、Whitespaceを知ってる人には「Whitespace!?んなもん書ける書けるわけないだろ!あ、そうか今日はエイプリルフールか

    タネ明かし: Whitespaceコンパイラを作った話の裏側 | κeenのHappy Hacκing Blog
    igrep
    igrep 2020/04/02
  • Whitespaceのセルフホストコンパイラ作ったよ! | κeenのHappy Hacκing Blog

    ハ〜イ、κeenさんだよー。Whitespaceのセルフホストコンパイラを作ったから紹介するねー。 Whitespace1ってのはあまり知名度がないけどこういう感じの言語。 見ての通りクリアな構文が売りの言語で、簡単に覚えられるのが特徴。 文法が綺麗だとパースも簡単だろうということで、セルフホストコンパイラを書いてみた。 こんな感じでコンパイラに自身のソースをわせると完全に一致するバイナリを吐くよ。 $ whitelie < whitelie.ws > whitelie2 $ md5sum whitelie whitelie2 418b0b9a58caaa9e99a2d5e3649f6faf whitelie 418b0b9a58caaa9e99a2d5e3649f6faf whitelie2 一応注意点を挙げておくと、オリジナルの言語とは多少の非互換がある。一番大きいのは で、バイナリ

    Whitespaceのセルフホストコンパイラ作ったよ! | κeenのHappy Hacκing Blog
    igrep
    igrep 2020/04/02
    なるほどエイプリルフールネタかぁ(でも本当に作ったのか...
  • 自作lintルールとcargo fixでRustのコードをリファクタする | κeenのHappy Hacκing Blog

    このエントリはRustその2 Advent Calendar 2019 - Qiita 25日目の記事です。 κeenです。私は既に冬休みに突入してます。Happy Holiday! 「Rustで簡単なコードの書き換えを自動化したいよなー」と思っていたら cargo fix でできるよという啓示を貰ったのでやってみました。 ↓ 啓示。リプライ元は私じゃないですけどね :) write a lint plugin that uses the diagnostics API, then just use cargo fix — Manish (@ManishEarth) December 12, 2019 なるほど。Lintプラグインとcargo fixを使えばいいようです。 コンパイラプラグイン unstable featureですがRustにはコンパイラプラグインの仕組みがあります。 pl

    自作lintルールとcargo fixでRustのコードをリファクタする | κeenのHappy Hacκing Blog
    igrep
    igrep 2019/12/25
  • リソースを管理する型 | κeenのHappy Hacκing Blog

    このエントリは型 Advent Calendar 2019 - Qiita 22日目の記事です。 κeenです。Session Typeの話をするつもりでしたが気が変わったのでリソースを管理する型の話をします。 リソースといっても所有権の話ではないです。 DBにWriteできるだとかS3からGetできるだとかです。リソースというよりはアクセス権限の方が正確かもしれません。 他のエントリが学術的なものばかりなのに対してこれは実装テクニック的な記事です。 型理論のアドベントカレンダーですが、まあいいや。 モチベーション Webアプリケーションを作っていると、アプリケーションが触るリソースを静的に知りたいことがあります。 例えば、以下のような需要があります。 データベースが壊れてReadしかできなくなった時にそれでも動く機能はどれか知りたい この機能遅そうだけどキャッシュしたりしてる? このアプ

    リソースを管理する型 | κeenのHappy Hacκing Blog
    igrep
    igrep 2019/12/22
  • 手続き型脳で型推論を実装してみた | κeenのHappy Hacκing Blog

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

    手続き型脳で型推論を実装してみた | κeenのHappy Hacκing Blog
  • RustでCPS変換が簡単になったよという話 | κeenのHappy Hacκing Blog

    κeenです。このエントリはRust Advent Calendar 2019 - Qiita 8日目の記事です。 昔書いたRustのコードをもけもけ漁ってたら、しばらく前にRustでCPS変換しようとしてた下書きをたまたま発見しました。 当時はコンパイラの制約で簡単には書けなかったのですが今見ると簡単に書けるようになってたのでRustも進歩してるね、という確認をしたいと思います。 CPS変換とは CPS変換とは、プログラムを継続渡し形式(Continuation-Passing Style)に変換することです。 じゃあCPSとはというと、雑に言えば「ネストした関数の呼び出し禁止」の形式です。 …ちょっと雑すぎますね。 プログラムのコントロールフロー(if 式や 関数呼出)を陽に受け取った継続で記述する形式です。 この形式はよくコンパイラの内部表現なんかに使われます。 変数束縛の右側に i

    RustでCPS変換が簡単になったよという話 | κeenのHappy Hacκing Blog
  • Rustのturbofishを理解する | κeenのHappy Hacκing Blog

    このエントリはRustその3 Advent Calendar 20193日目に飛び入り参加しているエントリです。 Rustの型パラメータ指定の構文、通称ターボフィッシュ(turbofish)について。 Rustでジェネリクス関数は以下のように関数名に続いて <パラメータ名> で指定しますよね?

    Rustのturbofishを理解する | κeenのHappy Hacκing Blog
  • itertoolsの紹介 | κeenのHappy Hacκing Blog

    κeenです。このエントリはRust Advent Calendar 2019 - Qiita 6日目のエントリです。 空いてたので飛び入りました。 飛び入りなので軽い小ネタ。便利クレート itertoolsの紹介です。 itertools は標準ライブラリの Iterator を拡張し、今まで痒いところに手が届かなかった部分をサクっと埋めてくれるライブラリです。 使い方 cargo add itertools などしてあとは use itertools::Itertools; するだけです。これだけでイテレータが便利になります。 何ができるの Itertools 「そう、それ!」と言いたくなるようなメソッドが生えてきます。 例えばイテレータの要素をまとめて処理する chunks と、セパレータで文字列を結合する join を組み合わせるとこういうコードが書けます。 for chunk i

    itertoolsの紹介 | κeenのHappy Hacκing Blog
    igrep
    igrep 2019/12/06
  • その正規表現エンジン、インタプリタで満足してる?! | κeenのHappy Hacκing Blog

    # その正規表現エンジン、<br /><span class="narrow"><span>イ</span><span>ン</span><span>タ</span><span>プ</span><span>リ</span><span>タ</span></span>で<ruby>満足<rp>(</rp><rt>サティスファイ</rt><rp>)</rp></ruby>してる?! ---------------------- [Regex Festa - connpass](https://opt.connpass.com/event/140566/) === # About Me --------- ![κeenのアイコン](/images/kappa.png) * κeen * [@blackenedgold](https://twitter.com/blackenedgold) * Git

  • 「実践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
    igrep
    igrep 2019/04/24
    めでたい。
  • お薦めのコンパイラの本とか | κeenのHappy Hacκing Blog

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

    お薦めのコンパイラの本とか | κeenのHappy Hacκing Blog
    igrep
    igrep 2019/02/16
    ありがたや。TAPL途中でやめちゃったけど、また読もうかな
  • 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
  • Idris入門: 数当てゲーム | κeenのHappy Hacκing Blog

    κeenです。 Idrisの入門記事ってあまりないなと思ったので少し書いてみます。 私は別にIdrisに詳しいわけではないので間違っているかもしれないことに注意してください。 Idris は依存型を持つ汎用プログラミング言語で、Haskellっぽい文法や機能を持ちます。 依存型を持っていてかつ汎用のプログラミング言語というのがめずらしいのでその手の文脈ではだいたい名前が上がります。 Idrisの型システムはものすごく雑にいうと型がプログラム可能です。型を書く位置に関数を書いたり逆に型を値としてプログラムに渡したり出来ます。 これらの機能を使って型を詳細に書けるので正しい入力しか受け付けないぜ!みたいなことが書けます。 ところでIdrisに入門しようとすると難解な記事が多いのが現状です。 Idrisの関連記事はどうしても依存型に目が行ってしまうので普通のプログラミング言語としての紹介が中々見

    Idris入門: 数当てゲーム | κeenのHappy Hacκing Blog
    igrep
    igrep 2019/01/10