昔の最近の出来事(2016.05)

2016/05/31

遅めに帰着。

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))

ダメじゃね? 壊れてる気がしてきました。

2016/05/30

気持早めに帰着。

先週、新しいgdcで文字列リテラルの終端がヌル文字になっていない場合があって、

  HINSTANCE htdll = LoadLibrary("uxtheme.dll\0") ;

てな変更を入れました。で、よくよく言語仕様を読んでみると、 文字列リテラルはヌル文字終端される事が書いてあったり (Expressionsの String Literalsの項)。
で、一つ前のと新しいのとで比べてみたら次のようになってみたり。

$ 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))

新しい方はヌル文字(\0)終端になってません。MinGW-gdcだけのバグだろうか?

2016/05/29

AM中に起床。

洗濯したり掃除したり。

Web巡回してて知ったアーケード版のOutRunの プレイ動画。 なんだこれ!?って感じです。すげぇ。そういえば、かつてマイコンBASICマガジン (通称ベーマガ)に、OutRunが上手いと言われるEXCHANGERというライターさんが 居ました。本誌のOutRun関連記事の中で、 「EXCHANGER氏のプレイを見ていると道を走っている時間の方が短い」という 旨の文言があり、それが今までどういう意味なのか判らなかったのですが、 この動画を見てそういう事だったのか(まさに文字通り)と思ったり(^^; 当時のEXCHANGER氏のプレイも恐らくこんな感じだったのかな?と想像したりも。 いいものを魅せていただきました。

ベーマガ関連で調べ事をしていると、去年開催された 「ALL ABOUT マイコンBASICマガジン 2015」のイベント動画が挙がっている のを知ったり(ALL ABOUT マイコンBASICマガジン 【公式】)。 イベント本体はかなり短く編集されているようですが、トーク全編や ゲームやってる所とかを超見たくなる感じでした。バックヤードの インタビューなど盛りだくさんで、思わず見入ってしまいました。 TANEはファミベ(ファミリーベーシック)から ベーマガに入った口なので、断空我氏のファミベでゲームを作る記事や マシン語の記事を読んでたのですが、断空我氏の風貌が想像の 斜め上だったのは30年(そういや初めて買ったベーマガは1986年6月号でした) 経って初めて知った事だったかも。

ちょろりお出かけ。そういえば以前、 ATMでパスワードを間違えても手続きが結構先まで進む話があったのですが、 そもそも何故パスワードを間違えたのか?という所をそのまま忘れてました。 で、今日リロードした時にパスワード入力画面の数字の並びがシャッフル (電卓並びでも電話並びでもない)されているのにふと気づいたり。 これまで何度かリロードした時には特に気にならなかったのですが、数字を 探して押していると並びは気にならないのかしら?と思ったりも。

2016/05/28

昼過ぎ起床。

アンチャ3。2011年末に中断した時、最後にやったチャプター9ですが、 細かい所を全く覚えてなくて、つっかかりながら進めたり。 思いますに、洞窟内の暗いシーンが多いチャプターなのですが、松明を 持ちながらで周りが見えにくいものですから、マップの経路が 覚えにくくなんか疲れるように感じます。前回もそんな事を思った気がしたりも。

こちらで知った 設定を参考に、Emacsの view-hello-fileの表示できなかった文字を表示 できるようにしてみたり。基本、そのまま使わせていただいたのですが、 一部の言語には対応されていなかったので足してみました。

hello-view-file on Emacs-w32 hello-view-file on cygwinEmacs with X-Window
(if (eq 'w32 (window-system))
    (progn
      (set-frame-font "MeiryoKe_Console 9")
      (set-face-font 'mode-line "MeiryoKe_Console 9")

      (set-fontset-font t 'devanagari (font-spec :family "Nirmala UI"))
      (set-fontset-font t 'bengali (font-spec :family "Nirmala UI"))
      (set-fontset-font t 'gujarati (font-spec :family "Nirmala UI"))
      (set-fontset-font t 'kannada (font-spec :family "Nirmala UI"))
      (set-fontset-font t 'malayalam (font-spec :family "Nirmala UI"))
      (set-fontset-font t 'oriya (font-spec :family "Nirmala UI"))
      (set-fontset-font t 'gurmukhi (font-spec :family "Nirmala UI"))
      (set-fontset-font t 'tamil (font-spec :family "Nirmala UI"))
      (set-fontset-font t 'telugu (font-spec :family "Nirmala UI"))
      (set-fontset-font t 'burmese (font-spec :family "Padauk"))
      (set-fontset-font t 'hangul (font-spec :family "Gulim"))
      (set-fontset-font t 'vietnamese-viscii-lower (font-spec :family "DejaVu Sans"))
      (set-fontset-font t 'vietnamese-viscii-upper (font-spec :family "DejaVu Sans"))
      (set-fontset-font t 'greek (font-spec :family "New Athena Unicode"))
      (set-fontset-font
       t
       (cons (decode-char 'ucs #x10330)
             (decode-char 'ucs #x1034F))
       (font-spec :family "Segoe UI Historic"))
      (set-fontset-font
       t
       (cons (decode-char 'ucs #x1F000)
             (decode-char 'ucs #x1F6FF))
       (font-spec :family "Segoe UI Symbol"))
      (set-fontset-font
       t
       (cons (decode-char 'ucs #x1F700)
             (decode-char 'ucs #x1FfFF))
       (font-spec :family "Symbola"))

      ))

(if (eq 'x (window-system))
    (progn
      (set-frame-font "MS Gothic 9")
      (set-face-font 'mode-line "MS Gothic 9")
      ))
      

一番左のWindows向け((window-system)が'w32)の設定に 足したのは、hangul(韓国語/ハングル)とvietnamese(ベトナム語)と greek(ギリシア語/古代ギリシア語)です。 特に古代ギリシア語はこちら のフォントを入れる必要がありました。単に表示できているというだけなので、 TANEには全く識別ができませんが各国の人が見ると書体的に統一感が無いと (実際、固定幅と可変幅が混在してますし)思われるかも知れません(^^;

CygwinのEmacs((window-system)が'x)では特に設定を足さなくても表示できているようです。 「MS Gothic 9」を指定しているのはemacs-w32とCygwin emacsとを区別する為の TANEの個人的な都合です。

表示フォントを切り替える仕組みは良く分かっていませんが、UNICODE文字のコード範囲に どのフォントを割り当てるかを指定してるのかなと思います。でも、 コード範囲に対して割り当てたフォント名を一覧表示する方法は無いようです。 なので、例えば何の指定も無く表示できている人が、どういうフォントを使って 表示できているのかを知りたくても預かり知る事ができないようなので、 例えば表示できてない人に、フォントをインストールする必要がある事を教えたくても、 どのフォントを入れれば良いのかが判らないという感じになるかも知れません。 ここん所が一覧表示できれば「使っているフォントは何ですか?」にも 答えやすいと思うのですが。

そういえば言語の一覧に、しれっと「C」や「Emacs」とか入ってて、 何だそれ?wと思ったりも。あと、アラビア語やヘブライ語部分に カーソルを移動すると、文字領域に差し掛かった瞬間からforward-charによる カーソル移動が右から左に移動するようになったり。そういやそういう事ができると いうのを知ってはいたのですが、長いこと使ってるのに実際に見たのは 初めてかも(^^; 因みにカーソルキーの ←と→も 実際のカーソル移動と逆になってますが、 ここはキー矢印の見た目通りにカーソル移動するのが良いような気がしたりも。 アラビア語やヘブライ語ネイティブの人がどう思っているかは判りませんが。

2016/05/27

気持ち早めに帰着。

アンチャ3を始めた所、いつの間にか時間を食ってたり。 プロモードなのもあるのですが、まー死ぬ死ぬ。

2016/05/26

遅めに帰着。

MinGW-gdcリンク問題。libgphobos2.a内のsocket.oのリンク要否が どう決定されてるかは判らず仕舞い。 少なくとも、アーカイブからsocket.oを削ればリンクできる事から、 必要無いものをリンクしようとする場合があるのは確かなのですが....

2016/05/25

遅めに帰着。

あまりの眠さに急速停止。

2016/05/24

遅めに帰着。

MinGW-gdcリンク問題。libgphobos2.aからsocket.oを削除すれば、 参照連鎖が判るかも知れない?と思い、socket.oを削除してみたところ、 リンクでエラーしなくなったり。エ〜〜〜〜〜〜? でもcurlを使うコードではsocket.oが見つからなくてリンクできず。当たり前。 何に連動するのかさっぱり見当が付きません。

むむ、core.sys.windows.winsock2がimportされているか否かに連動している ような気がしてきた。......違ったかも。

2016/05/23

遅めに帰着。

MinGW-gdcリンク問題。そういやgdcの -vオプションでimportしているファイル 群を表示できるようになっているのを思い出し、-lws2_32が必要になる std.socketの中のコードが参照されていないか手持ちコードで調べてみたり。 でも、どこからもstd.socketはimportされてなくて 原因特定までに至らず。

2016/05/22

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

問題有りの最初の方の「-lgphobos2 -lws2_32」は対処としてコマンドラインで追加した ライブラリ指定です。 それ以外の違いは、問題有りの方は-lgdruntimeが指定されていますが、問題無しの方は 指定されていません。違いはこれだけ。直観的に指定してないのに大丈夫な方が「?」な 感じなのですが、先日のhtons等がmultiple defineになっているのはlibdruntime内の それと衝突しているので、差が影響してるっちゃしてる気も。

gdcのソースの差分を見てみたところ、gcc/d/d-spec.cでlibdruntimeをリンクするような 指定が追加されていて、これが差分として見えている模様。ところがd-spec.cを戻すだけでは ダメだったり。どうやら問題無い版では、libgdruntime.a内のオブジェクトは libgphobos2.aに全て取り込まれているようで、それがlibgdruntimeをリンクしなくても 大丈夫な理由なようでした。問題有り版ではlibgdruntime.aとlibgphobos2.aとで 分かれているのですが、そのせいでリンクの仕方を変える必要が出てきたようです。 で、結果から言うと、「-lgphobos2 -lgdruntime -lws2_32」を指定する事でリンク問題を 解決できました。なんかイマイチですが。

リンク問題とは別に新しいgdcではもう一つ問題があったり。Win32APIのLoadLibrary()で DLLをロードしているのですが、新しいgdcではロードに 必ず失敗していたり。原因は、

  HINSTANCE htdll = LoadLibrary("uxtheme.dll") ;

と書いていたのですが、どうやらヌル文字("\0")終端にならなく なったようで (今までが、偶然ヌル文字終端っぽいメモリ割り当てになっていただけ (後日訂正):言語仕様はヌル文字終端されるのが正解。なので以下は修正と言うよりは gdcバグのワークアラウンド)、

  HINSTANCE htdll = LoadLibrary("uxtheme.dll\0") ;

と書いて対応する必要がありました。まだまだ罠があるなぁ。

2016/05/21

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ずっこけ。でも、既にバグとして気づいているようなので、割とすぐに 修正されたものが出てくるんじゃないかと思ったりも。

2016/05/20

少し早めに帰着。

アンチャ3のプロモード。かなり厳しい予感。

2016/05/19

気持早めに帰着。

あまりの眠さに急速停止。

2016/05/18

気持早めに帰着。

あまりの眠さに急速停止。

2016/05/17

遅めに帰着。

そういや、たまに「返事を返す」って使ってしまうのですが、 これって「頭痛が痛い」と同じなんだっけ?と思ったり。 こういうのを「重言(Wikipedia)」 っていうのを知ったのですが、Wikipediaに挙げられたものの中には、 割と使ってるぞ?と思うものがあったりも。

gdcの2.068作業が始まっている模様。

2016/05/16

気持早めに帰着。

左肩が痛くて腕が上がらず。むー。

2016/05/15

起きたら午後も良い時間。寝過ぎ。

掃除したり洗濯したり。

アンチャ3のボーナス映像を観たり。開発者インタビュー映像は 前作同様、新しい事を入れられるだけ入れたという感じでした。 2の時は色々な賞を取ったので、それを超えるには?という点も 開発中の意識にはあったようです。毎度これだけの熱量を込められる というのはスゴイ事だと思います。

2016/05/14

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

CPU時間が5秒かからないくらいなのに realが1.5分とか、sleepしている としか思えないような動きです。
ただ、i686-pcターゲットのリンカだとウイルスチェックを生かしていても 待たされる事はありません。生成する実行ファイル名は同じなので、 ファイルを生成する時に遅くなるというような、単純な理由では無さそう。 訳判らん......ウイルスチェッカーは、どれもそれ自身がウイルスのような気がして なりません。

アンチャ3(4ではない)の続き。2011年末に始めたところ、本物お仕事が忙しくなり過ぎて そのままストールしてました。4をやりたいと思っているので、その前に3を 終わらせておこうと思った次第。4年半ぶりの再開となる訳ですが、その間に PS4の絵に慣れてしまった所もあってか、細かい所で少し荒く感じる所があったりも。 でも、炎に水に砂に蜘蛛にと てんこ盛りで、ゲーム自体もやっぱり止め所が 無い感じでした。ただ、銃撃戦でのAIが2に比べて賢いせいか、開始後直ぐに 死ぬような場面がいくつかあったように思います。そんな訳で中級でクリア。 トロフィーは逃しまくり(^^;今回はネイトにあまりおちゃらけた感が無かった ような気も。ストーリー最後のパラシュートのくだりは一作目の「エル・ドラドの秘宝」に 由来するらしいのですが、やってないのでよく判らなかったりも。残念。

google-translateのJSON readtable errorの件。ELPAを見てみたら 20160513.1525ってのが出ていたのでインストールしてみたところ、問題無く 翻訳できました。対応早くて助かります。

2016/05/13

遅めに帰着。

Emacsのgoogle-translateがまた JSON readtable errorで使えなく なっていたり。Google翻訳自体もリアルタイム予測表示されたりと 便利になっているようなのですが、毎度の事なのでどうにかならない ものなのかなぁ?と思います。

straceがSegfaultする件。straceはCygwin本体に含まれていたので、 Cygwinスナップショットをソースからビルドしてみたり。 途中、コンパイルエラーで突っかかるので、straceだけを手動で ビルドしてみたところ、動く実行ファイルが生成できました。

で、本題。 x86_64ターゲットのMinGWクロスgdcでリンクにやたら時間がかかる という事で、 collect2の実行をstraceで見てみたり。すると、 ある時点からread()システムコール実行にやたら時間かかる感じになる 現象が見えたり。
遅くなるread()システムコールがどのファイルに対して実行されている のかを見てみたところ、リンクによって生成される実行ファイルだったり。 write()システムコールでファイル書き込みを行った後に、read()システム コールによる読み込みを行っているようですが、何を読み込む必要が あるのか良く分かりません。

2016/05/12

遅めに帰着。

そういえば、x86_64ターゲットのMinGWクロスgdcですが、リンクに やたら時間がかかります。タスクマネージャで見てみても、 CPUを使っている訳でも無く、ディスクをアクセスしている訳でも 無いので、何に時間がかかっているのかさっぱり判りません。 で、straceを使って何か判らないかと思ったのですが、 straceが何故かSegfaultしてしまい何も判らず。

2016/05/11

遅めに帰着。

ちょろり調べ事。

2016/05/10

遅めに帰着。

Web巡回して終了。

2016/05/09

遅めに帰着。

あまりの眠さに急速停止。

2016/05/08

AM中に起床。

掃除したり洗濯したり。

ちょろりお出かけしたりコーディングしたりぐうたら過ごしたり。 そういや7月まで特別な休日って無いんだなぁ。

2016/05/07

昼前起床。

PS4で発売予定となっている「PROJECT CARS PERFECT EDITION」というゲーム。 海外ではPC,PS4,XBOX ONE向けに2015年に発売されていたタイトルだったようですが、 ローカライズして日本での発売という事らしい。 Slightly Mad Studiosというイギリスのゲームスタジオが作った レースシミュレータのようなのですが、コミュニティベース開発という クラウドファンディングっぽい方法で資金調達とアルファテストを行った そうな。へぇ〜。

2016/05/06

早めに帰着。

先日の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

ほぅ。

2016/05/05

ゴミ捨ての為に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

今のlddは一体何を表示しているんだ?

2016/05/04

昼前起床。

DConf2016。今回はストリーム配信もされてるようだったので少し見たり。 と言っても文字通り見るだけですが(^^;; なんか発表会場の装飾 すげぇ。これまでの広めのプレゼンルームとは大分印象が違う感じも。
少し見ていたのですが結構時間オーバー気味でやってるような気がしたりも。 あまり気にしない所なのかな?

nlinumという ELISPの存在を知ったり。行番号表示を行うlinumの高速版?のようです。 linumの上に乗っかっている感じのようなのですが、40万行ほどのテキスト ファイルで行番号表示しても、linumのように遅くなる事はありません。 どういう仕組みで高速化されてるのかは分かりませんが素晴らしい。

2016/05/03

昼前起床。

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))

一応、手持ちのWinアプリコードもビルドできました。 ま、クロスビルドできてるんだからネイティブビルドはできて当然 な訳ですが(^^;

そういえば、gdcの2.067からコンパイルオプションに-vを付加すると、 importしているファイル群の一覧や関数の一覧が表示されるようになってます。 先日の勝手にcurlが必要になる件の調査に使えるかも? と思ったのですが 2.067では再現せず。なんてこった。

「重版出来」のドラマ。面白いです。原作は読んだこと無いですけど。 劇中に出てくる架空のマンガ作品は小学館の作家が実際に絵をあてて いるというのも面白いと思います。

2016/05/02

今日はお休み。昼前起床。

ちょろりコーディング。

しくじり先生のしくじり偉人伝が面白かった。

剰余演算の件について、たぼさんよりコメントメールが 届いていたのに今日気づきました。毎度メールを見るのが遅くてすみませんm(_'_)m
コメントを引用させていただくと、

多分演算優先度が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 ;

だけで、妙な制限も無くなるのに.....とは思います。

2016/05/01

昼頃起床。すっかり昼夜が反転している気も。

勝手に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)

うーむ。

もそもそとコーディング。


TOP PREV