遅めに帰着。
gdcの文字列リテラルの終端の件。Fedoraでビルドしたgdcだとどうなるんだろう?
と思い、MinGW-gdcと 同じバージョンのgdcでビルドを試してみたり。
所がICEずっこけでビルドできず。MinGW-gdcはビルドできないパターンは
多々あったのですが、逆のパターンは初めてです。
なんかこのコミットのgdcは見なかった事にした方が良さそうかも。
現時点で一番あたらしいgcc-6向けのgdcをFedoraでビルドしてみたり。
今度はエラー無くビルド完了。で、件の文字列リテラルのテストコードを
実行してみたところ、次のようになったり。
$ cat str_literal.d import std.stdio; import std.string ; import std.compiler; int main() { writef("%s %s %s.%03d (D%s)\n",name,vendor,version_major,version_minor,D_major) ; wstring str="test_string" ; for( int i=0 ; i<=str.length ; i++ ){ writef("%c %x\n",str[i],str[i]) ; } return(0) ; } $ gdc -frelease str_literal.d $ ./a.out GNU D gnu 2.067 (D2) t 74 e 65 s 73 t 74 _ 5f s 73 t 74 r 72 i 69 n 6e g 67 q 2500 $ gdc -v Using built-in specs. COLLECT_GCC=gdc COLLECT_LTO_WRAPPER=/usr/local/gdc_2067_610/libexec/gcc/x86_64-pc-linux-gnu/6.1.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../gcc-6.1.0/configure --with-pkgversion='gdc-6 e8dccae795(DMD2.067)' --enable-languages=c,c++,d --prefix=/usr/local/gdc_2067_610 --disable-bootstrap --disable-nls --with-bugurl=http://bugzilla.gdcproject.org --enable-checking=yes --disable-libgomp --disable-libmudflap Thread model: posix gcc version 6.1.0 (gdc-6 e8dccae795(DMD2.067))
気持早めに帰着。
先週、新しいgdcで文字列リテラルの終端がヌル文字になっていない場合があって、
HINSTANCE htdll = LoadLibrary("uxtheme.dll\0") ;
$ cat str_literal.d import std.stdio; import std.string ; import std.compiler; int main() { writef("%s %s %s.%03d (D%s)\n",name,vendor,version_major,version_minor,D_major) ; wstring str="test_string" ; for( int i=0 ; i<=str.length ; i++ ){ writef("%c %x\n",str[i],str[i]) ; } return(0) ; } #--一つ前のgdc------------------------------------------------------ $ i686-pc-mingw32-gdc -frelease str_literal.d $ ./a.exe GNU D gnu 2.067 (D2) t 74 e 65 s 73 t 74 _ 5f s 73 t 74 r 72 i 69 n 6e g 67 0 $ i686-pc-mingw32-gdc -v Using built-in specs. COLLECT_GCC=i686-pc-mingw32-gdc COLLECT_LTO_WRAPPER=/usr/local/gdc_2067_610_mingwcross/libexec/gcc/i686-pc-mingw32/6.1.0/lto-wrapper.exe Target: i686-pc-mingw32 Configured with: ../gcc-6.1.0/configure --with-pkgversion='gdc-6 73a7fb5d4e(DMD2.067)' --build=i686-pc-cygwin --host=i686-pc-cygwin --target=i686-pc-mingw32 --enable-languages=c,c++,d --prefix=/usr/local/gdc_2067_610_mingwcross --with-sysroot=/usr/i686-pc-mingw32/sys-root --enable-threads --disable-nls --enable-sjlj-exceptions --disable-bootstrap Thread model: win32 gcc version 6.1.0 (gdc-6 73a7fb5d4e(DMD2.067)) #--新しいgdc---------------------------------------------------------- $ i686-pc-mingw32-gdc -frelease str_literal.d $ ./a.exe GNU D gnu 2.067 (D2) t 74 e 65 s 73 t 74 _ 5f s 73 t 74 r 72 i 69 n 6e g 67 q 2500 $ i686-pc-mingw32-gdc.exe -v Using built-in specs. COLLECT_GCC=i686-pc-mingw32-gdc COLLECT_LTO_WRAPPER=/usr/local/gdc_2067_610_mingwcross_test/libexec/gcc/i686-pc-mingw32/6.1.0/lto-wrapper.exe Target: i686-pc-mingw32 Configured with: ../gcc-6.1.0/configure --with-pkgversion='gdc-6 9f1f92415c-test(DMD2.067)' --build=i686-pc-cygwin --host=i686-pc-cygwin --target=i686-pc-mingw32 --enable-languages=c,c++,d --prefix=/usr/local/gdc_2067_610_mingwcross_test --with-sysroot=/usr/i686-pc-mingw32/sys-root --enable-threads --disable-nls --enable-sjlj-exceptions --disable-bootstrap Thread model: win32 gcc version 6.1.0 (gdc-6 9f1f92415c-test(DMD2.067))
AM中に起床。
洗濯したり掃除したり。
Web巡回してて知ったアーケード版のOutRunの
プレイ動画。
なんだこれ!?って感じです。すげぇ。そういえば、かつてマイコンBASICマガジン
(通称ベーマガ)に、OutRunが上手いと言われるEXCHANGERというライターさんが
居ました。本誌のOutRun関連記事の中で、
「EXCHANGER氏のプレイを見ていると道を走っている時間の方が短い」という
旨の文言があり、それが今までどういう意味なのか判らなかったのですが、
この動画を見てそういう事だったのか(まさに文字通り)と思ったり(^^;
当時のEXCHANGER氏のプレイも恐らくこんな感じだったのかな?と想像したりも。
いいものを魅せていただきました。
ベーマガ関連で調べ事をしていると、去年開催された
「ALL ABOUT マイコンBASICマガジン 2015」のイベント動画が挙がっている
のを知ったり(ALL ABOUT マイコンBASICマガジン 【公式】)。
イベント本体はかなり短く編集されているようですが、トーク全編や
ゲームやってる所とかを超見たくなる感じでした。バックヤードの
インタビューなど盛りだくさんで、思わず見入ってしまいました。
TANEはファミベ(ファミリーベーシック)から
ベーマガに入った口なので、断空我氏のファミベでゲームを作る記事や
マシン語の記事を読んでたのですが、断空我氏の風貌が想像の
斜め上だったのは30年(そういや初めて買ったベーマガは1986年6月号でした)
経って初めて知った事だったかも。
ちょろりお出かけ。そういえば以前、
ATMでパスワードを間違えても手続きが結構先まで進む話があったのですが、
そもそも何故パスワードを間違えたのか?という所をそのまま忘れてました。
で、今日リロードした時にパスワード入力画面の数字の並びがシャッフル
(電卓並びでも電話並びでもない)されているのにふと気づいたり。
これまで何度かリロードした時には特に気にならなかったのですが、数字を
探して押していると並びは気にならないのかしら?と思ったりも。
昼過ぎ起床。
アンチャ3。2011年末に中断した時、最後にやったチャプター9ですが、
細かい所を全く覚えてなくて、つっかかりながら進めたり。
思いますに、洞窟内の暗いシーンが多いチャプターなのですが、松明を
持ちながらで周りが見えにくいものですから、マップの経路が
覚えにくくなんか疲れるように感じます。前回もそんな事を思った気がしたりも。
こちらで知った
設定を参考に、Emacsの view-hello-fileの表示できなかった文字を表示
できるようにしてみたり。基本、そのまま使わせていただいたのですが、
一部の言語には対応されていなかったので足してみました。
気持ち早めに帰着。
アンチャ3を始めた所、いつの間にか時間を食ってたり。
プロモードなのもあるのですが、まー死ぬ死ぬ。
遅めに帰着。
MinGW-gdcリンク問題。libgphobos2.a内のsocket.oのリンク要否が
どう決定されてるかは判らず仕舞い。
少なくとも、アーカイブからsocket.oを削ればリンクできる事から、
必要無いものをリンクしようとする場合があるのは確かなのですが....
遅めに帰着。
あまりの眠さに急速停止。
遅めに帰着。
MinGW-gdcリンク問題。libgphobos2.aからsocket.oを削除すれば、
参照連鎖が判るかも知れない?と思い、socket.oを削除してみたところ、
リンクでエラーしなくなったり。エ〜〜〜〜〜〜?
でもcurlを使うコードではsocket.oが見つからなくてリンクできず。当たり前。
何に連動するのかさっぱり見当が付きません。
むむ、core.sys.windows.winsock2がimportされているか否かに連動している
ような気がしてきた。......違ったかも。
遅めに帰着。
MinGW-gdcリンク問題。そういやgdcの -vオプションでimportしているファイル
群を表示できるようになっているのを思い出し、-lws2_32が必要になる
std.socketの中のコードが参照されていないか手持ちコードで調べてみたり。
でも、どこからもstd.socketはimportされてなくて 原因特定までに至らず。
AM中に起床。
掃除したり洗濯したり。扇風機始めました。と言ってもUSB扇風機ですが。
そういえば、ちびまる子ちゃんのお姉ちゃん(さくらさきこ)役の声優さんが
無くなったというのを知ったのですが、その関連記事で
TBSの深夜に放送されている「ランク王国」のメインキャラクターである
ラルフ役の声優さん(嶋村カオル)も数年前に亡くなっていたというのを
知りました。ここ数年間、番組自体を見ていなかったので全く気づいて
いなかったのですが、そういや大分前に一時期 声が変わっていた時が
あったので、おやっ?と思った事はありましたが、その後戻ってたので
特に気に留める事はありませんでした。で、先週たまたまザッピングした時に
観たときは、特に違和感が無かったので その後も続けてるのだなぁ
と思っていたのですが、実は二代目の声優さん(関山美沙紀)だったと
いう次第。以上を踏まえて先日深夜の番組を観てみたのですが、
やっぱり違和感無くてなんかスゲーと思ったりも。
年を取らないアニメ世界のキャラクターだけに、一度イメージがハマって
しまうと、別の声優さんが声をあてると「違う」のは当たり前だし
仕方の無い事なのですが、やっぱり変わらないものを期待されてしまう
という点で、二代目以降に役を引き継ぐのは大変だろうなぁと思います。
そういえば、「キテレツ大百科」の「コロ助」の声優さんって、途中で
変わっている
(初代:小山茉美(則巻アラレやミンキーモモの中の人)、2代目:杉山佳寿子(ハイジの中の人)
、因みにどちらも存命)というのを聞いた時には驚きました
(参考Wikipedia)。
この話は、何かのTV番組で知ったのですが、出演者全員が知らなかった
という感じでした。観ている人も多かった(フジテレビ日曜夜のゴールデンタイム)
と思われるアニメにもかかわらず、気づかなかったというのは
稀な話かも知れません。
MinGW-gdcでリンクエラーする件。i686-pc-mingw32ターゲットもダメに
なってました。gdcの問題というよりはリンカの問題という気がしなくも
ありません。main()から辿ってどこからも参照されていない
関数がライブラリ(lib*.a)に含まれているとして、参照されていない
関数の中で使用されている関数シンボルが見つからないのは別に
問題ではないのですが、そもそも要否がどうやって判定されているのかを
調べた方が良いような気がしてきたりも。
-vで問題無いgdcとリンクできないgdcのファイル指定順を眺めてみたり。
# 問題無し collect2.exe .... -ljpeg -lgphobos2 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lgdi32 -lcomdlg32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt /usr/local/gdc_2067_610_mingwcross/lib/gcc/i686-pc-mingw32/6.1.0/crtend.o # 問題有り collect2.exe .... -ljpeg -lgphobos2 -lws2_32 -lgphobos2 -lgdruntime -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt -lgdi32 -lcomdlg32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc -lgcc_eh -lmoldname -lmingwex -lmsvcrt /usr/local/gdc_2067_610_mingwcross_test/lib/gcc/i686-pc-mingw32/6.1.0/crtend.o
HINSTANCE htdll = LoadLibrary("uxtheme.dll") ;
HINSTANCE htdll = LoadLibrary("uxtheme.dll\0") ;
AM中に起床。
gdcがアップデートされていたので試しビルド。i686-w64-mingw32ターゲット
のみCygwinでクロスビルドしてビルドには成功。ところがビルドしたgdcで手持ちの
winアプリをビルドしてみたところ、リンクでエラーするようになってしまったり。
いわゆる「-lgphobos2 -lws2_32 がリンク時に必要問題」なのですが、
それだけじゃなくて、「htons,htonl,ntohs,ntohl multiple definition問題」
(過去の記録
20110522,
20110611,
20160312)
も同時に発症していたり。
gdc-6の最初の奴では特に問題にならなかったので、この問題がある事自体を
忘れてました(^^;
でも、この問題に当たるのは、X86_64ターゲット且つ特定のコードの場合だけ
だったのですが、これまで問題にならなかったターゲットとコードにまで
影響するようになってるような。うーむ、なんでだ?
gdc2.068をFedoraの方でビルドしてみたり。結果はlibphobosのビルド中に
ICEずっこけ。でも、既にバグとして気づいているようなので、割とすぐに
修正されたものが出てくるんじゃないかと思ったりも。
少し早めに帰着。
アンチャ3のプロモード。かなり厳しい予感。
気持早めに帰着。
あまりの眠さに急速停止。
気持早めに帰着。
あまりの眠さに急速停止。
遅めに帰着。
そういや、たまに「返事を返す」って使ってしまうのですが、
これって「頭痛が痛い」と同じなんだっけ?と思ったり。
こういうのを「重言(Wikipedia)」
っていうのを知ったのですが、Wikipediaに挙げられたものの中には、
割と使ってるぞ?と思うものがあったりも。
gdcの2.068作業が始まっている模様。
気持早めに帰着。
左肩が痛くて腕が上がらず。むー。
起きたら午後も良い時間。寝過ぎ。
掃除したり洗濯したり。
アンチャ3のボーナス映像を観たり。開発者インタビュー映像は
前作同様、新しい事を入れられるだけ入れたという感じでした。
2の時は色々な賞を取ったので、それを超えるには?という点も
開発中の意識にはあったようです。毎度これだけの熱量を込められる
というのはスゴイ事だと思います。
AM中に起床。
リンクに時間がかかる件。結論から言うとウイルスチェッカ(ウイルスバスター)が
原因の模様。
時間がかかっている間にウイルスチェッカが動いているという訳ではなく、
本当にCPUもDISKも食っていないので何に時間がかかっているのか謎な
感じでした。
----時間がかかる時---- $ time x86_64-w64-mingw32-gdc -m64 -static -mwindows -o abc main.o ... real 1m35.322s user 0m4.452s sys 0m0.484s ----すぐ終わる時---- $ time x86_64-w64-mingw32-gdc -m64 -static -mwindows -o abc main.o ... real 0m4.885s user 0m4.421s sys 0m0.233s
遅めに帰着。
Emacsのgoogle-translateがまた JSON readtable errorで使えなく
なっていたり。Google翻訳自体もリアルタイム予測表示されたりと
便利になっているようなのですが、毎度の事なのでどうにかならない
ものなのかなぁ?と思います。
straceがSegfaultする件。straceはCygwin本体に含まれていたので、
Cygwinスナップショットをソースからビルドしてみたり。
途中、コンパイルエラーで突っかかるので、straceだけを手動で
ビルドしてみたところ、動く実行ファイルが生成できました。
で、本題。
x86_64ターゲットのMinGWクロスgdcでリンクにやたら時間がかかる
という事で、 collect2の実行をstraceで見てみたり。すると、
ある時点からread()システムコール実行にやたら時間かかる感じになる
現象が見えたり。
遅くなるread()システムコールがどのファイルに対して実行されている
のかを見てみたところ、リンクによって生成される実行ファイルだったり。
write()システムコールでファイル書き込みを行った後に、read()システム
コールによる読み込みを行っているようですが、何を読み込む必要が
あるのか良く分かりません。
遅めに帰着。
そういえば、x86_64ターゲットのMinGWクロスgdcですが、リンクに
やたら時間がかかります。タスクマネージャで見てみても、
CPUを使っている訳でも無く、ディスクをアクセスしている訳でも
無いので、何に時間がかかっているのかさっぱり判りません。
で、straceを使って何か判らないかと思ったのですが、
straceが何故かSegfaultしてしまい何も判らず。
遅めに帰着。
ちょろり調べ事。
遅めに帰着。
Web巡回して終了。
遅めに帰着。
あまりの眠さに急速停止。
AM中に起床。
掃除したり洗濯したり。
ちょろりお出かけしたりコーディングしたりぐうたら過ごしたり。
そういや7月まで特別な休日って無いんだなぁ。
昼前起床。
PS4で発売予定となっている「PROJECT CARS PERFECT EDITION」というゲーム。
海外ではPC,PS4,XBOX ONE向けに2015年に発売されていたタイトルだったようですが、
ローカライズして日本での発売という事らしい。
Slightly Mad Studiosというイギリスのゲームスタジオが作った
レースシミュレータのようなのですが、コミュニティベース開発という
クラウドファンディングっぽい方法で資金調達とアルファテストを行った
そうな。へぇ〜。
早めに帰着。
先日のCygwinのlddの件。ldd自体の話は特に謎は解決してませんが、
cygcheckを使うと依存するDLLを簡単なツリー表示できる事を知ったり。
$ cygcheck.exe /bin/ls.exe C:\cygwin\bin\ls.exe C:\cygwin\bin\cyggcc_s-1.dll C:\cygwin\bin\cygwin1.dll C:\WINDOWS\system32\KERNEL32.dll C:\WINDOWS\system32\ntdll.dll C:\WINDOWS\system32\KERNELBASE.dll C:\WINDOWS\system32\api-ms-win-eventing-provider-l1-1-0.dll C:\WINDOWS\system32\api-ms-win-core-synch-l1-2-0.dll C:\WINDOWS\system32\api-ms-win-core-timezone-l1-1-0.dll C:\WINDOWS\system32\api-ms-win-core-xstate-l2-1-0.dll C:\cygwin\bin\cygintl-8.dll C:\cygwin\bin\cygiconv-2.dll
ゴミ捨ての為にAM起床。ぐうたら二度寝して昼頃起床。
そういや実行ファイルが依存するDLLを調べるのにCygwinのlddを
使用していたのですが、いつの頃からか表示が少し怪しいように思ったり。
$ /bin/ldd /bin/ls.exe ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x77ce0000) KERNEL32.DLL => /cygdrive/c/WINDOWS/SYSTEM32/KERNEL32.DLL (0x762b0000) KERNELBASE.dll => /cygdrive/c/WINDOWS/SYSTEM32/KERNELBASE.dll (0x75f90000) $ LANG=C /bin/objdump -x /bin/ls.exe | grep 'DLL Name' DLL Name: cyggcc_s-1.dll DLL Name: cygwin1.dll DLL Name: cygintl-8.dll DLL Name: KERNEL32.dll
昼前起床。
DConf2016。今回はストリーム配信もされてるようだったので少し見たり。
と言っても文字通り見るだけですが(^^;; なんか発表会場の装飾
すげぇ。これまでの広めのプレゼンルームとは大分印象が違う感じも。
少し見ていたのですが結構時間オーバー気味でやってるような気がしたりも。
あまり気にしない所なのかな?
nlinumという
ELISPの存在を知ったり。行番号表示を行うlinumの高速版?のようです。
linumの上に乗っかっている感じのようなのですが、40万行ほどのテキスト
ファイルで行番号表示しても、linumのように遅くなる事はありません。
どういう仕組みで高速化されてるのかは分かりませんが素晴らしい。
昼前起床。
MSYS2でgdc-6のMinGWネイティブビルドを試してみたり。結果から言うとうまくいかず。
原因はlibgccのconfigure実行に失敗しているのですが、sh.exeがstackdumpを吐いて
死んでいるようです。
MSYS2のパッケージをアップデートしたら通るようになりました。
ただ、pacmanを使ったアップデートで何やらforkでエラーしたりしたため
あれこれ入れ直したのですが、minttyを開いた時にDOS窓がセットで開く
ようになったりと、なんだか怪しい状態になってしまいました(^^;
コピペして作ったパッチがmalformedと言われる罠にハマったりしながらも、
ビルド成功。
$ cat iam.d import std.stdio; import std.string ; import std.compiler; int main() { writef("%s %s %s.%03d (D%s)\n",name,vendor,version_major,version_minor,D_major) ; version( GNU ) writef("I am GNU\n" ) ; version( Unix ) writef("I am Unix\n" ) ; version( linux ) writef("I am linux\n" ) ; version( Windows ) writef("I am Windows\n") ; version( MinGW ) writef("I am MinGW\n" ) ; version( MinGW32 ) writef("I am MinGW32\n") ; version( MinGW64 ) writef("I am MinGW64\n") ; version( cygwin ) writef("I am cygwin\n" ) ; version( Win32 ) writef("I am Win32\n" ) ; version( Win64 ) writef("I am Win64\n" ) ; version( Posix ) writef("I am Posix\n" ) ; version( X86 ) writef("I am X86\n" ) ; version( X86_64 ) writef("I am X86_64\n" ) ; version( ARM_SoftFloat ) writef("I am ARM_SoftFloat\n" ) ; version( ARM ) writef("I am ARM\n" ) ; version( PPC ) writef("I am PPC\n" ) ; version( PPC64 ) writef("I am PPC64\n" ) ; version( PPC_SoftFloat ) writef("I am PPC_SoftFloat\n" ) ; version( PPC_HardFloat ) writef("I am PPC_HardFloat\n" ) ; return(0) ; } $ gdc -O2 iam.d $ ./a.exe GNU D gnu 2.067 (D2) I am GNU I am Windows I am MinGW I am Win32 I am X86 $ gdc -v Using built-in specs. COLLECT_GCC=C:\msys64\mingw32\local\gdc2067_610_mingw\bin\gdc.exe COLLECT_LTO_WRAPPER=c:/msys64/mingw32/local/gdc2067_610_mingw/bin/../libexec/gcc/i686-w64-mingw32/6.1.0/lto-wrapper.exe Target: i686-w64-mingw32 Configured with: ../gcc-6.1.0/configure --with-pkgversion='gdc-6 73a7fb5d4e(DMD2.067)' --build=i686-w64-mingw32 --host=i686-w64-mingw32 --target=i686-w64-mingw32 --enable-languages=c,c++,d --prefix=/mingw32/local/gdc2067_610_mingw --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-libsanitizer --enable-threads=win32 --disable-win32-registry --enable-target-optspace --disable-nls --disable-bootstrap --disable-shared --disable-multilib --enable-long-long Thread model: win32 gcc version 6.1.0 (gdc-6 73a7fb5d4e(DMD2.067))
今日はお休み。昼前起床。
ちょろりコーディング。
しくじり先生のしくじり偉人伝が面白かった。
コメントを引用させていただくと、
多分演算優先度がunsigned > signedになっているという話ではないでしょうか?
size_tでの剰余の場合
-1 % (size_t==unsigned)10 => 0xffff_ffff(==4294967295) % 10 => 5
になっているという具合で(^^;;
という事で正解の模様です。型の優先度は盲点でした。
「プログラミング言語D(いわゆるTDPL)」に、暗黙の型変換ルールに触れられた項が
ありました。
unsignedの方がsignedより優先されるという事のようです。今回は二つ目の変換ルールが
適用された模様。
そういや日記を読み返すと 何故最初にバグっぽいと思ったのか理由が書いてないな?
という事に気づいたので 未来の自分に向けてメモ。
バッファとなる配列を正もしくは負のポインタ増分を指定してバッファ要素を巡回する
ような仕組みを作りたかったというのが事の発端です。この時、配列要素の範囲を超える場合
(-1以下もしくはサイズ以上)は、ポインタをラップアラウンド
させたかったので、剰余を使えば簡単じゃん?という単純なスタートでした。
簡単じゃん?というのは、perlでは、
$ perl -e 'print -1%10'
9
という、目的を達成するにはあまりにも都合の良い結果が返ってくるのを
知っていたので、まぁどのプログラム言語でも同じだろうと思って書いたら
負数の結果が返ってきて配列要素の範囲を超えて、あれぇ?となったという
所から、バグっぽくね?と思い、剰余について調べるハメになったという
流れでした。
で、D言語での剰余演算結果は仕様という結論に達した訳ですが、当初目的の
ラップアラウンドするポインタは結局制限付きとしました。
//dに負数を入れる場合は list.lengthの -1倍以下の値を指定してはならない
cur = (cur + d + list.length) % list.length ;
もしperlのような剰余演算結果が返ってくるのであれば、
cur = (cur + d) % list.length ;
だけで、妙な制限も無くなるのに.....とは思います。
昼頃起床。すっかり昼夜が反転している気も。
勝手にcurlが必要になる件。Fedoraのgdcではどうか?と試してみたり。
6.0.0ベースのgdcですが結果は問題無し。MinGW特有の現象っぽい。
$ cat link_fail_test.d import std.stdio; import std.conv ; import std.string ; int main() { char[] buf ; buf.length=3 ; buf[0]='1' ; buf[1]='2' ; buf[2]='3' ; int v; v=std.conv.to!(int)(buf); //v=std.conv.to!(int)(buf.idup); writef("conv = %d\n",v) ; return(0) ; } $ gdc link_fail_test.d $ ./a.out conv = 123 $ gdc -v Using built-in specs. COLLECT_GCC=gdc COLLECT_LTO_WRAPPER=/usr/local/gdc_2067_600/libexec/gcc/x86_64-pc-linux-gnu/6.0.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../gcc-6-20160221/configure --with-pkgversion='gdc-6 77f216c1b9' --enable-languages=c,c++,d --prefix=/usr/local/gdc_2067_600 --disable-bootstrap --disable-nls --with-bugurl=http://bugzilla.gdcproject.org --enable-checking=yes --disable-libgomp --disable-libmudflap Thread model: posix gcc version 6.0.0 20160221 (experimental) (gdc-6 77f216c1b9)