Slide 1

Slide 1 text

Carp言語さわってみた 〜鯉を取り戻せ編〜 @t-sin 2022-07-28 lispmeetup #104

Slide 2

Slide 2 text

Carp言語とは ● Clojureふうの構文をもつLisp系言語 ● GCレス、VMレス ● 静的型付き言語 ● 所有権追跡 ● 簡単にCコードと統合できる ● Lispのマクロ ● REPL

Slide 3

Slide 3 text

Carpに興味を持った理由 ● GC/VMがないLispである点 ● 静的型システムおよび所有権追跡がある点 – 近ごろRustをさわってたので気になってた – Rust的な安全性がある? ● performance sensitiveなユースケースを想定してる点 – t-sinの興味: 音声信号処理、ゲーム ● 重要: ドキュメントにあるREPLのプロンプトが「鯉」である点 – ”The 鲤 character on the last line is the REPL prompt”って書いてある – 以前「 」だったらしく「それ鯉 鲮 (carp) じゃないよ」ってissueが立ってた https://github.com/carp-lang/Carp/issues/578

Slide 4

Slide 4 text

Hello Carp! $ ./bin/carp Welcome to Carp 0.5.5 This is free software with ABSOLUTELY NO WARRANTY. Evaluate (help) for more information. > (IO.println "Hello Carp!") Hello Carp!

Slide 5

Slide 5 text

鯉じゃない!!! $ ./bin/carp Welcome to Carp 0.5.5 This is free software with ABSOLUTELY NO WARRANTY. Evaluate (help) for more information. > (IO.println "Hello Carp!") Hello Carp!

Slide 6

Slide 6 text

鯉の条件 ● どうして鯉にならないのか ● プロンプト文字列はProject.config内の値が使われる – マニュアル: https://github.com/carp-lang/Carp/blob/35465b9ffa8ce59a83af54a0637f8e93e49 59dc4/docs/Manual.md#configuring-a-project – (Project.config "prompt" "鯉")とすると変えられるっぽい > (Project.config "prompt" "鯉") 鯉 (IO.println "鯉") 鯉

Slide 7

Slide 7 text

顧客が求めている鯉 ● 「設定変えれば鯉にできる」 – →そうではない ● なにもしなくても鯉になる条件を知りたい – REPLで鯉したい

Slide 8

Slide 8 text

鯉を取り戻せ ● まず鯉プロンプトについて変更があったか調べる ● もしかしたらなくなってるかも😭 – issue: なし – PR: なし ● つまり鯉REPLは消されていない

Slide 9

Slide 9 text

鯉を取り戻せ ● 豆知識: CarpはHaskellで実装されている ● あの>なる謎のプロンプトはどこから? – とりあえずsrc/ディレクトリを見てみる – Carpリポジトリのディレクトリ構造 →→ ● Project.configの定義ここ https://github.com/carp-lang/Carp/blob/35465b9ffa8ce59a83af54a0637f8e93e4959dc 4/src/Project.hs – ただし値は入ってない ~/tmp/carp-lang/Carp$ tree -d -L 1 . ├── app ├── bench ├── core ├── docs ├── docs-html ├── examples ├── headerparse ├── resources ├── scripts ├── src └── test

Slide 10

Slide 10 text

ほんとうの鯉の条件 ● Project.configの初期化はどこでやっているのか – src/には実行ファイルcarpのエントリポントない ● app/Main.hs !! https://github.com/carp-lang/Carp/blob/35465b9ffa8ce59a83af54a0637f8e93e4959dc 4/app/Main.hs#L57 ● macでのみプロンプトが鯉になる – 当環境はUbuntu – すべてが鯉にならない

Slide 11

Slide 11 text

鯉するCarp環境 ● 起動したら自動で鯉にするには? ● 設定ファイルを書きましょう – ~/.config/carp/profile.carp $ cat ~/.config/carp/profile.carp (Project.config "prompt" "鯉")

Slide 12

Slide 12 text

鯉についての一考察 ● macのみ鯉になるのはなぜか – Windowsは、コマンドプロンプトでUnicodeの文字「鯉」を 表示すると壊れそう – GNU/Linuxは、Unicodeのambiguous widthへの配慮? もしかしたらロケールがxx_YY.UTF-8じゃないケースへの配慮かも ● GNU/Linuxでも「鯉」にしようぜと言いたい… – issueを立てて訊いてみた https://github.com/carp-lang/Carp/issues/1423 – 「Unicodeをサポートしてない端末エミュレータもあるから」とのこと

Slide 13

Slide 13 text

きょうのまとめ ● Carp言語の特徴を紹介した – REPLが鯉の言語です ● GNU/LinuxでREPLが鯉にならない理由を調査した ● 鯉ってサイコー!

Slide 14

Slide 14 text

きょうのまとめ ● Carp言語の特徴を紹介した – REPLが鯉の言語です ● GNU/LinuxでREPLが鯉にならない理由を調査した ● 鯉ってサイコー! ● REPLに鯉がいないのが気になりすぎて大脱線しました ● 次回はちゃんとCarpを紹介します – シンセ的なものをつくってみたりする予定