Subscribed unsubscribe Subscribe Subscribe

@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

Common Lispの難しさ/良さは選択肢の多さかもしれない

なぜ思うように実装するのが難しいと感じているのか、少し考えてみたところいろんな部分に選択肢が多いからではないかと気づいた。 慣れるとそれが良いところなのだろうけれど。 選択肢が多いので、意味がわかるまで問題に対する切り分けが困難。

ライブラリを組み合わせて何かを作りたいので、ライブラリ間で選択したものが違うとはまる印象。 ライブラリを作りたいわけじゃないし、できることならソースを読まずにドキュメントだけ読んで組み合わせていきたい。 「人に聞けばわかる」のは「人に聞かないとわからない」という状況だし、 関東に住んでないので気軽に聞ける人も少ない。 憧れのCommon Lispを使いこなせるようになりたいけれど本を読んでいるだけでは書けるようにならない。 実際書き始めるとうまくいかなくて詰まる。の繰り返し。

選択肢を雑に列挙してみる。

処理系

まず処理系が複数ある。 REPLの終了方法からコマンドの引数、エラー時の出力などそれぞれ違う。

実行/評価環境

個人的な経験では以下の違いがある。時々その違いによって挙動が変わって悩まされる。

  • ターミナルで起動したreplでの評価
    • CWDによってloadとかファイルパスに影響がある。
  • ターミナルでコマンド引数にlispファイルを指定して実行した評価
  • SLIMEのreplでの評価
  • lispソースコードのバッファでSLIMEのevalを実行して評価
  • コンパイル時の評価?
  • ros build時の評価?
  • ビルド/コンパイルされたバイナリの実行時
  • どのパッケージで評価されるか

パッケージ管理

どこに何をおけばどの手段で読み込めるのか

  • 手動(git clone、tarの展開、手書き)
  • ASDF
  • quicklisp
  • ros installしたもの
  • qlot installしたもの

ライブラリの利用手段

  • 特定のディレクトリから探してくるもの
  • インストールもしてくれるもの
  • プロジェクト内から読み込むもの

依存関係

  • defsystem:depends-on
  • defpackage:use
  • qlfile

読み込むとは

読み込むとは何なのか。

  • 評価までする?
  • ファイルへのパスが通る?
  • 名前空間が利用できる?