50
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Systemi(株式会社システムアイ)Advent Calendar 2024

Day 2

ミルクボーイ漫才のプロトコルでわかる Haskell

Last updated at Posted at 2024-12-01

c8f643b0-0027-4d7f-93cf-c45b6ccc4392.png1

ボケ&ツッコミ: どうもー、どうもどうもー

ツッコミ: あー、ありがとうございますー、いま、Cherry MX2 互換のキーキャップをいただきましたけどもね

ボケ: ありがとうございますー

ツッコミ: こんなん、なんぼあってもいいですからね

ボケ: 入れておきましょう

ツッコミ: ゆーとりますけどね

ボケ: いきなりですけどね、うちのオカンがね、好きなプログラミング言語があるらしいんやけど

ツッコミ: あっ、そーなんや

ボケ: その名前をちょっと忘れたらしくてね

ツッコミ: 好きなプログラミング言語の名前を忘れてもうて、どうなんてんのそれ

ボケ: でまぁ、色々聞くんやけどな、全然わからへんねんな

ツッコミ: わからへんの? いや、ほな俺がね、オカンの好きなプログラミング言語、ちょっと一緒に考えてあげるから、どんな特徴ゆうてたか教えてみてよ

ボケ: 関数型言語でなんやらえらい純粋やって言うねんな

ツッコミ: おー、Haskell やないかい、その特徴はもう完全に Haskell やがな

ボケ: Haskell なぁ

ツッコミ: すぐわかったやん、Haskell は副作用のない純粋関数を重視するプログラミング言語やねん、純粋な関数は参照透過性と言われ、入力が同じなら出力も必ず同じになるんよ、Haskell よー、こんなもん

ボケ: でもこれちょっとわからへんのやな

ツッコミ: 何がわからへんのよー

ボケ: いや俺も Haskell と思うてんけどな

ツッコミ: いやそうやろ?

ボケ: オカンが言うには、最も人気のあるプログラミング言語って言うねんな

ツッコミ: あー、ほな Haskell と違うかー、Haskell は人気ないもんねー

ボケ: そやねん

ツッコミ: Haskell はね、2024 年 11 月の TOBIE Index3 で 34 位なんよ、関数型言語で言うたら 26 位の Lisp にすら負けてんのよ

ボケ: そやねんな

ツッコミ: な? Haskell も Python に勝てると思われたら荷が重いよあれ

ボケ: そやねんそやねん

ツッコミ: Haskell ってそういうもんやから、ほな Haskell ちゃうがなこれ

ボケ: そやねん

ツッコミ: ほなもう一度詳しく教えてくれる?

ボケ: 数学できんと理解できんって思われてるらしいねん

ツッコミ: Haskell やないかい! 文法がなにやら数式に似てたり、やたらと数学の難しい概念4を取り込んでるんやから

ボケ: まあねー

ツッコミ: でも別に数学できんでも Haskell はちゃんと理解できるで、現に俺は数学全然わからんけど Haskell は理解できてるからね、Haskell はそんなもんや

ボケ: わからへんねん、でも

ツッコミ: 何がわからへんの、これで

ボケ: 俺も Haskell と思うてんけどな

ツッコミ: そうやろ

ボケ: オカンが言うには、スマホアプリもこれで作る、って言うねんな

ツッコミ: ほな Haskell ちゃうやないかい! Haskell はスマホとか組込みとかは大の苦手やねん、Haskell は速い CPU と大量のメモリがあって初めて活躍できるんやで

ボケ: そやねんそやねん

ツッコミ: な? Haskell は必要になるまで計算しない遅延評価って仕組みが持ち上げられてるけど、そのせいでサンクっていう未計算の領域が増えてメモリリークならぬスペースリーク5が発生するから、メモリはあればあるだけええねんで

ボケ: そやねんそやねん

ツッコミ: そういうカラクリやから、あれ

ボケ: そやねんな

ツッコミ: Haskell ちゃうがな、ほなもうちょっとなんか言うてなかった?

ボケ: 界隈ではモナドモナドうるさいねん

ツッコミ: Haskell やないかい! Haskell はモナドって仕組みのせいでえらい難しいって誤解されてる6ねん、Haskell よそんなもん

ボケ: わからへんねん、だから

ツッコミ: なんでわからへんの、これで

ボケ: 俺も Haskell と思うてんけどな

ツッコミ: そうやろ

ボケ: オカンが言うには、プログラミング教室で最初に教わる言語って言うねん

ツッコミ: ほな Haskell ちゃうやないかい! プログラミング教室では Haskell なんか教えへんのよ

ボケ: せやねん

ツッコミ: Haskell はプログラミング教室で教えてもらえるようなカジュアルな言語ではないねん、だいたい教えられる人材が市場におらんし、そもそも需要がないねん

ボケ: せやねん

ツッコミ: Haskell 教えてもらえるのは大学院の数学科研究室か、オブジェクト指向に飽きた CTO とかがいる会社かなんかやねん

ボケ: せやねんせやねん

ツッコミ: いずれにせよ人材不足は否めんけどな

ボケ: せやねんな

ツッコミ: Haskell ちゃうがな、ほな、もうちょっとなんか言うてなかったか?

ボケ: 型システムが厳しくてコンパイル通すのがめっちゃしんどいらしいで

ツッコミ: Haskell やないかい! 初学者は Haskell のコンパイルエラーを解消するのに心折れて勉強をあきらめる7んやから、でもコンパイルさえ通ったら型システムが実行時安全を保証してくれるから実行時エラーがないねんで、まぁこれは誇張8やねんけど

ボケ: わからへんねん、でも

ツッコミ: なんでわからへんの、これで

ボケ: 俺も Haskell やと思うてんけどな

ツッコミ: そうやで

ボケ: オカンが言うには、ブラウザでも動くって言うねん

ツッコミ: ほな Haskell ちゃうやないかい! Haskell によく似た言語で Elm や PureScript9 っていうのがあって、これらはかなり文法的に Haskell に似てんねんけど Haskell やないからな。Haskell をブラウザで動かすには GHCJS ってのを使えばできなくもないねんけど、誰も使ってないからノーカンやな

ボケ: そやねんな

ツッコミ: Haskell ちゃうやないかい、ほな、もうちょっとなんか言うてなかったか?

ボケ: インデントに気をつけあかんらしいねん

ツッコミ: Haskell やないかい! インデントでコードブロックを表現する言語は Haskell と Python ぐらい10やねん、Haskell が 1990 年誕生、Python は 1991 年誕生やけど Haskell は 1985 年誕生の Miranda って言語に影響を受けていて、この Miranda がオフサイドルールの元祖やと俺は睨んどる

ボケ: そやねんな

ツッコミ: インデントに気をつけなあかん関数型言語、Haskell に決まりやん、そんなん

ボケ: でもわからへんねん

ツッコミ: わからへんことない、オカンの好きなプログラミング言語は Haskell やもぉ

ボケ: でもオカンが言うには、Haskell ではないって言うねん

ツッコミ: ほな Haskell ちゃうやないかい! オカンが Haskell ではないと言うんやから Haskell ちゃうがな

ボケ: そやねん

ツッコミ: 先ゆえよ、俺がオフサイドルールの歴史説明してる時どう思っててん、お前

ボケ: 申し訳ないよ、だから

ツッコミ: ホンマにわからへんがなこれ、どうなってんねんもう

ボケ: んでオトンが言うにはな

ツッコミ: オトン?

ボケ: Rust11 ちゃうか? って言うねん

ツッコミ: いや絶対ちゃうやろ、もうええわー

ボケ&ツッコミ: ありがとうございましたー

  1. AI に描かせた。時々描かせるが、期待通りに描かせるのがとても難しい。コツがあれば是非コメントください

  2. Cherry MX とはドイツの CHERRY 社(https://www.cherry.de/)のキースイッチで、他社のメカニカルキーボードや自作キーボードに採用されており、圧倒的シェアを誇る。耐久性は 5000 万回、軸によっては 1 億回の耐性があり非常に信頼性が高い

  3. プログラミング言語のトレンドを毎月様々なメトリクスを用いて集計してくれているサイト。Java と C が2強だったが最近は Python の1強が続いている。https://www.tiobe.com/tiobe-index/

  4. ラムダ計算、圏論(モナド)、抽象代数学(モノイド)、型理論、集合論、不動点など。これらは知らなくても大丈夫

  5. 2015 年に Haskell のスペースリークに関するアドベントカレンダーが立ち上がった。かなりマニアックだが読み物としても面白い。https://qiita.com/advent-calendar/2015/haskell-space-leaks

  6. モナドは副作用を制御するための純粋関数型プログラミング言語への挑戦として Haskell に導入された。モナドが導入される前の Haskell はリストを用いて非決定性や副作用をモデル化していたが、I/O、状態管理、エラー伝播などの複雑な副作用を扱うには不十分だった。ここで Philip Wadler が圏論のモナドを Haskell の設計に適用できることを提案し、モナドは Haskell の副作用を制御する抽象的な枠組みとして取り込まれ、I/O、状態管理、エラー伝播などを統一的に扱えるようになった。ただし標準出力に Hello World を出力するだけでモナドが登場するので、初心者殺しとされている。初学者はモナドのことは全く気にしなくよい

  7. 要出典。ただし Haskell はコンパイルエラーを取るのに非常に苦労するのは本当

  8. 起こりにくいだけで、実際には実行時エラーは起こる。部分関数、ゼロ除算、リスト外アクセスなどが原因。それ以外にも不完全なパターンマッチは比較的簡単に、スタックオーバーフロー、スペースリークなどは気をつければ防げるが原因となり得る。I/O でエラーが起こるのは仕方がない

  9. ElmPureScript は用途が少し違う。Elm は The Elm Architecuture(Model-Update-View パターン)で一貫性のある状態管理と描画を言語内にフレームワークとして備えている SPA フロントエンド特化用途、PureScript は AltJS としてフロントエンドやバックエンド、Node.js を用いた CLI などにも適用できる汎用用途として用いられる

  10. 正確には前述の Elm、PureScript などの Haskell インスパイア系言語、NimCoffeeScript などの Python インスパイア系言語もある

  11. Rust は Stackoverflow で 8 年連続で最も称賛されているプログラミング言語ではあるが、筆者の周りでは筆者以外使っている人を見たことがない。筆者の用途は AWS Lambda を短時間・省メモリで動作させる、マイコンのファームウェアをそろそろ C じゃなく Rust で書く、ぐらい。PC アプリは ElectronTauriFlutter で書いたことがあるが、圧倒的に Flutter が楽だった

50
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?