Lispの紹介 〜 令和最新版
by
t-sin
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Lispの紹介 〜 令和最新版 @t-sin 2024-01-25 Shibuya.lisp lispmeetup #113
Slide 2
Slide 2 text
背景 ● lispmeetupのオフライン開催が4年ぶり ● Lispあまりよく知らない方もいそう ● なのでLispを紹介します
Slide 3
Slide 3 text
Lispってどんな言語? ● JSやPythonやRubyに近い手ざわり ● Lispっていっぱいある – Lispは言語族の名前 ● 自己拡張性が高い – とても動的な処理系であることがおおい
Slide 4
Slide 4 text
LispとJSやRubyの似てる点 ● 高階関数やラムダ式 ● 静的型システムはない (たいていは) ● RPELがある
Slide 5
Slide 5 text
Lispと似てる点: 高階関数 ● JavaScriptによる例 (RosettaCodeより) ● https://rosettacode.org/wiki/Function_composition#ES6 var compose = (f, g) => x => f(g(x)); var id = compose(Math.sin, Math.asin); console.log(id(0.5)); // 0.5
Slide 6
Slide 6 text
Lispと似てる点: 高階関数 ● Common Lispによる例 (RosettaCodeより) https://rosettacode.org/wiki/Function_composition#Com mon_Lisp > (defun compose (f g) (lambda (x) (funcall f (funcall g x)))) COMPOSE > (let ((sin-asin (compose #'sin #'asin))) (funcall sin-asin 0.5)) 0.5
Slide 7
Slide 7 text
LispとJSやRubyの似てない点 ● S式と呼ばれる構文 ● Lispのマクロ – 構文木を構文木へ変換する – テキスト置換ではない – でも静的型はない ● (一部のLispは) REPLの機能がつよい
Slide 8
Slide 8 text
Lispはいっぱいある ● たくさんの処理系がある – Scheme, Common Lisp, Emacs Lisp, Arc, Clojure, Carp, … ● その理由はおそらく… – Schemeが言語機能の実験場だった時期がある – 比較的単純なのでアイデアをすぐに実現できる – LisperがLisp大好きすぎる (?)
Slide 9
Slide 9 text
Lispの自己拡張性 ● 関数を定義すると語彙が増える – 関数呼び出し構文はビルトインでもユーザ定義でも同じ – →言語を拡張している ● ほかにも – Lispのマクロ – 拡張可能なパーサ (Common Lisp) – 実行時情報をREPLで変更 (Common Lisp, Clojure) – 実行時にクラス定義の変更 (Common Lisp)
Slide 10
Slide 10 text
Lispの自己拡張性 ● LISP 1.5のころから自己拡張性高かった – 基本的な要素がら複雑な機能を立ち上げていく ● 川合史朗さんの『LISP 1.5の風景』に記載あり – ラムダノート社『n月刊ラムダノート Vol.1, No.2 (2019)』所収
Slide 11
Slide 11 text
Lispのよくある誤解集 ● 関数型言語である ● マクロを書きまくる ● インタプリタだから遅い
Slide 12
Slide 12 text
Lispの誤解集: 関数型言語である ● 手続き型言語です ● 高階関数とかあるけど再代入とか破壊的変更よくや る – オブジェクト指向だとなおさらやる ● Clojureは関数型言語っぽさを推しているけど、一 部破壊的変更ができるので全体としては関数型では ない
Slide 13
Slide 13 text
Lispの誤解集: マクロを書きまくる ● そんなに書かないです ● 複雑なバグを生みうるやつ – マクロのマクロのマクロの... – メタプログラミングあるある ● 関数ですむなら関数を書く ● DSLを作るときには大活躍
Slide 14
Slide 14 text
Lispの誤解集: インタプリタで遅い ● コンパイラを持ってること多し – 最近はコンパイラとインタプリタの境は曖昧 ● インタプリタだけどVM方式だったりJITもってたり ● Rubyに最近JITが入りましたよね? ● ネイティブコードコンパイラのある処理系は速い – SBCL (Common Lisp)、Chez Scheme (Scheme, R5RS) – ClojureはJVM言語なのでJVMに律速される
Slide 15
Slide 15 text
で、Lispって何ができるの? ● わりと何でもできる – Webサービス、ゲーム、OS、ツール、... ● 古い言語なのでいろんなソフトウェアがある ● もしかしたら身近なところに潜んでいるかも …?
Slide 16
Slide 16 text
Lispの事例集: スクリプト言語 1 ● GNU Emacs (Emacs Lisp) – エディタの設定とスクリプティング ● AutoCAD (AutoLisp) – CADのスクリプティング – CADってコマンド操作が基本っぽい
Slide 17
Slide 17 text
Lispの事例集: スクリプト言語 2 ● Audacity (Nyquist) – Audacityは音声波形編集ソフト – Nyquistは音声信号生成もできる ● ALSA (alisp) – ALSAはLinuxのオーディオ抽象化レイヤー – 設定言語が実はLisp ● `find / | grep alisp`してみると…?
Slide 18
Slide 18 text
Lispの事例集: Webサービス ● ハチペイのバックエンド (Common Lisp) – 渋谷区の決済アプリ – https://www.hachi-pay.tokyo/ – 株式会社ポケットチェンジ ● 広告媒体アカウント管理システム (Clojure) – https://tech-magazine.opt.ne.jp/entry/2021/01/13/124551 – 株式会社オプト ● Practical Scheme (Gauche Scheme) – https://practical-scheme.net/ – 川合史朗さん
Slide 19
Slide 19 text
Lispの事例集: ゲーム ● クラッシュ・バンディクー (1と2) – GOAL (Game Oriented Assembly Lisp) というLisp ● Kandria (Common Lisp) – メトロイドヴァニア系アクション – https://store.steampowered.com/app/1261430/Kandria/ ● Steamで買って遊べます!!!
Slide 20
Slide 20 text
Lispの事例集: ツール (1) ● pgloader (Common Lisp) – PostgreSQLのdump/loadツール – https://pgloader.io ● Maxima (Common Lisp) – 数式処理システム (Mathematicaみたいなやつ) – https://maxima.sourceforge.io/
Slide 21
Slide 21 text
Lispの事例集: ツール (2) ● Lem (Common Lisp) – テキストエディタ ● Roswell (Common Lisp + C) – Common Lispの処理系マネージャ ● Senn (Common Lisp) – 日本語入力メソッド (IME) – https://github.com/mhkoji/Senn
Slide 22
Slide 22 text
Lispの事例集: 作曲環境 ● Opusmodus (Common Lisp) – https://www.opusmodus.com/ ● Overtone (Clojure) – https://overtone.github.io ● Extempore (Scheme) – https://github.com/digego/extempore
Slide 23
Slide 23 text
Lispの事例集: そのほか 1 ● Nyxt (Common Lisp) – キーボード指向のウェブブラウザ – https://nyxt.atlas.engineer/ ● Mezzano (Common Lisp) – オペレーティングシステム – https://github.com/froggey/Mezzano
Slide 24
Slide 24 text
まとめ ● Lispはけっこういろいろできる ● Lispはカッコいい ● みんなもLispやろうぜ!!!