[#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

まつもと ゆきひろです

[#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

まつもと ゆきひろです

[#441] How to report a bug — takagi@... (TAKAGI Hiromitsu)

Bus error が出ました。

15 messages 1997/09/09

[#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

わたなべです.

[#594] BUG?(marshal) — Masaki Suketa <suke@...>

以下のプログラムを実行した時に(3)と(4)で出力結果が違います。

17 messages 1997/09/30

[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

	えぐち

In This Thread

Prev Next