思うだけで学ばない日記 2.0

思うだけで学ばない日記から移転しました☆!よろしくお願いします。

programming

もうよい!std::istreamにはstd::ios::sitbitフラグがセットされるべき

std::istreamから行末まで読みたい場合、最もお手軽に済ませるにはstd::getline()を使うと良い。 動くサンプル: #include <iostream> #include <iostream> #include <iomanip> #include <fstream> #include <sstream> #include <string> /// ストリームの状態を表示します。(デバッグ用) static void dump_stream_st</string></sstream></fstream></iomanip></iostream></iostream>…

宣言型プログラミング、

「大統領」という名前のプログラムを書きます。 多分今年中ぐらいには仮想的に完成すると思います。 なお、名前以外は未定です(キリ

std::istreamで行末まで読み飛ばすスマートな書き方

これはいくつかの書き方があるようで、istをstd::istreamのインスタンスとして、 ist.unsetf(ios::skipws);とした上で、ist >> c(ただしcはistの文字型(通常char))で'\n'が現れるまで読みまくる ist.get()で'\n'が現れるまで読みまくる ist.getline(buf,…

std::iostreamのマルチスレッド対応はやっぱり糞くね?完璧に近い

一つ前のエントリでSafeStreamBufferの実装を明らかにするとともに、ストリームの状態を変更して元に戻す操作についてちょっと触れたわけだが すわなち <コード例1> // 基数とfillCharを変更 ios::fmtflags sv_f = ost.setf(ios::dec, ios::basefield); os…

【行単位で排他】std::ostreamのお手軽カスタマイズ【時刻付き】(2)

ソース ※↓↓↓「仮想メディア」なる語はGMA0BNが勝手に作ったものこれわ実質的にバッファなんだけども、std::streambufが管理するバッファと紛らわしいので区別を付ける意味で、 <SafeStreamBuffer.h> #pragma once #define LOG_DATE_FORMAT 2 class SafeStr…

【行単位で排他】std::ostreamのお手軽カスタマイズ【時刻付き】(1)

仕事においてC++の複雑さに遊ばれるのは時間の無駄以外の何者でもないが、遊びならおk 解決すべき課題 まず、基本事項として、std::ostreamへの書き込みはスレッドセーフだるしかしこれは「一つのストリームに複数のスレッドから非同期に書き込んでもハング…

ボゾビット大量フリップ--俺がボゾビットだ!

CSAサーバ プロトコル ver.1.1.3を読みながらログイン→対局→ゲーム終了の流れを書き下していっていくつか疑問が残った。CSAサーバ プロトコルを正しく解釈するクライアントの実装は実はムズいといわざるおえない サーバからLOGOUT:completeが送られてくるタイ…

まじめふまじめ--俺がまじめふまじめだ!

昨日のEchoサーバーもどきのサンプルはVS2008でWin32 コンソール アプリケーションとしてビルドして一応動作したのだが、流れでReleaseビルドでしかテストできていなかったのでDebugビルド時に起きる不具合を見逃したorzCSocket::Create()からMFCの初期化依…

公開デバッグ、

上のEchoサーバもどきにCSAプロトコルのGame_Summaryを256個ほど連続で送りつけてみてわかったのだが、計8448行のうちの最後の数行を読み込まないままエコーバックを中断し、次の入力があるまでそのままになってしまうバグをハケンすたorzこれは、nb == 0でslvS…

自分よりまず他人を疑え(マテ

ソケットを使ったプログラミングなどやったことがない反面、通信相手が送ってきたものを全部チェックするようなゴージャスな通信プログラムを作りたい、 というわけでhttp://www.computer-shogi.org/protocol/WinSample07Jan.lzhを参考にせんとす(ry (48時間…

完成した完成した詐欺(マテ;

次の3点に対応した。 行単位送受信処理の行の解釈・レスポンス送出処理からの分離(コルーチン化) 受信タイムアウト設定 そこそこ強固なエラー処理Receive()やSend()の戻り値がSOCKET_ERRORかどうか見るようにしたり色々。 今や上のEchoサーバーもどきは次の…

C#事始め

C#初心者が最初に学ぶべきことはマネージコード-アンマネージコード間のデータの受け渡しであることは論をまたない。 これを押さえれば、使い慣れた言語で生成した“Hello World!”文字列をC#に持ってきて表示させれは“Hello World!”のできあがりだからだ(何 …

マイクロスレッドで遊ばれよう12日目(11日目は欠番)

PCですぐ動かして試せるように、80x86版のサンプルを作成してみますた。VS2005で動作。 スイッチング関数はこれ。__declspec( naked ) で __fastcall な関数としてインラインアセンブラで記述。個人的に勝手がよくわからないCPUだが、Wikipediaの「呼出規約…

マイクロスレッドで遊ばれよう11日目(7〜10は欠番)

前回はCPU時間割り当て対象スレッドを常時把握するメカニズムができた。今日はスレッドの増減に対応したい。 スレッドの生成と破棄 スレッドを生成したり破棄したりするタイミングは当メカニズムを利用するユーザープログラムの勝手なので、両者の順序に特段…

Webサイト立ち上げ

日記にしょうもない実験コード貼りまくるのもいかがなものか、という気がしてきたのでそれ専用のWebサイトを立ち上げてみたりみなかったり。 http://gma0bn.googlepages.com/

OSの誕生

一昨日のコードのmth_sample.cは、suspend()でもresume()でも引数ctxを指定する必要があってダサい。いやダサいだけならまだしも、実際問題としてプログラミングしにくい。例えば、整数0,1,2,3,...という数列を出力するスレッドを(1個でなく)2個走らせたいと…

なぜ動くのか?

書いといてなんだが、実はなぜこれで動くのか納得し難かったりする。もうちょっと安心できる形で正当性を示しときたい。CPUの立場になって考えてみる。マイクロスレッドの起動から最初に戻って来るまでの手順(すなわちexec()でマイクロスレッドを呼び出し、s…

マイクロスレッド基本おさらい(3)

>果たしてこんなロジックで動くのか? SH3+SH-Cで動かしてみますた*1。 mth_core.src .EXPORT _exec .EXPORT _suspend .EXPORT _resume .SECTION P,CODE,ALIGN=4 ;*------------------------------------------------------------------------* ; ; typedef…

マイクロスレッド基本おさらい(2)

上記仮定の下で、exec(), suspend(), resume()は約こんなコードでいいはず。 void exec(TCtx *p_ctx, void (*bar)()) { PUSH S1 PUSH S2 ... PUSH Sm PUSH PR p_ctx->ssp = p_ctx->stk; swap(SP, &(p_ctx->ssp)); PR = bar; J PR } void suspend(TCtx *p_ctx…

マイクロスレッド基本おさらい

【マイクロスレッドとは】 ユーザープログラムの中で特定関数を明示的に呼び出すことによってコンテキストを切り替え、それ以外では切り替わらないという強度にノンプリエンプティブなディスパッチメカニズム(によって実現されるスレッド)。詳細な解説 【特…

三輪車の再発明(2)

ひどいヘタレっぷりを露呈ちう_| ̄|○||| 先日のコードで再帰関数だったselect()は、結局次のようにループ化できた*1。 /* f_から始まる増分1の等差数列n項から、昇順にr_項取り出す組み合わせを列挙 */ select() { int i, j, k, r, t; r = 0; i = f_; do { …

タスクシステムめどい

【タスクシステムとは】 呼び出されるたびに作業を1ステップだけ進めてすぐ戻る、という風に処理が記述されたサブルーチン群を順次呼び出し、それを繰り返すことで複数作業を擬似並列的に遂行するディスパッチメカニズム。詳細な解説 【特徴】 作業を構成す…

三輪車の再発明

nCr列挙プログラム(<まだやってたんか、、 /** f_から始まる増分1の等差数列n_項を、 * (n_+1)div 2個とn_ div 2個に分割する組み合わせを列挙するプログラム */ enum { f_ = 5, /* 初項の値 */ n_ = 5 /* 項数 */ }; a[n_+1], t; /* fから始まる増分1の等…

『Short Coding』

書泉ブックタワーで購入。手にとって予想外のボリュームに驚く。持ち帰って読み始めたが、監修者の巻頭言とChapter 1の最初のショートコードでいきなり立て続けにガツンとやられた。85のι゛ょ ぅょが2整数の加算をやってのけるのに驚愕。今Chapter 2を読み終…

末尾再帰最適化で遊ばれよう

正直、ここ(via ここ)で語られてるような高度な話は理解できない(いつわかるようになるのか?!)ので封置。個人的には、末尾再帰最適化判定問題は、言語仕様よりも下のレイヤに位置するオプチマイザの特性の話として、その範疇でまとめていいんじゃないかと…

A面ダイス問題(2)

A面ダイス問題の考え方最終版。Nの十の桁をq、一の桁をrとする。 q≦rのとき(ex.11,12,36,49):ダイス1,2双方が文字セット"12...q"を含まねばならない。(N以下の11,22,33,...の表現ため。ただしq=0の場合は空のセットとする。)さらに、9-q文字からなる文字セ…

A面ダイス問題(1)

『Short Coding』発売記念オフ会用問題 (id:yaneuraoさん出題)に挑戦。まずは力ずくで解を求めるコードを書いてみる。N≦9のときは置くとして、先にメジャーなN≧10のケースを考える。この場合、ダイス1,2により1〜Nを表現する過程で、1の桁は0〜9の範囲をフル…