タグ あどけない話
人気順 10 users 50 users 100 users 500 users 1000 users私とテストと自動化と - あどけない話
何度か講演でこの話をしたのだが、気が向いたのでエッセンスを書き下しておこうと思う。 テスト駆動という言葉が流行る前にプログラマとなった私は、当初どのようにテストを書いてよいのか分からなかった。そんなとき、(当時はオーム社で現在はラムダノートの)鹿野さんから「ビューティフルコード」を献本していただいた... 続きを読む
我田引水的な「関数プログラミングの入門」資料紹介 - あどけない話
これは、Haskell Advent Calendar 2021の2日目を埋めるために書いた記事です。実は単に僕が作った「関数プログラミングの入門」の資料の宣伝です。 ちなみに、僕の関数プログラミングの定義は「不変データプログラミング」であり、おそらく最も厳しい定義です。なので内容が分かれば、関数プログラミングに入門できた言... 続きを読む
GHCのIOマネージャの歴史と僕の苦悩 - あどけない話
これは、Haskell Advent Calendar 2021 の8日目の記事です。 Haskellのコンパイラとして事実上一択となったGHCには、「軽量スレッド」が実装されています。軽量スレッドは、ネイティブスレッドよりも軽量なスレッドで、他の言語では「グリーンスレッド」とも呼ばれています。Haskellerが並行プログラミングをするときは... 続きを読む
関手、Applicative、Monadの法則 - あどけない話
Monadとは、Applicativeであるデータ構造で、(>>=)演算子を提供し、それがMonad法則を満たすものである。 正確に表現するとこうなんですが、「はぁ?」っ感じですよね。「満たすべき法則」とか言われると、まったく理解できません。でも、オススメの形に持っていくための変換規則と捉えると分かりやすいのではないかとい... 続きを読む
さようなら遅延評価 - あどけない話
Haskellがとっつきにくい原因の一つに遅延評価がある。入門書では、無限リストと遅延評価がことさら強調される。しかし、Haskellを業務で使ってみると、遅延評価が煩わしくなってくる。遅延評価なしでもほとんどのことは実現できるし、メモリーの使用量は推測できないし、あまりいいことはない。 Haskellの評価戦略が、... 続きを読む
QUIC開発日記 その1 参戦 - あどけない話
QUICや ああQUICや QUICや 詠み人知らず。QUICの実装の難しさに絶望した心境が詠まれたと伝う。 序章 2017年の7月ごろ、QUICの実装を始めました。Haskellの有名なシリアライザ/デシリアライザである binary や cereal では、バッファ操作ができないので、パケットヘッダを複雑に処理する必要がある QUIC には不向きです... 続きを読む
あなたの知らないSemigroupの世界 - あどけない話
自分で定義するデータの中には、足し算したくなるようなデータがある。たとえば、送信と受信のカウンターを定義したとしよう。 data Metrics = Metrics { rx :: Int , ts :: Int } deriving (Eq, Show) これは以下のように足し算できると嬉しいだろう。 > Metrics 1 2 + Metrics 3 4 Metrics {rx = 4 , t... 続きを読む
TLS 1.3 開発日記 その16 Wireshark - あどけない話
Wiresharkはv2.3.0からTLS 1.3 ID 19に対応する。めでたい。すぐに使いたい人は、 Nightlyビルド をとってくるとよい。 使ってみる ポート13443で起動しているHaskellサーバとpicotlsクライアントの通信をtcpdumpでキャプチャしたファイルを"pico.pcap"とする。これを表示してみよう。 % tshark -dtcp.port==13443,ss... 続きを読む
スレッドリーク - あどけない話
Haskell これは Haskellスペースリーク Advent Calendar 2015 の14日目の記事です。 スレッドリークとは一般的に、終了させることを忘れたスレッドが残り続けることを言う。これは終了させ忘れたのが悪いという他ない。一方で、GHC では、スレッドを終了させたにもかかわらず、スレッドのメモリ領域がCGに回収されない事態が起こりうる。この記事は、この二番目のスレッドリークに... 続きを読む
Haskell の Monad とは言語内DSLのフレームワークである - あどけない話
この記事は、Haskellを勉強してある程度分かったけど、Monadで挫折した人のための記事です。10分間で、Monadに対する納得感を得ることを目的としています。他の言語でいう「モナド」にも通用する内容ですが、Haskell の文法や用語を用いますので、他の言語の利用者に分かるかは不明です。Haskellを勉強したのですから、代数データ型 型クラスは分かっていることにします。Monad は、単な... 続きを読む
Haskell Relational Record をリリースしました - あどけない話
Haskell Relational Record (HRR)尻叩き担当の山本です。この記事では、HRR のリリースについて説明します。なお、これは Haskell Advent Calendar 2014 の25日目の記事です。 HRR とは何か?HRRは、日比野さんが中心となって開発が進められている関係代数ライブラリです。Haskellで式を書くと、それがSQL文に変換され、データベースに問い... 続きを読む
HTTP/2から見えるTLS事情 - あどけない話
これは HTTP/2 アドベントカレンダー19日目の記事です。この記事はたくさんの資料を読んだ上で書きましたが、間違いとか勘違いとかがあるかもしれません。もしあれば、指摘していただけると幸いです。実質的に必須となったTLSHTTP/2は、HTTP/1.1と同じく、暗号化なし/ありのポートとして、80と443を使います。そのため、通信開始時にHTTP/1.1とHTTP/2をネゴシエーションするための... 続きを読む
Emacs 24.3/24.4 on Mac のフォント設定 - あどけない話
Emacs で一番難しいのはフォントの設定です。特に Mac では地獄のように難しいです。とうわけで、Emacs 24.3 と来る Emacs 24.4 でうまくフォントを使うための設定を公開しておきます。なお、Mac では素の Emacs を使ってはいけません。Emacs Mac port を使いましょう。パッチを当てるのは面倒なので、早く github なんかで公開されるといいですね。ちなみに... 続きを読む
Real World Haskell の古いところ - あどけない話
Real World Haskell の内容が古くなってきたので、どこが古いかとか、それに変わる新しいものは何とか、まとめたいと思う。1章今でも通用する。2章今でも通用する。3章今でも通用する。4章ghc に --make オプションはもう不要。5章5.14節では、"runghc Setup build" のように Setup.hs を実行しているが、現在では "cabal" コマンドを使うのが一... 続きを読む
Haskell ポインタープログラミング - あどけない話
早いもので、今年も12月25日となりました。メリークリスマス! うちのちびっ子怪獣たちも、サンタさんに書いた手紙通り、レゴをもらってご満悦のようです。そして今日は、Haskell Advent Calendar 2013 の最終日でもあります。Haskellらしい?「純粋なコードで構成するのが Haskell らしいプログラムであり、IOはHaskellらしくない」という発言をよく耳にします。確か... 続きを読む
書評「型システム入門」 - あどけない話
端的に説明するなら「正しく型付けされた項はおかしくなることがない」ことを学ぶための壮大な本。型に関する圧倒的な知識を持ち、説明がうまく、根気づよい人にのみ記すことができた英語の良書が、型システムを愛する訳者と完訳者、および(書中に名前が出てくる方も含む)豪華なレビュアの情熱によって翻訳された記念すべき書籍。税抜きで6,800円と高いが、それ以上の価値がある本である。型システム入門 −プログラミング... 続きを読む
Git に関する良記事 - あどけない話
適宜追加します。Pro Git僕が読んだ Git の書籍の中では、一番分かりやすいと思いました。日本語版の書籍はありませんが、オンライン版が翻訳されています。Pro Git図解 GitGit の初心者が動作を理解するのにおススメ。図解 Gitあなたの知らないGit Tips書籍には載ってない Tips の解説。知らないと損するかも。あなたの知らないGit Tipsワークフロー、あるいはブランチング... 続きを読む
コンパイルは(テストではなく)証明である - あどけない話
「プログラムのテストはバグの存在を示すことにかけてはとても効率的な方法ですが、バグの不在を示すことにかけては絶望的なほどに不適切です。プログラムの信頼性を顕著に向上させる唯一の方法は、その正当性に対して説得力のある証明を与えることです」 -- Edsger W. Dijkstra静的型付き言語では、コンパイル時に型が検査される。この型検査に関連して型推論という機能を持つ言語がある。型推論は、大きく... 続きを読む
静的型付き言語プログラマから見た動的型付き言語 - あどけない話
およそ20年前にAlan Kay の講演をきいたことがある。印象に残ったのは、彼が引き合いに出した McLuhan の言葉だ。 I don't know who discoverd water, but it wasn't a fish. (拙訳)誰が水を発見したかは知らないが、発見者が魚でなかったことは確かだ。 誰しも信念という水の中を泳ぐ魚のような存在だ。思い切って飛び跳ね空気に触れてみなれば... 続きを読む
GHC でスタックトレース - あどけない話
Haskellこれまで GHC では、スタックトレースを取ることが有効なデバッグ方法ではなかった。なぜなら遅延評価では、(再帰であってもなくても)末尾呼び出しは単なるジャンプになるから、スタックを使わないのである。スタックに戻る場所を積むのは、case と of の中で評価される式だけだ。(つまり、ここは正格に評価される。)この問題を解決するために GHC 7.4.2 から、わざわざスタックにログ... 続きを読む
Haskell でのデバッグ - あどけない話
「純粋関数型言語はデバッグしにくい。だって純粋な関数で printf デバッグできないから」とつぶやいている人をよく見かけます。これまで放置してきましたが、リツイートが50を超えたので、Haskellでのデバッグについて書きます。例外処理と同じように、Haskell でのデバッグでは、純粋な関数と IO を分けて考える必要あります。 IO での printf デバッグIO では、putStrLn ... 続きを読む
Haskell での例外処理 - あどけない話
「よく分かってないことはうまく書けないし,もう分かっちゃったことは書くのが面倒臭い.」 @nom4476リツイート数が30を超えたので、Haskell での例外処理について説明します。僕が思うに、Haskell での例外処理が分かりにくいのには、2つ理由があります。ライブラリの混乱パラダイムの違い歴史的経緯により、Prelude にも Control.OldException にも Control... 続きを読む
HaskellとテストとBDD - あどけない話
HaskellHaskellでの BDD を実践するとどうなるかを考えるためのメモ。型豊かなデータ型とセクシーな型システムを持つ Haskell では、型が以下のような意味を持つ。仕様保守性の向上簡単なドキュメント設計図BDD では、テストの用語ではなく設計の用語を使ってテストを記述する。だから Haskell で、まず型を書く習慣があれば、ある意味 BDD を実践していると言える。この感覚は、他... 続きを読む
カリー化談義 - あどけない話
Haskell最近、スタートHaskellで「カリー化された関数のメリットは何か?」という質問が出た。そのすぐ後に、kmizuさんがカリー化の誤用に対して警鐘を鳴らしてしていた。僕からするとkmizuさんの「カリー化の定義」も誤用に思えたので、調べるとともに考えたことのまとめ。いろんな定義「カリー化する」という用語は、すくなくとも以下の3つの意味で使われているようだ。部分適用という意味 これは明ら... 続きを読む
Haskell(GHC)での軽量ユーザスレッドの実装方法 - あどけない話
Haskell命令型言語の Java や Ruby がユーザスレッドからカーネルスレッドに移行したのとは対照的に、関数型言語の Erlang や Haskell では軽量なユーザスレッドを提供することに成功しています。僕は、この違いが何から生じているのか理解したいと思っています。ここには、これまで調べたことをメモしておきます。軽量なユーザスレッドは Erlang が有名ですが、Haskell (G... 続きを読む