コンテンツへスキップ
ものがたり
戻る

2005-12-15

来週の月曜の夜(たぶん)に、多分新宿あたりでmono meetingをやります(という口実のもと、単に晩飯を食いに集まるだけです)。もし参加したいという方がいたら(物好きですね!)atsushi@ximian.comまでメール下さい。日本人は今んとこ僕だけです。英語が喋れる必要はありません。ていうか僕がほとんど日本語しかしゃべれないし…

Path.InvalidPathChars

ヤバいねえコレは…1

XPathNavigator.ReadSubtree()

地味にいろんなバグがありそう。

using System;  

using System.Xml;  

using System.Xml.XPath;

public class Tset
{
public static void Main ()
{
XmlDocument doc = new XmlDocument ();
doc.LoadXml ("");
XPathNavigator nav = doc.CreateNavigator ();
XmlReader r = nav.ReadSubtree ();
r.Read ();
r.MoveToFirstAttribute ();
r.ReadAttributeValue ();
Console.WriteLine (r.Name);
Console.WriteLine (r.NamespaceURI);
}
}

別に余所の畑だけの話ではないけど、MSってXPathNavigatorの実装はあんまし検証していないような気がする。.NET 1.xもやや弱かった。

DOMにもさまざまなバグがあって、いくつかmcsのソースにメモしてcommitしたら、Gertから、もしMSにreportしていなければ代わりにやっとくよ、と言われたので、それは有り難いとそのまま全部引き取ってもらった。

あと、これはバグではないのだけど2、たぶんDOMをヘビーにいじっている人は、GetElementById()の挙動が変わっていることに注意した方が良い。ドキュメント ツリーからdetachされたサブツリー内のIDにヒットしたりしなかったりで、動作が変わっている。どう変わったのかは忘れたけど、今日(というか昨日)mcsにcommitしたコードのうち、[Category(“NotDotNet”)]という属性が追加されたテストは、.NET 2.0になってから動かなくなった奴だ。

System.Orgyを正当化するextern alias

アセンブリの相互参照(orgy)は、好ましくはないけど、別に禁じられているわけでもない。かくして、.NET 2.0では、System.dllとSystem.Configuration.dllの間で、好ましくないその因縁が深まっているらしい。3

System.Configuration.dllをビルドするには、System.dllをビルドしなければならないのだが、System.dllにあるいくつかのクラス、たとえばSystem.Net.Configuration.ModuleElementには、System.Configuration.dllのSystem.Configuration.ConfigurationElementが必要になる。4

めんどっちいのは、これをbootstrapとfullのビルド2回転で実現しようとすると、System.Configuration.dllをビルドするときに、bootstrapのSystem.dllにあるNameValueCollectionとfullのSystem.dllにあるNameValueCollectionの2つが区別できないというエラーが出る(CS0029の一類型)。

それで、解決方法を探していて、extern aliasとゆー非常にマイナーな機能を見つけたのだけど、mcsのサポートはまだ完全ではないようだ

これと関係してTypeForwardedToAttributeというのも気になっていて、MSこれ使ってるんじゃねーの?と思うのだけど、corcompareの結果を見る限り全く使っていないようだ追記のとおりで、実際には不明。5

System.Runtime.CompilerServicesには、やっつけ用のクラスがいろいろ増えていそうな予感がする。

追記:

生成されたdllに残らないというのでビンゴらしい。

using System.Runtime.CompilerServices;  

using System;  

using System.Reflection;

[assembly:CLSCompliant (true)]
[assembly:TypeForwardedTo (typeof (string))]
public class Test
{
public static void Main ()
{
foreach (Attribute a in
Assembly.GetExecutingAssembly ()
.GetCustomAttributes (true))
Console.WriteLine (a.GetType ());
}
}

$ csc typeforwardedtoattribute.cs -nologo

$ mono typeforwardedtoattribute.exe
System.Runtime.CompilerServices.RuntimeCompatibilityAttribute
System.Runtime.CompilerServices.CompilationRelaxationsAttribute
System.CLSCompliantAttribute

$ gmcs typeforwardedtoattribute.cs

$ mono typeforwardedtoattribute.exe
System.CLSCompliantAttribute
System.Runtime.CompilerServices.RuntimeCompatibilityAttribute
System.Runtime.CompilerServices.TypeForwardedToAttribute


コメント

akiramei — 12/16/2005 00:39:12

物好きですね!
Mono好きと掛けているのね?(^^;

atsushieno — 12/16/2005 00:45:34

ぁぁっ無粋なツッコミを!!

うちのDuncanが「日本にいけばakirameiさんに会えるかな?」って言ってましたよ ;-) <マジ話

ladybug — 12/16/2005 12:14:49

平日じゃなければコッソリ眺めにいくところなんだけど。

atsushieno — 12/16/2005 12:31:12

そうなんですよねー平日は他のハカーでも厳しい人がいるんですよ。申し訳ないです。どーしてもDuncanの時間が確保できなくて。

akiramei — 12/17/2005 09:13:33

職場が新宿なので場所的には好都合なんですが、その日は納品前日なので脱出は厳しいかも。(^^; 覗きに行きたいところなんですけどね〜

atsushieno — 12/18/2005 00:02:04

うはh では連絡メールだけccしますので、時間が取れたら(&気力が残っていたら^^;)おいで下さい〜

Footnotes

  1. .net 2.0ではObsoleted

  2. DOMの仕様自体が明確でない

  3. ていうかSystem.Configuration.dllって、System.dllとSystem.Xml.dllのSystem.Orgyを回避するために作られたんじゃなかったのか…?

  4. ちなみにコレは2.0だけの新しい問題。System.dllとSystem.Xml.dllの場合、System.Xml.dllを2度ビルドする必要は無い。

  5. あるいは、生成されたdllには残らないのかもしれない。


この記事を共有:

前の記事
Path.InvalidPathChars
次の記事
めんどっちいの