Arantium Maestum

プログラミング、囲碁、読書の話題

「Haskellっぽさ」という「関数型プログラミング」のイメージ

「関数型プログラミングが主流になりつつある」という話が(またしても)ツイッターで出ていた。LINQやらReactやらを引き合いに出した英語記事が議論の引き金のようだ。その話題の一部として「そもそも何をもって関数型プログラミングと呼んでいるのだ?」と…

アラン・ケイとJOSS

前回に続きJOSSについて。今回は「オブジェクト指向」の名付け親、Smalltalkの設計者などで知られるアラン・ケイがJOSSに影響を受けたらしい、という話。 ACMインタビュー 私がJOSSという言語を意識し出したのはアラン・ケイの2004年のACMインタビューを読ん…

JOSSについての覚え書き

JOSSという言語とプログラミング環境があった、らしい。 en.wikipedia.org 初出は1963年、LISPの5年後でBASICの1年前である。RANDコーポレーションのJOHNNIACマシンを数学者が対話的に扱うための言語とシステムで、開発者はCliff Shaw。以前ブログで取り上げ…

短くブログを書く実験

気づいたらブログを更新しないまま6月が過ぎてしまった。 記事を書く上での自分の中の期待値とコストが増大していき、下書きで数千文字書いた時点で終わりが見えなくなってしまって放置する。そういうケースが3〜4本出てくると徒労感が募って手が出なくな…

読書メモ:The Rise of "Worse is Better"

逆説的でキャッチーなフレーズ「Worse is Better」の原点であるRichard GabrielのThe Rise of "Worse is Better"を再読したのでメモ。 概要 The Rise of "Worse is Better"は1989年にRichard Gabrielが書いた「Lisp: Good News, Bad News, How to Win Big」…

PythonのNaN周りの挙動とIEEE754についてのメモ

こういうツイートがあった Python君さぁ… pic.twitter.com/HDdQrSO8yp— not (@not_522) May 25, 2022 「まあ大体IEEE 754のせい」でほぼ終わる話ではあるのだけど、少し深掘りもしたのでちょびっと備忘録メモ。 問題を(少し順番を変えた上で)再掲すると: …

Pythonで変数スコープがブロックベースだと大変そう

ツイッターでPythonの文法の話題が盛ん(三角関数と同じで周期的に話題になる)で、個人的にはあまり同意できない意見も多いのだがなかなか面白いトピックもある。 例えば以下のようなコード: fs = [] for i in range(5): fs.append(lambda: i) for f in fs…

計算機科学の「傑作論文集」集

ここ数年インターネットを徘徊していて見つけた「傑作論文集」をブックマークして部分的につまみ食いしたりしてきた。 自分用の備忘録として&他の人にも有用かもしれない、ということで記事にしておく。 計算機科学全般 書籍だが、MIT出版の出しているIdeas…

バッカスの功績と経歴

John Backusという計算機科学者には大きな功績が三つある: IBMでFORTRANの開発を提案・主導したこと 構文の形式的な定義を可能とするBackus-Naur FormをALGOLの開発のために提案したこと チューリング賞受賞講演で、FORTRANのような命令型プログラミングか…

あの頃読んでた英語テックブログ

(注:あの頃というのは私が多感だった2000年代のことである) 最近マイクロソフトのRaymond Chenの「マイクロソフト社員がIBMに出向していた時に文化の違いに辟易してコーヒーメーカーに関して小さな反抗をした」というものブログ記事を見た。 devblogs.mic…

論文メモ:The Next 700 Programming Languages

プログラミング言語理論の最初期の金字塔の一つ、The Next 700 Programming Languagesを読み直したので論文メモ。これは過去に何回か読み直している個人的にも非常に思い入れのある論文。論文メモ書きたいなとここ数ヶ月ずっと思っていた。 背景 The Next 70…

PerlisとDijkstraとBauerとAPL

かなり前に、DijkstraとWirthがAPLの話をIversonから聞いて「俺たちの目が黒いうちはこんな言語は絶対流行らせない」と言ったという話をどこかで読んだ気がしていてソースを探していたのだけど、なかなか見つからずに残念に思っていた。 DijkstraがAPLのこと…

Graydon HoareのCompiler講義資料が面白かった話

Graydon Hoareが2019年にカナダのブリティッシュ・コロンビア大学でコンパイラ関連のゲスト講義した時の資料21 compilers and 3 orders of magnitude in 60 minutes - a wander through a weird landscape to the heart of compilationを読んだら大変面白か…

Every language is a Perlis language

時々ツイッターで俎上に上がる言説として「プログラミング言語は一つ学んだら大体全部同じ」という話と「お前HaskellやLisp見ても同じことが言えるの?」、そして「いやHaskellやLispだってそこまで違うわけじゃない」という一連の流れがある。 これで思い出…

論文メモ:Programming Language Semantics - It's Easy as 1,2,3

Graham HuttonのHaskellを使ったプログラミング言語意味論のチュートリアル論文Programming Language Semantics - It's Easy as 1,2,3を読んだのでメモ。 HuttonはOCamlでMonadic Parserを作ってみる(前編) - Arantium Maestumの元ネタである「Programming…

プログラミング言語における再帰の初出はLISPではなかった

ポール・グレハムの記事の一つにWhat Makes Lisp Different?というものがある: www.paulgraham.com ポール・グレハムらしくよく書かれていて、C言語などと比較した場合のLispの特徴をうまく捉えているように思う。 その中の一つが Recursion. Recursion exi…

論文メモ:Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I

John McCarthyの1960年に発表された論文Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part Iのメモ。 背景 「Artificial Intelligence」という用語の名付け親であるMcCarthyが、自身が助手らと作ったLISP言語を世に出し…

Compiling with ContinuationsとORBITの関係

前回の記事でも紹介したOlin ShiversのT Programming Languageに関する回顧録で It had a big influence on Andrew Appel, at Princeton, who subsequently adopted a lot of the ideas in it when he and Dave MacQueen's group at Bell Labs built the SML…

論文メモ:ORBIT: An Optimizing Compiler for Scheme

CPS形式のコンパイラIRについて調べていてORBITというコンパイラについての話が出てきたので、1986年に出た論文ORBIT: An Optimizing Compiler for Schemeを読んでみた。 ORBITはGuy SteeleのRABBITというScheme Compilerから「CPS形式をIRとして使う」とい…

Algorithm W実装のためにPrincipal Type Schemes for Functional Programsを読む(後編)

前回はSubstitution関連で少し寄り道したが、今回こそはPrincipal Type Schemes for Functional Programsの中核である type inference Robinson's unification algorithm algorithm W の話。 type inference For assumptions A, expressions e and type-sche…

Algorithm W実装のためにPrincipal Type Schemes for Functional Programsを読む(中編)

前回「type inference、Robinson's unification, algorithm Wを見ていく」と書いたが、その前にsubstitutionについてつらつらと考えてみたい。 S is a substitution of types for type variables, often written [τ_1/α_1,...,τ_n/α_n] or [τ_i/α_i] とある…

論文メモ:Abstract machines for programming language implementation

Abstract machines for programming language implementationを読んだのでメモ。 どのようなAbstract Machineがどのようなプログラミング言語の実装に使われてきたのか、というサーベイ。2000年に書かれており筆頭著者はHaskell界隈ではそれなりに知られてい…

Algorithm W実装のためにPrincipal Type Schemes for Functional Programsを読む(前編)

型推論のためのAlgorithm Wを実装するため、DamasとMilnerのPrincipal Type Schemes for Functional Programsを読んでいる。 重要そうな概念としては expression type/type-scheme substitution instance/generic instance assumption assertion closure typ…

1byte = 8bitsにしたのは「人月の神話」のフレッド・ブルックス?

少し前にTwitterで「面接で『なんで1byteって8bitsになっているのか?』と聞くといい」というツイートが話題になっていた。 それを見た時は「まあ8bitsだとは限らないよね、現在主流のアーキテクチャがそうなってるだけで」と思っただけで終わったのだが。 …

A正規化されたIRをCPSに変換する

A正規化について非常に参考にさせてもらっているMatt Mightのブログ記事で A later transformation to continuation-passing style (like that in Appel's book) is also simplified if transforming from A-Normal Form. とあるので、これまでのA正規化され…

C++のiostreamの<<を導入したのはストラウストラップ

C++

最近@karino2さんのポッドキャスト「プログラム雑談」のバックナンバーをいろいろ聴いている: anchor.fm 二週間ほど前に書いた聴いてるポッドキャストの記事ではまだ「気になっている」という分類だったのだけど、聴き始めたらいい感じにゆるいのと技術的な…

CEK抽象機械をCESK抽象機械に拡張する

前回のCEK抽象機械を拡張して、ミュータブルな状態のある言語も自然に実行できるようにする。 CESK抽象機械 CEK抽象機械はControl(実行する式)、Environment(変数環境)、Kontinuation(継続)の三つの要素を持つ。 CESK抽象機械はそこにStore(格納)を…

A正規化されたIRをCEK抽象機械で実行

前回で定義した言語とそのA正規化されたIRをインタプリタで実行したい。 というわけでまたしてもMatt Mightのブログを参考にする: matt.might.net こちらのブログはCESKマシンの話だが、今のところ破壊的変更を言語機能として実装してないので、まずはCESK…

関数のある言語のA正規化

前回の言語に関数定義・適用を追加する。 単一引数の関数 まずは変更を簡単にするために「単一引数の関数」を実装する。 関数自体の式であるFnと関数適用のCallをASTに追加: type t = ... | Fn of string * t | Call of t * t α変換は関数式に関しては(仮…

条件分岐のある言語のA正規化

前回に続いてA正規化の話。前回のミニマルな言語にブール型とifによる条件分岐を加える。実は条件分岐の正しいA正規化に関しては曖昧性があるようなので、後半はその話。 言語拡張 ASTに以下を追加: type t = ... | Bool of bool ... | Lt of t * t ... | I…