Lisp Schemeスレでは恥ずかしくて聞けないようなことを質問したり、
Lisp Schemeスレの話題は高度すぎて気後れする人が話しあったり。
それ以外でもCommon Lispについての話題なら歓迎します。
ま、ゆっくりやりましょう。
「いいものの本質は、いかなる時代においても変わらない」byパワーズ
■前スレ
【入門】Common Lisp その10【質問よろず】
http://peace.2ch.net/test/read.cgi/tech/1361341876/
■Wiki
http://wiki.fdiary.net/lisp/ (id:guest pass:cl)
http://cl.cddddr.org/
http://tips.lisp-users.org/common-lisp/
探検
【入門】Common Lisp その11【質問よろず】
レス数が950を超えています。1000を超えると書き込みができなくなります。
1デフォルトの名無しさん
2014/09/21(日) 22:49:21.73ID:FJokPHUt880デフォルトの名無しさん
2021/03/19(金) 03:54:01.31ID:RMQx/osX マカーでないのでよく分からんが、うちの界隈で新しいマックはdll(dylibっていうんだっけ?)の仕様代わって大変ってどこかで聞いた
invarid/unsafe accessとかそんな感じのエラー吐いてない?
相対パスの使用が厳しくなって怒られるらしい、ブロブをsls(macだとgrep?)に掛けてパスっぽいものを絶対パスに置換するだけでよいらしいが
invarid/unsafe accessとかそんな感じのエラー吐いてない?
相対パスの使用が厳しくなって怒られるらしい、ブロブをsls(macだとgrep?)に掛けてパスっぽいものを絶対パスに置換するだけでよいらしいが
881デフォルトの名無しさん
2021/03/19(金) 09:10:11.27ID:cqWDT3jG 細かいところから
>>873
> quicklispのインストールが終わった後で
> CCLを(quit)してしまうと
> ccl --load quicklisp.lisp
> をやっても(ql: を評価しないし
この quicklisp.lisp は quicklisp.org から落としてきたものだと思うけど、それなら当たり前。
quicklisp.lisp は Quicklisp のインストーラに過ぎなくて ql パッケージは入ってないから、 quicklisp.lisp を読むだけでは使えない。
インストール済みの Quicklisp を (load #P"~/quicklisp/setup.lisp") で読み込むと ql パッケージが使えるようになる。
起動の度に毎回 load するのが面倒なら、 quicklisp インストール後に (ql:add-to-init-file) で処理系が起動時に読み込むファイルで load するよう書いてくれる。
でも
> (load #P で~/quicklispのsetupを読み込むとそこで止まります
止まるわけないんだけどなあ。止まるってどういう意味でしょ。かっこの閉じ忘れとかじゃないよね。
>>873
> quicklispのインストールが終わった後で
> CCLを(quit)してしまうと
> ccl --load quicklisp.lisp
> をやっても(ql: を評価しないし
この quicklisp.lisp は quicklisp.org から落としてきたものだと思うけど、それなら当たり前。
quicklisp.lisp は Quicklisp のインストーラに過ぎなくて ql パッケージは入ってないから、 quicklisp.lisp を読むだけでは使えない。
インストール済みの Quicklisp を (load #P"~/quicklisp/setup.lisp") で読み込むと ql パッケージが使えるようになる。
起動の度に毎回 load するのが面倒なら、 quicklisp インストール後に (ql:add-to-init-file) で処理系が起動時に読み込むファイルで load するよう書いてくれる。
でも
> (load #P で~/quicklispのsetupを読み込むとそこで止まります
止まるわけないんだけどなあ。止まるってどういう意味でしょ。かっこの閉じ忘れとかじゃないよね。
882デフォルトの名無しさん
2021/03/19(金) 09:26:57.31ID:cqWDT3jG >>869 でUSOCKET:CONNECTION-REFUSED-ERROR が出たとか言ってるあたり、ソケットのレベルで導通してるかも気になる。
これは成功するんだよね?
? (usocket:socket-connect "ja.wikipedia.org" 443)
#<USOCKET:STREAM-USOCKET #x3020020A09FD>
ちなみに俺の環境
? (lisp-implementation-type)
"Clozure Common Lisp"
? (lisp-implementation-version)
"Version 1.12 (v1.12-39-g6c1a9458) DarwinX8664"
これは成功するんだよね?
? (usocket:socket-connect "ja.wikipedia.org" 443)
#<USOCKET:STREAM-USOCKET #x3020020A09FD>
ちなみに俺の環境
? (lisp-implementation-type)
"Clozure Common Lisp"
? (lisp-implementation-version)
"Version 1.12 (v1.12-39-g6c1a9458) DarwinX8664"
883デフォルトの名無しさん
2021/03/19(金) 16:35:51.38ID:0qPpyi/x 遅くなりましたすみません開始します
>>879
手順把握しました
makeに関しては昔MacPortsでやるとうまくいかないやつがちらほらあって
手動で細かく制御するとできるとかがあったのでそれっきりだったんですよね
今ではそんなこともないということでしたら考え直します
おすすめはhomebrewでしょうか?
>>880
high sierraなのでその辺は大丈夫なはず・・です
>>881
(load #P"~/quicklisp/setup.lisp")
これを実行するとそのまま止まって次のプロンプト(?)が出てこないんです
原因は全く不明なんですが
(ql:add-to-init-file) これはやってみます
>>879
手順把握しました
makeに関しては昔MacPortsでやるとうまくいかないやつがちらほらあって
手動で細かく制御するとできるとかがあったのでそれっきりだったんですよね
今ではそんなこともないということでしたら考え直します
おすすめはhomebrewでしょうか?
>>880
high sierraなのでその辺は大丈夫なはず・・です
>>881
(load #P"~/quicklisp/setup.lisp")
これを実行するとそのまま止まって次のプロンプト(?)が出てこないんです
原因は全く不明なんですが
(ql:add-to-init-file) これはやってみます
884デフォルトの名無しさん
2021/03/19(金) 16:40:05.22ID:0qPpyi/x >>882
For more information, see http://www.quicklisp.org/beta/
NIL
? (lisp-implementation-type)
"Clozure Common Lisp"
? (lisp-implementation-version)
"Version 1.12 (v1.12-39-g6c1a9458) DarwinX8664"
?
これは大丈夫そうですね
For more information, see http://www.quicklisp.org/beta/
NIL
? (lisp-implementation-type)
"Clozure Common Lisp"
? (lisp-implementation-version)
"Version 1.12 (v1.12-39-g6c1a9458) DarwinX8664"
?
これは大丈夫そうですね
885デフォルトの名無しさん
2021/03/19(金) 16:49:39.87ID:0qPpyi/x (ql:add-to-init-file) を実行すると
~/.ccl-init.lisp が生成されるようです
(quit)で終了して・・
CCLを単独で起動すると
(ql:quickload :dexador) は通りました
この状態では以下変わりません
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200311B01D>
.ccl-init.lispを見るとsetupを実行しているように見えなくもないのですが
特に止まるとかそういうことはこの手順だとないようです
次にSSLライブラリを読むかどうかのチェックをしてみます
~/.ccl-init.lisp が生成されるようです
(quit)で終了して・・
CCLを単独で起動すると
(ql:quickload :dexador) は通りました
この状態では以下変わりません
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200311B01D>
.ccl-init.lispを見るとsetupを実行しているように見えなくもないのですが
特に止まるとかそういうことはこの手順だとないようです
次にSSLライブラリを読むかどうかのチェックをしてみます
886デフォルトの名無しさん
2021/03/19(金) 16:58:13.55ID:0qPpyi/x reload.lispを変更しlibssl , libcryptを見に行かないようにしました
CCLを起動しdexadorを読みます
CCL is free software. It is distributed under the terms of the Apache
Licence, Version 2.0.
? (ql:quickload :dexador)
To load "dexador":
Load 1 ASDF system:
dexador
; Loading "dexador"
..................................................
[package dexador.encoding]........................
[package dexador.connection-cache]................
[package dexador.decoding-stream].................
[package dexador.keep-alive-stream]...............
[package dexador.util]............................
[package dexador.body]............................
[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x302001DAED7D>
これは・・
再確認します
CCLを起動しdexadorを読みます
CCL is free software. It is distributed under the terms of the Apache
Licence, Version 2.0.
? (ql:quickload :dexador)
To load "dexador":
Load 1 ASDF system:
dexador
; Loading "dexador"
..................................................
[package dexador.encoding]........................
[package dexador.connection-cache]................
[package dexador.decoding-stream].................
[package dexador.keep-alive-stream]...............
[package dexador.util]............................
[package dexador.body]............................
[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x302001DAED7D>
これは・・
再確認します
887デフォルトの名無しさん
2021/03/19(金) 17:00:59.35ID:0qPpyi/x 更新して書き換えられたかもと思いましたがそんなことはなかったようです
reload.lispはこのようになっていました
(:darwin (:or "x/usr/local/lib/libcrypto.dylib" ;; personalized install
))
・・中略・・
(:darwin (:or "x/usr/local/lib/libssl.dylib" ;; personalized install
))
手がかりになるでしょうか?
reload.lispはこのようになっていました
(:darwin (:or "x/usr/local/lib/libcrypto.dylib" ;; personalized install
))
・・中略・・
(:darwin (:or "x/usr/local/lib/libssl.dylib" ;; personalized install
))
手がかりになるでしょうか?
888デフォルトの名無しさん
2021/03/19(金) 17:22:35.07ID:0qPpyi/x ~/.cacheを消し忘れていたので実行後に
再度(ql:quickload :dexador)をやりました
reload.lispは改変のまま置かれていますが
[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200230142D>
ここは変わりませんでした
再度(ql:quickload :dexador)をやりました
reload.lispは改変のまま置かれていますが
[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200230142D>
ここは変わりませんでした
889デフォルトの名無しさん
2021/03/19(金) 18:14:15.37ID:6x0jzlEw >>887 これは予想がつく
こっちでも試してみたんだが ql:quickload の挙動は
○○○.lisp のタイムスタンプが コンパイル済みファイル ( ~/.cache/. . ... . . /○○○.dx64fsl )
よりも「新しくなった時」に ソース変更あり!と判断しているようだ
つまりまだ「新しい」reload.dx64fsl がキャッシュにあるのでそれをロードして何も変化が起きなかったんだろうなと
準備しておいた 改変済み reload.lisp (古い) に差し替えじゃなくて
生で置かれた reload.lisp を直に編集して保存 (新しい) しとけば良かったと
だとしても >>888 の説明がつかん
そちらの手順に何か勘違いがあるんじゃないかな
こっちでも試してみたんだが ql:quickload の挙動は
○○○.lisp のタイムスタンプが コンパイル済みファイル ( ~/.cache/. . ... . . /○○○.dx64fsl )
よりも「新しくなった時」に ソース変更あり!と判断しているようだ
つまりまだ「新しい」reload.dx64fsl がキャッシュにあるのでそれをロードして何も変化が起きなかったんだろうなと
準備しておいた 改変済み reload.lisp (古い) に差し替えじゃなくて
生で置かれた reload.lisp を直に編集して保存 (新しい) しとけば良かったと
だとしても >>888 の説明がつかん
そちらの手順に何か勘違いがあるんじゃないかな
890デフォルトの名無しさん
2021/03/19(金) 18:30:33.54ID:6x0jzlEw 繰り返しになるけど、まずは
(:darwin (:or "X/opt/local/lib/libcrypto.dylib" ;; MacPorts
"X/sw/lib/libcrypto.dylib" ;; Fink
"X/usr/local/opt/openssl/lib/libcrypto.dylib" ;; Homebrew
"X/usr/local/lib/libcrypto.dylib" ;; personalized install
"Xlibcrypto.dylib" ;; default system libcrypto, which may have insufficient crypto
"X/usr/lib/libcrypto.dylib"))
libssl.dylib も同様に改変して
これを読ませてエラーになる事を確認してから
(:darwin (:or "X/opt/local/lib/libcrypto.dylib" ;; MacPorts
"X/sw/lib/libcrypto.dylib" ;; Fink
"X/usr/local/opt/openssl/lib/libcrypto.dylib" ;; Homebrew
"X/usr/local/lib/libcrypto.dylib" ;; personalized install
"libcrypto.dylib" ;; default system libcrypto, which may have insufficient crypto
"X/usr/lib/libcrypto.dylib"))
これで試してみましょう
(:darwin (:or "X/opt/local/lib/libcrypto.dylib" ;; MacPorts
"X/sw/lib/libcrypto.dylib" ;; Fink
"X/usr/local/opt/openssl/lib/libcrypto.dylib" ;; Homebrew
"X/usr/local/lib/libcrypto.dylib" ;; personalized install
"Xlibcrypto.dylib" ;; default system libcrypto, which may have insufficient crypto
"X/usr/lib/libcrypto.dylib"))
libssl.dylib も同様に改変して
これを読ませてエラーになる事を確認してから
(:darwin (:or "X/opt/local/lib/libcrypto.dylib" ;; MacPorts
"X/sw/lib/libcrypto.dylib" ;; Fink
"X/usr/local/opt/openssl/lib/libcrypto.dylib" ;; Homebrew
"X/usr/local/lib/libcrypto.dylib" ;; personalized install
"libcrypto.dylib" ;; default system libcrypto, which may have insufficient crypto
"X/usr/lib/libcrypto.dylib"))
これで試してみましょう
891デフォルトの名無しさん
2021/03/19(金) 19:41:49.55ID:0qPpyi/x >>889-890
手順に気をつけてもう一度やって見ました
まずは.cacheの
rm -rf common-lisp
~/quicklisp/dists/quicklisp/software/cl+ssl-20210228-git/src/reload.lisp
を直接編集してタイムスタンプが変わっていることを確認します
>ccl
? (ql:quickload :dexador)
[package dexador.util]............................
[package dexador.body]............................
[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)
※ここでreload.lispを確認して改変されたままであることはわかりました
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200225506D>
こうなるようです・・
手順に気をつけてもう一度やって見ました
まずは.cacheの
rm -rf common-lisp
~/quicklisp/dists/quicklisp/software/cl+ssl-20210228-git/src/reload.lisp
を直接編集してタイムスタンプが変わっていることを確認します
>ccl
? (ql:quickload :dexador)
[package dexador.util]............................
[package dexador.body]............................
[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)
※ここでreload.lispを確認して改変されたままであることはわかりました
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200225506D>
こうなるようです・・
892デフォルトの名無しさん
2021/03/19(金) 19:45:45.88ID:0qPpyi/x 思ったんですが
どの変数がpathを握っているのか表示できないものでしょうか?
どの変数がpathを握っているのか表示できないものでしょうか?
893デフォルトの名無しさん
2021/03/19(金) 21:08:00.19ID:OkAVL8Bz 結局何がしたくて、何が出来てて、何が出来てないんだっけ?
894デフォルトの名無しさん
2021/03/19(金) 21:13:21.69ID:RMQx/osX 普段過疎ってるのに急に優しさに満ちたな…
ついでに興味深いレスも書き捨ててってよ
ついでに興味深いレスも書き捨ててってよ
895デフォルトの名無しさん
2021/03/19(金) 22:35:05.73ID:0qPpyi/x >>893
まずはCCLでdexador動くところまでですかね・・
CCLはObjCのインターフェース持っててnibも読めるので
ネイティブアプリのように振る舞えるかなと思いまして
今の問題が解決したら進めてみようと思ってます
毎日お手数おかけします先輩方
ほんとすいません
まずはCCLでdexador動くところまでですかね・・
CCLはObjCのインターフェース持っててnibも読めるので
ネイティブアプリのように振る舞えるかなと思いまして
今の問題が解決したら進めてみようと思ってます
毎日お手数おかけします先輩方
ほんとすいません
896デフォルトの名無しさん
2021/03/19(金) 22:41:03.30ID:CjYMRRBz897デフォルトの名無しさん
2021/03/19(金) 23:00:48.11ID:6x0jzlEw >>891 これでとりあえず openssl は無罪だったと思っていいのかな
>>892
ちょっと意味が分からないけど
この先はエラー発生時のDEBUG操作をちゃんと調べるしかないかも
実は自分もほぼ初心者なので教えられる事はなさそう
それか丹念に dexador のソースを追って内部進行を再現してみるとか?
src/dexador.lisp :45 (defun get (uri &rest args
src/dexador.lisp :50 (apply #'request uri :method :get args))
backend/usocket.lisp :423 (defun-careful request (uri &rest args ...
結構大変そう
>>894
優しさというか
未知のトラブルの際に実際どうするのが正解なのか自分も知りたいだけっすね
なので「なんか分からんうちに治りましたあw」で終わられても困る
>>892
ちょっと意味が分からないけど
この先はエラー発生時のDEBUG操作をちゃんと調べるしかないかも
実は自分もほぼ初心者なので教えられる事はなさそう
それか丹念に dexador のソースを追って内部進行を再現してみるとか?
src/dexador.lisp :45 (defun get (uri &rest args
src/dexador.lisp :50 (apply #'request uri :method :get args))
backend/usocket.lisp :423 (defun-careful request (uri &rest args ...
結構大変そう
>>894
優しさというか
未知のトラブルの際に実際どうするのが正解なのか自分も知りたいだけっすね
なので「なんか分からんうちに治りましたあw」で終わられても困る
898デフォルトの名無しさん
2021/03/19(金) 23:10:41.34ID:0qPpyi/x >>896
すいません見落としてました
[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)
? (usocket:socket-connect "ja.wikipedia.org" 443)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200225C34D>
> While executing: USOCKET::RAISE-ERROR-FROM-ID, in process listener(1).
> Type :POP to abort, :R for a list of available restarts.
> Type :? for other options.
1 >
reload.lispがオリジナルでも改変でも変わらないようです
すいません見落としてました
[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)
? (usocket:socket-connect "ja.wikipedia.org" 443)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200225C34D>
> While executing: USOCKET::RAISE-ERROR-FROM-ID, in process listener(1).
> Type :POP to abort, :R for a list of available restarts.
> Type :? for other options.
1 >
reload.lispがオリジナルでも改変でも変わらないようです
899デフォルトの名無しさん
2021/03/19(金) 23:16:50.39ID:0qPpyi/x >>897
うーん・・pathを無効にしてもquicklisp自体は動いてるように見えるんですよね
とりあえず現在有効にした状態なので
なんとなくこうしたら挙動が変わりました
? (dex:get "https://nicovideo.jp" )
> Error: Can't resolve foreign symbol "_SSL_get_peer_certificate"
> While executing: CCL::RESOLVE-EEP, in process listener(1).
> Type :POP to abort, :R for a list of available restarts.
> Type :? for other options.
1 >
以前はkilled: 9でccl自体落ちてたんですよね・・
symbolがないとかは通常ならわかりやすいんですがCCLだとどうなんでしょう
でもこれ明らかに外部ライブラリ呼びに行ってしくってる感じですねえ
うーん・・pathを無効にしてもquicklisp自体は動いてるように見えるんですよね
とりあえず現在有効にした状態なので
なんとなくこうしたら挙動が変わりました
? (dex:get "https://nicovideo.jp" )
> Error: Can't resolve foreign symbol "_SSL_get_peer_certificate"
> While executing: CCL::RESOLVE-EEP, in process listener(1).
> Type :POP to abort, :R for a list of available restarts.
> Type :? for other options.
1 >
以前はkilled: 9でccl自体落ちてたんですよね・・
symbolがないとかは通常ならわかりやすいんですがCCLだとどうなんでしょう
でもこれ明らかに外部ライブラリ呼びに行ってしくってる感じですねえ
900デフォルトの名無しさん
2021/03/19(金) 23:18:31.64ID:qP05xHwq >>898
ここやん
ここやん
901デフォルトの名無しさん
2021/03/19(金) 23:38:05.76ID:6x0jzlEw うちの環境だと
# Homebrew版
ccl-dev❦: nm /usr/local/opt/openssl/lib/libssl.dylib | grep SSL_get_peer_certificate
0000000000018d23 T _SSL_get_peer_certificate
# system default 版
ccl-dev❦: nm /usr/lib/libssl.dylib | grep SSL_get_peer_certificate
0000000000037290 T _SSL_get_peer_certificate
>>899 そちらで
nm /usr/local/lib/libssl.dylib | grep SSL_get_peer_certificate
を叩くとどう出ます?
# Homebrew版
ccl-dev❦: nm /usr/local/opt/openssl/lib/libssl.dylib | grep SSL_get_peer_certificate
0000000000018d23 T _SSL_get_peer_certificate
# system default 版
ccl-dev❦: nm /usr/lib/libssl.dylib | grep SSL_get_peer_certificate
0000000000037290 T _SSL_get_peer_certificate
>>899 そちらで
nm /usr/local/lib/libssl.dylib | grep SSL_get_peer_certificate
を叩くとどう出ます?
902デフォルトの名無しさん
2021/03/19(金) 23:41:24.44ID:0qPpyi/x903デフォルトの名無しさん
2021/03/19(金) 23:43:05.81ID:6x0jzlEw dexador のソースを読むと (dex:get "...." ) はおおよそ次のように進行する
;; ------------------------------------------
(defvar uri (quri:uri "https://ja.wikipedia.org/wiki/Common_Lisp"))
(defvar connect-timeout dex:*default-connect-timeout* );; 10 {秒}
(defvar con-uri (quri:uri uri));; 結局 con-uri == uri になる
(defvar connection (usocket:socket-connect (quri:uri-host con-uri) (quri:uri-port con-uri)
:timeout connect-timeout :element-type '(unsigned-byte 8)))
(defvar stream (usocket:socket-stream connection))
(defvar scheme (quri:uri-scheme uri));; "https"
(defvar read-timeout dex:*default-read-timeout* );; 10 {秒}
(setf (usocket:socket-option connection :receive-timeout) read-timeout)
(cl+ssl:ensure-initialized) ;; SSLの前準備的な? 返値はNIL
(defparameter *ca-bundle*
(uiop:native-namestring
(asdf:system-relative-pathname :dexador #P"certs/cacert.pem")))
;; ...dexador-20210228-git/certs/cacert.pem ルート証明書みたいな?
(defvar ctx (cl+ssl:make-context :verify-mode cl+ssl:+ssl-verify-peer+ :verify-location *ca-bundle*))
(defvar insecure dex:*not-verify-ssl*);; この値は NIL であるべき (セキュアってこと)
(cl+ssl:with-global-context (ctx :auto-free-p t)
(cl+ssl:make-ssl-client-stream stream
:hostname (quri:uri-host uri)
:verify (not insecure)
:key nil
:certificate nil
:password nil))
;; --------------------------------------------------------------------------------
libssl.dylib の問題で解決ならもう↑これは不要かな
まあ面白かったから気にしないでくれ
;; ------------------------------------------
(defvar uri (quri:uri "https://ja.wikipedia.org/wiki/Common_Lisp"))
(defvar connect-timeout dex:*default-connect-timeout* );; 10 {秒}
(defvar con-uri (quri:uri uri));; 結局 con-uri == uri になる
(defvar connection (usocket:socket-connect (quri:uri-host con-uri) (quri:uri-port con-uri)
:timeout connect-timeout :element-type '(unsigned-byte 8)))
(defvar stream (usocket:socket-stream connection))
(defvar scheme (quri:uri-scheme uri));; "https"
(defvar read-timeout dex:*default-read-timeout* );; 10 {秒}
(setf (usocket:socket-option connection :receive-timeout) read-timeout)
(cl+ssl:ensure-initialized) ;; SSLの前準備的な? 返値はNIL
(defparameter *ca-bundle*
(uiop:native-namestring
(asdf:system-relative-pathname :dexador #P"certs/cacert.pem")))
;; ...dexador-20210228-git/certs/cacert.pem ルート証明書みたいな?
(defvar ctx (cl+ssl:make-context :verify-mode cl+ssl:+ssl-verify-peer+ :verify-location *ca-bundle*))
(defvar insecure dex:*not-verify-ssl*);; この値は NIL であるべき (セキュアってこと)
(cl+ssl:with-global-context (ctx :auto-free-p t)
(cl+ssl:make-ssl-client-stream stream
:hostname (quri:uri-host uri)
:verify (not insecure)
:key nil
:certificate nil
:password nil))
;; --------------------------------------------------------------------------------
libssl.dylib の問題で解決ならもう↑これは不要かな
まあ面白かったから気にしないでくれ
904デフォルトの名無しさん
2021/03/19(金) 23:43:16.86ID:0qPpyi/x /usr/local/libで参照先を見ました
libssl.dylib -> libssl.3.dylib
調べたら3.0.0 alphaになってますねOpenSSL
もしかしてこのせいですかね
libssl.dylib -> libssl.3.dylib
調べたら3.0.0 alphaになってますねOpenSSL
もしかしてこのせいですかね
905デフォルトの名無しさん
2021/03/19(金) 23:44:59.22ID:0qPpyi/x もう少し教えてください
おすすめはhomebrewってことでいいでしょうか?
おすすめはhomebrewってことでいいでしょうか?
906デフォルトの名無しさん
2021/03/20(土) 00:08:21.55ID:SWqHaUsq Wikipediaより OpenSSL
開発元 The OpenSSL Project
最新版 1.1.1j - 2021年2月16日(30日前)[1] [±]
最新評価版 3.0 Alpha 13 - 2021年3月11日
Homebrew版は 1.1.1j でした
3.0はまだ「分かってる人」だけが使う段階なのでしょう
Homebrew なんですが...
High Sierraはもうとっくに正式サポートから外れたので
パッケージのインストールがほぼソースからコンパイルになるんですわ
以前はコンパイル済みの (bottole) が提供されて、 コンパイルしたければオプションで選べたんですがね
こっちは惰性で使ってるだけなので、MacPorts の選択もアリだと思います
開発元 The OpenSSL Project
最新版 1.1.1j - 2021年2月16日(30日前)[1] [±]
最新評価版 3.0 Alpha 13 - 2021年3月11日
Homebrew版は 1.1.1j でした
3.0はまだ「分かってる人」だけが使う段階なのでしょう
Homebrew なんですが...
High Sierraはもうとっくに正式サポートから外れたので
パッケージのインストールがほぼソースからコンパイルになるんですわ
以前はコンパイル済みの (bottole) が提供されて、 コンパイルしたければオプションで選べたんですがね
こっちは惰性で使ってるだけなので、MacPorts の選択もアリだと思います
907デフォルトの名無しさん
2021/03/20(土) 00:46:30.47ID:ABymnbS3 わかりましたそうしたら・・
とりあえず1.1.1jをmakeしてみます
明日また報告します
いつもありがとうございます
とりあえず1.1.1jをmakeしてみます
明日また報告します
いつもありがとうございます
908デフォルトの名無しさん
2021/03/20(土) 02:09:09.50ID:SWqHaUsq 一番先に試すべきは system default の dylib で dex:get を試すべきなんだけど... まあいいや
> Error: Can't resolve foreign symbol "_SSL_get_peer_certificate"
あとこれは当初の CONNECTION-REFUSED-ERROR とは別に現れたエラーなのかな?
そうだとして推測すると
当初は /usr/local/lib/libssl.dylib に存在しないシンボル _SSL_get_peer_certificate を /usr/lib/libssl.dylib から拾い上げて進行してたんじゃないかな
そして他のシンボルも opensslバージョン違いでミックスされる、その結果ちょっとした不整合が生じて向こうのサーバーに拒否られたと
SBCLで大丈夫だったのは個々のLISP実装によって通信パラメータの扱いに多少の差があってもおかしくないから
「通信したいんでしょ?なのでココのnil値は妥当な値に変えておきました」みたいな感じ
ソース改変で /usr/local/lib/libssl.dylib しか見えなくなった状態では
_SSL_get_peer_certificate がどこにも見つからねーよ... と 別のエラーが生じたと
雑だけど大体当たってるんじゃないかな
> Error: Can't resolve foreign symbol "_SSL_get_peer_certificate"
あとこれは当初の CONNECTION-REFUSED-ERROR とは別に現れたエラーなのかな?
そうだとして推測すると
当初は /usr/local/lib/libssl.dylib に存在しないシンボル _SSL_get_peer_certificate を /usr/lib/libssl.dylib から拾い上げて進行してたんじゃないかな
そして他のシンボルも opensslバージョン違いでミックスされる、その結果ちょっとした不整合が生じて向こうのサーバーに拒否られたと
SBCLで大丈夫だったのは個々のLISP実装によって通信パラメータの扱いに多少の差があってもおかしくないから
「通信したいんでしょ?なのでココのnil値は妥当な値に変えておきました」みたいな感じ
ソース改変で /usr/local/lib/libssl.dylib しか見えなくなった状態では
_SSL_get_peer_certificate がどこにも見つからねーよ... と 別のエラーが生じたと
雑だけど大体当たってるんじゃないかな
909882
2021/03/20(土) 03:09:12.75ID:2VI0Nxdp >>898 見る限り、 connect する段階で失敗してるように見えるなあ。
俺からは二つ試してみてもらいたい。
一つ目。 (trace openmcl-socket:make-socket) を呼んでソケットを開く関数に trace を出させた後で接続を試して、関数にどんな引数が渡ってるのか見ること。
俺が試したらこんな感じになる:
? (trace openmcl-socket:make-socket)
NIL
? (usocket:socket-connect "ja.wikipedia.org" 443)
0> Calling (MAKE-SOCKET :TYPE :STREAM :ADDRESS-FAMILY :INTERNET6 :REMOTE-ADDRESS #<IP6-SOCKET-ADDRESS [2001:df2:e500:ed1a::1]:443> :FORMAT :TEXT :EXTERNAL-FORMAT :UNIX :DEADLINE NIL :NODELAY NIL :CONNECT-TIMEOUT NIL :INPUT-TIMEOUT NIL)
<0 MAKE-SOCKET returned #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/24) #x30200212C1CD>
#<USOCKET:STREAM-USOCKET #x30200212BE4D>
二つ目。IPv4 ソケットで connect 出来るか試してみて欲しい。
ソース見る限り usocket は IPv6 ソケットを作りたがるっぽいが、IPv4 だとどうなのか見てみたいから。
IPv4での繋ぎ方は以下:
(openmcl-socket:make-socket :type :stream :remote-host "ja.wikipedia.org" :remote-port 443 :address-family :internet)
俺が trace も有効な状態で試した結果は以下のようになった:
? (openmcl-socket:make-socket :type :stream :remote-host "ja.wikipedia.org" :remote-port 443 :address-family :internet)
0> Calling (MAKE-SOCKET :TYPE :STREAM :REMOTE-HOST "ja.wikipedia.org" :REMOTE-PORT 443 :ADDRESS-FAMILY :INTERNET)
<0 MAKE-SOCKET returned #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/32) #x30200215E80D>
#<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/32) #x30200215E80D>
俺からは二つ試してみてもらいたい。
一つ目。 (trace openmcl-socket:make-socket) を呼んでソケットを開く関数に trace を出させた後で接続を試して、関数にどんな引数が渡ってるのか見ること。
俺が試したらこんな感じになる:
? (trace openmcl-socket:make-socket)
NIL
? (usocket:socket-connect "ja.wikipedia.org" 443)
0> Calling (MAKE-SOCKET :TYPE :STREAM :ADDRESS-FAMILY :INTERNET6 :REMOTE-ADDRESS #<IP6-SOCKET-ADDRESS [2001:df2:e500:ed1a::1]:443> :FORMAT :TEXT :EXTERNAL-FORMAT :UNIX :DEADLINE NIL :NODELAY NIL :CONNECT-TIMEOUT NIL :INPUT-TIMEOUT NIL)
<0 MAKE-SOCKET returned #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/24) #x30200212C1CD>
#<USOCKET:STREAM-USOCKET #x30200212BE4D>
二つ目。IPv4 ソケットで connect 出来るか試してみて欲しい。
ソース見る限り usocket は IPv6 ソケットを作りたがるっぽいが、IPv4 だとどうなのか見てみたいから。
IPv4での繋ぎ方は以下:
(openmcl-socket:make-socket :type :stream :remote-host "ja.wikipedia.org" :remote-port 443 :address-family :internet)
俺が trace も有効な状態で試した結果は以下のようになった:
? (openmcl-socket:make-socket :type :stream :remote-host "ja.wikipedia.org" :remote-port 443 :address-family :internet)
0> Calling (MAKE-SOCKET :TYPE :STREAM :REMOTE-HOST "ja.wikipedia.org" :REMOTE-PORT 443 :ADDRESS-FAMILY :INTERNET)
<0 MAKE-SOCKET returned #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/32) #x30200215E80D>
#<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/32) #x30200215E80D>
910デフォルトの名無しさん
2021/03/20(土) 16:30:52.27ID:ABymnbS3 遅くなりました
>>908
/usr/localではなく/usr/libを見るように変えました
いつものようにキャッシュを消してからCCL起動
(ql:quickload :dexador) ののちに
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x302003C411CD>
? (dex:get "https://nicovideo.jp" )
Killed: 9
nicovideoを参照するとkilled 9でCCL自体落ちるようです
>>908
/usr/localではなく/usr/libを見るように変えました
いつものようにキャッシュを消してからCCL起動
(ql:quickload :dexador) ののちに
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x302003C411CD>
? (dex:get "https://nicovideo.jp" )
Killed: 9
nicovideoを参照するとkilled 9でCCL自体落ちるようです
911デフォルトの名無しさん
2021/03/20(土) 16:35:31.22ID:ABymnbS3 >>909
現在/usr/libを参照している状態でやってます
? (trace openmcl-socket:make-socket)
NIL
? (usocket:socket-connect "ja.wikipedia.org" 443)
> Error: There is no package named "USOCKET" .
> While executing: CCL::%PARSE-TOKEN, in process listener(1).
おや・・・no package named が出ると?
? (openmcl-socket:make-socket :type :stream :remote-host "ja.wikipedia.org" :remote-port 443 :address-family :internet)
0> Calling (MAKE-SOCKET :TYPE :STREAM :REMOTE-HOST "ja.wikipedia.org" :REMOTE-PORT 443 :ADDRESS-FAMILY :INTERNET)
<0 MAKE-SOCKET returned #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/4) #x302000A0E4ED>
#<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/4) #x302000A0E4ED>
?
こんな感じになるようです
OpenSSLの1.1.1jのビルドしてきます・・
現在/usr/libを参照している状態でやってます
? (trace openmcl-socket:make-socket)
NIL
? (usocket:socket-connect "ja.wikipedia.org" 443)
> Error: There is no package named "USOCKET" .
> While executing: CCL::%PARSE-TOKEN, in process listener(1).
おや・・・no package named が出ると?
? (openmcl-socket:make-socket :type :stream :remote-host "ja.wikipedia.org" :remote-port 443 :address-family :internet)
0> Calling (MAKE-SOCKET :TYPE :STREAM :REMOTE-HOST "ja.wikipedia.org" :REMOTE-PORT 443 :ADDRESS-FAMILY :INTERNET)
<0 MAKE-SOCKET returned #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/4) #x302000A0E4ED>
#<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/4) #x302000A0E4ED>
?
こんな感じになるようです
OpenSSLの1.1.1jのビルドしてきます・・
912デフォルトの名無しさん
2021/03/20(土) 17:01:19.75ID:ABymnbS3 1.1.1j できました
libssl.dylib -> libssl.1.1.dylib
libcrypto.dylib -> libcrypto.1.1.dylib
nm /usr/local/opt/openssl/lib/libssl.dylib | grep SSL_get_peer_certificate
nm /usr/local/lib/libssl.dylib | grep SSL_get_peer_certificate
000000000001e290 T _SSL_get_peer_certificate
Symbolはありますね
libssl.dylib -> libssl.1.1.dylib
libcrypto.dylib -> libcrypto.1.1.dylib
nm /usr/local/opt/openssl/lib/libssl.dylib | grep SSL_get_peer_certificate
nm /usr/local/lib/libssl.dylib | grep SSL_get_peer_certificate
000000000001e290 T _SSL_get_peer_certificate
Symbolはありますね
913デフォルトの名無しさん
2021/03/20(土) 17:09:57.89ID:ABymnbS3 キャッシュを消して
reload.lispを標準に戻します
CCL起動からdexadorをquickload…
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200229120D>
? (dex:get "https://nicovideo.jp" )
Killed: 9
ええ・・
/usr/localのみ参照するreload.lispへ戻します
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200225C10D>
? (dex:get "https://nicovideo.jp" )
Killed: 9
またCCLが落ちました
reload.lispを標準に戻します
CCL起動からdexadorをquickload…
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200229120D>
? (dex:get "https://nicovideo.jp" )
Killed: 9
ええ・・
/usr/localのみ参照するreload.lispへ戻します
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200225C10D>
? (dex:get "https://nicovideo.jp" )
Killed: 9
またCCLが落ちました
914デフォルトの名無しさん
2021/03/20(土) 17:15:43.39ID:ABymnbS3 CCL本体でSSL関係を静的リンクしているかチェックしてみましたが
そのようなことはありませんでした
うーん・・
そのようなことはありませんでした
うーん・・
915デフォルトの名無しさん
2021/03/20(土) 17:27:17.85ID:ABymnbS3 念のため
OpenSSL 1.1.1jの make testを再度実行した結果
../test/recipes/95-test_external_boringssl.t ....... skipped: No external tests in this configuration
../test/recipes/95-test_external_krb5.t ............ skipped: No external tests in this configuration
../test/recipes/95-test_external_pyca.t ............ skipped: No external tests in this configuration
../test/recipes/99-test_ecstress.t ................. ok
../test/recipes/99-test_fuzz.t ..................... ok
All tests successful.
Files=158, Tests=2629, 207 wallclock secs ( 3.41 usr 0.43 sys + 124.00 cusr 66.96 csys = 194.80 CPU)
Result: PASS
OpenSSL 1.1.1jの make testを再度実行した結果
../test/recipes/95-test_external_boringssl.t ....... skipped: No external tests in this configuration
../test/recipes/95-test_external_krb5.t ............ skipped: No external tests in this configuration
../test/recipes/95-test_external_pyca.t ............ skipped: No external tests in this configuration
../test/recipes/99-test_ecstress.t ................. ok
../test/recipes/99-test_fuzz.t ..................... ok
All tests successful.
Files=158, Tests=2629, 207 wallclock secs ( 3.41 usr 0.43 sys + 124.00 cusr 66.96 csys = 194.80 CPU)
Result: PASS
916882
2021/03/20(土) 22:06:24.57ID:2VI0Nxdp >>911 見ると IPv4 ソケットは繋がるっぽいな。じゃあ ccl に IPv4 を使わせてみて試そう。
以下の手順を試してみて欲しい。
1. あらかじめ SSL の設定は元に戻しておく。
(ここは 911 がどうやったか分からんので自分でやってくれ)
2. asdf のキャッシュを消す。
~/.cache/common-lisp/ 以下を全削除。
3. ccl を起動して、以下の順に打つ:
(setf *features* (delete :ipv6 *features*))
(ql:quickload "dexador")
(dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
以下の手順を試してみて欲しい。
1. あらかじめ SSL の設定は元に戻しておく。
(ここは 911 がどうやったか分からんので自分でやってくれ)
2. asdf のキャッシュを消す。
~/.cache/common-lisp/ 以下を全削除。
3. ccl を起動して、以下の順に打つ:
(setf *features* (delete :ipv6 *features*))
(ql:quickload "dexador")
(dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
917デフォルトの名無しさん
2021/03/20(土) 22:34:20.86ID:ABymnbS3 >>916
やってみました
通常通り初期化、同条件の/usr/libを参照する形に戻しています
? (setf *features* (delete :ipv6 *features*))
(:QUICKLISP :ASDF3.3 :ASDF3.2 :ASDF3.1 :ASDF3 :ASDF2 :ASDF :OS-MACOSX :OS-UNIX :ASDF-UNICODE :PRIMARY-CLASSES :COMMON-LISP :OPENMCL :CCL :CCL-1.2 :CCL-1.3 :CCL-1.4 :CCL-1.5 :CCL-1.6 :CCL-1.7 :CCL-1.8 :CCL-1.9 :CCL-1.10 :CCL-1.11 :CCL-1.12 :CLOZURE :CLOZURE-COMMON-LISP :ANSI-CL :UNIX :OPENMCL-UNICODE-STRINGS :OPENMCL-NATIVE-THREADS :OPENMCL-PARTIAL-MOP :MCL-COMMON-MOP-SUBSET :OPENMCL-MOP-2 :OPENMCL-PRIVATE-HASH-TABLES :STATIC-CONSES-SHOULD-WORK-WITH-EGC-IN-CCL :PACKAGE-LOCAL-NICKNAMES :X86-64 :X86_64 :X86-TARGET :X86-HOST :X8664-TARGET :X8664-HOST :DARWIN-HOST :DARWIN-TARGET :DARWINX86-TARGET :DARWINX8664-TARGET :DARWINX8664-HOST :64-BIT-TARGET :64-BIT-HOST :DARWIN :LITTLE-ENDIAN-TARGET :LITTLE-ENDIAN-HOST)
? (ql:quickload "dexador")
To load "dexador":
Load 1 ASDF system:
#〜中略〜
("dexador")
# reload.lispの変更点を再確認、OK
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
"<!DOCTYPE html>
<html class=¥"client-nojs¥" lang=¥"ja¥" dir=¥"ltr¥">
#〜中略〜
</body></html>"
200
#<HASH-TABLE :TEST EQUAL size 22/60 #x30200316897D>
#<QURI.URI.HTTP:URI-HTTPS https://ja.wikipedia.org/wiki/Common_Lisp>
#<SSL-STREAM for #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/4) #x3020030AE94D>>
?
成功したように見えます・・!
やってみました
通常通り初期化、同条件の/usr/libを参照する形に戻しています
? (setf *features* (delete :ipv6 *features*))
(:QUICKLISP :ASDF3.3 :ASDF3.2 :ASDF3.1 :ASDF3 :ASDF2 :ASDF :OS-MACOSX :OS-UNIX :ASDF-UNICODE :PRIMARY-CLASSES :COMMON-LISP :OPENMCL :CCL :CCL-1.2 :CCL-1.3 :CCL-1.4 :CCL-1.5 :CCL-1.6 :CCL-1.7 :CCL-1.8 :CCL-1.9 :CCL-1.10 :CCL-1.11 :CCL-1.12 :CLOZURE :CLOZURE-COMMON-LISP :ANSI-CL :UNIX :OPENMCL-UNICODE-STRINGS :OPENMCL-NATIVE-THREADS :OPENMCL-PARTIAL-MOP :MCL-COMMON-MOP-SUBSET :OPENMCL-MOP-2 :OPENMCL-PRIVATE-HASH-TABLES :STATIC-CONSES-SHOULD-WORK-WITH-EGC-IN-CCL :PACKAGE-LOCAL-NICKNAMES :X86-64 :X86_64 :X86-TARGET :X86-HOST :X8664-TARGET :X8664-HOST :DARWIN-HOST :DARWIN-TARGET :DARWINX86-TARGET :DARWINX8664-TARGET :DARWINX8664-HOST :64-BIT-TARGET :64-BIT-HOST :DARWIN :LITTLE-ENDIAN-TARGET :LITTLE-ENDIAN-HOST)
? (ql:quickload "dexador")
To load "dexador":
Load 1 ASDF system:
#〜中略〜
("dexador")
# reload.lispの変更点を再確認、OK
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp")
"<!DOCTYPE html>
<html class=¥"client-nojs¥" lang=¥"ja¥" dir=¥"ltr¥">
#〜中略〜
</body></html>"
200
#<HASH-TABLE :TEST EQUAL size 22/60 #x30200316897D>
#<QURI.URI.HTTP:URI-HTTPS https://ja.wikipedia.org/wiki/Common_Lisp>
#<SSL-STREAM for #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/4) #x3020030AE94D>>
?
成功したように見えます・・!
918882
2021/03/20(土) 23:37:46.40ID:2VI0Nxdp >> 917 それはよかった。
917の環境は、 "ja.wikipedia.org" が IPv6 アドレスに解決されるのにそれを使って connect すると失敗するという状態なんだろうか。知らんけど。
IPv6 で繋がらない原因は Lisp の範疇じゃないし、917自身がネットワーク設定を見るしかないと思う。
あと ccl で IPv6 を常に抑制したいというなら、 ccl の起動時読み込みファイルに同じ設定を書き込む必要があると思う。
~/.ccl-init.lisp に、以下の式:
(setf *features* (delete :ipv6 *features*))
を追記しとけば IPv6 を抑制できて暫定措置になるんじゃないの。
917の環境は、 "ja.wikipedia.org" が IPv6 アドレスに解決されるのにそれを使って connect すると失敗するという状態なんだろうか。知らんけど。
IPv6 で繋がらない原因は Lisp の範疇じゃないし、917自身がネットワーク設定を見るしかないと思う。
あと ccl で IPv6 を常に抑制したいというなら、 ccl の起動時読み込みファイルに同じ設定を書き込む必要があると思う。
~/.ccl-init.lisp に、以下の式:
(setf *features* (delete :ipv6 *features*))
を追記しとけば IPv6 を抑制できて暫定措置になるんじゃないの。
919デフォルトの名無しさん
2021/03/20(土) 23:49:08.72ID:ABymnbS3920デフォルトの名無しさん
2021/03/21(日) 00:33:41.74ID:kaM5HUhB >>918
調べてはいますがおそらくその通りだと思います
ifconfigでIPv6アドレスを持っていてIPv6パススルーも生きていることはわかったのですが
httpsに関してはIPv4しか通らないようです
DNSはIPv6を返します
問い合わせないといけないかもしれないので時間かかります
また報告しますすいません・・
調べてはいますがおそらくその通りだと思います
ifconfigでIPv6アドレスを持っていてIPv6パススルーも生きていることはわかったのですが
httpsに関してはIPv4しか通らないようです
DNSはIPv6を返します
問い合わせないといけないかもしれないので時間かかります
また報告しますすいません・・
921デフォルトの名無しさん
2021/03/21(日) 10:38:06.62ID:37bhr7Il CCL with IPV6 feature:
(openmcl-socket:resolve-address :HOST "www.wikipedia.org" :PORT 443 :SOCKET-TYPE :STREAM)
⇒ IPアドレス #<IP6-SOCKET-ADDRESS [2001:df2:e500:ed1a::1]:443>
[ 参考: usocket-0.8.3/backend/clozure.lisp line: 15〜 ]
SBCL:
(usocket:get-hosts-by-name "www.wikipedia.org")
⇒ (#(103 102 166 224) #(32 1 13 242 229 0 237 26 0 0 0 0 0 0 0 1))
⇒ (car ... ) ⇒ IPアドレス #(103 102 166 224)
[ 参考: usocket-0.8.3/backend/sbcl.lisp line: 321〜 ]
つまり
CCLでは CCL実装の resolve-address で得られるIPアドレス (この場合 ipv6) をそのまま採用する
SBCLでは usocket:get-hosts-by-name で得られるIPアドレスが複数 (ipv4, ipv6) あったら 先頭のエントリ (ipv4) を採用する
「SBCLでは大丈夫だったのに」の謎はこれで解けた
(openmcl-socket:resolve-address :HOST "www.wikipedia.org" :PORT 443 :SOCKET-TYPE :STREAM)
⇒ IPアドレス #<IP6-SOCKET-ADDRESS [2001:df2:e500:ed1a::1]:443>
[ 参考: usocket-0.8.3/backend/clozure.lisp line: 15〜 ]
SBCL:
(usocket:get-hosts-by-name "www.wikipedia.org")
⇒ (#(103 102 166 224) #(32 1 13 242 229 0 237 26 0 0 0 0 0 0 0 1))
⇒ (car ... ) ⇒ IPアドレス #(103 102 166 224)
[ 参考: usocket-0.8.3/backend/sbcl.lisp line: 321〜 ]
つまり
CCLでは CCL実装の resolve-address で得られるIPアドレス (この場合 ipv6) をそのまま採用する
SBCLでは usocket:get-hosts-by-name で得られるIPアドレスが複数 (ipv4, ipv6) あったら 先頭のエントリ (ipv4) を採用する
「SBCLでは大丈夫だったのに」の謎はこれで解けた
922デフォルトの名無しさん
2021/03/21(日) 10:45:31.91ID:Duyg5pmm 迂闊なアップデートは止めましょう、パッケージマネージャはあんまり信用しないように、ということで
俺はそのままでいいや…
俺はそのままでいいや…
923デフォルトの名無しさん
2021/03/21(日) 11:16:39.08ID:Zc1ZeEs5924デフォルトの名無しさん
2021/03/21(日) 14:51:41.93ID:kaM5HUhB ネットワーク環境についてなんですが
こちらの設定だけでは改善できないことがはっきりしましたので
問題点も明らかになっていることから、今回の質問については終了したいと思います
粘り強く対応して頂いた先輩方には感謝しております
こちらの不手際のせいで巻き込んでしまってすみませんでした
ありがとうございました
次へ進みたいと思います
こちらの設定だけでは改善できないことがはっきりしましたので
問題点も明らかになっていることから、今回の質問については終了したいと思います
粘り強く対応して頂いた先輩方には感謝しております
こちらの不手際のせいで巻き込んでしまってすみませんでした
ありがとうございました
次へ進みたいと思います
925デフォルトの名無しさん
2021/03/21(日) 15:35:24.92ID:37bhr7Il >>924 ちょっと待ってくれー
(openmcl-socket:resolve-address :HOST "nicovideo.jp" :PORT 443 :SOCKET-TYPE :STREAM)
そちらでこれ↑はどういう値が返ってきますか?
こちらの環境では #<IP4-SOCKET-ADDRESS 133.152.43.29:443> つまり ipv4 で返ってくる (※)
もし ipv4 で Kill: 9 になる ( >>913 ) なら ipv6 とは別の問題も抱えてるって話になります
分かったところで何ができるよ?と思われるかもしれませんが、少し気になってました
※ そしてキー値引数 :ADDRESS-FAMILY :internet6 を追加すると ipv6 になる
wikipedia.org だとデフォールトで ipv6 ( DNS の返答順に差があるんですかね )
(openmcl-socket:resolve-address :HOST "nicovideo.jp" :PORT 443 :SOCKET-TYPE :STREAM)
そちらでこれ↑はどういう値が返ってきますか?
こちらの環境では #<IP4-SOCKET-ADDRESS 133.152.43.29:443> つまり ipv4 で返ってくる (※)
もし ipv4 で Kill: 9 になる ( >>913 ) なら ipv6 とは別の問題も抱えてるって話になります
分かったところで何ができるよ?と思われるかもしれませんが、少し気になってました
※ そしてキー値引数 :ADDRESS-FAMILY :internet6 を追加すると ipv6 になる
wikipedia.org だとデフォールトで ipv6 ( DNS の返答順に差があるんですかね )
926デフォルトの名無しさん
2021/03/21(日) 15:43:10.50ID:kaM5HUhB >>925
そうでした
killed:9の問題は忘れてました
? (openmcl-socket:resolve-address :HOST "nicovideo.jp" :PORT 443 :SOCKET-TYPE :STREAM)
#<IP4-SOCKET-ADDRESS 133.152.43.29:443>
/usr/lib参照の設定だとこうなりますね
そうでした
killed:9の問題は忘れてました
? (openmcl-socket:resolve-address :HOST "nicovideo.jp" :PORT 443 :SOCKET-TYPE :STREAM)
#<IP4-SOCKET-ADDRESS 133.152.43.29:443>
/usr/lib参照の設定だとこうなりますね
927デフォルトの名無しさん
2021/03/21(日) 16:05:38.47ID:37bhr7Il >>926
ほんと分かったところで何もできないけど、とりあえず確認ありがとう
ほんと分かったところで何もできないけど、とりあえず確認ありがとう
928デフォルトの名無しさん
2021/03/21(日) 17:17:04.97ID:kaM5HUhB いえいえそんな
いつもありがとうございます・・
いつもありがとうございます・・
929882
2021/03/21(日) 19:09:29.26ID:rYTEFRj1 >>925-926
俺の環境でも "Killed: 9" が出る現象が再現できた。
IPv6 ソケットを開くのにあえて失敗させた後、 ファイルディスクリプタを開きまくっていると ccl が死ぬっぽい。
俺が見つけた再現手順は以下。暇なら 925 や 926 も再現できるか試してみてほしい。
1. asdf のキャッシュを消す
~/.cache/common-lisp 以下を全削除。
2. ccl を起動し、以下の順に実行
(ql:quickload "usocket")
(usocket:socket-connect "ja.wikipedia.org" 65500) ; これは connection refused になって失敗する。 :pop で abort して抜ける。
(usocket:socket-connect "nicovideo.jp" 443)
(ql:quickload "dexador") ; I/Oが重い処理ならなんでもいい
最後の ql:quickload の箇所はI/Oが多い処理ならなんでもいいようで、俺はこれで "Killed: 9" になるのが確認できた。
まだ調査中だけど、この現象は usocket か ccl のバグっぽい気がする。
もう少し調べてみて必要なら本家に報告するわ。
俺の環境でも "Killed: 9" が出る現象が再現できた。
IPv6 ソケットを開くのにあえて失敗させた後、 ファイルディスクリプタを開きまくっていると ccl が死ぬっぽい。
俺が見つけた再現手順は以下。暇なら 925 や 926 も再現できるか試してみてほしい。
1. asdf のキャッシュを消す
~/.cache/common-lisp 以下を全削除。
2. ccl を起動し、以下の順に実行
(ql:quickload "usocket")
(usocket:socket-connect "ja.wikipedia.org" 65500) ; これは connection refused になって失敗する。 :pop で abort して抜ける。
(usocket:socket-connect "nicovideo.jp" 443)
(ql:quickload "dexador") ; I/Oが重い処理ならなんでもいい
最後の ql:quickload の箇所はI/Oが多い処理ならなんでもいいようで、俺はこれで "Killed: 9" になるのが確認できた。
まだ調査中だけど、この現象は usocket か ccl のバグっぽい気がする。
もう少し調べてみて必要なら本家に報告するわ。
930925
2021/03/21(日) 19:41:51.58ID:37bhr7Il >>929 同じ手順で "Killed: 9" 再現しました
環境は
Clozure CL: Version 1.12 (v1.12-39-g6c1a9458) DarwinX8664
OS: macOS High Sierra ver. 10.13.4
~❦:ulimit -n
256
ファイルディスプリタの(プロセス単位の?)上限は、256
少ないようには見えませんが、CCLが処理しきれる上限はもっと低いんですかねえ
環境は
Clozure CL: Version 1.12 (v1.12-39-g6c1a9458) DarwinX8664
OS: macOS High Sierra ver. 10.13.4
~❦:ulimit -n
256
ファイルディスプリタの(プロセス単位の?)上限は、256
少ないようには見えませんが、CCLが処理しきれる上限はもっと低いんですかねえ
931デフォルトの名無しさん
2021/03/21(日) 20:01:40.07ID:kaM5HUhB932882
2021/03/21(日) 21:05:00.56ID:rYTEFRj1 >>930
>>931
ありがとう。これだけ再現するってことは本当にバグを見つけたのかもね。
俺の方では、 USOCKET:SOCKET-CONNECT で接続に失敗した時の backtrace を見て、 abort して抜ける時にどこかの unwind-protect で走るコードがおかしいんじゃないかと思って眺めてみてる。
で、そういう unwind-protect があるのはこの ccl::make-tcp-socket 関数だけだった:
ttps://github.com/Clozure/ccl/blob/6c1a9458f7a5437b73ec227e989aa5b825f32fd3/library/sockets.lisp#L647-L692
上の再現手順で Connection Refused にしたとき、この関数の688行目でエラーが起きるんだが、その場合 unwind-protect の効果で692行目の処理で FD が閉じられる。一方で、この FD は663行目の処理で socket 構造体の作成にも使われていて、その socket 構造体は閉じられていない。
ここからは完全に俺の推測。
Connection Refused 後の unwind-protect で FD が閉じられた後、次の処理でたまたま同じ数字のFDが開かれ、その直後にこの放置された socket 構造体がGCに回収されるときに何か起きてるんじゃないかと思う。 IPv6 の struct sockaddr_in6 と IPv4 の struct sockaddr_in を取り違えて free() する・・的な。
まあそんな今更なバグが ccl にあるとも思えないので、全く推測の域を出ないけど。
俺も普段使いはSBCLで、CCLのソースを見るのは初めてだから時間がかかると思うけど、もう少し調べてみるわ。
>>931
ありがとう。これだけ再現するってことは本当にバグを見つけたのかもね。
俺の方では、 USOCKET:SOCKET-CONNECT で接続に失敗した時の backtrace を見て、 abort して抜ける時にどこかの unwind-protect で走るコードがおかしいんじゃないかと思って眺めてみてる。
で、そういう unwind-protect があるのはこの ccl::make-tcp-socket 関数だけだった:
ttps://github.com/Clozure/ccl/blob/6c1a9458f7a5437b73ec227e989aa5b825f32fd3/library/sockets.lisp#L647-L692
上の再現手順で Connection Refused にしたとき、この関数の688行目でエラーが起きるんだが、その場合 unwind-protect の効果で692行目の処理で FD が閉じられる。一方で、この FD は663行目の処理で socket 構造体の作成にも使われていて、その socket 構造体は閉じられていない。
ここからは完全に俺の推測。
Connection Refused 後の unwind-protect で FD が閉じられた後、次の処理でたまたま同じ数字のFDが開かれ、その直後にこの放置された socket 構造体がGCに回収されるときに何か起きてるんじゃないかと思う。 IPv6 の struct sockaddr_in6 と IPv4 の struct sockaddr_in を取り違えて free() する・・的な。
まあそんな今更なバグが ccl にあるとも思えないので、全く推測の域を出ないけど。
俺も普段使いはSBCLで、CCLのソースを見るのは初めてだから時間がかかると思うけど、もう少し調べてみるわ。
933デフォルトの名無しさん
2021/03/21(日) 22:01:07.16ID:37bhr7Il あぁこれ Killed: 9 のたびにクラッシュログが残りますね
~/Library/Logs/DiagnosticReports/dx86cl64_2021-03-21-213811_Sierra.crash
Process: dx86cl64 [58558]
... .. .
Exception Type: EXC_GUARD
Exception Codes: 0x4000000100000006, 0x542c042077498a54
Exception Subtype: GUARD_TYPE_FD, id=0x542c042077498a54, fd=6, flavor=0x00000001 (CLOSE)
... .. .
さっぱり意味は分からないけどシステムを怒らせたっぽい事は伝わってきます
禁忌に触れようとした的な?
~/Library/Logs/DiagnosticReports/dx86cl64_2021-03-21-213811_Sierra.crash
Process: dx86cl64 [58558]
... .. .
Exception Type: EXC_GUARD
Exception Codes: 0x4000000100000006, 0x542c042077498a54
Exception Subtype: GUARD_TYPE_FD, id=0x542c042077498a54, fd=6, flavor=0x00000001 (CLOSE)
... .. .
さっぱり意味は分からないけどシステムを怒らせたっぽい事は伝わってきます
禁忌に触れようとした的な?
934882
2021/03/22(月) 17:08:00.67ID:VLZSjRi0 パッチ書いてプルリク出してみた。
https://github.com/Clozure/ccl/pull/362
>>933 のいうようにクラッシュレポート見たら、俺の環境でも close で死んでた。
色々調べたけど、どうやら CCL の GC が close 済みのFDをもう一度 close しようとすると死ぬっぽい。
(ただ、close 済み FD を二回 close する簡単な C プログラム書いて実験しても、 EBADF が返るくらいで kill されたりはしないんだよね・・このあたり微妙。)
そんなわけで close 済み FD を参照する一時オブジェクトをエラー時に解放するよう unwind-protect したら直ったっぽく見えたのでPRにしてみた。
(932 では struct sockaddr_in が・・とかヌカしてたけど、さすがにこれは無かった。俺の杞憂だったわ。)
https://github.com/Clozure/ccl/pull/362
>>933 のいうようにクラッシュレポート見たら、俺の環境でも close で死んでた。
色々調べたけど、どうやら CCL の GC が close 済みのFDをもう一度 close しようとすると死ぬっぽい。
(ただ、close 済み FD を二回 close する簡単な C プログラム書いて実験しても、 EBADF が返るくらいで kill されたりはしないんだよね・・このあたり微妙。)
そんなわけで close 済み FD を参照する一時オブジェクトをエラー時に解放するよう unwind-protect したら直ったっぽく見えたのでPRにしてみた。
(932 では struct sockaddr_in が・・とかヌカしてたけど、さすがにこれは無かった。俺の杞憂だったわ。)
935デフォルトの名無しさん
2021/03/22(月) 18:59:19.52ID:1u7lgsAW936デフォルトの名無しさん
2021/03/22(月) 21:16:42.30ID:5gvxkT8z >>934 あなたは偉い!
全く別件ですが詳しい方々に質問です
CCL で簡単な cocoa アプリを作ってみよう思い (require :cocoa) を評価すると Hemlock editor が立ち上がります
そのためのコンパイルとロードも毎回走ります
欲しいのは ns:ns-window とかなのに不要なエディタを除外したアプリは作れないのでしょうか?
全く別件ですが詳しい方々に質問です
CCL で簡単な cocoa アプリを作ってみよう思い (require :cocoa) を評価すると Hemlock editor が立ち上がります
そのためのコンパイルとロードも毎回走ります
欲しいのは ns:ns-window とかなのに不要なエディタを除外したアプリは作れないのでしょうか?
937デフォルトの名無しさん
2021/03/22(月) 23:32:09.69ID:5gvxkT8z Hemlock editor てのは Clozure CL64.app を立ち上げると出てくるのと似たようなもんです、というか違いが分かりません
そっちの場合は 初めから (require :cocoa) された状態になってます
慣れの問題かもしれませんが、入力補完もhistoryも効かないこのエディタは使いづらいです
快適な Emacs+slime で作業してるのに (require :cocoa) で余計なのが立ち上がる、なんなんだコレはと思ってしまいます
そっちの場合は 初めから (require :cocoa) された状態になってます
慣れの問題かもしれませんが、入力補完もhistoryも効かないこのエディタは使いづらいです
快適な Emacs+slime で作業してるのに (require :cocoa) で余計なのが立ち上がる、なんなんだコレはと思ってしまいます
938デフォルトの名無しさん
2021/03/23(火) 06:52:29.03ID:p/UYSc/L あのエディタは必要なのか必要でないのかよくわからないんですよね
examples/coco/ui-elements/howto.html とかを見ると
(in-package :ccl)
(setf my-window (#/alloc (@class ns-window)))
window生成できるってことなってるんですがエラーになるおかげで悩みました
これ(require “cocoa”)をしておけば問題なく生成できますね・・
ただ同ページの
(ns:with-ns-rect (r 100 100 400 300)
(#/initWithContentRect:styleMask:backing:defer:
my-window
r
(logior #$NSTitledWindowMask
#$NSClosableWindowMask
#$NSMiniaturizableWindowMask
#$NSResizableWindowMask)
#$NSBackingStoreBuffered
#$NO))
で初期化して表示できるとなってますがこちらでは動かないんですよね
色々とわかってないことが多いので地道に調べてます・・
examples/coco/ui-elements/howto.html とかを見ると
(in-package :ccl)
(setf my-window (#/alloc (@class ns-window)))
window生成できるってことなってるんですがエラーになるおかげで悩みました
これ(require “cocoa”)をしておけば問題なく生成できますね・・
ただ同ページの
(ns:with-ns-rect (r 100 100 400 300)
(#/initWithContentRect:styleMask:backing:defer:
my-window
r
(logior #$NSTitledWindowMask
#$NSClosableWindowMask
#$NSMiniaturizableWindowMask
#$NSResizableWindowMask)
#$NSBackingStoreBuffered
#$NO))
で初期化して表示できるとなってますがこちらでは動かないんですよね
色々とわかってないことが多いので地道に調べてます・・
939936
2021/03/24(水) 14:30:11.89ID:aesCgSqt あれから試行錯誤してみましたが
https://trac.clozure.com/ccl/wiki/GradientWindow
例えばここのサンプルコードを
(require :objc-support)
↑と↓で挟めば
(ql:quickload :trivial-main-thread)
(defun main ()
(trivial-main-thread:with-body-in-main-thread ()
(show-gradient-window)
(#/run (#/sharedApplication ns:ns-application))))
(main) でウィンドウが出ます
サイト脚注の gui:execute-in-gui はcocoaパッケージで提供されるのでここでは使えません
examples/cocoa/ui-elements/HOWTO.html の例も
(%make-nsstring "Hello!") → #@"Hello!"
(@SELECTOR "greet:") → (objc:@SELECTOR "greet:")
のように書き換えてやると動きます
https://trac.clozure.com/ccl/wiki/GradientWindow
例えばここのサンプルコードを
(require :objc-support)
↑と↓で挟めば
(ql:quickload :trivial-main-thread)
(defun main ()
(trivial-main-thread:with-body-in-main-thread ()
(show-gradient-window)
(#/run (#/sharedApplication ns:ns-application))))
(main) でウィンドウが出ます
サイト脚注の gui:execute-in-gui はcocoaパッケージで提供されるのでここでは使えません
examples/cocoa/ui-elements/HOWTO.html の例も
(%make-nsstring "Hello!") → #@"Hello!"
(@SELECTOR "greet:") → (objc:@SELECTOR "greet:")
のように書き換えてやると動きます
940デフォルトの名無しさん
2021/03/24(水) 15:23:03.24ID:aesCgSqt それと (ccl:save-application "foo.image") とやれば現状のバイナリイメージが保存されます
dx86cl64 -n -b -Q -I foo.image -e "(main)"
のようにして実行できます
サンプルでは終了処理が省略されてるのでウィンドウを閉じても終わりません
例えば killall -9 dx86cl64 で始末してやる必要があります
ちなみに (require :cocoa) の状態でイメージ保存をすると何故か 0バイトの空ファイルができます
あと :cocoa では ccl::build-application を使ってアプリケーションバンドルが作れるという話になってるのですが
これもちょっと分かりませんでした
ガワ(〜.app)は出来ても実行できない、エラーを見るとイメージが見つからない、
じゃあ手動で作ればいいのか? 保存できないじゃん... という循環です
dx86cl64 -n -b -Q -I foo.image -e "(main)"
のようにして実行できます
サンプルでは終了処理が省略されてるのでウィンドウを閉じても終わりません
例えば killall -9 dx86cl64 で始末してやる必要があります
ちなみに (require :cocoa) の状態でイメージ保存をすると何故か 0バイトの空ファイルができます
あと :cocoa では ccl::build-application を使ってアプリケーションバンドルが作れるという話になってるのですが
これもちょっと分かりませんでした
ガワ(〜.app)は出来ても実行できない、エラーを見るとイメージが見つからない、
じゃあ手動で作ればいいのか? 保存できないじゃん... という循環です
941デフォルトの名無しさん
2021/03/24(水) 19:24:39.27ID:yxGjMjcv CCLのメーリングリストでやったら?
もし有益な情報だったらここに書かれててもCCLユーザーは目にすることはないし
逆にここでやられてもCCLでapp作るっての長々やられても正直うざい
もし有益な情報だったらここに書かれててもCCLユーザーは目にすることはないし
逆にここでやられてもCCLでapp作るっての長々やられても正直うざい
942デフォルトの名無しさん
2021/03/24(水) 20:15:36.43ID:pUd7W5mz いいじゃない、過疎スレなんだし
943デフォルトの名無しさん
2021/03/25(木) 18:41:24.49ID:vJV70gDt lispを会社で使ってる人は何に使ってるの?
944デフォルトの名無しさん
2021/03/25(木) 22:47:02.90ID:yPj3FOep Clojureが一番多いだろうけど、結局Web関連が大半だろうな
945デフォルトの名無しさん
2021/03/27(土) 11:00:58.43ID:Jp3H832r 会社の仕事で使わせようとするとこは地雷っぽく感じる
Lisperが集まった少人数ベンチャーでもなければ、普通は採用言語とはならんて
Lisperが集まった少人数ベンチャーでもなければ、普通は採用言語とはならんて
946デフォルトの名無しさん
2021/03/27(土) 20:32:02.20ID:uSYmOJju 速さが必要なとこはC++UIはC#
設定とか外部ファイルはjson
設定とか外部ファイルはjson
947デフォルトの名無しさん
2021/04/20(火) 08:52:04.97ID:gd1FBcQ1 Steele御大がカバーに推薦文書いてるからってclでHacker's Delight一通りなぞったけど
dpb, deposit-field, log~, boole-~,bit-vector...
clの無駄に細かく柔軟なbyte/bit関数がめっちゃ生きるなこれ
byte-specのおかげで32bit想定で16進定数まみれのc(っぽい)サンプルコードがキレイになる
変なビット幅使ったら性能は察しだけども
4bit整数のboole-定数も真理値表とcltl2、(hsによれば処理系定義だけど)処理系毎に思想が見えて面白い
dpb, deposit-field, log~, boole-~,bit-vector...
clの無駄に細かく柔軟なbyte/bit関数がめっちゃ生きるなこれ
byte-specのおかげで32bit想定で16進定数まみれのc(っぽい)サンプルコードがキレイになる
変なビット幅使ったら性能は察しだけども
4bit整数のboole-定数も真理値表とcltl2、(hsによれば処理系定義だけど)処理系毎に思想が見えて面白い
948デフォルトの名無しさん
2021/04/20(火) 08:53:47.98ID:gd1FBcQ1 byteはsize, pos, stepの3タプルだったら、もっと良かったかもな
949デフォルトの名無しさん
2021/05/22(土) 14:57:49.72ID:AMGDOUSM lispで構造体の配列はどの様に宣言するのですか。
教えてください。
教えてください。
950デフォルトの名無しさん
2021/05/22(土) 16:58:24.32ID:ihqr331W 構造体の型を :element-type に指定して make-array するとか。
standard-object の配列を作るなら
(make-array 42 :element-type 'standard-object)
standard-object の配列を作るなら
(make-array 42 :element-type 'standard-object)
951デフォルトの名無しさん
2021/05/23(日) 05:05:37.98ID:wE2/zz8j nconcとかの最初のnってなんの意味?
破壊系は大抵nがついてるようだけど
破壊系は大抵nがついてるようだけど
952デフォルトの名無しさん
2021/05/23(日) 14:54:18.11ID:jMJ3NfPq 実践Common Lispにはnon-consingを意味すると書いてあるな
953デフォルトの名無しさん
2021/05/28(金) 00:46:31.60ID:EJmsk1LE クロージャー?判ってなさそうなミスして困った
https://pastebin.com/MmYWsxce
CL-USER> (answer-status)
(B . 0) (R . 0) (G . 0) (Y . 0) (P . 2) (W . 0)
(B . 1) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 1)
(B . 0) (R . 0) (G . 0) (Y . 2) (P . 0) (W . 0)
(B . 1) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 1)
NIL
CL-USER> (answer-status)
(B . 0) (R . 0) (G . 0) (Y . 0) (P . 4) (W . 0)
(B . 2) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 2)
(B . 0) (R . 0) (G . 0) (Y . 4) (P . 0) (W . 0)
(B . 2) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 2)
NIL
CL-USER> (answer-status)
(B . 0) (R . 0) (G . 0) (Y . 0) (P . 6) (W . 0)
(B . 3) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 3)
(B . 0) (R . 0) (G . 0) (Y . 6) (P . 0) (W . 0)
(B . 3) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 3)
NIL
関数呼ぶ時に counters が初期化されずに値をキープするので
呼ぶ度に増えてしまう
どう定義すればリセットされるのだろうか?
https://pastebin.com/MmYWsxce
CL-USER> (answer-status)
(B . 0) (R . 0) (G . 0) (Y . 0) (P . 2) (W . 0)
(B . 1) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 1)
(B . 0) (R . 0) (G . 0) (Y . 2) (P . 0) (W . 0)
(B . 1) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 1)
NIL
CL-USER> (answer-status)
(B . 0) (R . 0) (G . 0) (Y . 0) (P . 4) (W . 0)
(B . 2) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 2)
(B . 0) (R . 0) (G . 0) (Y . 4) (P . 0) (W . 0)
(B . 2) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 2)
NIL
CL-USER> (answer-status)
(B . 0) (R . 0) (G . 0) (Y . 0) (P . 6) (W . 0)
(B . 3) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 3)
(B . 0) (R . 0) (G . 0) (Y . 6) (P . 0) (W . 0)
(B . 3) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 3)
NIL
関数呼ぶ時に counters が初期化されずに値をキープするので
呼ぶ度に増えてしまう
どう定義すればリセットされるのだろうか?
954デフォルトの名無しさん
2021/05/28(金) 02:28:07.56ID:yF2ZDltE なんでcounterをdefparameterで定義してるの?
955デフォルトの名無しさん
2021/05/28(金) 03:05:24.01ID:mAlT95oI copy-tree 使うとか
https://pastebin.com/69r3fbZH
https://pastebin.com/69r3fbZH
956デフォルトの名無しさん
2021/05/28(金) 08:27:58.85ID:EJmsk1LE957デフォルトの名無しさん
2021/05/28(金) 10:06:56.31ID:9zUWEJUi958デフォルトの名無しさん
2021/05/28(金) 13:02:59.14ID:3GRY8xg9 リテラルオブジェクトを破壊的に変更した結果が未定義だからだね
959デフォルトの名無しさん
2021/05/28(金) 20:43:19.98ID:Kys4wuAq assoc cdr nth越しにfるアクセサ志向プログラミングが気になる
いや悪いと思わんよsetfパワーはclの売りだし
ただなかなか見たことないので感心?した
いや悪いと思わんよsetfパワーはclの売りだし
ただなかなか見たことないので感心?した
960デフォルトの名無しさん
2021/05/28(金) 22:27:22.42ID:EJmsk1LE961デフォルトの名無しさん
2021/05/28(金) 23:07:39.31ID:J0jB9cZZ グラフ探索でモノを見つけたら帰りがけに空リストへcar/cdrをpushしていくのはやったことあるな
(#'car #'car #'cdr ...)で表現したアドレスと値が帰ってくる(以下#'等省略)
値を処理したら(compose '(car car cdr...))でアクセス関数を生成してsetfで更新
なんで俺はそのノードへの参照を直接返さず無駄にリスト返したのか、と書いてて疑問に思ったけど思い出したわ
そのノードの周りをn階層刈ったり、途中の階層から相対アクセスしたかったんだ
(compose '(cons curried-butlast-n '(car car cdr ...)))
的な感じで
何れにせよcar/cdrがsetfableな恩恵だね
(#'car #'car #'cdr ...)で表現したアドレスと値が帰ってくる(以下#'等省略)
値を処理したら(compose '(car car cdr...))でアクセス関数を生成してsetfで更新
なんで俺はそのノードへの参照を直接返さず無駄にリスト返したのか、と書いてて疑問に思ったけど思い出したわ
そのノードの周りをn階層刈ったり、途中の階層から相対アクセスしたかったんだ
(compose '(cons curried-butlast-n '(car car cdr ...)))
的な感じで
何れにせよcar/cdrがsetfableな恩恵だね
962デフォルトの名無しさん
2021/05/28(金) 23:14:25.26ID:J0jB9cZZ リードした時点でcadaddadadaaaar自動生成みたいなしょうもないマクロをpaul grahamだったかで見た事あるけど、もしかしてこれ使えるかも?
a/dを文字列ででも返して、それを関数として使いたい時だけcとrで挟んでinternする感じで
a/dを文字列ででも返して、それを関数として使いたい時だけcとrで挟んでinternする感じで
963デフォルトの名無しさん
2021/05/28(金) 23:53:54.41ID:Kys4wuAq 効率は悪そうだけどとてもlispらしい
placeだけダイナミック変数に確保したとしても、誰から指されてるか(親)は経路を何らかの方法で保存してないと原理的に辿れない
(複数から指されている可能性もあるので)
順にスタック片付けずに一気に脱出したいところだけど、帰りにpushする為に必要なんだな
逆に次にアクセスするノードへのアクセサをpushする方法が考えられるけど、これなら見つかり次第アキュムレータ末尾再帰かthrow 'top/catchで帰れる
外れノードから戻る時にアクセサをpopするコストも負うけど…
とりあえず効率は無視して、外れノードから一段降りる時にアクセサをpopするのではなく、returnを積んでしまえば、探索のログとしてデバッグに役立ちそう
car cdrに加え、returnまで合成した関数がちゃんとsetfableかまではちょっと自信がない
placeだけダイナミック変数に確保したとしても、誰から指されてるか(親)は経路を何らかの方法で保存してないと原理的に辿れない
(複数から指されている可能性もあるので)
順にスタック片付けずに一気に脱出したいところだけど、帰りにpushする為に必要なんだな
逆に次にアクセスするノードへのアクセサをpushする方法が考えられるけど、これなら見つかり次第アキュムレータ末尾再帰かthrow 'top/catchで帰れる
外れノードから戻る時にアクセサをpopするコストも負うけど…
とりあえず効率は無視して、外れノードから一段降りる時にアクセサをpopするのではなく、returnを積んでしまえば、探索のログとしてデバッグに役立ちそう
car cdrに加え、returnまで合成した関数がちゃんとsetfableかまではちょっと自信がない
964デフォルトの名無しさん
2021/05/28(金) 23:54:39.92ID:Ti7fgoex 毎回二連投するやつ
965デフォルトの名無しさん
2021/05/29(土) 13:06:29.81ID:/6seeUxq リスト上でreturnと直前の呼び出しを対消滅させて最適化するイメージは湧くが意外と面倒くさそう
returnが連続するケースにカウンタが要る
括弧のパースでよくやるロジックだけど
returnが連続するケースにカウンタが要る
括弧のパースでよくやるロジックだけど
966デフォルトの名無しさん
2021/06/17(木) 12:59:58.49ID:WewK95Ed CommonLispで小さなCLIプログラムを書く
Writing Small CLI Programs in Common Lisp / Steve Losh
https://stevelosh.com/blog/2021/03/small-common-lisp-cli-programs/#s1-requirements
Writing Small CLI Programs in Common Lisp / Steve Losh
https://stevelosh.com/blog/2021/03/small-common-lisp-cli-programs/#s1-requirements
967デフォルトの名無しさん
2021/06/17(木) 21:38:50.24ID:PVkxN2pW >>966
CLISPさいつよ
CLISPさいつよ
968デフォルトの名無しさん
2021/06/22(火) 14:58:15.67ID:9PZ+AdPA 「Common Lisp」って、市販の書籍を読んでも歴史や文法等の事は書いてあっても、
REPLで試せるだけで、コンパイルして実行可能ファイルを作る方法が不明だな。
ネットを調べてもコンパイルして実行ファイルを作成する情報が見つからない。
運良く見つかっても、商用系のコンパイラを使った場合の話だったりする事が多々有る。
REPLで試せるだけで、コンパイルして実行可能ファイルを作る方法が不明だな。
ネットを調べてもコンパイルして実行ファイルを作成する情報が見つからない。
運良く見つかっても、商用系のコンパイラを使った場合の話だったりする事が多々有る。
969デフォルトの名無しさん
2021/06/22(火) 15:10:53.11ID:YfWe7YWP SBCLって有料七日
https://common-lisp.net/project/ecl/
https://stackoverflow.com/questions/11036070/lisp-binary-size
https://stackoverflow.com/questions/913671/are-there-lisp-native-code-compilers
https://stackoverflow.com/questions/14171849/compiling-common-lisp-to-an-executable
https://qiita.com/kedama17/items/6cdbb0e163aafcf8d339
https://takeokunn.xyz/blog/post/common-lisp-generate-executable-file
https://lispcookbook.github.io/cl-cookbook/scripting.html
https://ja.stackoverflow.com/questions/22493
https://common-lisp.net/project/ecl/
https://stackoverflow.com/questions/11036070/lisp-binary-size
https://stackoverflow.com/questions/913671/are-there-lisp-native-code-compilers
https://stackoverflow.com/questions/14171849/compiling-common-lisp-to-an-executable
https://qiita.com/kedama17/items/6cdbb0e163aafcf8d339
https://takeokunn.xyz/blog/post/common-lisp-generate-executable-file
https://lispcookbook.github.io/cl-cookbook/scripting.html
https://ja.stackoverflow.com/questions/22493
970デフォルトの名無しさん
2021/06/22(火) 15:18:09.43ID:HykST2y2 これが間違ったことを書いてツッコミを貰う式問題解決法ですか
971デフォルトの名無しさん
2021/06/22(火) 15:39:51.87ID:pmPJw99A 処理系のマニュアルを見なさい
972デフォルトの名無しさん
2021/06/22(火) 15:45:43.42ID:pmPJw99A 規格で決まってないし、そもそもバイナリに固めて配布する需要がそんなに無い
973デフォルトの名無しさん
2021/06/22(火) 15:53:42.26ID:9PZ+AdPA974デフォルトの名無しさん
2021/06/22(火) 16:00:31.34ID:9PZ+AdPA 解っている人にしか理解不可能な会話をされたら、
新参者はちんぷんかんぷんですね。
新参者はちんぷんかんぷんですね。
975デフォルトの名無しさん
2021/06/22(火) 16:58:54.16ID:r0WButOj SBCLではデフォルトで固めて実行ファイルを作れるが、サイズが最低でも40MBほどになる
SBCLビルド持にオプションを追加すると、圧縮した実行ファイルを作れる
それだと10MB程度になるから、まぁ現実的なサイズかなと
ちなみに圧縮されてても一瞬で起動するからデメリットは全く無い
SBCLビルド持にオプションを追加すると、圧縮した実行ファイルを作れる
それだと10MB程度になるから、まぁ現実的なサイズかなと
ちなみに圧縮されてても一瞬で起動するからデメリットは全く無い
976デフォルトの名無しさん
2021/06/22(火) 17:01:38.90ID:pmPJw99A save-lisp-and-dieはsbcl系だろうか、sb-ext:とかそんなパッケージプレフィックス付いてない?
eclだとsaveinitmemだとかその辺はてんでバラバラ
自分の環境で素早くロードして実行したいのならそれでベストだと思うよ、メモリをダンプしたのをそのまま読み込むだけだから
ただし全部入りだから、ファイルサイズに気を付けてね
eclだとsaveinitmemだとかその辺はてんでバラバラ
自分の環境で素早くロードして実行したいのならそれでベストだと思うよ、メモリをダンプしたのをそのまま読み込むだけだから
ただし全部入りだから、ファイルサイズに気を付けてね
977デフォルトの名無しさん
2021/06/22(火) 22:34:00.44ID:9PZ+AdPA978デフォルトの名無しさん
2021/06/22(火) 22:44:48.17ID:9PZ+AdPA979デフォルトの名無しさん
2021/06/23(水) 00:56:32.49ID:fcCuTY0O Common Lisperの7割以上が使ってると思われるSBCLの実行ファイルの作成に関して、具体的に書いた俺のレスは無視かよw
まともに聞く気が無いならもう来んなよ
まともに聞く気が無いならもう来んなよ
レス数が950を超えています。1000を超えると書き込みができなくなります。
ニュース
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★12 [蚤の市★]
- 中国の渡航自粛要請1カ月 大阪の観光バス予約ゼロ、東北にも波及 [蚤の市★]
- 【神戸】エレベーター「かご」なく男性医師が転落死 大手「三菱電機ビルソリューションズ」の担当者、安全装置切り放置か [ぐれ★]
- 女性天皇「賛成」69%、将来の皇位継承「不安」68%…読売世論調査 [蚤の市★]
- 【群馬】横断歩道を渡っていたNHKアナウンサーが車にはねられ骨折などの重傷 前橋市 [ぐれ★]
- 不倫疑惑の永野芽郁さん、CM削除ドミノの違約金“やはり発生は免れない”可能性 約10億円になる見込み、本人は全額支払う覚悟 [牛丼★]
- 人の弱みを握ると気持ちいいよな?
- 明らかに効いてなくてあしらわれてるのに健気に煽り続けてる人いるじゃん?
- 【悲報】ドイツ人「なんで日本人って自炊するの?出来合の惣菜や冷食食った方が楽でコスパいいやん。そんなんだから低生産性なんだよ [786648259]
- バター醤油ご飯食べてみたらwwwwwwwwwwwwwwww
- 【動画】まんさん、アラジンのジーニーみたいな男にボコボコにされる🧞‍♂ [632966346]
- 底辺テイカー気質Vtuberを破壊する遊びが闇深いと話題に [922647923]
