トップページ⇒tech
222コメント55KB

♯♯♯Shared Source CLI ♯♯♯

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
せっかくソースもあることだし、解析してみるのも一興かと。
0002デフォルトの名無しさんNGNG
はぁー、明日歯医者だ
0003デフォルトの名無しさんNGNG
ダウンロード
http://msdn.microsoft.com/downloads/sample.asp?url=/MSDN-FILES/027/001/901/msdncompositedoc.xml

(ActivePerl)
http://www.activestate.com/Products/Download/Get.plex?id=ActivePerl
0004デフォルトの名無しさんNGNG
参考リンク

FAQ and Release Notes
http://msdn.microsoft.com/msdn-files/027/001/901/ShSourceCLIbetaFAQ_RelNotes.htm

The Microsoft Shared Source CLI Implementation
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Dndotnet/html/mssharsourcecli.asp
Shared Source CLI Provides Source Code for a FreeBSD Implementation of .NET
http://msdn.microsoft.com/msdnmag/issues/02/07/SharedSourceCLI/default.asp

Uncovering Rotor -- A Shared Source CLI
http://www.oreillynet.com/pub/a/dotnet/2002/03/04/rotor.html
An Architectural Tour of Rotor
http://www.oreillynet.com/pub/a/dotnet/2002/03/27/archtour.html
Get Your Rotor Running
http://www.oreillynet.com/pub/a/dotnet/2002/03/27/gettingstarted.html
0005デフォルトの名無しさんNGNG
ビルドの仕方(WindowsXP)

1. 必要なもの

 ・VC++.NETをインストール(VS.NETでも可)
 ・ActivePerlをインストール(入手先は>>3)

2. ソースの入手&解凍

 ・>>3よりダウンロード
 ・解凍(スペースを含むパスには解凍しないこと!)

3. ビルド

 ・コマンドプロンプトを起動
 ・解凍先に移動(C:\>cd \sscli)
 ・envコマンド(C:\sscli>env)
 ・buildallコマンド(C:\sscli>buildall)
 ・20〜30分ほどで終了するはず

4. 確認

 ・sscli\build\v1.x86fstchk.rotor以下に環境が出来上がってるか確認
0006デフォルトの名無しさんNGNG
ランタイムのデバッグの仕方

1. VC++.NET(VS.NET)を起動する。

2. 「プロジェクトを開く」でclix.exeを開く。(「ファイルを開く」ではないので注意!)

3. 適当な場所にプロジェクトを保存する。

4. プロジェクトのプロパティを開いて、「コマンド引数」のところに
  適当な.NETアプリをフルパス指定する。

5. F11キーを押して、clix.cppのmain()関数の場所に行くか確認する。


OKならば、ステップイン・ステップオーバーでコードの流れを順に追うことが
できます。好きなところにブレークポイントを置いてみるもよし。
0007デフォルトの名無しさんNGNG
・sscli\clr\src\tools\clix\clix.cpp

 ここにmain()関数があります。引数の解析と、ランタイムのLaunchを行ないます。

・sscli\clr\src\vm\ceemain.cpp

 ここがランタイムのスタート地点です。_CorExeMain2()という関数から始まります。
0008デフォルトの名無しさんNGNG
その他のリソース

http://www.microsoft.com/partner/products/microsoftnet/SharedSourceCsharpCLIFAQ.asp
http://research.microsoft.com/programs/europe/rotor/default.asp

http://www.corel.com/ssclii/

http://www.macadamian.com/download/cli/cli.html
http://www.macadamian.com/column/tinymessenger.html

http://www.codeguru.com/net_general/dn04032002-rotor.html
0009デフォルトの名無しさんNGNG
さて、スレをどう展開させていくのか・・・
0010デフォルトの名無しさんNGNG
Main()関数の実行の流れ

ceemain.cpp _CorExeMain2
↓
appdomain.cpp SystemDomain::ExecuteMainMethod
↓
assembly.cpp Assembly::ExecuteMainMethod
↓
clsload.cpp ClassLoader::ExecuteMainMethod
↓
clsload.cpp RunMain
↓
method.cpp MethodDesc::Call

ここまでは追えた。Hello Worldの道は遠い・・・。
0011デフォルトの名無しさんNGNG
日本の大学とか企業じゃsscliに手を出す(手を出せる)のはいないだろうな・・・
0012デフォルトの名無しさんNGNG
FreeBSDでコンパイル通らねぇよ!
0013デフォルトの名無しさんNGNG
誰かMonoの解析キボン
0014デフォルトの名無しさんNGNG
Monoは関数名がわかりづらくて嫌いだ。。。
0015デフォルトの名無しさんNGNG
しかもガチガチのCだし。いかにもLinuxerって感じ。
0016デフォルトの名無しさんNGNG
VC++のデバッガは最強やね・・・
0017デフォルトの名無しさんNGNG
>>15
オープンソース陣営の生産性が最悪な原因がよく分かるよね。
0018デフォルトの名無しさんNGNG
Hello Worldが実行されるまでものすごい手間だね
0019デフォルトの名無しさんNGNG
・sscli\clr\src\vm\ecall.cpp

 BCLのコアなメソッドはcil internalcallで定義されており、
 ildasmしてもその実装内容は見えない。

 ecall.cppではその実装部とのマッピング定義を行なっている。
 実装部はcom〜.cppというファイルに多く見受けられる。
 FCIMPL〜FCIMPLENDで囲まれた関数がそれ。

 どうやらECall、FCallなる用語があるようだ。
0020デフォルトの名無しさんNGNG
・sscli\clr\src\csharp\csharp\inc\predeftype.h

 C#で特別扱いされる型の一覧。

・sscli\clr\src\md\compiler\custattr.cpp

 CLRで特別扱いされるCustomAttributeの一覧と動作定義。
 ...と思われるが、ブレークを置いても引っかからん。
0021デフォルトの名無しさんNGNG
sscliはBCLソースとinternalcall実装以外はあまり深い入りしない方がいいよ。
JITとかGC周りは.NETとはかなり違うだろうし。
0022デフォルトの名無しさんNGNG
JITは懐かしのEconoJITの名残りという噂も・・・
0023デフォルトの名無しさんNGNG
・sscli\clr\src\inc\il_kywd.h

 CILのキーワード一覧。

・sscli\clr\src\csharp\csharp\inc\tokens.h

 C#のキーワード一覧。アンダーバーで始まる見慣れないキーワードも。
0024デフォルトの名無しさんNGNG
C#の隠しキーワード

__makeref
__reftype
__refvalue
__arglist

使い方は分からんが。(w
0025デフォルトの名無しさんNGNG
makerefはboxingの別名
0026デフォルトの名無しさんNGNG
>>24
__arglistは引数につけるよろし。paramsみたいな感じ。
0027デフォルトの名無しさんNGNG
うむ。やっぱりソースが公開されてることはいいことだ。
0028デフォルトの名無しさんNGNG
Peeking Under the Lid of Open Source .NET CLI Implementations
http://www.devx.com/free/hotlinks/2002/ednote061902/ednote061902-1.asp
0029デフォルトの名無しさんNGNG
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!

Rotor for Linux
http://www.oreillynet.com/cs/weblog/view/wlg/1602
0030デフォルトの名無しさんNGNG
RedHat7.2で動いた!ヽ(´ー`)ノ

bashの人はenv.shに修正要。
https://mailserver.di.unipi.it/pipermail/dotnet-sscli/msg00052.html

あとは
. ./env.sh
./configure
./buildall
でOK。

環境ができあがったら、環境変数PATHとLD_LIBRARY_PATHに
clixのあるディレクトリを登録。
0031デフォルトの名無しさんNGNG
ビルドに時間かかるねー。
同じスペックなのにwinの倍以上かかるよ。
0032デフォルトの名無しさんNGNG
しかしLinuxはMono、Portable.NET、Rotorの3つの選択肢があるわけか。
どれかを選べって言われたらやっぱりMS純正の・・・。
0033デフォルトの名無しさんNGNG
>>32
Monoも使ってるけど、やっぱりsscliの方がなじみがあって安心する。
悪いけど。
0034デフォルトの名無しさんNGNG
Refresh版が出たよ〜。ヽ(´ー`)ノ

http://msdn.microsoft.com/downloads/default.asp?URL=/downloads/sample.asp?url=/msdn-files/027/001/901/msdncompositedoc.xml
0035デフォルトの名無しさんNGNG
コンパイラのロゴが変わった。(・∀・)イイ!

Microsoft (R) Visual C# Shared Source CLI Compiler version 1.0.0002
for Microsoft (R) Shared Source CLI version 1.0.0
Copyright (C) Microsoft Corporation 2002. All rights reserved.
0036デフォルトの名無しさんNGNG
ActivePerlもいつの間にかバージョンアップ
0037名無しさん@カラアゲうまうまNGNG
やば…
0038名無しさん@お腹いっぱい。NGNG
マイクロソフトのプログラマでさえ、
C++のテンプレートは活用してないのね。
0039デフォルトの名無しさんNGNG
Rotor Comes to Linux
http://www.oreillynet.com/pub/a/dotnet/2002/07/01/rotorlinux.html
0040デフォルトの名無しさんNGNG
今月号のSoftwareDesignにCLIの記事があった。
日本語版MSDN MagazineにもRotorの記事が。
0041デフォルトの名無しさんNGNG
SDって昔読んでたけど、今もあるんだ。。
あれでLinux、よく勉強させてもらったよ。
たまには買ってみようかな。
0042デフォルトの名無しさんNGNG
FreeBSD, linuxともにhelloxmlの実行に10秒とかかかるのは俺だけでしょうか
0043デフォルトの名無しさんNGNG
The Rotor Architecture Revisited
http://www.oreillynet.com/pub/a/dotnet/2002/07/22/rotor.html
0044デフォルトの名無しさんNGNG
Linux版sscliのCVS立ち上がる

http://discuss.develop.com/archives/wa.exe?A2=ind0207d&L=dotnet-rotor&T=0&F=&S=&P=370
0045デフォルトの名無しさんNGNG
monoは最近勢いがないね。大丈夫だろうか?
0046デフォルトの名無しさんNGNG
>>45
0.13出たよ
0047デフォルトの名無しさんNGNG
First Rotor Project Workshop
http://research.microsoft.com/programs/europe/rotor/workshop.asp

プレゼンがイパーイ
0048デフォルトの名無しさんNGNG
>>42
確かに起動がクソ遅い。
0049あぼーんNGNG
あぼーん
0050デフォルトの名無しさんNGNG
http://www.oreilly.com/catalog/sscliess/chapter/index.html
0051デフォルトの名無しさんNGNG
http://www.amazon.com/exec/obidos/ASIN/1556229038/
0052デフォルトの名無しさんNGNG
Ecma Specs
http://dotnet.di.unipi.it/EcmaSpecs.aspx
0053デフォルトの名無しさんNGNG
>>52
ファイルをもう少し小分けにして( ゚д゚)ホスィ
0054デフォルトの名無しさんNGNG
>>50
Rotor版『Applied .NET Framework Programming』って感じ?
0055デフォルトの名無しさんNGNG
どうせ翻訳されないんだろうなー。Oreillyさんよ。
0056_NGNG
Java解析やめてこっちにしようかな・・・
0057デフォルトの名無しさんNGNG
MSの「共有ソース」がWindows CE .NETのIPv6対応に貢献
http://www.zdnet.co.jp/news/0207/31/xert_code.html

こういうニュースを見るとRotorにも期待してしまうね。
0058_NGNG
UNIX環境のプログラマを取り込むのにオープンソース化は大きく貢献しそう・・・
0059デフォルトの名無しさんNGNG
>>58
オープンソースではありません。共有ソースです。
0060デフォルトの名無しさんNGNG
Rotor関係の本がもう1つ出るらしい。

Distributed Programming Runtime Systems: Inside Rotor
http://www.cs.colorado.edu/~nutt/DPRS/
0061デフォルトの名無しさんNGNG
Release Notes for the SSCLI Beta Refresh
http://msdn.microsoft.com/msdn-files/027/001/901/ShSourceCLIbetaFAQ_RelNotes.htm
0062デフォルトの名無しさんNGNG
ECallのパッチが出てる。
http://download.microsoft.com/download/.netframesdk/patch/beta2/wxp/en-us/ecall.tgz
0063_NGNG
age
0064デフォルトの名無しさんNGNG
MSDN Magazine日本語版の今月号で特集
0065デフォルトの名無しさんNGNG
はう、まだ売ってるかな。
0066デフォルトの名無しさんNGNG
オープンソースのプログラムって結局ソースを見るのが一番なんだよな。
Linuxのソース解説してる奴とか全然役に立たなかった。カーネルの場合なら
一つ一つ重要な構造体を覚えていって、それがどこで使われてるのかを
確かめていくしかない。sscliもそうなんじゃないの?
0067デフォルトの名無しさんNGNG
>>66
OOの方がソースが読みやすいってことなんだろうか。
構造体がインスタンスの定義で使ってるところはメソッドだよね。
0068デフォルトの名無しさんNGNG
結局ソースなんか公開してもほとんどの人は読みもしません。
クローズドソースまんせー
0069デフォルトの名無しさんNGNG
全体の3割ぐらいは、自分の関心あるもののソースが出れば
当たり前のように読むと思うが?
綺麗に書かれたソースが読めないとなると、仕事で遭遇する
糞コードなんて永遠に無理だろな。
0070デフォルトの名無しさんNGNG
> 綺麗に書かれたソース
どこにあるの?
0071デフォルトの名無しさんNGNG
>>70
NetBSD
0072デフォルトの名無しさんNGNG
>>70
Mozilla
0073デフォルトの名無しさんNGNG
オープンソースの大半はクソコードだよ。
ドキュメントなんて全然ないし。
0074デフォルトの名無しさんNGNG
オープンソースはただの責任放棄
0075デフォルトの名無しさんNGNG
>>68
いざって時に手を入れられるのが重要。
作者が飽きて更新とまったりすると
クローズドだとそのソフトの死を意味する。

0076デフォルトの名無しさんNGNG
>>73
オープンソースの大半じゃなくてソフトウェアの大半、
の間違いでは?
0077デフォルトの名無しさんNGNG
またくだらないのがはじまったか。
0078デフォルトの名無しさんNGNG
オープンソースは全部糞
オープンソースでまともなアプリなんて一つもねえよ馬鹿
0079デフォルトの名無しさんNGNG
オープンソース=露出狂
0080デフォルトの名無しさんNGNG
オープンソース = 野外露出オナーニ
0081デフォルトの名無しさんNGNG
読む読まないの問題じゃなくて、自分で手を入れるかどうかという問題だと思うんだけどなぁ。
0082デフォルトの名無しさんNGNG
クソコードを修正するくらいなら自分で作るよ。
0083デフォルトの名無しさんNGNG
大きなソースを何か一つでも読むことは大事だと思われ。
サンプルに毛の生えた程度のものをいくら読んでも、
巨大なアプリケーションを書けるようにはならない。
天才は別だが。
0084デフォルトの名無しさんNGNG
オープンソースは何も生み出さない
0085デフォルトの名無しさんNGNG
>>84
基地外信者を生み出した
0086デフォルトの名無しさんNGNG
でまたまたクソコードができると。
0087デフォルトの名無しさんNGNG
オープンソースコミュニティを低価格で使えるリソースと考えると
大変おいしいです。なんせ連中、リポジトリサーバーを貸すだけでホイホイ
作業してくれますからね。有名人をちょこっと雇って専任させれば貢献した
ことになるし。
0088デフォルトの名無しさんNGNG
フン!!!!!!
\無駄無駄無駄無駄無駄ッ/
   ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄
      ∧ ∧       ∧_∧
     (,,゚Д゚)≡つ    (:;:;)3`#) ※
      |つ つつつつ =( :; )# | |   ←>>87
    〜.   | ≡つ   / /:; /∪※
      ∪ ∪      く__(_ゝ,,〃

                   ヽ l //
       ∧∧ 無駄ァ!―――*―――
     =  (   )∩       // | ヽ フベシッ
    ≡ (  /ノ ll     / /  |  ヽ
    = 〜  〈〃        /   |
 ,`. .´,ミ,くノ^ヽ ゝ ''
0089デフォルトの名無しさんNGNG
>>81
そのとおり。それこそが真の自由。ソフトウェアは人間に従わなければならない。
Word学習教室などもってのほか。奴らはWordの奴隷だ。
0090デフォルトの名無しさんNGNG
>>87
一理あるかもねえ。IBMとかSunとかその辺の人間を研究所に雇ったり、
オープンソースソフトのカスタム売りするベンチャーに資本投下してたり
するからね。
0091デフォルトの名無しさんNGNG
Gyro beta release
http://research.microsoft.com/projects/clrgen/
0092デフォルトの名無しさんNGNG
そんなだからStallmanはソースコードの公開を強制するライセンスを考え出したんだな
0093デフォルトの名無しさんNGNG
Genericsの効果的な使い方が思いつかないなぁ・・・。
コレクション以外で。
0094デフォルトの名無しさんNGNG
>>93
おもいついたら、おしえてね。
0095デフォルトの名無しさんNGNG
こういうのは、あまり意味ないか・・・。

  public delegate void EventHandler<T>(object sender, T args) where T : EventArgs;
0096デフォルトの名無しさんNGNG
>>95
〜EventHandlerのクラス定義が必要なくなるけど、使う側としては分かりづらいなあ。
0097デフォルトの名無しさんNGNG
delegateと十分なコレクションクラス/インターフェースがあれば
あんまり活躍の場面って思いつかないねえ
0098デフォルトの名無しさんNGNG
>>96
ソースレベルじゃなくてILレベルで別名定義できると便利なんだけどねえ。

  typedef EventHandler<MouseEventArgs> MouseEventHandler;
0099デフォルトの名無しさんNGNG
>>98
それは地獄の始まりだと思われ
0100デフォルトの名無しさんNGNG
なんだよー。System.Collections変わってないじゃん。
0101デフォルトの名無しさんNGNG
100はgenericsの話ね。
■ このスレッドは過去ログ倉庫に格納されています