Gauche > Archives > 2017/03/29

2017/02/16 01:25:15 UTCshiro
#
rfc.uriと"uri"が別階層でかぶるのが気になる。(既にutil.*とfile.utilがあるけどそれも気になっているので)。かと言ってio.uriにしちゃうと今度はbinary.ioとかぶるんだよな
2017/02/16 09:49:17 UTCcut-sea
#
階層がノードを共有しない完全なツリーなら不満ないんでしょうがそうはなってないですもんね。
#
ここは多重継承を許す階層表現が望まれる。
2017/02/16 09:59:50 UTCshiro
#
まあ、厳密なセマンティクスはいらなくて、要は人間が思い出しやすければいいだけなんですが。そう考えるとRubyみたいにいきなりトップレベルにopen-uriって置いちゃうのも理にかなってる。
2017/02/19 12:06:02 UTCとおる。
#
C++ のコードが混ざっている状態で拡張モジュールを作りたいときってどうやるのがベストでしょうか? いま Makefile.in で gauche-package compile のオプションに --cc=g++ って書いて、ヘッダファイルとかソースに適当に extern "C" いれたら一応動いたんですが。
2017/02/19 12:09:33 UTCshiro
#
examples/mqueue-cppにC++のサンプルがあります。あまりすっきりはしてないんですが
#
--ccにC++コンパイラ渡すようにするのが今のとこの対応ですね。
2017/02/19 12:16:54 UTCとおる。
#
おお、みてみます!
2017/02/19 12:25:22 UTCとおる。
#
なるほど、SCM_DECL_BEGIN と _END の間に Scm_Init_xxx のプロトタイプ宣言を書いておけば、手で extern "C" を書かなくてもいいんですね。
#
あ、gauche.h みてなっとくしました……。
2017/02/19 12:31:02 UTCshiro
#
少しだけタイプ量が減らせるってだけですが。あとC++コードからの例外は必ずスタブ関数で捕まえてGaucheのエラーに変換する必要があります。READMEに説明があります。
2017/02/19 13:11:05 UTCとおる。
#
おおお、README に知りたいことが全部書いてありました……。
2017/02/20 22:57:01 UTCshiro
#
Rubyのreject!がO(n^2)になってた話。そうなった経緯が興味深い http://accidentallyquadratic.tumblr.com/post/157496054437/ruby-reject Schemeでもcall/ccのせいで副作用を起こす高階関数は扱いが面倒なんだよね
2017/02/26 11:58:43 UTCとおる。
#
practical-scheme.net/gauche/man/ 以下の存在しない URL にアクセスしようとすると無限リダイレクトが発生するようです。例 ttps://practical-scheme.net/gauche/man/xxx/index.html
#
淡い期待を込めて gauche-refj を gauche-devj に変えたらひっかかりました。
#
$ curl -k -D- https://practical-scheme.net/gauche/man/gauche-deve/index.html
HTTP/1.1 302 Moved
Date: Sun, 26 Feb 2017 12:01:19 GMT
Server: Apache/2.4.7 (Ubuntu)
Location: gauche-refe/index.html
Content-Length: 0
2017/03/02 07:44:41 UTCshiro
#
トップにredirectしてるつもりが相対パスだから存在しないlocationになっちゃってるってことか
2017/03/04 01:23:00 UTCshiro
#
直した。
2017/03/07 19:16:31 UTCとおる。
#
まだよく確かめてないんですが、stub にはマクロはかけなかったりします?
#
マクロというかマクロ定義。
2017/03/08 01:46:00 UTCshiro
#
Schemeのマクロは書けません。CiSEマクロは書けます。ただ、今のところCiSEマクロをdefine-cproc等のトップレベルフォームに展開することが出来ないので、そこは手書きする必要が。
#
プリコンパイラに通す*.scmにはdefine-cprocと通常のSchemeトップレベル式を混ぜて書けるので、そっちだったら通常のSchemeマクロからdefine-cprocに展開できたかな?今ちょっと思い出せないんですが。将来的には*.stubというスタブ専用形式は廃止して、*.scmに全部書けるようにする予定です。
2017/03/11 21:25:54 UTCとおる。
#
なるほど。*.scm に全部かけると分かりやすいですねー。
2017/03/25 01:11:29 UTCkaki
#
$ env | grep GAUCHE_KEYWORD_IS_SYMBO
GAUCHE_KEYWORD_IS_SYMBO=1
$ gosh -r7
gosh[r7rs.user]> (import (srfi 35))
gosh[r7rs.user]> (define-condition-type foo &condition foo? (x foo-x))
*** ERROR: unbound variable: :name
Stack Trace:
_______________________________________
  0  :name
        [unknown location]
  1  (make <condition-meta> :name 'foo :supers (list &condition) : ...
        [unknown location]


$ unset GAUCHE_KEYWORD_IS_SYMBOL
$ gosh -r7
gosh[r7rs.user]> (import (srfi 35))
gosh[r7rs.user]> (define-condition-type foo &condition foo? (x foo-x))
*** ERROR: unbound variable: current-module
Stack Trace:
_______________________________________
  0  (current-module)
        [unknown location]
  1  (current-module)
        [unknown location]
  2  (make <condition-meta> :name 'foo :supers (list &condition) : ...
        [unknown location]
#
R7RSスタイルで (import (srfi 35)) すると define-condition-type がエラーになってしまいます。GAUCHE_KEYWORD_IS_SYMBOLによってエラーの内容は変わりますが、importに (gauche base) を足すことで回避できるようです。
2017/03/25 01:19:49 UTCkaki
#
GAUCHE_KEYWORD_IS_SYMBOL=1 で (gauche keyword) だと結局 *** ERROR: unbound variable: current-module です。
#
そういえば、define-classも衛生的じゃなかった気がします。
#
$ gosh -r7
gosh[r7rs.user]> (import (only (gauche base) define-class))
gosh[r7rs.user]> (define-class <bar> () ())
*** ERROR: unbound variable: current-module
2017/03/25 01:36:27 UTCshiro
#
そっか。(1)keywordもrenamingの対象にする必要がある(2)define-classがcurrent-moduleをrenaming無しで挿入してる、の2点かな
2017/03/25 03:33:48 UTCshiro
#
衛生的マクロの不透明感への拒否反応って自分も持ってたけどアドホックな対応を積み重ねたコードがコーナーケースではまるとやっぱり根本的に綺麗な設計にしとかないとだめだよなあってなる。
2017/03/25 05:43:33 UTCshiro
#
直してみました >kaki