summaryrefslogtreecommitdiff
path: root/README
blob: 9dc79e8e26fcb089ea33793df46e400e9f9d1393 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
.\" README -  -*- Text -*- created at: Wed Aug  3 11:57:36 JST 1994

コンパイル・インストール

  1. configureを実行してMakefileを生成する.
  2. (必要ならば)defines.hを編集する.
  3. makeを実行してコンパイルする
  4. make install

  もし, コンパイル時にエラーが発生した場合にはエラーのログとマ
  シン, OSの種類を含むできるだけ詳しいレポートを作者に送ってい
  ただきたい.

機能追加

  Cコードを書くことによって, 簡単にrubyに機能を追加できる. 
  そのおおまかな手順は以下の通りである.

  * 関数的メソッドを追加する場合

    (1) Cで関数を書く
    (2) rb_define_method()でカーネルクラスのメソッドとして関
	数をrubyに登録する関数を書く
    (3) init.cを編集して, 登録する関数を呼び出す

  * クラスを追加する場合

    (1) クラスを設計する
    (2) メソッドをCで記述する
    (3) rb_define_class()でクラスを生成するコードを書く
    (4) rb_define_method()でメソッドを登録するコードを書く
    (5) init.cを編集して, 初期化する関数を呼び出す

  詳しくはC-IFを参照.

移植

  UNIXであればconfigureがほとんどの差異を吸収してくれるはず
  だが, 思わぬ見落としがあった場合(あるに違いない), 作者にレ
  ポートすれば, 解決できるかも知れない.

  アークテクチャにもっとも依存するのはGC部である. rubyのGCは
  対象のアーキテクチャがsetjmp()によって, 全てのレジスタを 
  jmp_bufに格納することと, jmp_bufとスタックが32bitアライン
  メントされていることを仮定している. 前者が真実でない場合の
  移植は困難を極めるだろう. 後者は割と簡単に解決できる. gc.c
  のスタックをマークする部分にアラインメントのバイト数だけず
  らしてマークするコードを追加するだけで済む.

  sparc以外のレジスタウィンドウを持つCPUでは, レジスタウィン
  ドウをフラッシュするコードを追加する必要があるかも知れない.

配布条件

  Rubyは最終的にはGNU Public Licenseにしたがった条件で配布さ
  れる予定だが, 現時点では以下の条件で配布する.

  * 更新

    いかなる目的であれ自由である. ただし, バグ修正は作者への
    フィードバックを期待する(強制ではない)

  * 他のプログラムへの引用

    いかなる目的であれ自由である. ただし, 配布したコードに含
    まれる他の作者によるコードは, それぞれの作者の意向による
    制限が加えられる.

  * 再配布

    禁止する. 入手したい人は作者に直接連絡をとること. これは
    Rubyの言語仕様が不安定な状態のまま広く流布するのを制限す
    るためであり, 言語仕様が安定した時点で再配布自由とする.