2021/01/14
プログラミング言語その7【OCaml】

ADT!ADT!

公式サイトにある日本語の『OCamlチュートリアル』と、本としては『プログラミング in OCaml 〜関数型プログラミングの基礎からGUI構築まで〜』、という順番で読んだはず。本は延べ2.8周分ぐらい読んでそう。あんまりWebで読み物を読んでいないので珍しい感じ。

本を買って1年後ぐらいに、OCamlでCコンパイラを書き始めたり、TaPLを読み始めたり。普段はIntelliJファミリーかXcodeという生活だから何で書くか迷うことはないんだけど、OCamlはどうしていいか分からなくて、まずはIntelliJでReasonMLのプラグインを使うことにした。生活のメインマシンはWindowsなので、以下の構成で始めてみた。

エディタソースコード管理ビルド、パッケージ管理
IntelliJ (ReasonML Plugin)gitbash, opam他
WindowsWindowsUbuntu on WSL

Qiitaに記事を書いてみたら、ocaml intellij wslでググると検索TOPに出たのでびっくりした。今も出る。完全に忘れてたけど全部bash経由で動かすんだね、なるほど。たしかCLionはsftpか何かでWSL側のCMakeその他と通信してたけど、汎用的な仕組みとしては公開されてないみたいだからOCamlでは諦めてWSLのbashを使ったんだった。ガチ勢は何を使うんだろう。別の勢力であるはずのReasonML勢も主流派が何を使ってるか分からないけど、そっちはVSCodeというのはありそうね。というわけで、割とすぐ次の構成に移った。

エディタソースコード管理ビルド、パッケージ管理
VSCode (ReasonML Plugin)gitbash, opam他
WindowsUbuntu on WSLUbuntu on WSL

たしか補完とフォーマットをもうちょっと良い感じにするためにocp-indentを使いたいのが背中を押したんだったかな。VSCodeのWSLサポートが便利すぎて辛い。WSL2はまだ試してない。

書き始める前は、OCamlって構文が気持ち悪いと思っていて、F#はそこが完全に気持ちよくて感動してたりしたんだけど、書いてたらOCamlに慣れてしまって、何が気持ち悪かったのか思い出せない。最近は、シャドウイングできるのにlet ~ inじゃないRust気持ち悪い、みたいな偏見とともに生活してます。これもちゃんとRustを勉強して書けば慣れてしまいそう。そういやセミコロンなしの言語も嫌いだったのに慣れてしまったね。こういう体感の変化がプログラミング言語だと割と簡単に起きるのが楽しいね。

冒頭の話に戻ると、SwiftとかKotlinでADT的なものは書いてたはずだけど、OCamlのヴァリアントに出会ってから完全に蝕まれてしまった。Twitterその他の記録を漁っていたら、これはOCamlというよりむしろ『プログラミング in OCaml』のヴァリアントの章その他を繰り返し読んだ影響な気がしてきた。影響そのものが何だったのかも改めて考え直さなきゃ。

(OCamlで)Cコンパイラを書いてたときの一番の印象は、(OCamlの)コンパイルエラーが全然分からないということ。推論させればいいってもんじゃないな、という通過儀礼みたいな気持ちになった。文法が分かってくると変なところで間違えないからそういうことは減っていくかと思いきや、えいやと全体に関わる修正するときにコンパイルエラーの出てる場所もメッセージも頼りづらかったり、調子に乗って4つも型変数を持ってるヴァリアントの修正に泣いたり。そういうことにならないように書くのが正しいんだろうけど、おおきな絵の描き方が分からないな。これは単にGUIアプリケーション以外の経験が少なすぎるだけかもしれない。

日付
タイトル

2026/03/14
読んだ本〜2026冬
2026/03/05
聴いてるポッドキャスト
2026/01/30
レンダリング?
2026/01/27
Live
2026/01/26
レンダリング!
2026/01/13
2025年まとめ
2025/09/23
読んだ本〜2025夏
2024/07/24
健康er
2024/02/10
健康
2023/05/19
喪/2
2023/04/24
コンサル
2023/02/01
それはそう
2022/12/17
2022/06/11
動かないもの
2022/06/05
スタイル
2022/04/23
JSX as data
2022/04/08
数学
2021/12/18
Activeな話
2021/09/05
Goのmultiple ABI
2021/07/31
『Goならわかるシステムプログラミング』
2021/07/28
ここにはタイトルが入ります
2021/01/25
これは日記ではない
2021/01/24
修行
2021/01/23
Considered Harmful
2021/01/22
雑感オブSwing
2021/01/21
雑感オブAndroid
2021/01/20
雑感オブiOS
2021/01/19
プログラミング言語その9【Groovy】
2021/01/18
1回休み
2021/01/17
会社を作る
2021/01/16
外国語
2021/01/15
プログラミング言語その8【C】
2021/01/14
プログラミング言語その7【OCaml】
2021/01/13
to be continued
2021/01/12
プログラミング言語その6【Kotlin】
2021/01/11
プログラミング言語その5【Swift】
2021/01/10
プログラミング言語その4【TypeScript】
2021/01/09
プログラミング言語その3【JavaScript】
2021/01/08
Comme d'habitude
2021/01/07
プログラミング言語その2【Java】
2021/01/06
プログラミング以前【Lisp】
2021/01/05
プログラミング言語その1【Objective-C】
2021/01/04
言語処理系入門
2021/01/03
ブログのようなもの
2021/01/02
Next.jsとPHPと私
2021/01/01
新年