2015年8月26日水曜日

ASDF にかかわる右往左往

かかずにはいられない

ASDFに対する先入観がゆえに迷う

ASDFについてかつて聞いたことがあった、yum や apt-get のようなものと思っていた
そのことを知っていたがゆえに迷った。yumや apt-getで取得したプログラムがどこにおかれているか、普通は知らないようなもので、いったいどこにあるのか、ちょっと調べただけでは出てこなかった。

なお、正確には asdf-install が実際 yum や apt-get のような役割を果たしていた
現在はQuicklisp がその役割を担っている。

Quicklispは認証つきHTTP Proxy を超えられなかった。

Quicklisp 自体は Proxyなしの環境で動作することを確認した。手軽ですばらしい。

認証付のProxyについては?無理である。公式にも(今は)出来ないと書いてある。

じゃあ作ってやるぜ!と一瞬思ったが、
誰が使うんだろう?とか、自分なんかに、とか、
とりあえずやらない方向の感情が渦巻いたのでとどまった。

そんなことよりライブラリが動いてほしかった。

公式の説明にすべて書いてあった

  • ~/common-lisp フォルダ内にライブラリをフォルダごと置く
  • フォルダ名と 中にある .asd の名前が同じになるようにする
  • 大体のライブラリは .asd が提供されている
  • 自分で作ったライブラリでも同じようにできる
と書いてある。英語で。英語で。そしてすべてそのとおりにすることで結果的に動いたのであった。

公式の情報に気づいた時点で、古いasdf-install の日本語の情報にはあたったあとであり、Quicklisp は Proxyなしで普通に使う方法がわかっていたこともあってASDF についての調査がほぼ意地になっておりWindowsでは微妙に違うね、とかASDF 3.1.5 以降では、とかXDG_DATA_PATH とかわからないキーワードに引っかかってみたりなんとなくそうらしいところにフォルダをおいてみたりQuicklispのフォルダにおいてみたり環境変数を見てみたりパスを確かめる関数を探してみたりして片っ端から失敗して結果完全に頭に血が上っており要するに

本当にそうだと気づくまでに2日かかった。

SBCLの認識するホームディレクトリを確認する方法

次のコードを実行することでわかることを知った。
(truename "~")
もっとも、実行結果で偶然わかるのであって、処理自体はエラーになる。
わからないが用は足せる。というやつである。

Lispの情報の大半は英語である!

和訳情報もあるし、日本語で有用な情報を発信される方はこれが結構多い。
そして2chのLisp関連スレは意外なことに機能しているし、
困らないんじゃないか!と思ったが、これがこまる。
2chコワイ。そもそも何を聞いたらよいかわからないという。

丁寧な解説は基本的に英語であるというのは身もふたもない事実なので、
冷静に英語を読んだほうが良い結果になりやすい。と今回の件では思った。

Windows の SBCL で ASDF を使って ライブラリを読み込む

あるいは Windows でちょっと Lisp を使いたいんだけどライブラリを読み込む方法がわからないときに役立つ可能性のある記事。なお、すべてASDFの公式に書いてある手順である。

概要

Windows上のSBCLで、ASDFを使ってライブラリをREPLに読み込む方法を確かめた。

注意事項

2015現在、プロジェクトをREPLに読み込む標準的な方法は Quicklisp(https://www.quicklisp.org/beta/)です。
Quicklispに登録されているライブラリであれば、この方法を使うよりずっと楽です。

なぜ今回このようなことをするに至ったかというと、
QuickLispが認証あり HTTP Proxy を越えることが出来なかったためです。

それはそれとして、作りかけのおれおれライブラリを常用する場合などに備えて、知っておくとよい、、、かもしれません。

この記事ではやっていないこと

.sbclrc に書き込んで自動読み込み
SBCLを停止せずに再読み込み
ソースコードの置き場所を変更する

参考リンク

バージョン情報

  • 言語環境 : SBCL 1.2.13 (Windows, x64)
  • OS : Windows7, Windows8.1

重要な事柄

SBCLにはASDF が標準添付されています。
次の手順をREPLで実施することで、ASDFの機能を有効化できます。

(require 'asdf)
; あるいは
(require "asdf")

手順


  • ライブラリのソースコードをダウンロードします
  • 自分のドキュメントフォルダ (C:\Users\<ユーザー名>\Documents)を開きます
  • common-lisp フォルダを作成します
  • ソースコードを展開します。フォルダが出来ます
    • たとえば split-sequence-1.0 というフォルダ
  • フォルダの中に (ライブラリ名).asd というファイルがあることを確認します
    • これがASDFの認識するライブラリの情報ファイルです
    • ヘッダファイルのようななにか
  • common-lisp フォルダの中にソースをフォルダごと移動します
  • フォルダ名を (ライブラリ名) になるようにします
    • split-sequence のようにする
    • .asd ファイルのライブラリ名と同じである必要があります
  • SBCLを起動している場合は、一度とめる必要があります
    • とめない方法は未調査
  • REPLで ASDF を有効化(先述のとおり)
  • (asdf:load-system "(ライブラリ名)") を実行します
    • (asdf:load-system "split-sequence")
  • ライブラリの関数その他もろもろが読み込まれてライブラリが利用可能になります

感想

出来てみれば公式に書いてあったとおりであった。そうとは知らず右往左往した。

2015年8月15日土曜日

第05期のテーマはLispにしてみよう

Lisp(また)始めました

大学生のときに勢いでLispをして現実に流されたのだが、
今回は現実にさらされているので、もう流されても大丈夫

始める前から役に立たない記事ばっかり増えそうだ、、、
心構えは「恥をさらしてみよう」

問題は、ここに書かれている方法が「唯一で正しい方法だと思い込まれる」ことぐらい、、。

Lispは、今ちょっと試して調べて分かったこととしては、
ちょっとLispがわかってくるだけで3つぐらいの書き方が思いつき
そして違いは読みやすさとデータやスコープのまとめ方と速度。
速度が違いそうという気はするが、実際は?まだわからない。

なお、言語Common Lisp で、環境は SBCL (1.2.14) です。
Clojureに興味はある。だがまずは、古臭くてべたべたに書ける世界へ。初めての方には ClojureかSchemeを学ぶことを深くお勧めします。はい。

第05期の期間情報メモ

2015/08/15 開始を宣言。

その間にしていたこと
  • ドローンはあきらめた(お金)
  • ゲームをかなりしなくなった
    • とはいえFallout4 の発売まち
  • 投資は続けているが、新しいこともなし
  • vagrantとansibleと仮想化に少し詳しくなった
    • ネットに記事があふれているので書く予定なし