[#33567] rational, complex and nuby — Tadayoshi Funaba <tadf@...>

ruby に rational と complex を組みこもうと試していて nuby という派生物

21 messages 2008/02/02

[#33580] Re: cgi.rb再構築案 — "Makoto Kuwata" <kwa@...>

桑田といいます。

17 messages 2008/02/03

[#33611] Solaris で timeout.rb が Segmentation fault する。 — shiiya@...

はじめまして。椎屋と申します。

15 messages 2008/02/06
[#33612] Re: Solaris で timeout.rb が Segmentation fault する。 — Nobuyoshi Nakada <nobu@...> 2008/02/06

なかだです。

[#33613] Re: Solaris で timeout.rb が Segmentation fault する。 — shiiya yoshitaka <shiiya@...> 2008/02/06

椎屋です。反応ありがとうございます。

[#33650] Re: Solaris で timeout.rb が Segmentation fault する。 — Nobuyoshi Nakada <nobu@...> 2008/02/08

なかだです。

[#33652] Re: Solaris で timeout.rb が Segmentation fault する。 — SATOH Fumiyasu <fumiyas@...> 2008/02/08

さとうふみやす @ OSS テクノロジです。

[#33621] EUC-KR <-> UTF-8 transition table — "Park Ji-In" <tisphie@...>

朴 芝印です。

15 messages 2008/02/06

[#33628] encdet.rb — Tanaka Akira <akr@...>

前から考えていたのですが、ファイル先頭の magic comment や

18 messages 2008/02/07

[#33662] rational, complex and mathn — Tadayoshi Funaba <tadf@...>

rational は floor、truncate、ceil、round を定義していません。Numeric

66 messages 2008/02/08
[#33663] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/08

他にも問題、課題はあると思います。すぐに解決できるものと、そうでないも

[#33664] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/08

ひとつ書き忘れました。

[#33707] Re: rational, complex and mathn — Yukihiro Matsumoto <matz@...> 2008/02/12

まつもと ゆきひろです

[#33714] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/12

> 原さんのrationalは導入予定がありますので、この機会にもう一度

[#33727] Re: rational, complex and mathn — Shin-ichiro HARA <sinara@...> 2008/02/13

原です。

[#33761] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/13

> 前にふなばさんと個人的なメールのやりとりで、結局また私がrationalをまと

[#33788] Re: rational, complex and mathn — Shin-ichiro HARA <sinara@...> 2008/02/15

原です。

[#33795] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/15

> > それなりに速くはなるし、単純なところでそれなりに満足していますが、一度、

[#33806] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/16

nurat 0.0.2 を出しました (ついでに nucomp も)。

[#33812] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/16

仕様を確認していきたいと思います。

[#33815] Re: rational, complex and mathn — Yukihiro Matsumoto <matz@...> 2008/02/16

まつもと ゆきひろです

[#33818] Re: rational, complex and mathn — Shin-ichiro HARA <sinara@...> 2008/02/16

原です。

[#33819] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/17

> > new!はRubyで実装しているためにだけ必要なので、Cで実装するな

[#33821] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/17

> Rational() は、1つか2つの引数をとる。

[#33827] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/17

> 実際的に重要な機能が Rational() という名前で固定されるのはクラスの定義

[#33845] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/18

もうあまり手を入れないでおこうと思ったのです、つい手を入れてしまいまし

[#33886] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/21

ちょっと実験してみました。原さんの rational は、かけ算割り算が速いので、

[#33888] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/21

で、考えていたんですが、目的は、最速の rational を作ることではなくて、

[#33903] Re: rational, complex and mathn — Shin-ichiro HARA <sinara@...> 2008/02/22

原です。

[#33905] Re: rational, complex and mathn — "NARUSE, Yui" <naruse@...> 2008/02/22

成瀬です。

[#33908] Re: rational, complex and mathn — Yukihiro Matsumoto <matz@...> 2008/02/22

まつもと ゆきひろです

[#33914] Re: rational, complex and mathn — Tadayoshi Funaba <tadf@...> 2008/02/23

> はい。Complexについても1.9の間に組み込んでよいと思います。

[#33679] bigdecimal — Tadayoshi Funaba <tadf@...>

bigdecimal/math.rb の BigMath は、利用者が include してつかうことを前

23 messages 2008/02/09
[#33680] Re: bigdecimal — Tadayoshi Funaba <tadf@...> 2008/02/09

Integer や Float に比べると、BigDicimal() は、1 や 1.1 を受けつけない、

[#33686] Re: bigdecimal — Tadashi Saito <shiba@...2.accsnet.ne.jp> 2008/02/10

斎藤と申します。

[#33698] Re: bigdecimal — Tadayoshi Funaba <tadf@...> 2008/02/11

> 仮にBigDecimal(1.1)を、(二進小数として)受け付けると、「BigDecimalでは、

[#33705] Re: bigdecimal — Yukihiro Matsumoto <matz@...> 2008/02/12

まつもと ゆきひろです

[#33726] Re: [ruby-cvs:22680] Ruby:r15443 (trunk): * bootstraptest/runner.rb, bootstraptest/test_method.rb, enc/depend, — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

14 messages 2008/02/13
[#33730] Re: [ruby-cvs:22680] Ruby:r15443 (trunk): * bootstraptest/runner.rb, bootstraptest/test_method.rb, enc/depend, — "NARUSE, Yui" <naruse@...> 2008/02/13

成瀬です。

[#33889] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Urabe Shyouhei <shyouhei@...>

卜部です。ちょっとお知恵を拝借したく。

22 messages 2008/02/21
[#33892] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Nobuyoshi Nakada <nobu@...> 2008/02/21

なかだです。

[#33909] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Urabe Shyouhei <shyouhei@...> 2008/02/22

Nobuyoshi Nakada さんは書きました:

[#36081] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — TOYOFUKU Chikanobu <nobu_toyofuku@...> 2008/09/01

豊福です。

[#36085] Re: [ ruby-Bugs-17454 ] irb crash while iterating over all objects — Yukihiro Matsumoto <matz@...> 2008/09/01

まつもと ゆきひろです

[ruby-dev:33702] Re: erb.rb の仕様について

From: "Makoto Kuwata" <kwa@...>
Date: 2008-02-11 15:08:57 UTC
List: ruby-dev #33702
桑田です。


2008/2/11 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>:
> > それでは、Thread を使うかどうかは仕様ではなく、
> > 「safe_level を設定したときにそれがメインプログラムの
> > $SAFE に影響を及ぼさないこと」が仕様だという理解で
> > よろしいでしょうか。
>
> はい。

了解です。


> >
> > なんと、erb.rb の正式な仕様でしたか。了解しました。
> > では :nodoc: は取り除いた方がいいですね。
>
> rdocへのパッチは全て取り込むつもりです。
> ぜひ適切なrdocを送ってください! > みなさん

送ります。
ついでに、ERB#filename の値が ERB#def_module と ERB#def_class に
反映されるように変更しています。
#パッチが壊れたら申し訳ありません。

Index: lib/erb.rb
===================================================================
--- lib/erb.rb	(revision 15382)
+++ lib/erb.rb	(working copy)
@@ -744,19 +744,49 @@
     end
   end

-  def def_method(mod, methodname, fname='(ERB)')  # :nodoc:
+  # Define _methodname_ as instance method of _mod_ from compiled ruby source.
+  #
+  # example:
+  #   filename = 'example.rhtml'   # 'arg1' and 'arg2' are used in
example.rhtml
+  #   erb = ERB.new(File.read(filename))
+  #   erb.def_method(MyClass, 'render(arg1, arg2)', filename)
+  #   print MyClass.new.render('foo', 123)
+  def def_method(mod, methodname, fname='(ERB)')
     mod.module_eval("def #{methodname}\n" + self.src + "\nend\n", fname, 0)
   end

-  def def_module(methodname='erb')  # :nodoc:
+  # Create unnamed module, define _methodname_ as instance method of
it, and return it.
+  #
+  # example:
+  #   filename = 'example.rhtml'   # 'arg1' and 'arg2' are used in
example.rhtml
+  #   erb = ERB.new(File.read(filename))
+  #   erb.filename = filename
+  #   MyModule = erb.def_module('render(arg1, arg2)')
+  #   class MyClass
+  #     include MyModule
+  #   end
+  def def_module(methodname='erb')
     mod = Module.new
-    def_method(mod, methodname)
+    def_method(mod, methodname, @filename || '(ERB)')
     mod
   end

-  def def_class(superklass=Object, methodname='result')  # :nodoc:
+  # Define unnamed class which has _methodname_ as instance method,
and return it.
+  #
+  # example:
+  #   class MyClass_
+  #     def initialize(arg1, arg2)
+  #       @arg1 = arg1;  @arg2 = arg2
+  #     end
+  #   end
+  #   filename = 'example.rhtml'  # @arg1 and @arg2 are used in example.rhtml
+  #   erb = ERB.new(File.read(filename))
+  #   erb.filename = filename
+  #   MyClass = erb.def_class(MyClass_, 'render()')
+  #   print MyClass.new('foo', 123).render()
+  def def_class(superklass=Object, methodname='result')
     cls = Class.new(superklass)
-    def_method(cls, methodname)
+    def_method(cls, methodname, @filename || '(ERB)')
     cls
   end
 end
@@ -810,15 +840,46 @@
 #--
 # ERB::DefMethod
 class ERB
-  module DefMethod  # :nodoc:
+
+  # Utility module to define eRuby script as instance method.
+  #
+  # === Example
+  #
+  # example.rhtml:
+  #   <% for item in @items %>
+  #   <b><%= item %></b>
+  #   <% end %>
+  #
+  # example.rb:
+  #   require 'erb'
+  #   class MyClass
+  #     extend ERB::DefMethod
+  #     def_erb_method('render()', 'example.rhtml')
+  #     def initialize(items)
+  #       @items = items
+  #     end
+  #   end
+  #   print MyClass.new([10,20,30]).render()
+  #
+  # result:
+  #
+  #   <b>10</b>
+  #
+  #   <b>20</b>
+  #
+  #   <b>30</b>
+  #
+  module DefMethod
     public
-    def def_erb_method(methodname, erb)
+    # define _methodname_ as instance method of current module, using
ERB object or eRuby file
+    def def_erb_method(methodname, erb_or_fname)
       if erb.kind_of? String
-	fname = erb
-	File.open(fname) {|f| erb = ERB.new(f.read) }
-	erb.def_method(self, methodname, fname)
+        fname = erb_or_fname
+        erb = ERB.new(File.read(fname))
+        erb.def_method(self, methodname, fname)
       else
-	erb.def_method(self, methodname)
+        erb = erb_or_fname
+        erb.def_method(self, methodname, erb.filename || '(ERB)')
       end
     end
     module_function :def_erb_method
===================================================================



> > これって、非公開としている Compiler オブジェクトが
> > 引数に必要なんですよね。設計としてはあんまりよろしく
> > ないと思いますが、どうでしょうか。
>
> そういうものなのですか。
> compilerに対するセットアップをCompilerに持たせたくなくて
> ERBに配置したんだけどだめでしょうか。
> privateにしてくれ! なら同意します。

private にしてもいいのなら、ぜひそうすることをお勧めします。
今だと RDoc がついているので、どうみても ERB の公式な仕様と
考えられます。


> #「気分的には非公開」といっても実際には公開ですよね。

技術的にはそうですけど、ドキュメントにまで積極的に記載する
必要はないですよね。
コードやドキュメントで「非公開である」と明記するだけで十分
だと思います。そのための :nodoc: です。


> #Rubyなので好きなように実行時に手が入れられます。
> #なので、どこをいじっても誰かが「ぎゃっ」と言うでしょう。

ドキュメントに記載してない機能をいじって「ぎゃっ」となれば、
それはその人の勝手です。
記載してある機能を使っていて「ぎゃっ」となれば、それは
開発者の責任です。


> ERB互換classが書きにくいって話ですか?

いいえ、ERB の仕様を明確にしたいという話です。
今、ERB 用のテストスクリプトを書いていて、RDoc に載っている
機能を網羅しようとしていたので、質問させていただきました。


> 私はerubisをパクってCompilerを改造しようと思ってます。

Erubis は拡張性を重視してわりと複雑なことをしているので、
Compiler の参考にするなら、Erubis に含まれている tiny.rb を
参考にするのが簡単です。
tiny.rb は 50 行程度で eRuby のクラスを実装しています。


> > #そもそも set_eoutvar() は非公開メソッド?
> > #なら :nodoc: つけてほしいです。
> > #丁寧にも RDoc がついているから、ERB の仕様だと
> > #思ってしまいました。
>
> rdocのパッチを募集します!

確認なんですけど、private にしてもよいということなので、
ERB#set_eoutvar() は仕様には含めなくていいんですよね?

Index: lib/erb.rb
===================================================================
--- lib/erb.rb	(revision 15382)
+++ lib/erb.rb	(working copy)
@@ -704,7 +704,7 @@
   # to just use the constructor though, since calling this method requires the
   # setup of an ERB _compiler_ object.
   #
-  def set_eoutvar(compiler, eoutvar = '_erbout')
+  def set_eoutvar(compiler, eoutvar = '_erbout')  # :nodoc:
     compiler.put_cmd = "#{eoutvar}.concat"
     compiler.insert_cmd = "#{eoutvar}.concat"

===================================================================


> 私はeoutvarもsafe_levelも失敗だったと思ってます。
> もっとうまく使い方を誘導するべきでした。

そうなんですか?個人的にはそんなに問題とは思わないんですが。
失敗だとしたら、ERB#compile がなくて ERB#initialize でしか
コンパイルできないことだと思います。
#これって CGI class (cgi.rb) も同じような設計なんですよね。
#CGI#initializeで全部パースするから困る。

>
> Complierは一時的なコンテキストというか処理オブジェクトなので
> eoutver=では手遅れみたいです。

ならやはり Compiler オブジェクトを指定できるように設計した方が
よかったのかなと思います。
これだと、trim_mode と set_eoutvar の機能を ERB class から
Compiler class へ分離でき、すっきりします。

compiler = Compiler.new(:trim=>'>', :eoutvar=>'_erbout)
erb = ERB.new(eruby_src, safe_level, compiler)

ああそうか、これだと Compiler class を公開しないといけないのか。
難しいですね。

じゃあそもそも、ERB#initialize の eoutvar 引数ではダメで、
わざわざ ERB#set_eoutvar() を用意しなければならないような
要求が具体的にどんなことだったのか、気になります。
> _erboutは変数名しか設定できないから
> メソッドにしてフックできるようにした
とありますが、フックして何をしようとしたのでしょうか。
ERB の仕様という話からそれるのでオフトピですけど、もし
差し支えなければ教えてください。

--
makoto kuwata

In This Thread