Schedule for Ruby 1.8.6

 ruby-core を読んでいない人もいると思うので、ここでもアナウンス
しておきます。

 [ruby-core:10019] の通り、1.8.6リリースに向けたスケジュールを
以下のように決めました。

Schedule for 1.8.6: (subject to change dynamically)

2007-02-15 12:00:00 JST
  Declare code freeze

  - The ruby_1_8_6 branch is forked from the ruby_1_8 branch.
    (ruby_1_8 から ruby_1_8_6 ブランチを分岐)

  - The ruby_1_8_6 branch is frozen by birth and every commit on
    the branch must be approved by the release engineer (that's
    me).
    (ruby_1_8_6 ブランチはフリーズされ、コミットは許可が必要)

  (release engineering)

  - The ruby_1_8 branch is not frozen, however, massive changes
    are forbidden for the moment.  This is for every change made
    on the ruby_1_8 branch in this period to be able to get merged
    easily to ruby_1_8_6.
    (ruby_1_8 ブランチはフリーズされないが、 ruby_1_8_6 への
    マージの都合上、大きな変更は控える)

2007-02-17 18:00:00 JST
  Release 1.8.6-pre1

  (release engineering)

2007-02-24 18:00:00 JST
  Release 1.8.6-pre2

  (release engineering)

2007-03-03 18:00:00 JST
  Release 1.8.6
  Lift code freeze

 あと二週間余でコードフリーズなので、もし 1.8.6 までにある程度の
è¦æ¨¡ã®å¤‰æ›´ã‚’äºˆå®šãƒ»å¸Œæœ›ã—ã¦ã„ã‚‹å ´åˆã¯ã€ä»Šã®ã†ã¡ã«äºˆå‘Šãƒ»èª¿æ•´ã‚’ãŠé¡˜ã„
します。また、これは入れるべき、入れてほしいといった指摘や議論も
歓迎します。

 できれば、そうした大きな議論は ruby-core に一元化したいですが、
とりあえず ruby-dev でもいいので積極的に表明してください。

 当然ながら、 1.8 ã®ãƒ–ãƒ©ãƒ³ãƒãƒãƒªã‚·ãƒ¼ã‚’å¿µé ­ã«ãŠã„ã¦è€ƒãˆã¦ãã ã•ã„ã€‚
過激な変更はおそらく受け入れられませんし、新しいライブラリを追åŠ
ã—ãŸã„ã¨ã„ã†å ´åˆã¯ã€æ‰‹é †ã¨ã—ã¦ã¾ãš trunk に入れることが前提になり
ます。

 以上、よろしくお願いします。


/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp

“Different eyes see different things,
Different hearts beat on different strings –
But there are times for you and me when all such things agree”

[email protected]@%$G$9!#e(B

Akinori MUSHA wrote:

e$B!!$"$HFs=54VM>$G%3!<%I%U%j!<%:$J$N$G!"$b$7e(B 1.8.6 e$B$^$G$K$"$kDxEY$Ne(B
e$B5,LO$NJQ99$rM=Dj!&4uK>$7$F$$$k>l9g$O!":#$N$&$A$KM=9p!&[email protected]$r$*4j$$e(B
e$B$7$^$9!#$^$?!"$3$l$OF~$l$k$Y$-!"F~$l$F$[$7$$$H$$$C$?;XE&[email protected]$be(B
e$B4?7^$7$^$9!#e(B

NKF e$B%b%8%e!<%k$re(B nkf 2007-01-28e$BHG$K99?7M=Dj$G$9!#e(B
[email protected]$O0J2<$NDL$j$K$J$j$^$9!#e(B

  • MIME e$B%(%s%3!<%I$5$l$?e(B JIS e$BJ8;zNs$,%G%3!<%[email protected](B
  • e$BA43QH>3Q4V$NJQ49e(B
  • e$B%I%3%b$H%=%U%H%P%s%/$N7HBS3(J8;z$Ne(B SJIS-Unicode
    e$BJQ49$r%5%]!<%He(B
  • CP932e$B!"e(BCP5022xe$B!"e(BeucJP-ms e$B$Ne(B
    e$B%f!<%6Dj5AJ8;z$r%5%]!<%He(B
  • UTF-32 e$B%(%s%3!<%G%#%s%0$He(B BMP e$B$rD6$($?HO0O$N%5%]!<%He(B

[email protected],$^$G$K%3%_%C%HM=Dj$G$9!#e(B

e$B4d7n$H?=$7$^$9!#e(B

e$B:rG/Kv$NOC$G$9$,!“e(B
[ruby-dev:30023] autoloading static linked extension
[email protected]$Oe(BRuby 1.8.6e$B$KH?1G$5$l$^$9$G$7$g$&$+e(B?
[email protected]$5$s$,e(BRuby 1.8e$BMQ:9J,$r=P$7$?$H$3$m$GOC$,;_$^$C$F$$$ke(B
e$B$h$&$K;W$$$^$9$,!”[email protected]$,F~$C$F$/$l$k$He(B
e$B4r$7$$$G$9!#e(B

e$BG/Kv$"$?$j$K<+J,[email protected]$5$s$N%Q%C%A$rEv$F$h$&$H$7$?$N$G$9$,!"e(B

e$B$&$^$/Ev$?$i$J$/$F$=$N$^$^$K$7$F$7$^$$$^$7$?!#e(B

e$B$H$_$?$G$9!#e(B

On Tue, 30 Jan 2007 17:32:02 +0900
“Akinori MUSHA” [email protected] wrote:

e$B!!$"$HFs=54VM>$G%3!<%I%U%j!<%:$J$N$G!"$b$7e(B 1.8.6 e$B$^$G$K$"$kDxEY$Ne(B
e$B5,LO$NJQ99$rM=Dj!&4uK>$7$F$$$k>l9g$O!":#$N$&$A$KM=9p!&[email protected]$r$*4j$$e(B
e$B$7$^$9!#$^$?!"$3$l$OF~$l$k$Y$-!"F~$l$F$[$7$$$H$$$C$?;XE&[email protected]$be(B
e$B4?7^$7$^$9!#e(B

[ruby-dev:30182] e$B$O<h$j9~$s$GM_$7$$$G$9!#e(B

At Thu, 1 Feb 2007 23:45:52 +0900,
e$B$H$_$?$^$5$R$me(B wrote:

On Tue, 30 Jan 2007 17:32:02 +0900
“Akinori MUSHA” [email protected] wrote:

e$B!!$"$HFs=54VM>$G%3!<%I%U%j!<%:$J$N$G!"$b$7e(B 1.8.6 e$B$^$G$K$"$kDxEY$Ne(B
e$B5,LO$NJQ99$rM=Dj!&4uK>$7$F$$$k>l9g$O!":#$N$&$A$KM=9p!&[email protected]$r$*4j$$e(B
e$B$7$^$9!#$^$?!"$3$l$OF~$l$k$Y$-!"F~$l$F$[$7$$$H$$$C$?;XE&[email protected]$be(B
e$B4?7^$7$^$9!#e(B

[ruby-dev:30182] e$B$O<h$j9~$s$GM_$7$$$G$9!#e(B

e$B!!<ALd$G$9$,!“e(B quoted-string
e$B$N=hM}$r$A$c$s$H$d$k$H!”$$$D$b$Ne(B
Shift_JIS e$B$Ne(B2e$B%P%$%HL\LdBj$G$O$^$C$F$7$^$&$N$G$7$g$&$+!#e(B

e$B!!$"$k$$$O!"e(B quote e$B$7$?$H$3$m$G$I$&$;e(B Windows
e$B$G$O%U%!%$%kL>$Ke(B
" e$B$de(B \ e$B$,;H$($J$$$+$i<B:]>e8=$l$J$$$H$$$&H=CG$G$7$g$&$+!#e(B


/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp

“Different eyes see different things,
Different hearts beat on different strings –
But there are times for you and me when all such things agree”

e$BLZB<$G$9!#e(B

e$B?7$?$KEj$2$k$h$j$O$3$3$K$D$1$?$[$&$,NI$$$H;W$$$^$7$?$N$Ge(Breplye$B$Ge(B
e$B%a!<%k$7$^$9!#e(B

e$B$7$?$$$H$$$&>l9g$O!"<j=g$H$7$F$^$:e(B trunk e$B$KF~$l$k$3$H$,A0Ds$K$J$je(B
e$B$^$9!#e(B

e$BL$K$9$k5!2q$OB?$/$O$J$$$b$N$N$A$i$[$i$H8+$+$1$k$b$N$K!“F|K\8lHGe(B
Windowse$B$Ge(BShiftJISe$B$r;H$C$F$$$k$3$H$K5/0x$9$kLdBj$,$”$j$^$9!#e(B

e$B$?$H$($Pe(B
globinge$B$K$*$$$FF|K\8lJ8;zNs$r4^[email protected]%G%#%l%/%H%j$r;HMQ$7$?e(B
e$B>l9g$K!"$=$NF|K\8lJ8;zNs$K%@%aJ8;ze(B(2e$B%P%$%HL$,e(B ‘[’
e$B$H$+e(B ‘{’ e$B$J$I$Ke(B
e$B$J$C$F$$$k$b$Ne(B)e$B$,4^$^$l$F$$$k$H8mF0:n$7$^$9e(B(e$B4|BT$7$?7k2L$,[email protected]$i$l$J$$e(B)e$B!#e(B

e$B$3$l$i$KBP$9$kBP=h$Oe(B2003e$BG/Kv$+$ie(B2004e$BG/$K$+$1$F9T$o$l$^$7$?$,!"e(B
1.9e$B$Ke(B
e$BE,MQ$7$F$_$FMM;R8+$H$$$&$3$H$G%Z%s%G%#%s%0>uBV$K$J$C$F$$$k$H;W$$$^$9!#e(B

[ruby-dev:22071] Dir.glob e$B$He(BShjift_JIS e$B$K$D$$$Fe(B
[ruby-dev:22815] File.fnmatch e$B$,e(B"*?"
e$B$N%Q%?!<%[email protected]$7$/=hM}$7$J$$!)e(B

e$B$+$i;O$^$k0lO"$N%9%l%C%I$,$=$l$K4X78$7$F$$$^$9!#e(B
#e$BB>$K$b$"$k$+$b$7$l$^$;$s$,$H$j$"$($:e(B

e$B$=$3$G<ALd$J$N$G$9$,!"[email protected]$,e(B(1.8.5e$B5Z$Se(B1.8.6e$B$O=|30$9$k$H$7$Fe(B)
1.9.0(1e$B$G$7$?$C$1e(B?)e$B$rBT$?$:$KE,MQ$5$l$k$3$H$O$J$$$N$G$7$g$&$+e(B?
e$BE,MQ$7$J$$$J$i$7$J$$$G9=$$$^$;$s$N$G!"$=$NJU$N%]%j%7!<[email protected]$Ke(B
[email protected]$1$k$H$"$j$,$?$$$G$9!#e(B

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:30283] Re: schedule for Ruby 1.8.6”
on Feb.06,2007 17:54:20, [email protected] wrote:
| e$B$=$3$G<ALd$J$N$G$9$,!"[email protected]$,e(B(1.8.5e$B5Z$Se(B1.8.6e$B$O=|30$9$k$H$7$Fe(B)
| 1.9.0(1e$B$G$7$?$C$1e(B?)e$B$rBT$?$:$KE,MQ$5$l$k$3$H$O$J$$$N$G$7$g$&$+e(B?
| e$BE,MQ$7$J$$$J$i$7$J$$$G9=$$$^$;$s$N$G!"$=$NJU$N%]%j%7!<[email protected]$Ke(B
| [email protected]$1$k$H$"$j$,$?$$$G$9!#e(B

1.8e$BMQ$N%Q%C%A$,MQ0U$G$-$F!“e(Bknue$B$5$s$,[email protected]$($P!”$I$3$+$N%?e(B
e$B%$%_%s%0$GF~$l$k$3$H$O$G$-$k$N$G$O$J$$$G$7$g$&$+!#e(B
e$B$9$k$H$+$7$J$$$H$$$&%]%j%7!<$NLdBj$H$$$&$h$j!"$3$l$K$D$$$F$Oe(B
[email protected]$NLdBj$H;W$C$F$$$^$9!#$D$^$j:#$Ne(B1.8e$B$K$"$?$k%Q%C%A4uK>!#e(B

e$B$=$l$G$O!#e(B

e$BLZB<$G$9!#e(B
e$BH?1~$"$j$,$H$&$4$6$$$^$9!#e(B

On Tue, 6 Feb 2007 18:17:18 +0900
“U.Nakamura” [email protected] wrote:

e$B%$%_%s%0$GF~$l$k$3$H$O$G$-$k$N$G$O$J$$$G$7$g$&$+!#e(B
e$B$9$k$H$+$7$J$$$H$$$&%]%j%7!<$NLdBj$H$$$&$h$j!"$3$l$K$D$$$F$Oe(B
[email protected]$NLdBj$H;W$C$F$$$^$9!#$D$^$j:#$Ne(B1.8e$B$K$"$?$k%Q%C%A4uK>!#e(B

[email protected]$NLdBj$G$"$k$H$$$&$N$Oe(B
knue$B$5$s$bF1$8G’<1$G$"$k$H9M$($FNI$$$Ne(B
e$B$G$7$g$&$+e(B? e$B0lF|BT$A$^$7$?$,e(B
knue$B$5$s$+$i$OH?1~$"$j$^$;$s$G$7$?$Ne(B
e$B$G$I$&$9$Y$-$+H=CG$7$+$M$F$$$^$9!#B>$N%a!<%k$KBP$9$k%j%W%i%$$Oe(B
e$B$"$C$?$N$GL$K$7$F$$$J$$$H$$$&$3$H$O$J$$$H;W$C$?$N$G$9$,!De(B

e$B$H$j$"$($:e(B1.8e$BMQ$N%Q%C%A$K$D$$$F$O;n$7$J$,$i:#:n$j$D$D$"$k$H$3$m$G$9e(B
e$B$,!“e(Bknue$B$5$s$NH=CG$,e(B1.8e$B$K$OF~$l$J$$$h$H$$$&$N$G$”$l$P;_$a$^$9$N$G!“e(B
e$B5^$+$9$h$&$G?=$7Lu$”$j$^$;$s$,e(Bknu
e$B$5$sJV;v$r$h$m$7$/$*4j$$$7$^$9!#e(B

e$B!!F|IU$r8+$k$H:rF|$+$i$NOCBj$G$9$h$M!#e(B2-3e$BF|6u$$$?$J$i$H$b$+$/!“e(B
e$B;[email protected]$,$”$j$^$9$N$G!"e(B24e$B;~4V0JFb$H$$$C$?%l%Y%k$G$NJVEz$Oe(B
e$B4|BT$7$J$$$G$/[email protected]$5$$!#e(B(e$B;~4|$,:9$7Gw$C$F$$$k$N$GEXNO$O$7$^$9e(B)

At Wed, 7 Feb 2007 17:27:54 +0900,
KIMURA Koichi wrote:

On Tue, 6 Feb 2007 18:17:18 +0900
“U.Nakamura” [email protected] wrote:

In message “[ruby-dev:30283] Re: schedule for Ruby 1.8.6”
on Feb.06,2007 17:54:20, [email protected] wrote:
| e$B$=$3$G<ALd$J$N$G$9$,!"[email protected]$,e(B(1.8.5e$B5Z$Se(B1.8.6e$B$O=|30$9$k$H$7$Fe(B)
| 1.9.0(1e$B$G$7$?$C$1e(B?)e$B$rBT$?$:$KE,MQ$5$l$k$3$H$O$J$$$N$G$7$g$&$+e(B?
| e$BE,MQ$7$J$$$J$i$7$J$$$G9=$$$^$;$s$N$G!"$=$NJU$N%]%j%7!<[email protected]$Ke(B
| [email protected]$1$k$H$"$j$,$?$$$G$9!#e(B

e$B!!$=$l$O$9$G$K<($7$?%]%j%7!<$NHOaF$G$9!#e(B

e$B!!e(B1.9.1 e$B$rBT$D$H$$$&J}?K$O$^$C$?$/B8:_$7$^$;$s$7!"e(B ruby_1_8
e$B$Ne(B
e$BB8:_0U5A$O$=$N5U$G$9!#e(B

e$B!!e(B1.9.0 (e$B:#$Ne(B
trunk)e$B$K$J$$$b$N$K$D$$$F$O;d$,8DJL$KH=CG$9$k$3$H$Ke(B
e$B$J$C$F$$$^$9!#e(B

1.8e$BMQ$N%Q%C%A$,MQ0U$G$-$F!“e(Bknue$B$5$s$,[email protected]$($P!”$I$3$+$N%?e(B
e$B%$%_%s%0$GF~$l$k$3$H$O$G$-$k$N$G$O$J$$$G$7$g$&$+!#e(B
e$B$9$k$H$+$7$J$$$H$$$&%]%j%7!<$NLdBj$H$$$&$h$j!"$3$l$K$D$$$F$Oe(B
[email protected]$NLdBj$H;W$C$F$$$^$9!#$D$^$j:#$Ne(B1.8e$B$K$"$?$k%Q%C%A4uK>!#e(B

e$B!!$=$&$G$9$M!#%j%j!<%9%(%s%8%K%"$NN)>l$H$7$F$O!“5!G=$H$7$F$Oe(B
e$B4?7^$G$9!#$b$7<BAu$,$G$-$F!”%j%j!<%9%(%s%8%K%"%j%s%04|4VFb$Ke(B
[email protected]$r3NJ]$G$-$?$ie(BOKe$B$H$$$&%9%?%s%9$G$9!#e(B(e$BBLL$J$iLa$9e(B)

[email protected]$NLdBj$H$$$($P$=$&$+$b$7$l$^$;$s$,!"$$$A$P$s$O3+H/<T$Ne(B
e$B4X?4$+$iO3$l$F$$$?$H$$$&$3$H$G$9!#e(B

e$B!!<ALd$G$J$/MWK>$H$7$F5s$2$l$PC/$+$,[email protected]$O==J,$"$k$7!“e(B
e$BLZB<$5$s$,:n6H$5$l$k$H$J$C$?$i$J$C$?$G%F%9%H$dE::oEy$N6qBNE*$Je(B
e$B<j=u$1$,$”$k$H;W$$$^$9$h!#e(B

[email protected]$NLdBj$G$"$k$H$$$&$N$Oe(B knue$B$5$s$bF1$8G’<1$G$"$k$H9M$($FNI$$$Ne(B
e$B$G$7$g$&$+e(B? e$B0lF|BT$A$^$7$?$,e(B knue$B$5$s$+$i$OH?1~$"$j$^$;$s$G$7$?$Ne(B
e$B$G$I$&$9$Y$-$+H=CG$7$+$M$F$$$^$9!#B>$N%a!<%k$KBP$9$k%j%W%i%$$Oe(B
e$B$"$C$?$N$GL$K$7$F$$$J$$$H$$$&$3$H$O$J$$$H;W$C$?$N$G$9$,!De(B

e$B$H$j$"$($:e(B1.8e$BMQ$N%Q%C%A$K$D$$$F$O;n$7$J$,$i:#:n$j$D$D$"$k$H$3$m$G$9e(B
e$B$,!“e(Bknue$B$5$s$NH=CG$,e(B1.8e$B$K$OF~$l$J$$$h$H$$$&$N$G$”$l$P;_$a$^$9$N$G!“e(B
e$B5^$+$9$h$&$G?=$7Lu$”$j$^$;$s$,e(Bknu e$B$5$sJV;v$r$h$m$7$/$*4j$$$7$^$9!#e(B

e$B!!K\7o$H$OJL$G$9$,!“8D?ME*$Ke(B fnmatch/glob e$B$O0JA0$KCfESH>C<$Ke(B
e$B$$$8$C$F$=$N$^$^$H$$$&A02J$,$”$k$N$G!"$$$:$l2?$H$+$7$?$$$H$Oe(B
e$B;W$C$F$$$^$9!#e(B


/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp

“Different eyes see different things,
Different hearts beat on different strings –
But there are times for you and me when all such things agree”

e$BLZB<$G$9!#e(B
e$B$;$+$7$F$7$^$C$F?=$7Lu$J$$$G$9!#e(B
e$B0J8e$O$b$&>/$7M>M5$r8+$k$h$&$K$7$^$9!#e(B

07/02/07 e$B$Ke(B Akinori MUSHA[email protected]
e$B$5$s$O=q$-$^$7$?e(B:

e$B!!$=$l$O$9$G$K<($7$?%]%j%7!<$NHOaF$G$9!#e(B

1.9.1 e$B$rBT$D$H$$$&J}?K$O$^$C$?$/B8:_$7$^$;$s$7!"e(B ruby_1_8 e$B$Ne(B
e$BB8:_0U5A$O$=$N5U$G$9!#e(B

e$B:FEYe(Bknue$B$5$s$,Ej9F$5$l$?:G6a$N%a!<%k$r8+D>$7$F3NG’$7$^$7$?!#e(B

e$B:#2s$N7o$N>l9g!“e(BWindowse$BHG$K8B$C$F$$$($P4V0c$$$J$/%P%0%U%#%C%/%9$Ne(B
e$BN$K$J$k$H;W$&$N$G$9$,!"$=$NB>$N4D6-$K4X$7$F$OI,$:$7$bI,MW$G$Oe(B e$B$J$$%3!<%I$,F~$j9~$$3$H$K$J$k$N$G!”$I$&$7$?$b$N$+$HG:$s$G$$$?$H$3$me(B
e$B$G$9!#e(B

e$B8=>u$G8=:_$Ne([email protected]$OF~$C$?$H;W$&$N$G$9$,!"e(BShiftJISe$B$Ne(B
e$B%@%aJ8;z$K4X$7$F$O4|BTDL$j>u67$,2~A1$5$l$?$b$N$N!"e(B */
e$B$N$h$&$Je(B
e$B:F5"8!:w$r$9$k%Q%?!<%s$,F0$+$J$/$J$C$F$7$^$C$?$N$G860x$rDI$$$+$1e(B
e$B$F$$$k$H$3$m$G$9!#e(B

[email protected]$NLdBj$H$$$($P$=$&$+$b$7$l$^$;$s$,!"$$$A$P$s$O3+H/<T$Ne(B
e$B4X?4$+$iO3$l$F$$$?$H$$$&$3$H$G$9!#e(B

e$B<ALd$G$J$/MWK>$H$7$F5s$2$l$PC/$+$,[email protected]$O==J,$"$k$7!“e(B
e$BLZB<$5$s$,:n6H$5$l$k$H$J$C$?$i$J$C$?$G%F%9%H$dE::oEy$N6qBNE*$Je(B
e$B<j=u$1$,$”$k$H;W$$$^$9$h!#e(B

e$BN;2r$G$9!#e(B

e$B$o$?$7<+?H$O$3$N7o$N$[$+$K$OMWK>$Oe(B(e$BB?J,e(B)e$B$J$$$N$G$9$,!"e(B1.8.6e$B$Ke(B
e$B6n$19~$_$GF~$l$k$3$H$O$7$J$$$^$G$b!“B>$KMM;R8+$G$H$^$C$F$$$k$N$,e(B
e$B$”$k$+3N$+$a$?J}$,$h$$$+$b$7$l$^$;$s$M!#e(B

e$B<[email protected]$&$He(B # -*- conding: xxxx *-
e$B$bM_$7$$$N$G$9$,!"$3$l$O0JA0$Ke(B
[email protected]$5$s$Ke(B1.8e$B$8$c$=$l$OL5M}$H%@%[email protected]$7$5$l$F$^$9$N$G2~$a$Fe(B
e$BMWK>$r=P$9$3$H$O$7$^$;$s!#e(B

e$B$H$_$?$G$9!#e(B

On Sun, 11 Feb 2007 07:40:06 +0900
“Akinori MUSHA” [email protected] wrote:

Perl e$B$Ne(B CGI.pm e$B$G$b$=$N$^$^JV$7$F$$$k$h$&$G$9!#e(B
e$B$9$$$^$;$s!"8+Mn$H$7$F$^$7$?!#e(B

[ruby-dev:30182]
e$B$NJQ99$O!"!Ve(Bfilename="aaaa;bbbb.txt"e$B!WEy$N;~$K%U%!%$e(B
e$B%kL>$,!Ve(Baaaae$B!W$HG’<1$5$l$F$7$^$&[email protected]$1$G$9!#e(B

unquote e$B$de(B ASCII
e$B0J30$NJ8;z%3!<%[email protected]$7$F$$$^$;$s$G$7$?!#e(B

At Sun, 4 Feb 2007 02:20:27 +0900,
I wrote:

[ruby-dev:30182] e$B$O<h$j9~$s$GM_$7$$$G$9!#e(B

e$B!!<ALd$G$9$,!“e(B quoted-string e$B$N=hM}$r$A$c$s$H$d$k$H!”$$$D$b$Ne(B
Shift_JIS e$B$Ne(B2e$B%P%$%HL\LdBj$G$O$^$C$F$7$^$&$N$G$7$g$&$+!#e(B

e$B!!$"$k$$$O!"e(B quote e$B$7$?$H$3$m$G$I$&$;e(B Windows e$B$G$O%U%!%$%kL>$Ke(B
" e$B$de(B \ e$B$,;H$($J$$$+$i<B:]>e8=$l$J$$$H$$$&H=CG$G$7$g$&$+!#e(B

e$B!!JV;v$,$J$$$N$G?dB,$7$F$_$k$H!"e(B unquote
e$B$d%(%s%3!<%G%#%s%0$Ke(B
e$B1~$8$?=hM}$O<u$1<h$C$?B&$G9M$($k$H$$$&$3$H$G$$$$$s$G$9$+$M!#e(B
Perl e$B$Ne(B CGI.pm e$B$G$b$=$N$^$^JV$7$F$$$k$h$&$G$9!#e(B


/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp

“Different eyes see different things,
Different hearts beat on different strings –
But there are times for you and me when all such things agree”

[email protected]$G$9!#e(B

At Thu, 1 Feb 2007 22:29:55 +0900,
Hiroyuki I. wrote in [ruby-dev:30239]:

e$B:rG/Kv$NOC$G$9$,!“e(B
[ruby-dev:30023] autoloading static linked extension
[email protected]$Oe(BRuby 1.8.6e$B$KH?1G$5$l$^$9$G$7$g$&$+e(B?
[email protected]$5$s$,e(BRuby 1.8e$BMQ:9J,$r=P$7$?$H$3$m$GOC$,;_$^$C$F$$$ke(B
e$B$h$&$K;W$$$^$9$,!”[email protected]$,F~$C$F$/$l$k$He(B
e$B4r$7$$$G$9!#e(B

e$B$&$C$+$j$7$F$k4V$Ke(Bcode
freezee$B$7$F$7$^$$$^$7$?$,!"$3$l$O$I$&$7$^e(B
e$B$7$g$&$+!#$^$!!“2sHr$G$-$J$$$N$Oe(Bdynamic
loadinge$B$N$J$$4D6-$GFCDje(B
e$B$N3HD%%i%$%V%i%j$r;H$$$?$$$H$-$/[email protected]$1$J$N$G!”$b$&!:@Z$J$i$7$ge(B
e$B$&$,$J$$$+$J$H$$$&5$$b$7$^$9$,!#e(B

e$B$A$J$_$K!"0JA0$N%Q%C%A$G$O$A$c$s$He(BLoadErrore$B$,>e$,$C$F$$$J$+$C$?e(B
[email protected]!#e(B

Index: eval.c

— eval.c (revision 11758)
+++ eval.c (working copy)
@@ -6929,5 +6929,14 @@ static st_table *loading_tbl;
#endif

-static char *
+
+static const char *const loadable_ext[] = {

  • “.rb”, DLEXT,
    +#ifdef DLEXT2
  • DLEXT2,
    +#endif
  • 0
    +};

+static int
rb_feature_p(feature, ext, rb)
const char *feature, *ext;
@@ -6935,5 +6944,5 @@ rb_feature_p(feature, ext, rb)
{
VALUE v;

  • char *f, *e;
  • const char *f, *e;
    long i, len, elen;

@@ -6946,18 +6955,38 @@ rb_feature_p(feature, ext, rb)
elen = 0;
}

  • for (i = 0; i < RARRAY(rb_features)->len; ++i) {
  • v = RARRAY(rb_features)->ptr[i];
  • for (i = 0; i < RARRAY_LEN(rb_features); ++i) {
  • v = RARRAY_PTR(rb_features)[i];
    f = StringValuePtr(v);
  • if (strncmp(f, feature, len) != 0) continue;
  • if (RSTRING_LEN(v) < len || strncmp(f, feature, len) != 0)
  •  continue;
    
    if (!*(e = f + len)) {
    if (ext) continue;
  •  return e;
    
  •  return 'u';
    
    }
    if (*e != ‘.’) continue;
    if ((!rb || !ext) && (IS_SOEXT(e) || IS_DLEXT(e))) {
  •  return e;
    
  •  return 's';
    
    }
    if ((rb || !ext) && (strcmp(e, “.rb”) == 0)) {
  •  return e;
    
  •  return 'r';
    
  • }
  • }
  • if (loading_tbl) {
  • if (st_lookup(loading_tbl, (st_data_t)feature, 0)) {
  •  if (ext) return 'u';
    
  •  return strcmp(ext, ".rb") ? 's' : 'r';
    
  • }
  • else {
  •  char *buf;
    
  •  if (ext) return 0;
    
  •  buf = ALLOCA_N(char, len + DLEXT_MAXLEN + 1);
    
  •  strcpy(buf, feature);
    
  •  for (i = 0; (e = loadable_ext[i]) != 0; i++) {
    
  • strncpy(buf + len, e, DLEXT_MAXLEN + 1);
  • if (st_lookup(loading_tbl, (st_data_t)buf, 0)) {
  •    return i ? 's' : 'r';
    
  • }
  •  }
    
    }
    }
    @@ -6965,11 +6994,5 @@ rb_feature_p(feature, ext, rb)
    }

-static const char *const loadable_ext[] = {

  • “.rb”, DLEXT,
    -#ifdef DLEXT2
  • DLEXT2,
    -#endif
  • 0
    -};
    +static int search_required(VALUE, VALUE *, VALUE *);

int
@@ -6977,17 +7000,12 @@ rb_provided(feature)
const char *feature;
{

  • int i;
  • char *buf;
  • VALUE fname, path;

    if (rb_feature_p(feature, 0, Qfalse))
    return Qtrue;

  • if (!loading_tbl) return Qfalse;
  • if (st_lookup(loading_tbl, (st_data_t)feature, 0)) return Qtrue;
  • buf = ALLOCA_N(char, strlen(feature)+8);
  • strcpy(buf, feature);
  • for (i=0; ; i++) {
  • if (!loadable_ext[i]) break;
  • strcpy(buf+strlen(feature), loadable_ext[i]);
  • if (st_lookup(loading_tbl, (st_data_t)buf, 0)) return Qtrue;
  • if (search_required(rb_str_new2(feature), &fname, &path) != 0) {
  • feature = RSTRING_PTR(fname);
  • if (rb_feature_p(feature, strrchr(feature, ‘.’), Qfalse))
  •  return Qtrue;
    
    }
    return Qfalse;
    @@ -7008,17 +7026,39 @@ rb_provide(feature)
    }

-static int
-load_wait(ftptr)

  • char *ftptr;
    +static char *
    +load_lock(ftptr)
  • const char *ftptr;
    {
    st_data_t th;
  • if (!loading_tbl) return Qfalse;
  • if (!st_lookup(loading_tbl, (st_data_t)ftptr, &th)) return Qfalse;
  • if (!loading_tbl ||
  • !st_lookup(loading_tbl, (st_data_t)ftptr, &th))
  • {
  • /* loading ruby library should be serialized. */
  • if (!loading_tbl) {
  •  loading_tbl = st_init_strtable();
    
  • }
  • /* partial state */
  • ftptr = ruby_strdup(ftptr);
  • st_insert(loading_tbl, (st_data_t)ftptr, (st_data_t)curr_thread);
  • return (char *)ftptr;
  • }
    do {
  • if ((rb_thread_t)th == curr_thread) return Qtrue;
  • if ((rb_thread_t)th == curr_thread) return 0;
    CHECK_INTS;
    } while (st_lookup(loading_tbl, (st_data_t)ftptr, &th));
  • return Qtrue;
  • return 0;
    +}

+static void
+load_unlock(const char *ftptr)
+{

  • if (ftptr) {
  • st_data_t key = (st_data_t)ftptr;
  • if (st_delete(loading_tbl, &key, 0)) {
  •  free((char *)key);
    
  • }
  • }
    }

@@ -7062,14 +7102,14 @@ search_required(fname, featurep, path)
*featurep = fname;
*path = 0;

  • ext = strrchr(ftptr = RSTRING(fname)->ptr, ‘.’);
  • ext = strrchr(ftptr = RSTRING_PTR(fname), ‘.’);
    if (ext && !strchr(ext, ‘/’)) {
    if (strcmp(".rb", ext) == 0) {
    if (rb_feature_p(ftptr, ext, Qtrue)) return ‘r’;
  •  if (*path = rb_find_file(fname)) return 'r';
    
  •  if ((*path = rb_find_file(fname)) != 0) return 'r';
     return 0;
    
    }
    else if (IS_SOEXT(ext)) {
    if (rb_feature_p(ftptr, ext, Qfalse)) return ‘s’;
  •  tmp = rb_str_new(RSTRING(fname)->ptr, ext-RSTRING(fname)->ptr);
    
  •  tmp = rb_str_new(RSTRING_PTR(fname), ext-RSTRING_PTR(fname));
     *featurep = tmp;
    

#ifdef DLEXT2
@@ -7090,18 +7130,16 @@ search_required(fname, featurep, path)
else if (IS_DLEXT(ext)) {
if (rb_feature_p(ftptr, ext, Qfalse)) return ‘s’;

  •  if (*path = rb_find_file(fname)) return 's';
    
  •  if ((*path = rb_find_file(fname)) != 0) return 's';
    
    }
    }
    tmp = fname;
  • switch (type = rb_find_file_ext(&tmp, loadable_ext)) {
  • type = rb_find_file_ext(&tmp, loadable_ext);
  • *featurep = tmp;
  • switch (type) {
    case 0:
  • if ((ext = rb_feature_p(ftptr, 0, Qfalse))) {
  •  type = strcmp(".rb", ext);
    
  •  break;
    
  • }
  • return 0;
  • ftptr = RSTRING_PTR(tmp);

  • return rb_feature_p(ftptr, 0, Qfalse);

    default:
    
  • *featurep = tmp;
    ext = strrchr(ftptr = RSTRING(tmp)->ptr, ‘.’);
    if (rb_feature_p(ftptr, ext, !–type)) break;
    @@ -7151,16 +7189,9 @@ rb_require_safe(fname, safe)
    found = search_required(fname, &feature, &path);
    if (found) {
  •  if (!path || load_wait(RSTRING(feature)->ptr)) {
    
  •  if (!path || !(ftptr = load_lock(RSTRING_PTR(feature)))) {
    
    result = Qfalse;
    }
    else {
    ruby_safe_level = 0;
  • /* loading ruby library should be serialized. */
  • if (!loading_tbl) {
  •    loading_tbl = st_init_strtable();
    
  • }
  • /* partial state */
  • ftptr = ruby_strdup(RSTRING_PTR(feature));
  • st_insert(loading_tbl, (st_data_t)ftptr, (st_data_t)curr_thread);
    switch (found) {
    case ‘r’:
    @@ -7189,9 +7220,5 @@ rb_require_safe(fname, safe)
    SCOPE_SET(saved.vmode);
    ruby_safe_level = saved.safe;
  • if (ftptr) {
  • if (st_delete(loading_tbl, (st_data_t )&ftptr, 0)) { / loading done
    */
  •  free(ftptr);
    
  • }
  • }
  • load_unlock(ftptr);
    if (state) JUMP_TAG(state);
    if (NIL_P(result)) {
    @@ -7212,4 +7239,22 @@ rb_require(fname)
    }

+void
+ruby_init_ext(name, init)

  • const char *name;
  • void (*init) _((void));
    +{
  • ruby_current_node = 0;
  • ruby_sourcefile = rb_source_filename(name);
  • ruby_sourceline = 0;
  • ruby_frame->last_func = 0;
  • ruby_frame->orig_func = 0;
  • SCOPE_SET(SCOPE_PUBLIC);
  • if (load_lock(name)) {
  • (*init)();
  • rb_provide(name);
  • load_unlock(name);
  • }
    +}

static void
secure_visibility(self)

At Sat, 17 Feb 2007 10:52:14 +0900,
Nobuyoshi N. wrote:

e$B$7$g$&$+!#$^$!!“2sHr$G$-$J$$$N$Oe(Bdynamic loadinge$B$N$J$$4D6-$GFCDje(B
e$B$N3HD%%i%$%V%i%j$r;H$$$?$$$H$-$/[email protected]$1$J$N$G!”$b$&!:@Z$J$i$7$ge(B
e$B$&$,$J$$$+$J$H$$$&5$$b$7$^$9$,!#e(B

e$B$A$J$_$K!"0JA0$N%Q%C%A$G$O$A$c$s$He(BLoadErrore$B$,>e$,$C$F$$$J$+$C$?e(B
[email protected]!#e(B

e$B!!$9$_$^$;$s!#;d$NJVEzO3$l$G$9$M!#%F%9%H$7$FF~$l$^$9!#e(B


/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp

“Different eyes see different things,
Different hearts beat on different strings –
But there are times for you and me when all such things agree”

e$B4d7n$H?=$7$^$9!#e(B

07/02/17 e$B$Ke(B Nobuyoshi N.[email protected]
e$B$5$s$O=q$-$^$7$?e(B:

e$B$&$C$+$j$7$F$k4V$Ke(Bcode freezee$B$7$F$7$^$$$^$7$?$,!"$3$l$O$I$&$7$^e(B
e$B$7$g$&$+!#$^$!!“2sHr$G$-$J$$$N$Oe(Bdynamic loadinge$B$N$J$$4D6-$GFCDje(B
e$B$N3HD%%i%$%V%i%j$r;H$$$?$$$H$-$/[email protected]$1$J$N$G!”$b$&!:@Z$J$i$7$ge(B
e$B$&$,$J$$$+$J$H$$$&5$$b$7$^$9$,!#e(B

e$BH?1~$,$"$j$^$;$s$G$7$?$N$G$"$-$i$a$F$^$7$?!#e(B
e$B$b$7$3$N$^$^!"$H$$$&$N$G$"$l$Pe(B
e$B<+Bp$N%^%7%s$G$Oe(B Ruby 1.8.6 e$B$O<+A0$Ge(B make e$B$;$:!"e(B
ports e$B$N$b$N$r;H$&$3$H$GLdBj$r2sHr$9$k$D$b$j$G$9!#e(B

e$B?7$7$$:9J,$"$j$,$H$&$4$6$$$^$7$?!#e(B
e$B$N$A$[$I;n$7$^$9!#e(B

At Sat, 17 Feb 2007 17:33:17 +0900,
I wrote:

At Sat, 17 Feb 2007 10:52:14 +0900,
Nobuyoshi N. wrote:

At Thu, 1 Feb 2007 22:29:55 +0900,
Hiroyuki I. wrote in [ruby-dev:30239]:

e$B:rG/Kv$NOC$G$9$,!“e(B
[ruby-dev:30023] autoloading static linked extension
[email protected]$Oe(BRuby 1.8.6e$B$KH?1G$5$l$^$9$G$7$g$&$+e(B?
[email protected]$5$s$,e(BRuby 1.8e$BMQ:9J,$r=P$7$?$H$3$m$GOC$,;_$^$C$F$$$ke(B
e$B$h$&$K;W$$$^$9$,!”[email protected]$,F~$C$F$/$l$k$He(B
e$B4r$7$$$G$9!#e(B

e$B!!Js9p$,8+Ev$?$j$^$;$s$G$7$?!#%F%9%H$7$?7k2L$O$I$&$G$7$?$+!)e(B

e$B!!$H$$$&$+:#$^$??7$7$$%Q%C%A$G%F%9%H$7$F$[$7$$$N$G$9$,!"%S%k%Ie(B
e$B$G$-$J$$$G$9$M!#!Ve(BDLEXT_MAXLENe$B!W$NDj5A$,:9J,$K4^$^$l$F$$$^$;$s!#e(B
e$B$"$H!"A02s$Ne(B ext/extmk.rb [email protected]$O4^$a$F$$$$$s$G$9$h$M!)e(B


/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp

“Different eyes see different things,
Different hearts beat on different strings –
But there are times for you and me when all such things agree”

[email protected]$G$9!#e(B

At Sat, 17 Feb 2007 17:58:59 +0900,
Akinori MUSHA wrote in [ruby-dev:30371]:

e$B!!$H$$$&$+:#$^$??7$7$$%Q%C%A$G%F%9%H$7$F$[$7$$$N$G$9$,!"%S%k%Ie(B
e$B$G$-$J$$$G$9$M!#!Ve(BDLEXT_MAXLENe$B!W$NDj5A$,:9J,$K4^$^$l$F$$$^$;$s!#e(B

e$B$9$$$^$;$s!"K:$l$F$^$7$?!#e(B

e$B$"$H!"A02s$Ne(B ext/extmk.rb [email protected]$O4^$a$F$$$$$s$G$9$h$M!)e(B

e$BF~$l$F$/[email protected]$5$$!#I,MW$G$9!#e(B

Index: configure.in

— configure.in (revision 11768)
+++ configure.in (working copy)
@@ -1145,28 +1145,22 @@ if test “$dln_a_out_works” = yes; then
fi
DLEXT=so

  • AC_DEFINE(DLEXT, “.so”)
    CCDLFLAGS=
    else
    case “$target_os” in
  • hpux*) DLEXT=sl
  • AC_DEFINE(DLEXT, ".sl");;
    
  • nextstep*) DLEXT=bundle
  • AC_DEFINE(DLEXT, ".bundle");;
    
  • openstep*) DLEXT=bundle
  • AC_DEFINE(DLEXT, ".bundle");;
    
  • rhapsody*) DLEXT=bundle
  • AC_DEFINE(DLEXT, ".bundle");;
    
  • darwin*) DLEXT=bundle
  • AC_DEFINE(DLEXT, ".bundle");;
    
  • os2-emx*) DLEXT=dll
  • AC_DEFINE(DLEXT, ".dll");;
    
  • cygwin*|mingw*) DLEXT=so
  • AC_DEFINE(DLEXT, ".so")
    
  • DLEXT2=dll
  • AC_DEFINE(DLEXT2, ".dll");;
    
  • *) DLEXT=so
  •    AC_DEFINE(DLEXT, ".so");;
    
  • hpux*) DLEXT=sl;;
  • nextstep*|openstep*|rhapsody*|darwin*)
  • DLEXT=bundle;;
  • os2-emx*) DLEXT=dll;;
  • cygwin*|mingw*)
  • DLEXT=so DLEXT2=dll;;
  • *) DLEXT=so;;
    esac
    fi
    +len=2 # .rb
    +n=expr "$DLEXT" : '.*'; test “$n” -gt “$len” && len=$n
    +n=expr "$DLEXT2" : '.*'; test “$n” -gt “$len” && len=$n
    +AC_DEFINE_UNQUOTED(DLEXT_MAXLEN, expr $len + 1)
    +test “.$DLEXT” = “.” || AC_DEFINE_UNQUOTED(DLEXT, “.$DLEXT”)
    +test “.$DLEXT2” = “.” || AC_DEFINE_UNQUOTED(DLEXT2, “.$DLEXT2”)

AC_SUBST(STRIP)dnl
Index: defines.h

— defines.h (revision 11768)
+++ defines.h (working copy)
@@ -249,4 +249,8 @@ void rb_ia64_flushrs(void);
#endif

+#ifndef DLEXT_MAXLEN
+#define DLEXT_MAXLEN 4
+#endif
+
#ifndef RUBY_PLATFORM
#define RUBY_PLATFORM “unknown-unknown”

e$B4d7n$H?=$7$^$9!#e(B

e$B!!Js9p$,8+Ev$?$j$^$;$s$G$7$?!#%F%9%H$7$?7k2L$O$I$&$G$7$?$+!)e(B

[ruby-dev:30239]e$B$K$b=q$-$^$7$?$,!":9J,$r$&$^$/$"$F$i$l$J$/$Fe(B
e$B%F%9%H$9$k$H$3$m$^$G$$$1$^$;$s$G$7$?!#e(B

e$B$H$$$&$+:#$^$??7$7$$%Q%C%A$G%F%9%H$7$F$[$7$$$N$G$9$,!"e(B

revision 11768 (e$B8=;[email protected]$G$Ne(B ruby_1_8 e$B$N:G?7HGe(B)e$B$X!"e(B
[ruby-dev:3007]e$B$Ne(Bext/extmk.diffe$B$X$N:9J,!"e(B
[ruby-dev:30366]e$B$Ne(Beval.ce$B$X$N:9J,!"e(B
[ruby-dev:30375]e$B$N:9J,!"0J>e$N$b$N$r0lDL$jE,MQ$7$F!"e(B
make install-nodoce$B!"e(Bmake install-doce$B!“e(Bmake checke$B$,e(B
e$BA4$FDL$k$h$&$K$J$j$^$7$?e(B(e$B0JA0$Oe(Bmake
install-nodoce$B0J30<:GT$7$F$^$7$?e(B)e$B!#e(B
e$B$”$j$,$H$&$4$6$$$^$7$?!#$H$F$b=u$+$j$^$9!#e(B

e$B0J2<$Ne(BURLe$B$K:G=E$J:9J,$r$R$H$^$H$a$K$7$?%U%!%$%k$rMQ0U$7$^$7$?!#e(B
http://moonrock.jp/~don/d/data/ruby-r11768-asle.diff

At Sat, 17 Feb 2007 22:51:37 +0900,
Nobuyoshi N. wrote:

At Sat, 17 Feb 2007 17:58:59 +0900,
Akinori MUSHA wrote in [ruby-dev:30371]:

e$B!!$H$$$&$+:#$^$??7$7$$%Q%C%A$G%F%9%H$7$F$[$7$$$N$G$9$,!"%S%k%Ie(B
e$B$G$-$J$$$G$9$M!#!Ve(BDLEXT_MAXLENe$B!W$NDj5A$,:9J,$K4^$^$l$F$$$^$;$s!#e(B

e$B$9$$$^$;$s!"K:$l$F$^$7$?!#e(B

e$B$"$H!"A02s$Ne(B ext/extmk.rb [email protected]$O4^$a$F$$$$$s$G$9$h$M!)e(B

e$BF~$l$F$/[email protected]$5$$!#I,MW$G$9!#e(B

e$B!!e(Bruby_1_8 e$B$*$h$Se(B ruby_1_8_6 e$B$K%3%_%C%H$7$^$7$?!#e(B
trunk e$B$OBg>fIW$G$7$g$&$+!#e(B


/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp

“Different eyes see different things,
Different hearts beat on different strings –
But there are times for you and me when all such things agree”

[email protected]$G$9!#e(B

At Mon, 19 Feb 2007 18:31:47 +0900,
Akinori MUSHA wrote in [ruby-dev:30386]:

e$B!!e(Bruby_1_8 e$B$*$h$Se(B ruby_1_8_6 e$B$K%3%_%C%H$7$^$7$?!#e(B

e$B$*<j?t$+$1$^$7$?!#e(B

trunk e$B$OBg>fIW$G$7$g$&$+!#e(B

VMe$B2=$H$=$l$K$H$b$J$&e(Bnative
threade$B2=$N$?$a$K!“e(Btrunke$B$He(B1.8e$B$G$O$+$J$j0c$$$,e(B
e$B$”$j$^$9!#e(Bloading_tble$B$re(BVMe$BC10L$K$7$?$j$H$+!“e(Bbarriere$B$re(Bnativee$B$N$b$N$r;H$&$+e(B
e$B<+A0$G<BAu$9$k$+$H$+!”$^[email protected][email protected]$,$$$/$D$+$"$j$^$9!#e(B

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs