[#352] ruby 1.1a5 released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
38 messages
1997/09/01
[#353] Re: ruby 1.1a5 released
— keiju@... (石塚圭樹 )
1997/09/01
[#354] Re: ruby 1.1a5 released
— matz@... (Yukihiro Matsumoto)
1997/09/01
まつもと ゆきひろです
[#355] methods [Re: ruby 1.1a5 released]
— keiju@... (石塚圭樹 )
1997/09/01
けいじゅ@日本ラショナルソフトウェアです.
[#356] Re: methods [Re: ruby 1.1a5 released]
— matz@... (Yukihiro Matsumoto)
1997/09/01
まつもと ゆきひろです
[#357] Re: methods [Re: ruby 1.1a5 released]
— keiju@... (Keiju ISHITSUKA)
1997/09/01
けいじゅ@日本ラショナルソフトウェアです.
[#359] Re: methods [Re: ruby 1.1a5 released]
— matz@... (Yukihiro Matsumoto)
1997/09/02
まつもと ゆきひろです
[#363] Re: methods [Re: ruby 1.1a5 released]
— matz@... (Yukihiro Matsumoto)
1997/09/02
まつもと ゆきひろです
[#374] Re: methods [Re: ruby 1.1a5 released]
— matz@... (Yukihiro Matsumoto)
1997/09/02
まつもと ゆきひろです
[#376] Re: methods [Re: ruby 1.1a5 released]
— keiju@... (Keiju ISHITSUKA)
1997/09/02
けいじゅ@日本ラショナルソフトウェアです.
[#382] Re: methods [Re: ruby 1.1a5 released]
— matz@... (Yukihiro Matsumoto)
1997/09/02
まつもと ゆきひろです
[#390] Re: methods [Re: ruby 1.1a5 released]
— keiju@... (Keiju ISHITSUKA)
1997/09/03
けいじゅ@日本ラショナルソフトウェアです.
[#391] Re: methods [Re: ruby 1.1a5 released]
— matz@... (Yukihiro Matsumoto)
1997/09/03
まつもと ゆきひろです
[#405] nesting [methods [Re: ruby 1.1a5 released]]
— keiju@... (石塚圭樹 )
1997/09/04
けいじゅ@日本ラショナルソフトウェアです.
[#406] Re: nesting [methods [Re: ruby 1.1a5 released]]
— matz@... (Yukihiro Matsumoto)
1997/09/04
まつもと ゆきひろです
[#411] Re: nesting [methods [Re: ruby 1.1a5 released]]
— keiju@... (石塚圭樹 )
1997/09/04
けいじゅ@日本ラショナルソフトウェアです.
[#358] defined? — keiju@...
けいじゅ@日本ラショナルソフトウェアです.
7 messages
1997/09/01
[#389] ruby 1.1a6 released — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
6 messages
1997/09/03
[#417] [BUG] *methods — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
6 messages
1997/09/04
[#418] building ext modules — Eiji-usagi-MATSUmoto <ematsu@...>
うさぎです。
7 messages
1997/09/05
[#431] [Q] socket on ruby(mswin32) — Masaki Suketa <suke@...>
助田です。
9 messages
1997/09/09
[#441] How to report a bug — takagi@... (TAKAGI Hiromitsu)
Bus error が出ました。
15 messages
1997/09/09
[#447] Re: How to report a bug
— matz@... (Yukihiro Matsumoto)
1997/09/10
まつもと ゆきひろです
[#461] [Q] ruby-socket(mswin32) — Masaki Suketa <suke@...>
助田です
27 messages
1997/09/11
[#462] Re: [Q] ruby-socket(mswin32)
— matz@... (Yukihiro Matsumoto)
1997/09/11
まつもと ゆきひろです
[#463] Re: [Q] ruby-socket(mswin32)
— Masaki Suketa <suke@...>
1997/09/11
助田です
[#464] Re: [Q] ruby-socket(mswin32)
— matz@... (Yukihiro Matsumoto)
1997/09/11
まつもと ゆきひろです
[#467] Re: [Q] ruby-socket(mswin32)
— WATANABE Hirofumi <watanabe@...>
1997/09/11
わたなべです.
[#468] Re: [Q] ruby-socket(mswin32)
— matz@... (Yukihiro Matsumoto)
1997/09/11
まつもと ゆきひろです
[#469] Re: [Q] ruby-socket(mswin32)
— WATANABE Hirofumi <watanabe@...>
1997/09/11
わたなべです.
[#475] Re: [Q] ruby-socket(mswin32)
— WATANABE Hirofumi <watanabe@...>
1997/09/11
わたなべです.
[#476] Re: [Q] ruby-socket(mswin32)
— Masaki Suketa <suke@...>
1997/09/12
助田です。まとめてレスします。(ちょっと長いです)
[#477] Re: [Q] ruby-socket(mswin32)
— WATANABE Hirofumi <watanabe@...>
1997/09/12
わたなべです.
[#489] [BUG] thread? — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
5 messages
1997/09/16
[#499] parser bug — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
8 messages
1997/09/18
[#501] MethodIndex — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
5 messages
1997/09/18
[#522] Re: Assigne to special variable — "EGUCHI Osamu" <eguchi@...>
えぐち です。
12 messages
1997/09/24
[#571] dbmtest.rb — Masaki Suketa <suke@...>
いまだ ruby(Perl?) のソースコード追っかけてる時間の方が長い
11 messages
1997/09/30
[#572] Re: dbmtest.rb
— WATANABE Hirofumi <watanabe@...>
1997/09/30
わたなべです.
[#573] Re: dbmtest.rb
— matz@... (Yukihiro Matsumoto)
1997/09/30
まつもと ゆきひろです
[#585] Re: optimize (Re: Assigne to special variable) — "EGUCHI Osamu" <eguchi@...>
えぐち です
4 messages
1997/09/30
[#594] BUG?(marshal) — Masaki Suketa <suke@...>
以下のプログラムを実行した時に(3)と(4)で出力結果が違います。
17 messages
1997/09/30
[#595] Re: BUG?(marshal)
— matz@... (Yukihiro Matsumoto)
1997/09/30
まつもと ゆきひろです
[#596] Re: BUG?(marshal)
— WATANABE Hirofumi <watanabe@...>
1997/09/30
わたなべです.
[#601] Re: BUG?(marshal)
— Masaki Suketa <suke@...>
1997/10/01
助田です。
[#602] Re: BUG?(marshal)
— matz@... (Yukihiro Matsumoto)
1997/10/01
まつもと ゆきひろです
[ruby-dev:525] setjmp() or _setjmp()
From:
"EGUCHI Osamu" <eguchi@...>
Date:
1997-09-25 02:15:47 UTC
List:
ruby-dev #525
えぐち です。
ruby では、thread, GC の実装に setjmp()/longjmp() を使っていますが、
BSD系 には、シグナル関係の退去/復元を行なわないバージョンの
_setjmp()/_longjmp()があります。
これを使うと例外処理などが早くなります。
実験しました。
sample/sieve.rb に 10000 を渡した時のプロファイル
===
setjmp()/longjmp() 版(ruby-1.0-970919)
---
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
41.23 16.24 16.24 sigsetjmp
14.86 22.10 5.86 mcount
12.39 26.98 4.88 786631 0.01 0.01 rb_eval
8.45 30.31 3.33 1596951 0.00 0.00 rb_call
5.89 32.63 2.32 786630 0.00 0.00 rb_yield_0
3.10 33.85 1.22 1605729 0.00 0.00 rb_class_of
2.49 34.83 0.98 786630 0.00 0.00 rb_yield
2.18 35.69 0.86 803349 0.00 0.00 rb_type
1.35 36.22 0.53 786630 0.00 0.00 assign
0.91 36.58 0.36 call_trace_func
---
===
_setjmp()/_longjmp() 版
---
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
25.22 5.57 5.57 mcount
18.09 9.57 4.00 786631 0.01 0.01 rb_eval
14.94 12.87 3.30 1596951 0.00 0.00 rb_call
8.28 14.70 1.83 786630 0.00 0.00 rb_yield_0
5.02 15.81 1.11 776631 0.00 0.00 fix_mod
4.66 16.84 1.03 1605729 0.00 0.00 rb_class_of
3.98 17.72 0.88 786630 0.00 0.00 rb_yield
3.26 18.44 0.72 fix_div
2.67 19.03 0.59 803349 0.00 0.00 rb_type
1.58 19.38 0.35 815412 0.00 0.00 _setjmp
---
プラットホームは
SS5/170MHz(TurboSPARC170MHz)
SunOS-4.1.4JLE
gcc-2.7.2.3 -pipe -g -pg -O2 -mv8 です
- FreeBSD-2.2.2 on P54C-Pentium166MHz
- NetBSD-1.2 on microSPARC50MHz
でも同様の傾向でした。
これについて質問ですが。
+ thread(eval.c)/gc(gc.c) を読む限り、レジスタセットの
退去/復元が目的で、シグナル関係についての動作は
期待していないと思うのですが、問題あるでしょうか?
+ linux や SVR4系 に _setjmp() はありますか?
同じように DOS や VMS にもあるでしょうか?
(configure で見るようにしました)
+ sieve.rb のように多重のループからの脱出のフロー制御に
例外を使うことは多いのでしょうか?
(この場合、ことばと違って全然「例外」じゃないんですけど)
+ 速度向上関係のパッチの投稿は歓迎されますか? ^^;
以下そのパッチです。
---
diff -rud ../ruby-1.0-970919/configure ./configure
--- ../ruby-1.0-970919/configure Wed Sep 3 17:32:12 1997
+++ ./configure Sun Sep 21 16:46:58 1997
@@ -2362,7 +2362,7 @@
truncate chsize times utimes fcntl lockf setitimer\
setruid seteuid setreuid setrgid setegid setregid\
setpgrp2 getpgid getgroups getpriority\
- dlopen sigprocmask sigaction
+ dlopen sigprocmask sigaction _setjmp
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:2369: checking for $ac_func" >&5
diff -rud ../ruby-1.0-970919/configure.in ./configure.in
--- ../ruby-1.0-970919/configure.in Wed Sep 3 17:32:12 1997
+++ ./configure.in Sun Sep 21 11:10:54 1997
@@ -76,7 +76,7 @@
truncate chsize times utimes fcntl lockf setitimer\
setruid seteuid setreuid setrgid setegid setregid\
setpgrp2 getpgid getgroups getpriority\
- dlopen sigprocmask sigaction)
+ dlopen sigprocmask sigaction _setjmp)
if test "$ac_cv_func_strftime" = no; then
AC_STRUCT_TIMEZONE
AC_TRY_LINK([],
Only in .: dmyext.o
diff -rud ../ruby-1.0-970919/eval.c ./eval.c
--- ../ruby-1.0-970919/eval.c Tue Sep 16 16:26:01 1997
+++ ./eval.c Sun Sep 21 12:08:20 1997
@@ -26,6 +26,11 @@
char *strrchr();
#endif
+#ifdef HAVE__SETJMP
+#define setjmp(env) _setjmp(env)
+#define longjmp(env,val) _longjmp(env,val)
+#endif
+
extern VALUE cData;
VALUE cProc;
static VALUE proc_call();
Only in ./ext: config.cache
diff -rud ../ruby-1.0-970919/gc.c ./gc.c
--- ../ruby-1.0-970919/gc.c Wed Sep 3 17:32:13 1997
+++ ./gc.c Sun Sep 21 11:13:53 1997
@@ -19,6 +19,11 @@
#include <stdio.h>
#include <setjmp.h>
+#ifdef HAVE__SETJMP
+#define setjmp(env) _setjmp(env)
+#define longjmp(env,val) _longjmp(env,val)
+#endif
+
#ifdef _AIX
#pragma alloca
#endif
Only in .: pi.rb
えぐち