Gauche:WishListに書かれたもので、対応済みのもの
gauche.logger にある lock-file, unlock-file を汎用的にしたようなモジュールが
あると便利かなと思うのですがいかがでしょうか. --nakamura(2004/07/31 11:10:56 PDT)
with-lock-file
というのが入ります。
Shiro:UnixUser0307のSetu?さんの書き込みより:
Setu?: ここに置いてあるサンプルのコードをコピペして動かしたら、動かないので焦った。
リストを見ても絶対に間違いはなさそうだし、テストするのに行をコメントアウトしたり、print して見たり、最後にこれを見た時には、うちの gauche を疑った(ごめん):.... yearは2004が入っている。 (print (quotient year 4)) .... *** ERROR: unbound variable: printえ?で、これを更に削るの?って削ろうとしたら、マウスで空白を選択しようとした時に、変な物が見えた気がした。そうだったのだ、このリストでは空白が全角の空白だったのでした。サンプルコードが<pre>で囲んでなくて、うまくページに出来なかったので空白を全角にしてごまかしたんじゃないかと思います。
関連して思ったのは、gaucheでの全角空白の扱いを半角の空白と一緒にしたら良いんじゃないかなと思いました。これは、バグか要望に書いた方が良いのかな?-- 2004/08/21 00:34:06 PDT
Shiro(2004/08/21 04:13:57 PDT): なるほど。日本語の全角空白以外にもUnicodeで空白とされている 文字はいくつかあったと思うので、readはそれらを全部whitespaceと見なす、 としてもいいかもしれませんね。全角空白一文字のシンボルとか作られると 大変だし。
gemma(2009/04/10 23:38:51 PDT): ProFTPDが、SIZEコマンドをASCIIモードでは受け付けない仕様になっているので、ftp-set-typeを使いたいです。
koguro(2010/03/05 22:03:29 PST): 現状 <parameter>に対して push! などを使うとエラーになります。問題なければ <parameter>オブジェクトにも (setter object-apply) を定義してほしいです。
gosh> (define a (make-parameter '())) a gosh> (a) () gosh> (push! (a) 1) *** ERROR: invalid application: (#<<parameter> 0x10106fdc0> (1)) gosh> (define-method (setter object-apply) ((obj <parameter>) value) (obj value)) #<generic |setter of object-apply| (1)> gosh> (push! (a) 1) () gosh> (a) (1) gosh> (push! (a) 2) (1) gosh> (a) (2 1)
び(2009/05/20 02:52:50 PDT): 標題の通りです。procの中でport-bufferingにset!するのも不細工なので。
以前にもprovideの引数の話題があがっていましたが、いっそのこと引数を省略できるようにしてしまえないでしょうか? requireしたときの名前を記憶しておいて、引数なしのprovideが現れたら先の名前を使用するようにするというのはどうでしょう。--koguro(2005/11/06 03:17:14 PST)
び(2008/04/21 20:38:57 PDT): socket-shutdown の第2引数(how)を即値で指定するのは間違いやすい(というかわたしは間違えました)ので、SHUT_RD、SHUT_WR、SHUT_RDWRを定義して欲しいです。Posix 1gには含まれているそうです。手許でも、Fedora 8、NetBSD 3.1_STABLE/4.0_STABLE、FreeBSD 7.0R、Mac OS X 10.5 では使えることを確認しました。
tabe(2007/12/17 00:54:53 PST): 多くの要素を含むツリーを渡すと
*** ERROR: too many arguments (284434) to apply Stack Trace: _______________________________________ 0 (srl:sxml->xml result) At line 89 of "./foo.scm" ...
のように apply に渡せる引数の個数の上限に引っかかります。 srl:sxml->xml のなかで呼び出される srl:apply-string-append を変えればいいようです。 (コメントアウトされている Chicken 向けのコードと同じようにする?)
YOKOTA Hiroshi(2007/11/25 13:32:03 PST): 現在の MinGW バイナリは構築時に Cygwin も必要とするなど準備が面倒なのでUnix上にクロスコンパイラを用意してそちらで構築するようにしてみました。
tabe(2007/12/06 21:44:09 PST): RFC 3548 の2.1に書かれているような、エンコードされたデータに 改行を含めないオプションが欲しいです。下は案のパッチです: (コメントアウトしました)
以下、実行例 --hira(2004/05/31 23:50:00 PDT)
(string->regexp "http://www.hoge") ;=> #/http://www.hoge/ (((string->regexp "http://www.hoge") "http://www.hogefuga")) ;=> "http://www.hoge" (regexp->string (string->regexp "http://www.hoge")) ;=> "http://www.hoge" ;((#/http://www.hoge/ "http://www.hogefuga")) ;*** ERROR: unbound variable: /www.hoge/ ((#/http:?/?/www.hoge/ "http://www.hogefuga")) ;=> "http://www.hoge"
gosh> ((#/http:?/?/www.hoge/ "http://wwwXhogefuga")) "http://wwwXhoge"これはやっぱり、 regexp->string に渡す前にある程度自分で エスケープしたいやつをエスケープすべきかと思いますよん。
(read-from-string (write-to-string (string->regexp "http://www.hoge"))) ;=> #/http:/とりあえず、この問題はstring->regexpするときに'/'をエスケープすれば回避できます。 でもこれじゃ使いにくいので、願かけてるというわけです。--hira (2004/06/01 05:00:08 PDT)
2GBを超えるファイルを扱いたいです。
gemma(2006/05/01 22:38:05 PDT)
(パッチ省略)
shinya(2007/05/26 20:04:56 PDT): こんな感じで使えるとうれしいです。
diff -u -r1.294 extlib.stub --- extlib.stub 24 May 2007 09:00:01 -0000 1.294 +++ extlib.stub 27 May 2007 02:56:59 -0000 @@ -1440,6 +1440,17 @@ (define-cproc %tree-map-dump (tm::<tree-map>) (body <void> (Scm_TreeMapDump tm SCM_CUROUT))) +(define-cproc tree-map-get-closest-entries (tm::<tree-map> key) + (body "ScmDictEntry *eq, *lo, *hi;" + "ScmObj eq_pair = SCM_FALSE;" + "ScmObj lo_pair = SCM_FALSE;" + "ScmObj hi_pair = SCM_FALSE;" + "eq = Scm_TreeCoreClosestEntries(SCM_TREE_MAP_CORE(tm), (intptr_t)key, &lo, &hi);" + "if (eq != NULL) eq_pair = Scm_Cons(SCM_DICT_KEY(eq), SCM_DICT_VALUE(eq));" + "if (lo != NULL) lo_pair = Scm_Cons(SCM_DICT_KEY(lo), SCM_DICT_VALUE(lo));" + "if (hi != NULL) hi_pair = Scm_Cons(SCM_DICT_KEY(hi), SCM_DICT_VALUE(hi));" + "SCM_RESULT = Scm_Values3(eq_pair, lo_pair, hi_pair);")) + ;; ;; Modules ;;
Rui(2006/10/23 00:05:30 PDT): サポートしているといい機能です。
<time>が2038年を超える時間を扱えないのは仕様でしょうか? できれば無制限になればうれしいです。。
このパッチ自体は色々と微妙な点があるのですが、とりあえず、この機能自体は欲しいです。
上記のパッチの仕様
問題点
あと、この件とは関係無いですが、corelib.texiに、「direoctry」になってる部分がありました。 nekoie:2007/09/28 08:03:19 PDT
Shiro(2007/09/28 13:01:32 PDT): extern char **environはPOSIXで規定されてるようなので ( http://www.opengroup.org/onlinepubs/007908799/xbd/envvar.html ) 入れましょうか。 Windows上では使えないみたい (_environはあるが、使われなくなったとMSDNにある) なので 別の方法が必要でしょうが、とりあえずunixだけでも。
ところでextern char **environにアクセスする場合のthread safetyってどうなってる んでしょう。environをアクセスしてる最中に他のスレッドがputenv()したらどうなるか ってことです。putenv()自体はMT safeと記されているマニュアルもあるんですが、 これは複数のputenv()が競合してもオッケーってことで、変数への直接アクセスが どうなるのかはわからないですよね? まあ普通に考えればputenvはatomicなポインタ変更で実現されるので、 environをたどってるスレッドが中途半端な状態を見ることはないと思いますが。 (そのかわり、putenvは元の文字列がmallocされたものであったとしてもfree できないわけですね。他のスレッドが参照してるかもしれないから。)
nekoie(2007/09/28 16:38:31 PDT): あ、なるほど、Windowsには無いんですね、うーん。 man clearenvとか見ると、C的にはenvironの直接書き換えも可能なようで、 その場合はthread safetyじゃなさそうですけど、readonlyな使い方をしてる限りでは 確かに大丈夫そうに思えますね。自分も確信がある訳ではないですが……。
というか、このパッチ、environ自体がいきなりNULLだった場合の事を考慮してなかったのに今更気付きました……。すみません。 パッチ修正しました。
Shiro(2007/09/28 17:50:33 PDT): WindowsだとGetEnvironmentStrings()が使えそうです。 どっちかというとCレベルで("key=var" ...) のリストにして、Schemeレベルで keyとvalueの切りだしをやる方がいいかなあ。今変更してるので近いうちにコミットします。
リストをシャッフルする手続き、標準で欲しくないですか? 割と使いたくなることがあって、そのたびに適当にやっつけて書いているんですが、標準であるとうれしいです。
gauche.processのprocess-output->string, process-output->string-listに、 inputやencodingといった引数を渡せるようになるとうれしいです。
「オートロードされるように設定しているけれども、 まだオートロードされていない変数」と同名の変数をdefine-methodで 定義したとき、define-method側でロードしてほしいです。
たとえばgosh起動直後だと、
(define-method expt ((a <string>) (b <string>)) #`",|a|^{,|b|}") (expt "x" "-3") ;; => "x^{-3}" (expt 3 4) ;; => *** ERROR: no applicable method for #<generic expt (1)> with arguments (3 4)
のようになってしまうのをdefine-method内でexptをオートロードして(expt 3 4) が81に評価されるようにしてほしいです。(2004/12/22 03:45:35 PST)
び(2006/09/25 00:27:37 PDT): <hash-table>をインプレースで空にする関数が欲しいです。
tabe(2007/04/30 03:11:50 PDT): ftp の STOU コマンドを使ってリモートにユニークなパスを作成したときに、そのパスを戻り値として取得したいです。
proftpd 1.2.10 や vsftpd 2.0.3 の場合には RFC 1123 に挙げられている書式に従っているの
で、次のパッチを当てるとパスをメッセージから切り出せました。
(同時に、copy-port にキーワード :element-type を渡すと警告されるので外しています。)
Index: lib/rfc/ftp.scm =================================================================== RCS file: /cvsroot/gauche/Gauche/lib/rfc/ftp.scm,v retrieving revision 1.5 diff -c -r1.5 ftp.scm *** lib/rfc/ftp.scm 2 Mar 2007 07:39:10 -0000 1.5 --- lib/rfc/ftp.scm 30 Apr 2007 09:53:19 -0000 *************** *** 34,39 **** --- 34,40 ---- ;; RFC 959 FILE TRANSFER PROTOCOL (FTP) ;; RFC 2428 FTP Extensions for IPv6 and NATs + ;; RFC 1123 Requirements for Internet Hosts -- Application and Support (define-module rfc.ftp (use srfi-1) *************** *** 413,433 **** ;; request server to receive data and send data (define (req&send conn cmdproc port) (ftp-set-type conn) ! (call-with-data-connection conn ! (lambda (get-data-socket) ! (let1 res (cmdproc) ! (if (not (string-prefix? "1" res)) ! (ftp-error res) ! (copy-port port (socket-output-port (get-data-socket)) ! :element-type (case (ftp-transfer-type conn) ! ((ascii) :character) ! ((binary image) :binary) ! (else ! (error "Invalid transfer type:" ! (ftp-transfer-type conn))))))))) ! (let1 res (get-response conn) ! (if (not (string-prefix? "2" res)) ! (ftp-error res) ! res))) (provide "rfc/ftp") --- 414,436 ---- ;; request server to receive data and send data (define (req&send conn cmdproc port) (ftp-set-type conn) ! (let ((dst #f)) ! (call-with-data-connection conn ! (lambda (get-data-socket) ! (let1 res (cmdproc) ! ;; RFC 1123 - 4.1.2.9 STOU Command: RFC-959 Section 4.1.3 ! (rxmatch-case res (#/^1\d\d FILE: (.+)$/ (#f pppp) (set! dst pppp))) ! (if (or dst (string-prefix? "1" res)) ! (copy-port port (socket-output-port (get-data-socket))) ! (ftp-error res))))) ! (let lp ((res (get-response conn))) ! (cond ((string-prefix? "2" res) ! (if dst ! (values res dst) ! res)) ! ((string-prefix? "1" res) ; vsftpd duplicates the 1XX reply for STOU. ! (lp (get-response conn))) ! (else ! (ftp-error res)))))) (provide "rfc/ftp")
kenhys (2007/05/21 19:07:51 PDT) 些細なことですが、configure実行時には、最後に有効オプションとかをまとめて表示するとちょっと親切かと思います。例えば、以下のような具合で。
--- configure.ac.orig 2007-05-22 10:38:33.000000000 +0900 +++ configure.ac 2007-05-22 10:39:27.000000000 +0900 @@ -668,3 +668,12 @@ ext/uvector/Makefile ext/vport/Makefile ) +AC_MSG_RESULT( +[ + version: $GAUCHE_VERSION + multibyte: $GAUCHE_CHAR_ENCODING + slib: $SLIB_DIR + thread: $GAUCHE_THREAD_TYPE +] +) +
び(2007/02/07 01:08:34 PST): Lingrの中で出た話題で、uri-encodeに(uri-encode-stringにも) :escape char-set で強制的にエスケープする文字を指定できるように、そして、uri-encode-stringには、uri-encodeにかける前に変換したい文字エンコーディングを:encoding encode名 で指定できるようにしたいです。
Shiro(2007/02/21 00:41:09 PST): 取り込みました(uri.scm,v 1.19)。パッチは省略。
(2005/10/29 20:13:41 PDT): 無限リストをwriteしようとした時等に発生する無限ループ時に、 固まったプロセスをkillしようとしても、 Gauche側で一旦シグナルをプールしている為か、kill -9以外では終了してくれません。 できれば、無限ループ時にも、たまにシグナル処理してもらえると嬉しいですが、 可能なものなのでしょうか? (WishListに出しておいて何ですが、シグナルハンドラ回りで難しそうな気が、 微妙にしています……) ちなみに、linux-2.6.11+glibc-2.3.3+gcc-3.4.3で構築した、 Gauche-0.8.5[euc-jp,pthreads]を動かしています(環境依存だったらすみません)。
gosh> (rational? 22/7) #t
なのに、
gosh> (denominator 22/7) *** ERROR: integer required, but got: 3.142857142857143 Stack Trace: _______________________________________ 0 (error "integer required, but got:" q) At line 94 of "/usr/local/share/gauche/0.8.3/lib/gauche/numerical.scm"
というのは惜しい気がする(2005/01/23 18:09:21 PST)
び(2006/03/26 06:43:32 PST): CVS HEAD でmake-server-socket(s)にbacklogが渡せるようになったので、ついでと言ってはなんですがSOMAXCONNも欲しいです。
び(2006/02/24 19:23:17 PST): マルチスレッド版Kahuaの問題を追っていて思ったのですが、make-server-socket(s)に、backlogを渡したいことがあります。
Index: ext/net/netaux.scm =================================================================== RCS file: /cvsroot/gauche/Gauche/ext/net/netaux.scm,v retrieving revision 1.2 diff -u -r1.2 netaux.scm --- ext/net/netaux.scm 11 Sep 2005 23:50:02 -0000 1.2 +++ ext/net/netaux.scm 25 Feb 2006 03:15:12 -0000 @@ -112,7 +112,7 @@ (let-optionals* args ((path #f)) (unless (string? path) (error "unix socket requires pathname, but got" path)) - (make-server-socket-unix path))) + (apply make-server-socket-unix path (cdr args)))) ((eq? proto 'inet) (let-optionals* args ((port #f)) (unless (or (integer? port) (string? port)) @@ -129,20 +129,22 @@ (define (make-server-socket-from-addr addr . args) (let-keywords* args ((reuse-addr? #f) - (sock-init #f)) + (sock-init #f) + (backlog 5)) (let1 socket (make-socket (address->protocol-family addr) |SOCK_STREAM|) (when (procedure? sock-init) (sock-init socket addr)) (when reuse-addr? (socket-setsockopt socket |SOL_SOCKET| |SO_REUSEADDR| 1)) (socket-bind socket addr) - (socket-listen socket 5)))) + (socket-listen socket backlog)))) -(define (make-server-socket-unix path) - (let ((address (make <sockaddr-un> :path path)) +(define (make-server-socket-unix path . args) + (let ((backlog (get-keyword :backlog args 5)) + (address (make <sockaddr-un> :path path)) (socket (make-socket |PF_UNIX| |SOCK_STREAM|))) (socket-bind socket address) - (socket-listen socket 5))) + (socket-listen socket backlog))) (define (make-server-socket-inet port . args) (let1 addr (car (make-sockaddrs #f port))
旧DBI APIを使ったアプリケーションで、"'"を"?'"にエスケープしたSQL文を dbi-execute-queryに渡したらsql-tokenize段階でパースエラーになりました。
dbi-execute-query内部で呼んでいるdbi-doに'(:pass-through #t)オプションを付けて sql-tokenizeしないようにするのはどうしょうか。
デバッグプリントがデフォルトで65文字で切られるけど、 可変にするとか、全部を表示するタイプのデバッグプリントをサポートしてほしい。 もう少し後ろまでの情報が欲しいときがあるのです。 --cut-sea:2005/12/04 01:53:52 PST
Mingwでコンパイルした場合にドライブレターが認識されません。 単なる記入漏れと思いますので何かの折に修正して頂きたく思います。
--- ./src/main.c Mon Sep 5 21:05:25 2005 +++ ./patch/main.c Sun Nov 6 02:22:59 2005 @@ -327,3 +327,3 @@ scriptfile = argv[optind]; -#ifdef __CYGWIN__ +#if defined(__CYGWIN__) || defined (__MINGW32__) } else if (isalpha(argv[optind][0]) && argv[optind][1] == ':') {
び(2006/01/16 23:23:49 PST): sys-sigmaskの第2引数に#fを渡したら、現状のシグナルマスクを変更せずに取得するようにするためのパッチです。APIとしてはsys-getsigmaskとか別の名前の専用の関数を用意した方がきれいかとも思いましたが、sys-sigmaskがsigprocmask(2)への薄い皮であるという現状を尊重しました。
(define-cproc sys-sigmask (how::<fixnum> mask::<sys-sigset>?) (call "Scm_SysSigmask"))
ドキュメントによるとクラス再定義時のインスタンスの更新は「class-of、is-a?、slot-ref、 slot-set!、ref、getterメソッド、setterメソッド」で行われるとありますが、総称関数の呼び出しでも更新を行って欲しいです。 -- koguro:2005/12/19 07:01:37 PST
gosh> (define-class <foo> () ()) <foo> gosh> (define a (make <foo>)) a gosh> (define-method msg ((obj <foo>)) (print "foo")) #<generic msg (1)> gosh> (msg a) foo #<undef> gosh> (define-class <foo> () ()) <foo> gosh> (msg a) *** ERROR: no applicable method for #<generic msg (1)> with arguments (#<<foo> 0x6f73c0>) Stack Trace: _______________________________________ 0 (msg a) At line 6 of "(stdin)" 1 (msg a) At line 6 of "(stdin)" gosh>
(2005/10/27 19:08:34 PDT): time や char-set などの組み込みクラスも equal? で比較できるとうれしいです。 下の正規表現の中間表現を equal? で比較しようと思ったときに困ります。
正規表現の断片を定義して、それを正規表現に埋め込めないでしょうか。独自の文字クラスを定義して、それを正規表現内で使いたいのですけども。
Shiro(2005/10/26 20:57:53 PDT): このへんは色々やりたいことがあって、基礎となる部分は 作ってあるんですが、ライブラリ化およびドキュメントが間に合ってないのです。 実はこんなAPIが既に用意されています。
gosh> (regexp-parse "abc*(def)+[xyz]*") (0 #\a #\b (rep #\c) (seq #0=(1 #\d #\e #\f) (rep #0#)) (rep #[x-z])) gosh> (regexp-optimize '(0 #\a #\b (rep #\c) (seq #0=(1 #\d #\e #\f) (rep #0#)) (rep #[x-z]))) (0 #\a #\b (rep-while #\c) #0=(1 #\d #\e #\f) (rep #0#) (rep-while #[x-z])) gosh> (regexp-compile '(0 #\a #\b (rep-while #\c) #0=(1 #\d #\e #\f) (rep #0#) (rep-while #[x-z]))) #<regexp 0x98a9b90>
中間表現の仕様についてはregexp.cを読んで下さい。
当方のプランとしてはこの上に
等を載っけてからofficialにするつもりだったんですが、 もしよければこのAPIを使ってハックしてみてください。 多分APIおよび中間表現形式については大きな変更は無いと思います。 最適化のためにもっとノードの種類を増やす可能性はありますが。
srfi-27を使うとき、最初にrandom-source-randomize!を呼ぶのが面倒です。モジュールをuseするときに初期化してよいのでは?
び(2005/09/11 23:55:50 PDT): 仮想バッッファポートは手軽でとても便利なのですが、性能上の理由で内部バッファサイズを大きくしたい場合があります。 buffer-sizeはスロットにすることも考えましたが、嬉しいことはなさそうなのでやめました。
(2005/09/11 03:06:18 PDT) POSIXあたりで定義されているerrnoが定数として用意されていてほしいです。システムコールの失敗を示すerrnoは、Schemeから<system-error>のerrnoスロットで参照できますが、errnoの定数がないとその数値の意味がわからないので。
他のシステムはというと、PerlではErrnoモジュールで定数が提供されています(perldoc Errno)。Pythonではerrnoモジュールが定数を定義しており、errnoから文字列表現を得る辞書もそこで提供されているようです。Rubyではerrnoがそれぞれ別々のクラスになっており、クラスのErrno定数から数値を知ることができます(参考)。
逆引き辞書やクラスは特にいらないと思います。システムインターフェイスとして、はじめからExxx定数が定義されているだけでよいと思います。
(2005/07/31 22:51:11 PDT) ねるWiki:ねる
Shiro: これ自分でも以前引っかかったなあ。とりあえず0.8.4ではlist版のfoldが 組み込みになるので、foldに関してだけはこの問題は起きにくくなると思います。 一般的な名前の衝突問題についてはもっと検討が必要。全部generic functionで 統合しちゃうと、今度は見えて欲しくないものが見えてしまう問題がありそうなんで。
標題の通りなんですが、class-nameの戻り値からclassオブジェクトそのものを得られる関数が欲しいです。 (make (find-class (class-name <time>)))なんてことができるfind-classみたいなやつ。find-moduleみたいな仕様でいいんじゃないかと思います。簡単に実現できるかなーと一瞬思ったんですが、わたしには無理でした。
Shiro (2004/08/24 03:32:11 PDT): クラスが全てdefine-classで定義されていて、 それを定義しているモジュールが分かっていれば、evalを使えば可能です。
(eval '<time> (find-module 'gauche)) ==> #<class <time>>
正確には、定義しているモジュールでなくても、そのクラスの束縛が可視な モジュールが分かればいいので、現在のモジュールでクラスを定義したモジュールを useしているような場合なら(eval class-name (current-module))でも構いません。
CommonLispのfind-classみたいなものを作るには、グローバルに クラス名→クラスオブジェクトのテーブルを持つ必要があります。 つまり、クラス名はクラス名で一つの名前空間を持つことになります。 でも、それはSchemeの、何でも一つの名前空間、という原則と 合わないんですね。
moduleが特別扱いなのは、moduleシステムが名前空間を管理する唯一の 機構として名前空間の上位に位置しているからです。
また、Common Lispではシンボルそのものがパッケージにより分離 できるので、モジュール間でのクラス名の衝突は問題になりません。 が、Gaucheでグローバルにクラス名→クラスオブジェクトのテーブルを 持ってしまうと、クラス名が衝突した場合に困ったことになります。 (現状では、クラス名が衝突していても両方のモジュールをimportしようと しない限り問題にならない)。
び(2004/08/24 06:46:31 PDT): なるほど、やはりevalを使うのですね。ありがとうございます。
Shiro(2005/09/10 17:21:42 PDT): このような「実行時に得られる名前の束縛を 知りたい」というケースは度々あって、それにevalをいちいち持ってくるのも 重いなあと思っていたんで、0.8.6には global-variable-ref という 組み込み関数を入れました。
skimu read-block! が imcomplete string に対応してくれるんでもありかなぁ。
gosh> (use file.util) (#<module file.util> #<module gauche.interactive>) gosh> (make-directory* "foo/bar/") ;; 末尾 "/" 有り *** ERROR: mkdir failed: No such file or directory Stack Trace: _______________________________________ gosh> (make-directory* "foo/bar") ;; 末尾 "/" 無し #t
option を考慮してませんが、こんな風に一旦 dirname/basename に分けてから pathname を再構成して sys-mkdir に渡してってのを使ってたりします。cut-sea:2004/07/24 02:03:53 PDT
(define (make-directory dir) (define (file-writable? path) (sys-access path |W_OK|)) (if (file-exists? dir) (if (file-is-directory? dir) #t (error "non-directory ~s is already exists in directory ~s" (sys-basename dir) dir)) (let ((parent (sys-dirname dir)) (child (sys-basename dir))) (if (file-exists? parent) (if (file-writable? parent) (sys-mkdir (string-append parent "/" child) #o755) (error "directory ~s unwritable during creating a directory ~s" parent dir)) (begin (make-directory parent) (make-directory dir))))))
hira (2004/05/31 19:36:40 PDT): このテストが#tになって欲しいです。
(test* "re equal? test" #t (equal? '(list . #/^(-)( *)(.+)$/) '(list . #/^(-)( *)(.+)$/))) ;test re equal? test, expects #t ==> ERROR: GOT #f
現状では、文字列から生成された正規表現を含むtreeを返す関数のテストができません。
hira: WiLiKiからリファレンスマニュアルを参照しておけば、きっと役に立つ。 そう思うのが人情というもの。 でも、それをやっちゃうとバージョンアップでリンクがアサッテを向いてしまうのです。 まさに諸刃の剣。 何時までたっても変わらないURI、そんなもの有るのだろうか? 有るのかどうか分からないけど、それを願っているという事をここに書いておきます。 #WiLiKi上で運営すると解決するのかしら?
Shiro: これは私も気になってました。texi2html使う限りは 避けられないんで、永続的なuriを吐いてくれる別のツールを使うしかないと 思います。ツールの選択については、
というのが条件です。WiLiKiは1, 2の点が問題。一応、WiLiKiをtext to html なプリプロセッサとして使ってマニュアルを書く実験は始めてはいますが。 生TeXやXMLベースのものは3.が問題。
hira: 私的には1, 2を解決するための努力を気長に重ねたいですね。今、WiKi風DSLに対するめちゃくちゃリッチな字句・構文解析フレームワークを作っているところです。WiKiはhtmlに対するグッドラッパーだったけど、それで収まる器じゃなかろう、という感じで。
Shiro: こんなのどうですか。今のところ関数とマクロにしか対応してませんが。 (Gauche:htmlリファレンスの参照)
fuyuki: なんかいろいろからんでみたい話なんですが、それは置いといて、 とりあえずtexi2htmlの-numberオプションをはずせばいくらかましなのでは。
hira: もう解決かよ!(笑)。GaucheRefj、いい感じですね。リンクを貼りなおす元気が沸いてきました。
安定であることが保証されたsortが欲しいです。いまのGaucheのsortは安定であることが保証されていないので、自分でstable-sortを用意しているのですが、標準であってもいいかなと。名前はstable-sort, static-sortもしくはアルゴリズム名をあらわすmerge-sortなどでもいいかもしれません。
正規表現が最初からobject-apply出来るんだったら、hash-tableも最初からobject-apply出来てもいい気もします。 (慣れると、他のscheme処理系に移行しづらくなるかも知れないけど) -- nekoie (2004/04/25 02:56:21 PDT)
(#/o+/ "foo")みたいになってれば一見で rxmatch だとわかりますが,
(define r #/o+/) ... (r "foo")こっちだとすぐにはわからないかも. 直書きの場合はコード削減になりつつ可読性が低下しない のですが, hash-table のように変数に入っている場合は型が想像しやすい変数名にしないと 後で混乱しちゃいそうな気もしますね. でも慣れたらスラスラいけたりして.
(define get-meta (with-module www.cgi get-meta))
Shiro: んがぐぐ。その通り。gauche-character-encodingは確か charconvを書くずっと前に作ったので、不統一になっていました。
ただ、gauche-character-encodingは文字集合、内部文字エンコーディング、 外部文字エンコーディング(文字列エンコーディング)のセットを 総称するものなので、charconvの扱うエンコーディング名と セマンティクスがちょいと異なるのです (gauche-character-encodingがutf-8の場合、文字集合iso10464、 内部エンコーディングUCS-4、外部エンコーディングUTF-8となります)。 Gaucheの用語もあまり厳密ではないので混乱のもとなのですが。
互換性も考えると、charconv側でgauche-character-encodingの返す シンボルも受けつけるようにしたほうが良いかもしれません。
Shiro: 確かに入出力のportとまぎらわしいですね。何でport.*にしたのかな... かなり初期の段階でつけた名で、その時は何か理由があったと思うのですが、忘れてしまいました。compatの方がよさそうです。幸い、port.*のモジュールはまだ正式にアナウンスしていないので、次のリリースにでも変更します。 (2002/09/27 00:48:12 PDT)