[#33169] a cool Ruby script. — Yuji Asakawa <namu@...>

21 messages 2002/01/05

[#33229] ruby のインストールがうまくいかない — satoshi SAKAI <gau_sato@...9.dion.ne.jp>

はじめまして。

25 messages 2002/01/08
[#33230] Re: ruby のインストールがうまくいかない — shukaku@... 2002/01/08

At Tue, 8 Jan 2002 19:58:55 +0900,

[#33231] Re: ruby のインストールがうまくいかない — satoshi SAKAI <gau_sato@...9.dion.ne.jp> 2002/01/08

サカイです。

[#33233] Re: ruby のインストールがうまくいかない — nobu.nakada@... 2002/01/08

なかだです。

[#33254] Re: ruby のインストールがうまくいかない — satoshi SAKAI <gau_sato@...9.dion.ne.jp> 2002/01/09

サカイです。

[#33255] Re: ruby のインストールがうまくいかない — rubikitch <rubikitch@...> 2002/01/09

From: satoshi SAKAI <gau_sato@d9.dion.ne.jp>

[#33256] Re: ruby のインストールがうまくいかない — IWAOKA Masahiro <iwaoka@...> 2002/01/09

In the message <20020109102738.TQIO11600.femail11.im.home.ne.jp@witch>,

[#33235] " 差分ベースモジュール " in Ruby — Taku Nakajima <tnakajima@...>

中島@ブレーンです。

30 messages 2002/01/09
[#33238] Re: " 差分ベースモジュール " in Ruby — TADA Tadashi <sho@...> 2002/01/09

ただただしです。

[#33240] Re: " 差分ベースモジュール " in Ruby — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp> 2002/01/09

Toshです。

[#33241] Re: " 差分ベースモジュール " in Ruby — Tanaka Akira <akr@...17n.org> 2002/01/09

In article <A5EF3ECC-04BE-11D6-B67B-003065DC8B1C@yb3.so-net.ne.jp>,

[#33243] Re: " 差分ベースモジュール " in Ruby — Tanaka Akira <akr@...17n.org> 2002/01/09

In article <hvoell014rl.fsf@coulee.a02.aist.go.jp>,

[#33244] Re: " 差分ベースモジュール " in Ruby — matz@... (Yukihiro Matsumoto) 2002/01/09

まつもと ゆきひろです

[#33249] Re: " 差分ベースモジュール " in Ruby — Tanaka Akira <akr@...17n.org> 2002/01/09

In article <1010559765.279084.16212.nullmailer@ev.netlab.jp>,

[#33251] Re: " 差分ベースモジュール " in Ruby — matz@... (Yukihiro Matsumoto) 2002/01/09

まつもと ゆきひろです

[#33252] Re: " 差分ベースモジュール " in Ruby — Tanaka Akira <akr@...17n.org> 2002/01/09

In article <1010566232.053696.16272.nullmailer@ev.netlab.jp>,

[#33346] IPSocket.getaddress — "Sadayuki Sakamoto" <sakacom@...>

酒本です。

16 messages 2002/01/13

[#33416] No such file to load -- dbm — satoshi SAKAI <gau_sato@...9.dion.ne.jp>

サカイと言います。(以前もお世話になりました。)

13 messages 2002/01/17

[#33462] Re: Mysql/Ruby のコンパイル — "井上 浩一" <kyoui32@...>

井上です。

34 messages 2002/01/21
[#33463] Re: Mysql/Ruby のコンパイル — HIDAKA Takahiro <cv8t-hdk@...> 2002/01/21

 ひだかです。

[#33464] Re: Mysql/Ruby のコンパイル — nobu.nakada@... 2002/01/21

なかだです。

[#33465] Re: Mysql/Ruby のコンパイル — HIDAKA Takahiro <cv8t-hdk@...> 2002/01/21

 ひだかです。

[#33466] Re: Mysql/Ruby のコンパイル — nobu.nakada@... 2002/01/21

なかだです。

[#33467] Re: Mysql/Ruby のコンパイル — HIDAKA Takahiro <cv8t-hdk@...> 2002/01/21

 ひだかです。

[#33468] Re: Mysql/Ruby のコンパイル — nobu.nakada@... 2002/01/21

なかだです。

[#33471] Re: Mysql/Ruby のコンパイル — HIDAKA Takahiro <cv8t-hdk@...> 2002/01/22

 ひだかです。

[#33473] Re: Mysql/Ruby のコンパイル — nobu.nakada@... 2002/01/22

なかだです。

[#33474] Re: Mysql/Ruby のコンパイル — HIDAKA Takahiro <cv8t-hdk@...> 2002/01/22

 ひだかです。

[#33486] Re: Mysql/Ruby のコンパイル — "TAMURA.KENICHI" <sgs02516@...> 2002/01/22

たむらです。

[#33487] Re: Mysql/Ruby のコンパイル — nobu.nakada@... 2002/01/22

なかだです。

[#33488] Re: Mysql/Ruby のコンパイル — "TAMURA.KENICHI" <sgs02516@...> 2002/01/22

たむらです。

[#33477] about nest class — sheepman <sheepman@...>

こんにちは

21 messages 2002/01/22
[#33478] Re: about nest class — matz@... (Yukihiro Matsumoto) 2002/01/22

まつもと ゆきひろです

[#33517] [BUG] Can't compile ruby on Solaris2.6 — IWAMURO Motonori <iwa@...>

岩室です。

17 messages 2002/01/25
[#33518] Re: [BUG] Can't compile ruby on Solaris2.6 — matz@... (Yukihiro Matsumoto) 2002/01/25

まつもと ゆきひろです

[#33535] broken symbolic link and File::mtime — Go Nakagawa <nakagawa@...>

中川といいます。

37 messages 2002/01/25
[#33545] Re: broken symbolic link and File::mtime — matz@... (Yukihiro Matsumoto) 2002/01/25

まつもと ゆきひろです

[#33560] Re: broken symbolic link and File::mtime — Takahiro Kambe <taca@...> 2002/01/27

In message <1012002148.661980.9788.nullmailer@ev.netlab.jp>

[#33563] Re: broken symbolic link and File::mtime — Kazuhiro NISHIYAMA <zn@...> 2002/01/27

西山和広です。

[#33564] Re: broken symbolic link and File::mtime — Takahiro Kambe <taca@...> 2002/01/27

In message <20020127213735.2369.ZN@mbf.nifty.com>

[#33575] Re: broken symbolic link and File::mtime — Kazuhiro NISHIYAMA <zn@...> 2002/01/28

西山和広です。

[#33581] Re: broken symbolic link and File::mtime — matz@... (Yukihiro Matsumoto) 2002/01/28

まつもと ゆきひろです

[#33584] Re: broken symbolic link and File::mtime — Tanaka Akira <akr@...17n.org> 2002/01/28

In article <1012194192.456224.19148.nullmailer@ev.netlab.jp>,

[#33587] Re: broken symbolic link and File::mtime — matz@... (Yukihiro Matsumoto) 2002/01/28

まつもと ゆきひろです

[#33588] Re: broken symbolic link and File::mtime — Tanaka Akira <akr@...17n.org> 2002/01/28

In article <1012208486.646506.19793.nullmailer@ev.netlab.jp>,

[#33590] Re: broken symbolic link and File::mtime — matz@... (Yukihiro Matsumoto) 2002/01/28

まつもと ゆきひろです

[#33591] Re: broken symbolic link and File::mtime — Tanaka Akira <akr@...17n.org> 2002/01/28

In article <1012212090.162851.19949.nullmailer@ev.netlab.jp>,

[#33595] Re: broken symbolic link and File::mtime — matz@... (Yukihiro Matsumoto) 2002/01/28

まつもと ゆきひろです

[#33664] rd2 コマンド( RDtool )が動かない。 — Seiji Yoneda <yoneda@...>

米田と申します。はじめて投稿します。

24 messages 2002/01/30
[#33667] Re: rd2 コマンド( RDtool )が動かない。 — ARIMA Yasuhiro <fit0298@...> 2002/01/30

有馬です。

[ruby-list:33321] Re: " 差分ベースモジュール " in Ruby

From: Tanaka Akira <akr@...17n.org>
Date: 2002-01-11 18:29:38 UTC
List: ruby-list #33321
In article <hvog05dxxe0.fsf@coulee.a02.aist.go.jp>,
  Tanaka Akira <akr@m17n.org> writes:

> いえ、あるファイル f からあるファイル g を require したときには g で定
> 義された名前を f から使えるようにすることを想定しています。
> 
> つまり namespace はファイルをノードとする DAG になります。

なんとなく、簡単なのを作ってみました。

% cat main.rb                
require 'left.rb'
require 'right.rb'

c = C.new
c.l
c.r
% cat left.rb 
class C
  def l; m end
  def m; p :left_m end
end
% cat right.rb 
class C
  def r; m end
  def m; p :right_m end
end

というように 3つのファイルがあったとします。これを普通に実行すると

% ruby main.rb
:right_m
:right_m

となります。

が、ここで(私の解釈による) selector namespace が導入して、require して
いないファイルのメソッドは見えないと考えると、left.rb と right.rb は
require 関係において子孫 - 祖先関係にはないので、m という名前のメソッ
ドは干渉しないと想像できます。つまり、l が呼び出す m は left.rb の m
になり、r が呼び出す m はright.rb の m になるだろう、というわけです。
つまり

% ruby -rnamespace.rb bottom.rb
:left_m
:right_m

というようなかんじです。

と、いうようなことを効率無視で実現した namespace.rb は次のようなもので
す。

% cat namespace.rb
Dependences = []
NameSpace = {}

def normalize_feature(feature)
  # xxx: this method should return absolute pathname including suffix.
  File.basename(feature, '.rb')
end

alias namespace_original_require require
def require(feature)
  depender = normalize_feature(caller.first.sub(/:.*/, ''))
  dependee = normalize_feature(feature)
  #p [:require, depender, dependee]
  Dependences << [depender, dependee]
  namespace_original_require feature
end

def search_method(file, klass, name)
  #p [:search_method, file, klass, name]
  #p Dependences
  #p NameSpace
  klass.ancestors.each {|mod|
    files = [file]
    # xxx: Dependences may have cycle.
    Dependences.each {|depender, dependee|
      next unless files.include? depender
      files << dependee
    }
    files.uniq!
    #p files
    qualified_names = []
    files.each {|f|
      if NameSpace.include? [f, mod, name]
        qualified_names << NameSpace[[f, mod, name]]
      end
    }
    qualified_names.uniq!
    case qualified_names.length
    when 0
      raise StandardError.new "internal error: no method found: #{file} #{klass} #{name}"
    when 1
      #p qualified_names.first
      return qualified_names.first
    else
      raise StandardError.new "method conflict: #{name}: #{qualified_names.join(' ')}"
    end
  }
end

class Module
  @@enable_namespace = false

  def disable_namespace
    @@enable_namespace = false
    begin
      yield
    ensure
      @@enable_namespace = true
    end
  end

  def method_added(name)
    return unless @@enable_namespace

    file = normalize_feature(caller.first.sub(/:.*/, ''))
    mod = self
    qualified_name = "_#{file}_#{mod}_#{name}"
    #p [:method_added, file, mod, name] 

    NameSpace[[file, mod, name]] = qualified_name

    disable_namespace {
      code = <<-"END"
        alias_method #{qualified_name.dump}, :#{name}
	def #{name}(*args, &block)
	  file = normalize_feature(caller.first.sub(/:.*/, ''))
	  #p [:call, file, :#{name}, args]
	  send(search_method(file, self.class, :#{name}), *args, &block)
	end
      END
      #print code
      mod.class_eval code
    }
  end

  @@enable_namespace = true
end

ちなみに、この namespace.rb では left.rb と right の両方を require し
ている場所から m を呼ぶと、曖昧なのでエラーになります。
(override を扱っていないのでエラーにしすぎですが。)

% ruby -rnamespace.rb -e 'require "left"; require "right"; C.new.m'
./namespace.rb:45:in `search_method': method conflict: m: _left_C_m _right_C_m (StandardError)
        from ./namespace.rb:22:in `each'
        from ./namespace.rb:22:in `search_method'
        from (eval):5:in `m'
        from -e:1
-- 
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)

In This Thread

Prev Next