[#15701] Ruby 1.9.0-1 snapshot released — Yukihiro Matsumoto <matz@...>
Hi,
[#15704] Proc#curry doesn't work on func which produces func — Lin Jen-Shin <godfat@...>
Proc#curry doesn't work on function which produces function,
Hi,
>>>>> "Y" == Yusuke ENDOH <mame@tsg.ne.jp> writes:
[#15707] Schedule for the 1.8.7 release — "Akinori MUSHA" <knu@...>
Hi, developers,
On Sat, Mar 01, 2008 at 08:58:00PM +0900, Akinori MUSHA wrote:
Hi,
At Fri, 21 Mar 2008 23:16:54 +0900,
At Mon, 24 Mar 2008 21:39:45 +0900,
[#15709] capitalize and downcase — Trans <transfire@...>
I've always wondered why String#capitalize downcases the whole string
[#15713] Ruby String hash key overflow when converting to Fixnum. — "Chiyuan Zhang" <pluskid@...>
Hi, all! I've opened a issue at rubyforge:
[#15728] Question on build process - skipping unsupported extensions — Daniel Berger <djberg96@...>
Hi,
[#15740] Copy-on-write friendly garbage collector — Hongli Lai <hongli@...99.net>
Hi.
Hi,
Yukihiro Matsumoto wrote:
Yukihiro Matsumoto wrote:
Hi.
Hongli Lai wrote:
Hi.
Hi,
I believe I managed to close the performance gap to only 6% slower than
Daniel DeLorme wrote:
[#15746] Am I misinterpreting the new keyword arguments to IO.foreach and friends? — Dave Thomas <dave@...>
I was expecting this to pass lines to the block:
[#15756] embedding Ruby 1.9.0 inside pthread — "Suraj Kurapati" <sunaku@...>
Hello,
Hi,
Hi,
Yukihiro Matsumoto wrote:
Suraj N. Kurapati wrote:
Hi,
Nobuyoshi Nakada wrote:
Suraj N. Kurapati wrote:
Hongli Lai wrote:
[#15775] next(n), succ(n) ? — Trans <transfire@...>
Can anyone see any reason against adding an optional parameter to
[#15778] Named captures and regular captures — Dave Thomas <dave@...>
It seems that once you have a named capture in a regular expression,
[#15783] Adding startup and shutdown to Test::Unit — Daniel Berger <Daniel.Berger@...>
Hi all,
Daniel Berger wrote:
On Wed, Mar 05, 2008 at 07:52:40AM +0900, Daniel Berger wrote:
[#15835] TimeoutError in core, timeouts for ConditionVariable#wait — MenTaLguY <mental@...>
I've been reworking JRuby's stdlib to improve performance and fix
On Sun, 2008-03-09 at 12:13 +0900, MenTaLguY wrote:
[#15837] Correct procedure for patch review? — Hongli Lai <hongli@...99.net>
Hi.
[#15855] Ruby 1.8.6 trace return line numbers wrong — "Rocky Bernstein" <rocky.bernstein@...>
Consider this program:
[#15860] Webrick directory traversal exploit on UNIX — Jos Backus <jos@...>
DSecRG Advisory #DSECRG-08-026 aka -018 describes a remote directory traversal
[#15871] Sparc architecture optimizations — Thomas Enebo <Thomas.Enebo@...>
Someone at Sun has been looking at Ruby on Sparc:
Thomas Enebo wrote:
Hello Ruby-core,
Hi,
Yukihiro Matsumoto wrote:
Prashant Srinivasan wrote:
[#15880] Ruby 1.8.6 binding value after "if" expression evaluation — "Rocky Bernstein" <rocky.bernstein@...>
Here's another trace hook weirdness that I've encountered.
Hello,
Thanks. The output you report matches what I get in 1.8.6 and suggests where
I think I've found why this is happening. The trace hook for NODE_IF is
[#15907] Range#member? semantics seem wrong — Dave Thomas <dave@...>
Range#member? has been changed so that it the start and end of the
[#15909] RARRAY_PTR — "Laurent Sansonetti" <laurent.sansonetti@...>
Hi,
[#15917] Ruby 1.9 (trunk) crashes when running RubyGems and Rake — Hongli Lai <hongli@...99.net>
Ruby 1.9 (trunk) seems to crash when running the supplied RubyGems and Rake:
Hi,
Nobuyoshi Nakada wrote:
On Mon, Mar 17, 2008 at 06:53:19PM +0900, Hongli Lai wrote:
[#15927] how to create a block with a block parameter in C? — Paul Brannan <pbrannan@...>
This works in Ruby (1.9):
>>>>> "P" == Paul Brannan <pbrannan@atdesk.com> writes:
[#15933] complex and rational — Dave Thomas <dave@...>
Before I start doing the documentation for the PickAxe, could I just
[#15936] Are Depreciated Methods "add_final" & "remove_final" supposed to ACTUALLY WORK? — Charles Thornton <ceo@...>
In Working on IRHG Docs for GC the following
>>>>> "C" == Charles Thornton <ceo@hawthorne-press.com> writes:
ts wrote:
[#15938] Questions on Enumerator#skip_first and Enumerable#first — "Artem Voroztsov" <artem.voroztsov@...>
I asked in ruby-talk, but did not get answer.
On Mar 18, 2008, at 6:20 AM, Artem Voroztsov wrote:
[#15975] Bugs in REXML — "Federico Builes" <federico.builes@...>
Hi,
On Mar 21, 2008, at 17:35, Federico Builes wrote:
[#15980] 1.8.6 memory leak? — "Stephen Sykes" <sdsykes@...>
Hi,
[#15983] Changing the algorithm of String#* — apeiros <apeiros@...>
Hi there
[#15990] Recent changes in Range#step behavior — "Vladimir Sizikov" <vsizikov@...>
Hi,
Hi Dave,
Hi Dave,
Hi,
Hi,
Hi,
On Wed, Mar 26, 2008 at 7:01 PM, Dave Thomas <dave@pragprog.com> wrote:
Dave Thomas wrote:
Dave Thomas wrote:
Dave Thomas wrote:
Dave,
This is all a semantic problem. Different people have different
[#16011] New ERb mode — Marc Haisenko <haisenko@...>
Hi folks,
On Tuesday 25 March 2008, Marc Haisenko wrote:
ERb already does this:
On Tuesday 25 March 2008, Jason Roelofs wrote:
On Tue, Mar 25, 2008 at 11:39 AM, Marc Haisenko <haisenko@comdasys.com> wro=
On Tuesday 25 March 2008, Jason Roelofs wrote:
[#16023] some Enumerable methods slower in 1.9 on OS X after revision 15124 — Chris Shea <cmshea@...>
All,
Hi,
Hi,
On Thu, Mar 27, 2008 at 02:26:51PM +0900, Nobuyoshi Nakada wrote:
Hi,
Nobuyoshi Nakada wrote:
Hi,
[#16057] About the license of gserver.rb being "freeware"? — "XiaoLiang Liu" <liuxlsh@...>
Hello everyone,
[#16088] command_call in parse.y — Adrian Thurston <thurston@...>
Hi,
Re: some Enumerable methods slower in 1.9 on OS X after revision 15124
Hi,
At Thu, 27 Mar 2008 05:20:57 +0900,
Yukihiro Matsumoto wrote in [ruby-core:16037]:
> |I just wanted to make sure core had seen this blog post (with comments
> |narrowing down the scope) about #inject, #each, and #times (at least)
> |being slower on OS X (http://antoniocangiano.com/2008/03/25/inject-
> |each-and-times-methods-much-slower-in-ruby-19/). I believe I'm correct
> |in finding that revision 15124 is when those methods went from faster
> |than 1.8.6 to much slower.
>
> It seems that sigsetjmp() is significantly slower on OS X. I
> contacted Nobu about this issue. I believe he will address soon.
No, r15124 changed to use setjmp instead of _setjmp if
sigsetjmp exists, so sigsetjmp isn't used as well as earlier.
Citing from http://developer.apple.com/documentation/Darwin/Reference/ManPages/man3/setjmp.3.html:
The setjmp()/longjmp() pairs save and restore the signal mask while
_setjmp()/_longjmp() pairs save and restore only the register set and the
stack. (See sigprocmask(2).)
also:
The sigsetjmp()/siglongjmp() function pairs save and restore the signal
mask if the argument savemask is non-zero; otherwise, only the register
set and the stack are saved.
Should the priority be _setjmp > sigsetjmp > setjmp?
Index: trunk/vm_core.h
===================================================================
--- trunk/vm_core.h (revision 15843)
+++ trunk/vm_core.h (working copy)
@@ -347,5 +347,20 @@ enum rb_thread_status {
};
+#if defined(_setjmp) && !defined(HAVE__SETJMP)
+#define HAVE__SETJMP 1
+#endif
+#if defined(sigsetjmp) && !defined(HAVE_SIGSETJMP)
+#define HAVE_SIGSETJMP 1
+#endif
+#if defined(HAVE__SETJMP) || !defined(HAVE_SIGSETJMP)
+#define RUBY_USE_SIGSETJMP 0
+#else
+#define RUBY_USE_SIGSETJMP 1
+#endif
+#if RUBY_USE_SIGSETJMP
+typedef sigjmp_buf rb_jmpbuf_t;
+#else
typedef jmp_buf rb_jmpbuf_t;
+#endif
struct rb_vm_tag {
Index: trunk/gc.c
===================================================================
--- trunk/gc.c (revision 15843)
+++ trunk/gc.c (working copy)
@@ -53,7 +53,6 @@
int rb_io_fptr_finalize(struct rb_io_t*);
-#if !defined(setjmp) && defined(HAVE__SETJMP) && !defined(sigsetjmp) && !defined(HAVE_SIGSETJMP)
-#define setjmp(env) _setjmp(env)
-#endif
+#define rb_setjmp(env) ruby_setjmp(env)
+#define rb_jmp_buf rb_jmpbuf_t
/* Make alloca work the best possible way. */
@@ -1428,4 +1427,6 @@ obj_free(VALUE obj)
#ifdef __GNUC__
#if defined(__human68k__) || defined(DJGPP)
+#undef rb_setjmp
+#undef rb_jmp_buf
#if defined(__human68k__)
typedef unsigned long rb_jmp_buf[8];
@@ -1436,7 +1437,4 @@ _rb_setjmp:\n\
moveq.l #0,d0\n\
rts");
-#ifdef setjmp
-#undef setjmp
-#endif
#else
#if defined(DJGPP)
@@ -1459,6 +1457,4 @@ _rb_setjmp:\n\
#endif
int rb_setjmp (rb_jmp_buf);
-#define jmp_buf rb_jmp_buf
-#define setjmp rb_setjmp
#endif /* __human68k__ or DJGPP */
#endif /* __GNUC__ */
@@ -1471,5 +1467,5 @@ static void
mark_current_machine_context(rb_thread_t *th)
{
- jmp_buf save_regs_gc_mark;
+ rb_jmp_buf save_regs_gc_mark;
VALUE *stack_start, *stack_end;
@@ -1494,5 +1490,5 @@ mark_current_machine_context(rb_thread_t
FLUSH_REGISTER_WINDOWS;
/* This assumes that all registers are saved into the jmp_buf (and stack) */
- setjmp(save_regs_gc_mark);
+ rb_setjmp(save_regs_gc_mark);
mark_locations_array((VALUE*)save_regs_gc_mark,
sizeof(save_regs_gc_mark) / sizeof(VALUE));
Index: trunk/eval_intern.h
===================================================================
--- trunk/eval_intern.h (revision 15843)
+++ trunk/eval_intern.h (working copy)
@@ -82,7 +82,11 @@ char *strrchr(const char *, const char);
#endif
-#if !defined(setjmp) && defined(HAVE__SETJMP) && !defined(sigsetjmp) && !defined(HAVE_SIGSETJMP)
+#if RUBY_USE_SIGSETJMP
+#define ruby_setjmp(env) sigsetjmp((env), 0)
+#define ruby_longjmp(env,val) siglongjmp(env,val)
+#elif defined(_setjmp) || defined(HAVE__SETJMP)
#define ruby_setjmp(env) _setjmp(env)
#define ruby_longjmp(env,val) _longjmp(env,val)
+int _setjmp(), _longjmp();
#else
#define ruby_setjmp(env) setjmp(env)
Index: stable/eval.c
===================================================================
--- stable/eval.c (revision 15843)
+++ stable/eval.c (working copy)
@@ -194,8 +194,13 @@ static int volatile freebsd_clear_carry_
(j)->status)
#else
-# if !defined(setjmp) && defined(HAVE__SETJMP) && !defined(sigsetjmp) && !defined(HAVE_SIGSETJMP)
+# if RUBY_USE_SIGSETJMP
+# define ruby_setjmp(just_before_setjmp, env) \
+ ((just_before_setjmp), sigsetjmp((env), 0))
+# define ruby_longjmp(env,val) siglongjmp(env,val)
+# elif defined(_setjmp) || defined(HAVE__SETJMP)
# define ruby_setjmp(just_before_setjmp, env) \
((just_before_setjmp), _setjmp(env))
# define ruby_longjmp(env,val) _longjmp(env,val)
+int _setjmp(), _longjmp();
# else
# define ruby_setjmp(just_before_setjmp, env) \
Index: stable/gc.c
===================================================================
--- stable/gc.c (revision 15843)
+++ stable/gc.c (working copy)
@@ -38,7 +38,12 @@ void re_free_registers _((struct re_regi
void rb_io_fptr_finalize _((struct OpenFile*));
-#if !defined(setjmp) && defined(HAVE__SETJMP) && !defined(sigsetjmp) && !defined(HAVE_SIGSETJMP)
-#define setjmp(env) _setjmp(env)
+#if RUBY_USE_SIGSETJMP
+#define rb_setjmp(env) sigsetjmp((env), 0)
+#elif defined(_setjmp) || defined(HAVE__SETJMP)
+#define rb_setjmp(env) _setjmp(env)
+#else
+#define rb_setjmp(env) setjmp(env)
#endif
+#define rb_jmp_buf rb_jmpbuf_t
/* Make alloca work the best possible way. */
@@ -1284,4 +1289,6 @@ rb_gc_mark_frame(frame)
#ifdef __GNUC__
#if defined(__human68k__) || defined(DJGPP)
+#undef rb_setjmp
+#undef rb_jmp_buf
#if defined(__human68k__)
typedef unsigned long rb_jmp_buf[8];
@@ -1292,7 +1299,4 @@ _rb_setjmp:\n\
moveq.l #0,d0\n\
rts");
-#ifdef setjmp
-#undef setjmp
-#endif
#else
#if defined(DJGPP)
@@ -1315,6 +1319,4 @@ _rb_setjmp:\n\
#endif
int rb_setjmp (rb_jmp_buf);
-#define jmp_buf rb_jmp_buf
-#define setjmp rb_setjmp
#endif /* __human68k__ or DJGPP */
#endif /* __GNUC__ */
@@ -1365,5 +1367,5 @@ garbage_collect()
FLUSH_REGISTER_WINDOWS;
/* This assumes that all registers are saved into the jmp_buf (and stack) */
- setjmp(save_regs_gc_mark);
+ rb_setjmp(save_regs_gc_mark);
mark_locations_array((VALUE*)save_regs_gc_mark, sizeof(save_regs_gc_mark) / sizeof(VALUE *));
#if STACK_GROW_DIRECTION < 0
Index: stable/node.h
===================================================================
--- stable/node.h (revision 15843)
+++ stable/node.h (working copy)
@@ -388,6 +388,21 @@ typedef struct {
} rb_jmpbuf_t[1];
#else
+#if defined(_setjmp) && !defined(HAVE__SETJMP)
+#define HAVE__SETJMP 1
+#endif
+#if defined(sigsetjmp) && !defined(HAVE_SIGSETJMP)
+#define HAVE_SIGSETJMP 1
+#endif
+#if defined(HAVE__SETJMP) || !defined(HAVE_SIGSETJMP)
+#define RUBY_USE_SIGSETJMP 0
+#else
+#define RUBY_USE_SIGSETJMP 1
+#endif
+#if RUBY_USE_SIGSETJMP
+typedef sigjmp_buf rb_jmpbuf_t;
+#else
typedef jmp_buf rb_jmpbuf_t;
#endif
+#endif
enum rb_thread_status {
--
Nobu Nakada