昨日のよるこれを読んでしまったせいで、「本当に私に型いるんか?」という問いを生じてまった。まあ仕事なら要る一択なんだけど、趣味で書くなら要らないような気がしてきて心が Typed Racket から離れそう。
本のまえがき | 本の購入サイトhttp://ontolonomy.co.jp/books/preface/
昨日のよるこれを読んでしまったせいで、「本当に私に型いるんか?」という問いを生じてまった。まあ仕事なら要る一択なんだけど、趣味で書くなら要らないような気がしてきて心が Typed Racket から離れそう。
本のまえがき | 本の購入サイトhttp://ontolonomy.co.jp/books/preface/
まあ SICP の後半の苦しみは型を書いていればほぼなかったのではないかという記憶は消えていないけど。。。
Scheme を書いているときの、なぞの `#f` の襲来が避けられることは大切な気がする。
動的型の Scheme なら `#f` Comon Lisp なら `nil` の唐突な襲来を回避せんといけないからな……。
たとえば string->number が失敗したときに `#f` になるの、型がないと隠れし `#f` になりがちなんだよな。
Common Lisp で関数を使う前に必ず describe 関数で挙動を確認する人生を送ればいいのだろうか。
Contract があればだいぶ軽減されるよな。やっぱ Racket はよくできてる。
どこから `\#f` もしくは `nil` が発生したのかを追跡できるのが重要だ。
Common Lisp に契約プログラミングを導入するやつあるじゃん。これ全部 CLOS になるんか。それはそれでちょっとやだな。
GitHub - sellout/quid-pro-quo: A contract programming library for Common Lisp in the style of Eiffel’s Design by Contract ™.https://github.com/sellout/quid-pro-quo
そんな大袈裟なことしなくても Common Lisp なら check-type とか assert を勝手に挿入する関数定義のマクロを書いちゃえばいい気がするな。
そんで、スピード重視するときにはなんかコンパイル時の変数で挙動を制御できるような感じにしておけばよくね。
やっぱ静的型ないなら契約はいる気がするわ。どこで生まれたのかよく分からん nil を探すの嫌だし。
あー、でもこれ Scheme で安易に実装すると tail call じゃならなくなるのか。
戻り値の検査はいいから入力の検査を徹底すればいいような気もする。
じゃあ、Common Lisp でちゃんと check-type とか assert を書けばいいじゃんって話になるな。
動的型付けの99.9%程度の問題は隠されし nil であってそれ以外はそんな問題ではないような気がしてる。
その 99.9% の問題であるどこかで生まれた謎の nil が最大かつ深刻な問題なんだよな。
やはり型はいるのか。Common Lisp なら check-type をちゃんと書くようにすればちょっと安全になる気がしてる。
senooken JP Social is a social network, courtesy of senooken. It runs on GNU social, version 2.0.2-beta0, available under the GNU Affero General Public License.
All senooken JP Social content and data are available under the Creative Commons Attribution 3.0 license.