mirror of
https://github.com/ruby/ruby.git
synced 2025-09-27 22:33:09 +02:00
Page:
Assumptions JA
Pages
Assumptions JA
Assumptions
C99 Usage Guidelines
CI Servers
CI用Savings Planの購入
Committer How To JA
Committer How To
Developer How To JA
Developer How To
Developers Meeting
Donation
General Maintenance Policy
Git Migration FAQ JA
Home
How To Backport
How To Contribute
How To Maintain RubyCI Servers
How To Manage Redmine
How To Release JA
How To Report JA
How To Report
How To Request Backport
How To Request Features
Machine Instructions Trace with GDB
Node Position Memo JA
Refinements Spec
Release Engineering 2.1
Release Engineering 2.2
Release Engineering 2.3
Release Engineering 2.4
Release Engineering 2.5
Release Engineering 2.6
Release Engineering 2.7
Release Engineering 3.0
Release Engineering 3.1
Release Engineering 3.2
Release Engineering
Ruby 1.8 Branch Policy JA
Ruby 1.8 Branch Policy
Ruby 1.8 Release Plan JA
Ruby 1.8 Release Plan
Security
Server Resources
Versioning Policy
No results
1
Assumptions JA
Takashi Kokubun edited this page 2023-06-29 14:59:45 -07:00
Rubyのソースコードは次のことを仮定して書かれている。これを満たさない環境への移植は極めて困難であると考えられる。
言語
- コンパイラの実行時文字集合がASCII である。(EBCDICとかでない)
- コンパイラは、C89を原則的に満たしている。
- コンパイラは、C89標準ライブラリと同一の識別子の使用を原則として制限していない。
- (YARVでオペランド融合している場合) caseの枝が256本以上ある場合に対応していなくてはならない。
- 文字列定数の文字数は少なくとも7000文字程度までは書けなければならない。
型
- charはsigned charまたはunsigned charと同じ動作をする。
- charは8bitでなければならない。8とマジックナンバーで書かれている箇所多数。
- int の幅は 32bit
- long の幅は 32bit または 64bit
- Fixnumはポインタの幅ではなくlongの幅である(VALUEよりlongが小さいと、longの幅しか使わない。符号bitを含む)。
- time_tは整数型(符号付き、符号無しは問わない)。
- 文字を扱うには32bit必要 (GB18030のため、signed 32bitではダメ)
- enumとlongがロスなく変換できる前提で書かれている箇所がある(規格上はenumはsigned intでよい)
sizeof(size_t) == sizeof(void*)
が成立する。sizeof(VALUE) == sizeof(void*)
が成立する。
ポインタ・メモリー
- ポインタはlongまたはlong long(_int64)に格納可能である。
- void*型が存在する
- void*型に関数ポインタを代入できる
- 任意の関数ポインタ同士は互いにキャストできるし、キャストしたものを介して呼べる。
- マシンスタックが存在する、すなわち、自動変数はメモリアドレスの上位か下位の特定の一箇所に固まって配置されており、分散されていない。
- ポインタ型の値は下位2bitが立たない。
浮動小数点数
- InfinityとNaNがdouble型のどこかに存在する
Policies
Development
For developers
- Developer How To, Developer How To JA
- How To Contribute
- How To Report, How To Report JA
- How To Request Backport
- How To Request Features
- Developers Meeting
For committers
- Committer How To, Committer How To JA
- Git Migration FAQ JA
- How To Backport
- How To Manage Redmine
- How To Release JA
- How To Maintain RubyCI Servers