[D言語/VB2005]ご協力お願いします

投稿日 : 2008年7月4日 11:26

IDEに要件ちゅいか

・エラーメッセージを日本語化

といっても翻訳とかコンパイラ改造とかではなく、
コンパイラ・リンカから受け取ったメッセージを置換にて
日本語化するつもりです。

で、エラー一覧みたいなのを探したのですが見つかりませんでした。
一覧が公開されている場所をご存知の方はお知らせください。
もしない場合、一人で全てのエラーメッセージを網羅するのは時間的に厳しいので
皆さんの目撃したエラーメッセージや、どうやったら出せるのか等
情報提供お待ちしています。

フィードバック

# re: [D言語/VB2005]ご協力お願いします

2008/07/05 6:30 by ネタ好き未記入
Linkerのソースを検索するのが一番手っ取り早いと思います。
ただ、メソッドのオーバーライドのために、マングル機能が多分あると思いますので、
その辺が難しいと思います。

# re: [D言語/VB2005]ご協力お願いします

2008/07/05 10:31 by ネタ好き未記入
急がないのであれば、Dコンパイラのソースを探索する企画「Dを深くつっつく」を予定しておりますので、待つのも手かもw
それはさておき、こういった作業は地道なものですから、いそがず自分が発見したエラーメッセージをつぶしていけばいいと思います。
暇な時は、知っててエラーが出るようなプログラムを書いて、そのエラーメッセージをリダイレクトして調べたらいいと思います。

# re: [D言語/VB2005]ご協力お願いします

2008/07/05 12:35 by 鶏唐揚
コンパイラのソースから探すのも考えたのですが
さすがにそこまでやるなら、順次対応としておいて
IDE開発のほうを優先しますw

というわけで地道にいきたいと思いますが、情報は引き続き募集中

# re: [D言語/VB2005]ご協力お願いします

2008/07/05 17:02 by ネタ好未記入
発見したエラーを書きます。
拡張がDでないファイルをコンパイルしようとすると次のエラーが表示されます。
unrecognized file extension txt
いい加減な訳:拡張子txtのファイルは認められません。

# re: [D言語/VB2005]ご協力お願いします

2008/07/05 17:09 by ネタ好き未記入
variableSample.d(14): Error: can only initialize const member ID inside constructor
variableSample.d(6): Error: foo.MagicNumber is not mutable
variableSample.d(15): Error: constant foo.MagicNumber is not an lvalue

いい加減な訳
const変数○○はコンストラクタでのみ初期化出来ます。
○○は変更不可能です。
定数○○のはlvalueではありません。こめん、lvalueの単語の意味が分らなかった。

ちなみにエラーを出したプログラムは次のものだピヨ。
import std.stdio;

class Foo
{
public:
invariant int MagicNumber = 42;
const int ID;

this( int id ) { this.ID = id; }
}

int main( char[][] ) {
auto foo = new Foo( 10 );
foo.ID = 10;
foo.MagicNumber = 1000;
return 0;
}

# re: [D言語/VB2005]ご協力お願いします

2008/07/05 18:58 by ネタ好き未記入
またあたしいエラーを発見したよ。
/*
ここに日本語でコメントを書きまくろう。
わーい。
わーい。
わーい。
*/
こんな具合にコメントに日本語を書くと、次のエラーが出るよ。
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence
variableSample.d(29): invalid UTF-8 sequence

なにこれw
報告これで終えます。閣下。

# re: [D言語/VB2005]ご協力お願いします

2008/07/05 21:33 by 鶏唐揚
これはソースがSJISで保存され、かつ2バイト文字が使われてると出ますね。
D言語で誰もが最初にはまる罠です(

情報ありがとうございます。
閣下…?w

# re: [D言語/VB2005]ご協力お願いします

2008/07/06 12:21 by ネタ好き未記入
エラー報告専用ページ作った方がいいと思う。

# re: [D言語/VB2005]ご協力お願いします

2008/07/06 16:09 by ネタ好き未記入
静的配列は16MBが限界なので次のコードはエラーになります。

import std.stdio;
int main( char[][] ) {
creal[838861] cr;
return 0;
}

Error: index 838861 overflow for static array

# re: [D言語/VB2005]ご協力お願いします

2008/07/07 15:34 by ネタ好き未記入
文字列型連想配列に/=代入演算子を使うとエラーが出ます。
#ごめんエラーメッセージのメモ取るの忘れていた

# re: [D言語/VB2005]ご協力お願いします

2008/07/07 15:43 by ネタ好き未記入
文字列型配列に文字列を指定して代入するとエラーになります。
例:
array[ 0 ] = "値を代入";

文字列型は普遍なので、コピーをとる事が出来ずえらーが発生するそうです。

# re: [D言語/VB2005]ご協力お願いします

2008/07/08 6:07 by ネタ好き未記入
UTFで書かれたコードに全角スペースを交えると
unsupported char 0xe3
が出力されます。

0x3eで始まるUNICODE文字は
スキャナでANSI文字列と見なされて
Lexerのscanメソッドの

if (isprint(c))
error("unsupported char '%c'", c);
else
error("unsupported char 0x%02x", c);
p++;
continue;
}

の部分でエラーを出力されます。
その理由はANSIでは<にあたるからです。
なお、UNICODE-8では先頭バイト00-7FはANSIの制御文字に当たります。


全角スペースは絶対に使用してはなりません。
でもこれはパーサーのプログラムミスだと思います。
パーサーがちゃんと全角スペースを取り除いていればこの部分へ到達する事はありません。
#もしかしたらそうしない理由があるのかもしれない

# re: [D言語/VB2005]ご協力お願いします

2008/07/08 6:10 by ネタ好き未記入
プログラムにこのコードを書いたら
cannot implicitly convert expression ('\U0000304a') of type wchar to char
が出力されました。

char[ 5 ] foo;
foo[ 0 ] = 'あ';
foo[ 1 ] = 'い';
foo[ 2 ] = 'う';
foo[ 3 ] = 'え';
foo[ 4 ] = 'お';

いくら天才でも日本語の文字コードまでは意識していなかったようです。
これについては日本人がちゃんとフィードバックしないのが悪いのでしょう。

# re: [D言語/VB2005]ご協力お願いします

2008/07/08 6:43 by ネタ好き未記入
いい事思いついた♪
右のリンクにこのページを追加したらいいと思う。
そしたら、何時でもすぐにこのエラー報告ページにアクセス出来るようになります。
これからもどんどん報告しますのでリンクを張ってほしいな♪

# re: [D言語/VB2005]ご協力お願いします

2008/07/08 11:00 by 鶏唐揚
リンクに追加しましたー
あと報告ありがとうございます

#相変わらず体調不良…だめだこりゃw

# re: [D言語/VB2005]ご協力お願いします

2008/07/10 10:28 by ネタ好き未記入
書き込み専用プロパティの値を返そうとすると次の2つのエラーが発生します。
※正確に言うと1つめはエラーじゃないような気がする

function property.Foo.Z (int) does not match parameter types ()
Error: expected 1 arguments, not 0

サンプルプログラム
import std.stdio;

class Foo {
private:
int z;
public:
void Z( int value ) { z = value; } //書き込み専用
}

int main( char[][] ) {
Foo f = new Foo( );
writeln( "プロパティZの値=", f.Z );
f.Z = 123;
return 0;
}

# re: [D言語/VB2005]ご協力お願いします

2008/07/10 17:51 by ネタ好き未記入
静的フィールドに計算式を書くと次のエラーが表示されます。

staticconstrutor.d(7): Error: non-constant expression X * Y

エラーを出した部分のコード
static Z = X * Y;

# re: [D言語/VB2005]ご協力お願いします

2008/07/11 9:01 by ネタ好き未記入
三十秒エラークッキング♪
Error: shadowing declaration for.main.i is deprecated
の出し方♪

まずはローカル変数を定義します。
ここは
int foo;
とでもしておきましょう。
次にループ文で同じ変数を使用します。
for( int foo; foo > 10; foo++)
{
}
これでエラーが出せます。
三十秒エラークッキングおしまい。

ここまでの提供はインドリでした。

# re: [D言語/VB2005]ご協力お願いします

2008/07/11 11:31 by ネタ好き未記入
基本的なことだけど、定義されていない変数や型を使用するとエラーメッセージを出せます。

# iiZWqxdMkFHy

2009/09/23 2:15 by Perdunok
Hello Perdunky!

# nUGOEXCgaqaiG

2009/09/23 12:30 by lemyaskin
lemyaskin rulezz
コメントの入力
タイトル
 
名前
 
Url
コメント