.NET Tools 注目のJava→C#コンバータを試用する コラム:JLCAベータ1で発生した問題点(バグ編)(株)ピーデー川俣 晶 2002/03/09 |
「りすと亭」を使った今回の変換作業において発生した問題点のうち、JLCAのバグと思われるものは以下のとおり。ただし本文中でも述べたとおり、今回評価したJLCAはまだ開発途中のベータ1であり、今後発表されるバージョンでは解消される可能性が高い。この点に注意してご覧いただきたい。
[1]8進表記の変換ミス
final static String crlf = "\015\012";
というコードが、
internal const System.String crlf = "\x000D\012";
と変換されていた。これは本来なら、"\x000D\x000A";となるべきところである。単なるバグだと思うが、JLCAベータ1を利用する人は気を付けてほしい。なお、C#では8進表記はサポートされないので、変換しないと正常には機能しない。
[2]うっかりミス?
このようなコードが生成されていたが、どう見てもキャスト不能である。
public override void Write(System.Char[] cbuf) |
[3]見つからないBaseStream
以下は完全に誤った変換例である。
System.IO.StreamReader br = new System.IO.StreamReader(new System.IO.StringReader(all).BaseStream);
これをコンパイルすると以下のエラーになる。
'System.IO.StringReader' does not contain a definition for 'BaseStream'
StreamReaderオブジェクトからBaseStreamプロパティを通じて、実際の入出力を扱うStreamオブジェクトにアクセスできるのは、うまく使えばソースがきれいにまとまるのだが、この例なら、素直に以下のように書くだけで十分である。
System.IO.StringReader br = new System.IO.StringReader(all);
[4]エラーになる組み合わせ
以下のようにエラーになるコードが生成される場合がある。tmpで始まる変数はJLCAが生成したものである。もちろん、17行目でエラーになる。このコードは製品版ではより最適化されるもようである。
1: if (tmpBool) |
[5]returnで終わっていないコード
returnで終わらないメソッドが生成される場合があった。
1: public virtual System.Object remove(System.String key) |
[6]java.util.Enumerationの変換ミス
java.util.EnumerationはSystem.Collections.IEnumeratorに変換されるがそのままではコンパイル・エラーになる。JLCAは以下のようなソースを生成する。
for (System.Collections.IEnumerator e = (System.Collections.IEnumerator) params_Renamed.Keys; e.MoveNext(); )
しかし、System.Collections.Hashtable.KeysはICollectionsを返すが、これはIEnumerableにキャストできても、IEnumeratorにキャストできない。もし直すとすれば、以下のようになるだろう。
for (System.Collections.IEnumerator e = params_Renamed.Keys.GetEnumerator(); e.MoveNext(); )
System.Collections.IEnumeratorとSystem.Collections.IEnumerableは名前が紛らわしいので間違ったのだろうと推測する。単純なミスなので製品版では直るだろう。
[7]間違った式の変換
ary[i] -= seed1 + i;
これが以下のように変換されてしまうケースがあった。
ary[i] = (sbyte) (ary[i] - seed1 + i);
いうまでもなく、最後の (ary[i] - seed1 + i) は (ary[i] - (seed1 + i)) が正しい。
INDEX | ||
[.NET Tools] | ||
注目のJava→C#コンバータを試用する | ||
1.インストールと実行 | ||
2.変換の内容と品質 | ||
3.りすと亭の変換で遭遇した問題点 | ||
4.稼働したソースと結論 | ||
コラム:JLCAベータ1で発生した問題点(バグ編) | ||
「.NET Tools」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|