[#31320] Import RubyGems to Ruby 1.9 — "NAKAMURA, Hiroshi" <nakahiro@...>
-----BEGIN PGP SIGNED MESSAGE-----
なかだです。
-----BEGIN PGP SIGNED MESSAGE-----
-----BEGIN PGP SIGNED MESSAGE-----
-----BEGIN PGP SIGNED MESSAGE-----
-----BEGIN PGP SIGNED MESSAGE-----
まつもと ゆきひろです
-----BEGIN PGP SIGNED MESSAGE-----
-----BEGIN PGP SIGNED MESSAGE-----
まつもと ゆきひろです
-----BEGIN PGP SIGNED MESSAGE-----
まつもと ゆきひろです
-----BEGIN PGP SIGNED MESSAGE-----
まつもと ゆきひろです
-----BEGIN PGP SIGNED MESSAGE-----
まつもと ゆきひろです
-----BEGIN PGP SIGNED MESSAGE-----
まつもと ゆきひろです
In article <E1Ika5D-0007fc-GG@x31>,
-----BEGIN PGP SIGNED MESSAGE-----
まつもと ゆきひろです
-----BEGIN PGP SIGNED MESSAGE-----
In message <471447D5.5050902@sarion.co.jp>
咳といいます。
Rubygems は、基本的に他のパッケージシステムから包みやすい作り
In message <868x62huhe.knu@iDaemons.org>
At Wed, 17 Oct 2007 22:04:23 +0900,
Tuesday 16 October 2007 14:09:13 に NAKAMURA, Hiroshi さんは書きました:
-----BEGIN PGP SIGNED MESSAGE-----
押田です。
Sunday 21 October 2007 00:17:43 に NAKAMURA, Hiroshi さんは書きました:
> ちなみに「ruby/1.9.1の標準添付からどのライブラリを外すか?」という議論も
-----BEGIN PGP SIGNED MESSAGE-----
-----BEGIN PGP SIGNED MESSAGE-----
ささだです。
-----BEGIN PGP SIGNED MESSAGE-----
まつもと ゆきひろです
-----BEGIN PGP SIGNED MESSAGE-----
> U parsearg, tadf
まつもと ゆきひろです
-----BEGIN PGP SIGNED MESSAGE-----
[#31323] Bignum#to_s の Karatsuba 基数変換による高速化 — "Kenta Murata" <muraken@...>
むらけんです.
まつもと ゆきひろです
むらけんです.
まつもと ゆきひろです
遠藤です。
むらたです.
遠藤です。
むらたです.
[#31333] Invalid error message by illegal regexp — KIMURA Koichi <kimura.koichi@...>
木村です。
[#31351] set_trace_func NULL pointer given — eklerni <eklerni@...>
From:eklerni
[#31357] invalid string for Date.parse — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
> となります。どうも、junではじまっているので6月とみなしている
なかだです。
[#31371] simultaneous exceptions dump core — "Yusuke ENDOH" <mame@...>
遠藤と申します。
ささだです。
遠藤です。
[#31376] Re: [ ruby-Bugs-9490 ] Date module, step method, infinite loop if +step+ is 0 should raise an exception? — Urabe Shyouhei <shyouhei@...>
rubyforgeで表題の件が卜部にassignされてるのですが、どうしましょう。
Date のほうで、合せたらいいというのなら、それでいいと思います。
[#31377] Re: [ ruby-Patches-11719 ] add a :passive option to open-uri's open method — Urabe Shyouhei <shyouhei@...>
rubyforgeで表題の件が卜部にassignされてるのですが、どうしましょう。
In article <46BE0E9B.70309@ruby-lang.org>,
[#31397] File exists - /tmp/bootstraptest.tmpwd — Tanaka Akira <akr@...>
ひとつのマシンで、あるユーザが btest した後、他のユーザが
ささだです。
In article <46C18A65.7030209@atdot.net>,
[#31407] [BUG] Stack consistency error (sp: 11, bp: 12) — Tanaka Akira <akr@...>
以下のようにすると Stack consistency error になります。
[#31448] Ruby's (new) Bizarre Operator(s) — Nobuyoshi Nakada <nobu@...>
なかだです。
まつもと ゆきひろです
バンサンです。
[#31462] Dir.mktmpdir for 1.8 — Tanaka Akira <akr@...>
Dir.mktmpdir を 1.8 に入れたいんですが、どうでしょう?
まつもと ゆきひろです
In article <E1IMCUq-00083X-Uo@x31>,
[#31470] nested fiber invocation — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[#31473] setter of $! — SASADA Koichi <ko1@...>
ささだです。
[#31475] lambda {|(v0,v1),v2|}.call([1],2) — Tanaka Akira <akr@...>
以下の例は ArgumentError になりません。
ささだです。
[#31502] {|(a,a)|} — Tanaka Akira <akr@...>
以下がエラーになりません。
[#31522] a, a = 1, 2 — Tanaka Akira <akr@...>
ふと気がついたんですが、a, a = 1, 2 とすると、1.8 と 1.9 で
こんにちは、なかむら(う)です。
[#31525] いくつかのバグ報告と提案(5点) — eklerni <eklerni@...>
From:eklerni
なかだです。
まつもと ゆきひろです
[#31539] strtod の精度 — Satoshi Nakagawa <snakagawa@...>
中川といいます。
まつもと ゆきひろです
中川です。
中川です。
まつもと ゆきひろです
中川です。
中川です。
まつもと ゆきひろです
In article <EEC70971-AED4-4830-801B-A507561AEDCD@infoteria.co.jp>,
[#31576] test/win32ole — SASADA Koichi <ko1@...>
ささだです.
[#31583] Fiber reviesed — SASADA Koichi <ko1@...>
ささだです.
遠藤です。
ささだです.
遠藤です。
ささだです.
[#31625] IO.sysdup2, IO.sysdup, IO.sysclose — Tanaka Akira <akr@...>
redirect の処理をちょっと書いてみたところ、
まつもと ゆきひろです
In article <E1IOaVr-0001Yu-4H@x31>,
In article <87d4xc97ml.fsf@fsij.org>,
[#31646] Re: [ruby-cvs:20498] Ruby:r13261 (trunk): * encoding.c: provide basic features for M17N. — Tanaka Akira <akr@...>
In article <200708250329.l7P3TjNP004245@ci.ruby-lang.org>,
まつもと ゆきひろです
[#31651] rb_enc_mbclen — Tanaka Akira <akr@...>
rb_enc_mbclen のインターフェースは GB18030 などで困るんじゃ
[ruby-dev:31644] Re: IO.sysdup2, IO.sysdup, IO.sysclose
In article <E1IObRL-0002Ax-0Q@x31>,
Yukihiro Matsumoto <matz@ruby-lang.org> writes:
> sysopen, syscloseをベースにFixnumを使った関数ベースで操作す
> るのと、IO::FDのようなオブジェクトにラップしたものでどちらが
> 使いやすいかは、私には一概に判断できませんが、どうなんでしょ
> うね。Unixプログラミングに慣れていると関数ベースの方が目に優
> しいですが。
なるほど、そうかもしれません。両方作ってみました。
ただ、IO::FD.dup(fd) が dup という名前で引数を要求するのが微
妙に苦しいです。まぁ、クラスを dup する必要はまずないとは思
いますが。
オブジェクトの利点は、file descriptor を整数と区別することで
すかね。file descriptor であるという意図を表現するのに便利で
す。
> 過去に拡張ライブラリを取り込んだ経緯だと、まず手元で動くもの
> を作って実際に使っていただいてから、判断していたように思いま
> す。現時点では標準添付にすべきか、それともgemで提供する程度で
> 十分なのか判断に困ります。
たしかに。
ただ、やりたいことは shell で簡単にできる話なので、そのくら
いは標準でできてほしいと思います。また、このあたりは POSIX
で定義されている範囲ですし。
Index: ext/io/fd/extconf.rb
===================================================================
--- ext/io/fd/extconf.rb (リビジョン 0)
+++ ext/io/fd/extconf.rb (リビジョン 0)
@@ -0,0 +1,3 @@
+require 'mkmf'
+
+create_makefile("io/fd")
Index: ext/io/fd/fd.c
===================================================================
--- ext/io/fd/fd.c (リビジョン 0)
+++ ext/io/fd/fd.c (リビジョン 0)
@@ -0,0 +1,227 @@
+#include "ruby.h"
+#include "rubyio.h"
+#include <unistd.h>
+
+static VALUE FD;
+
+static void
+fd_mark(void *ptr)
+{
+}
+
+static void
+fd_free(void *ptr)
+{
+}
+
+static VALUE
+fd_s_allocate(VALUE klass)
+{
+ return Data_Wrap_Struct(klass, fd_mark, fd_free, (void*)-1);
+}
+
+static VALUE
+fd_new(int fd)
+{
+ VALUE v = fd_s_allocate(FD);
+ DATA_PTR(v) = (void*)fd;
+ return v;
+}
+
+#define IS_FD(obj) (RDATA(obj)->dmark == (RUBY_DATA_FUNC)fd_mark)
+
+static int
+check_fd(VALUE self)
+{
+ Check_Type(self, T_DATA);
+ if (!IS_FD(self)) {
+ rb_raise(rb_eTypeError, "wrong argument type %s (expected IO::FD)",
+ rb_class2name(CLASS_OF(self)));
+ }
+ return (int)DATA_PTR(self);
+}
+
+static int
+get_fd(VALUE v)
+{
+ switch (TYPE(v)) {
+ case T_DATA:
+ return check_fd(v);
+
+ case T_FIXNUM:
+ return FIX2INT(v);
+
+ default:
+ return NUM2INT(rb_to_int(v));
+ }
+}
+
+/*
+ * call-seq: IO::FD.new(fd)
+ *
+ * returns newly created IO::FD object.
+ *
+ * IO::FD.new(1) #=> #<IO::FD:1>
+ */
+
+static VALUE
+fd_initialize(VALUE self, VALUE fd_v)
+{
+ DATA_PTR(self) = get_fd(fd_v);
+ return self;
+}
+
+/*
+ * returns the file descriptor as an integer.
+ *
+ * IO::FD.new(10).to_i #=> 10
+ */
+
+static VALUE
+fd_to_i(VALUE self)
+{
+ return INT2NUM((int)DATA_PTR(self));
+}
+
+static VALUE
+fd_inspect(VALUE self)
+{
+ return rb_sprintf("#<IO::FD:%d>", (int)DATA_PTR(self));
+}
+
+/*
+ * invokes dup system call.
+ * It returns newly created IO::FD object for the duplicated file descriptor.
+ *
+ * IO::FD.new(0).dup #=> #<IO::FD:3>
+ */
+
+static VALUE
+fd_dup(VALUE oldfd_v)
+{
+ int oldfd, ret;
+
+ oldfd = get_fd(oldfd_v);
+ ret = dup(oldfd);
+ if (ret == -1) {
+ rb_sys_fail(0);
+ }
+ return fd_new(ret);
+}
+
+/*
+ * call-seq: IO::FD.dup(fd)
+ *
+ * invokes dup system call.
+ * It returns newly created IO::FD object for the duplicated file descriptor.
+ *
+ * _fd_ should be an IO::FD object or an integer.
+ *
+ * IO::FD.dup(0) #=> #<IO::FD:3>
+ */
+
+static VALUE
+fd_s_dup(VALUE klass, VALUE oldfd_v)
+{
+ return fd_dup(oldfd_v);
+}
+
+/*
+ * call-seq: dup2(newfd)
+ *
+ * invokes dup2 system call.
+ * It returns newly created IO::FD object for the duplicated file descriptor.
+ *
+ * _newfd_ should be an IO::FD object or an integer.
+ *
+ * IO::FD.new(0).dup2(10) #=> #<IO::FD:10>
+ */
+
+static VALUE
+fd_dup2(VALUE oldfd_v, VALUE newfd_v)
+{
+ int oldfd, newfd, ret;
+
+ oldfd = get_fd(oldfd_v);
+ newfd = get_fd(newfd_v);
+ ret = dup2(oldfd, newfd);
+ if (ret == -1) {
+ rb_sys_fail(0);
+ }
+ return fd_new(ret);
+}
+
+/*
+ * call-seq: IO::FD.dup2(oldfd, newfd)
+ *
+ * invokes dup2 system call.
+ * It returns newly created IO::FD object for the duplicated file descriptor.
+ *
+ * _oldfd_ and _newfd_ should be an IO::FD object or an integer.
+ *
+ * IO::FD.new(0).dup2(10) #=> #<IO::FD:10>
+ */
+
+static VALUE
+fd_s_dup2(VALUE klass, VALUE oldfd_v, VALUE newfd_v)
+{
+ return fd_dup2(oldfd_v, newfd_v);
+}
+
+/*
+ * invokes close system call.
+ * It returns nil.
+ *
+ * IO::FD.new(5).close #=> nil
+ */
+
+static VALUE
+fd_close(VALUE fd_v)
+{
+ int fd, ret;
+
+ fd = get_fd(fd_v);
+ ret = close(fd);
+ if (ret == -1) {
+ rb_sys_fail(0);
+ }
+ return Qnil;
+}
+
+/*
+ * call-seq: IO::FD.close(fd)
+ *
+ * invokes close system call.
+ * It returns nil.
+ *
+ * _fd_ should be an IO::FD object or an integer.
+ *
+ * IO::FD.close(5) #=> nil
+ */
+
+static VALUE
+fd_s_close(VALUE klass, VALUE fd_v)
+{
+ return fd_close(fd_v);
+}
+
+/*
+ * IO::FD class
+ */
+
+void
+Init_fd()
+{
+ FD = rb_define_class_under(rb_cIO, "FD", rb_cData);
+ rb_define_alloc_func(FD, fd_s_allocate);
+ rb_define_singleton_method(FD, "dup", fd_s_dup, 1);
+ rb_define_singleton_method(FD, "dup2", fd_s_dup2, 2);
+ rb_define_singleton_method(FD, "close", fd_s_close, 1);
+
+ rb_define_method(FD, "initialize", fd_initialize, 1);
+ rb_define_method(FD, "to_i", fd_to_i, 0);
+ rb_define_method(FD, "inspect", fd_inspect, 0);
+ rb_define_method(FD, "dup", fd_dup, 0);
+ rb_define_method(FD, "dup2", fd_dup2, 1);
+ rb_define_method(FD, "close", fd_close, 0);
+}
--
[田中 哲][たなか あきら][Tanaka Akira]