Lispのすごいところ3選。
(black7375.tistory.com)Racketチームの好みにちなんで、
Lisp系言語で先進的に実装されている要素を紹介します。
- Racketの最も強力で安全なマクロ
1.1 安全なマクロ
- C vs Racket: なぜマクロは構文であるべきなのか
- Common Lisp vs Racket: なぜ衛生的マクロであるべきなのか
1.2 強力なマクロ
- Syntaxオブジェクトを使ったTransformの概要
- Syntaxオブジェクトとリストの扱い
-define-syntaxで直接Transformしてみる
- パターンマッチングマクロで宣言的に書く
- マクロ定義時のコンパイルタイムとランタイム
- 関数や変数を定義するマクロ - RacketのThreadとともに使う動的バインディング
2.1 動的バインディングとは?
2.2 なぜ動的バインディングなのか?
- グローバル変数による不要なグローバル汚染を防ぐ
- コンテキストから不要な引数を取り除く
- 依存性注入で不要なボイラープレートを減らす
2.3 Threadセーフな動的バインディング - Common Lispの動的で柔軟なオブジェクト指向システム
3.1 多様なオブジェクト指向実装
3.2 柔軟なメソッドシステム
- クラス定義を変更しない拡張可能なメソッド
- オブジェクト型に応じた多重ディスパッチ
- 横断的関心事を制御するためのメソッドコンビネーション
3.3 動的なオブジェクト
3.4 オブジェクト指向システムを拡張するMOP(Meta-Object Protocol)
- 生成時の状態制御を試すカウンター
- 既存機能の拡張を試す型チェッカー
- クラス定義にキーワードを追加して値を検証してみる
3.5 多重継承
- C++の多重継承問題
- CPL(Class Precedence List)規則
5件のコメント
後で勉強するときに、ぜひ読んでみたいです!!
ありがとうございます!!(笑)
数ある方言の中でも、どのようにして
racketの魅力に惹かれるようになったのか気になります!HtDP(How to Design Programs) という、SICPのやさしい版として勉強しているうちに触れるようになったのですが。
文法がすっきりしていて、よくできているんですよね。
それで興味を持ってあれこれ見ているうちに、設計がしっかりしている部分が思ったより多いなと..
ありがとうございます!そんな本があるんですね