結婚式をされるお二人の写真を元に3DCGイラストを作成しウエルカムボードを制作いたします。従来の文字だけのものではつまらないという方にぴったりです。世界で一つだけのオリジナルウエルカムボードをお試しください。その他、似顔絵イラストのみも承ります。会社案内や商品カタログなどのパンフレット、ポスター、各種印刷物を目的としたイラストレーションを1点1点制作いたします。平面的な線画から3D CGまで様々なタッチで、お客さまのご要望にお答えいたします。またプレゼンテーションのデジタルカンプも承ります。プロダクトデザイン・インダストリアル・建築物・土木構造物・工業製品などの完成予想イメージを3DCG化します。
キャラクター、マスコットの3D化
会社ロゴの3D化
建築物・インテリアの3D化
お客さまの顔写真をもとに似顔絵イラストを作成しビジネス名刺を制作いたします。名詞に似顔絵イラストを入れると好印象がイメージとして残り、ビジネスにおいて大変有利です。ぜひ一度「似顔絵ビジネス名詞」をお試しください。会社案内や商品カタログなどのパンフレット、ポスター、チラシ、新聞・雑誌、CI計画、屋外広告計画、商品パッケージ等各種印刷物のデザイン、及びホームページ制作をいたします。またプレゼンテーションのカンプも承ります。各種印刷物のデジタル入稿用に写真修正いたします。デジタルカメラのデータをはじめ、元データがない場合でも印刷物からでも、あらゆる写真をデータ化し、修正・合成いたします。また、個人の方もお気軽にご利用ください。comを立ち上げました。3D似顔絵として「ペットの似顔絵」を始めました。3D CGのページに新作CG「腕時計」のを画像をアップしました。ご要望の多かった似顔絵ビジネス名詞の「似顔絵」単体での制作も可能になりました。のホームページOPENしました。下記検索ボックスに商品名を入力して、お探しの商品を探すことができます。
旅行先地名を入れて全国の宿泊ホテルを検索
情報商材が見つかる(簡単なキーワードを入力、例:FX)
知りたい情報商材が見つかる(簡単なキーワードを入力)
アトリエビームスは日本イラストレーター協会様よりプロの認可を受けています。
|写真修正・画像加工|広告デザイン|ホームページ制作|アクセスマップ|個人情報の取り扱いについて|
印刷物よりデータ作成
及び各種データ作成
特定商取引に関する表示
個人情報の取り扱いについて
お支払方法や送料について
イラストレーションの内容及び詳細はこちらへお問合せください。
営業時間のご案内
※メールでの御対応も定休日にはできませんのでご了承ください。また、担当者の都合上、メール連絡等多少遅れる場合がございます。3D CGはプロダクトデザイン・インダストリアルデザイン:など工業デザインの完成予想イメージ、建築物・土木構造物に幅広く利用されており、 これまで多くのお客様からご依頼を頂いており好評をいただいております。また、写真では生っぽく、手描きでは新鮮さに欠けるということからも、あえて写真ではなく3D CGで制作したものを案内パンフレットの印刷媒体に使用するといった需要が増えております。高品質な3D CGをお気軽にご利用ください。住宅用間取図パースや施設の間取り図パースもCGをもとに描きます。実際に存在する機械をあえて 3D CGにて制作するには意味があります。実物よりわかりやすい。複数ある機械の統一感ができて実物より見やすく、わかりやすいイメージとして相手様に伝わります。スタジオ撮影では費用がかかる。スタジオ撮影は費用だけで数十万円それ以上かかる場合もあります。そしてカメラマンの技術を要するので1点の撮影だけでまるまる1日かかります、大変な作業となります。また、大きい物の場合、スタジオ持込みが不可能な場合に3D CGは大変有効な手段となります。CG完成後に機械の形状が変わった場合でも修正が可能で、何度でも気にいるまで修正できます。これはCGにしかできないことです。腕時計のリアルを意識したな3D CGです。
■商品開発のための完成予想イメージ
|写真修正・画像加工|広告デザイン|ホームページ制作|アクセスマップ|個人情報の取り扱いについて|
印刷物よりデータ作成
及び各種データ作成
特定商取引に関する表示
個人情報の取り扱いについて
お支払方法や送料について
イラストレーションの内容及び詳細はこちらへお問合せください。
営業時間のご案内
※メールでの御対応も定休日にはできませんのでご了承ください。また、担当者の都合上、メール連絡等多少遅れる場合がございます。
その他の似顔絵3Dの制作について
ウエルカムボードだけに限らず、その他似顔絵3Dは様々な場面の記念品としてご利用ください。似顔絵のモチーフは男女、年令を問いません。
● 壮行会、 送別会の記念品として
● 記念式典でのプレゼント
● 卒業時の恩師へのプレゼント
● 卒業、卒団の記念品として
● 還暦記念の贈り物として
● ショップメンバーのキャラクター作りとして
その他似顔絵3Dの制作例
(※プライベートの作品につき、元の写真は控えさせていただきます)
●一式39,000円〜(似顔絵お1人様分・出力代込み、額代込み、税込み、送料込み)※御料金のお振り込み確認後の制作となります。ウエルカムボードとは違い、コスチューム、ポーズも全てオリジナルで制作させていただきます。※ウエルカムボードとは違い、コスチューム、ポーズも全てオリジナルで制作させていただきます。複雑なパーツを付ける場合オプション料金になります。
(例:車、バイク等の乗り物類、家、複雑なコスチューム、ペット等)
|写真修正・画像加工|広告デザイン|ホームページ制作|アクセスマップ|個人情報の取り扱いについて|
【株式会社 サーベル社】 新規オープンしました。コンピュータ浄書(DTP)にて各種楽譜を制作しております。ウェブ・サイトを総合的にプロデュースします。このコーナーでは、実際に当サイトや顧客サイトで使用しているJavaScriptを紹介しています。お問い合わせは下記メール・アドレスまでお気軽にお寄せ下さい。当サイトへのリンクは自由に張って下さって構いません。連絡は不要です。テーブルの行の色を自動的に交互に配色します。行数の多いテーブルで、後に行の挿入をする可能性がある場合などに利用価値があると思います。関数の引数には効果を適用したいtable要素のidを指定します。カンマでidを区切ることで、複数のtable要素を指定できます。
実行はbody要素のonloadイベントで呼び出すのが一般的でしょう
勿論上記サンプルのようにform要素やa要素で呼び出すことも出来ます。効果を適用したいtable要素にはid属性を設定しておく必要があります。奇数行、偶数行各々のスタイルをCSSで設定します。odd, even各々に違ったプロパティを設定しておくことで、交互に行の色が変わるという仕組です。指定されたtable中のtr要素は全てスクリプト中での対象になります。よって、サンプルのようにthead要素やtfoot要素を配置している場合、これらの要素中のtr要素に対してもスクリプトの効果は適用されます。
これらのtr要素のスタイルを変更させたくない場合には、CSSのセレクタを適切に設定しておけばよいでしょう
例えば上記のスタイル指定の後に次の記述を加えることで、thead, tfoot要素中のtr要素に対するスタイルは上書きされるので、スクリプトによりスタイルを変更されずにすみます。あるいは次のようにtbody要素中のtr要素というように限定したセレクタ指定もできます。しかし、thead要素やtfoot要素を配置している場合、これらの要素中のtr要素の数によって、tbody要素中のtr要素の奇数番目、偶数番目の判断が正確に出来ません。単に交互に配色されればよい場合には、このことについて気にする必要はありませんが、厳密に奇数、偶数を判断させたい場合には、スクリプトの引数にtableのid属性ではなく、tbodyのid属性を指定します。
ブラウザの対応
本スクリプトでは DOM関数を使用していますので、これに対応している必要がありますが、現行のブラウザであればほぼ動作すると思います。
スクリプトが動作しない場合を想定して、デフォルトの属性を適切に設定しておきましょう
上記のサンプルではtr要素のbackground-colorプロパティを利用する方法を紹介しましたが、セレクタを組み合わせることで、もっと細かい設定ができますので、チャレンジしてみて下さい。
特定商取引法に基づく表示
カート 購入する。
特定商取引法に基づく表示
埼玉県さいたま市西区飯田新田590-3
商品代金以外の必要料金
申込の有効期限
注文日より7日間
引き渡し時期
お支払い方法
お支払い時期
注文日より7日以内
7日過ぎてもお支払いがない場合は、キャンセル扱いとさせていただきます。原則として返品・交換はお受けしません。(郵送時の破損等、こちらに非がある場合はこの限りではありません。その場合の返品送料はこちらで負担いたします。到着後2日以内にメールもしくはお電話でご連絡ください。
屋号又はサービス名
カート 購入する。
お問い合わせ
送料/お支払い
特定商取引法に基づく表示
エステ系 新メニュー始めました♪
アトリエ BIBI:名古屋市瑞穂区のアートメイク タトゥー除去 アートメイク除去 ネイルサロン|お問合せ
■下記フォームにご記入後送信してください。■内容によってはお時間をいただく場合がございます。■Eメールアドレスに間違いがあると連絡できませんのでご注意ください。■返信メールが届かない場合は直接電話連絡ください。■全て記入必須になっております。
お問合せ項目
↓選択してください タトゥー除去について アートメイク除去について ネイルについて タトゥーについて BIBI ベースメイクについて まつげパーマについて スクールについて ショップについて その他
お問合せ内容
クリックすると地図ページがでます。
プログラム と 雑談 の 掲示板
[リストへもどる]
: バイナリ書換について
はじめまして
MSILのバイナリ構造を調べていたら
こちらのページにたどり着きました。コンパイルされた。
netの実行ファイルを
バイナリエディタで直接書き換える事で
ソースコードも無く
逆アセンブルしたコードをそのまま
アセンブルするとエラーになってしまうので
上記の様な方法を考えています。特にこれといった文献も見つからず。
突然の質問で申し訳ありませんが
ご存知の方がいればよろしくお願いします。
プログラム と 雑談 の 掲示板
[リストへもどる]
: 仮性人がベストらしい(笑
: かわかむり
アレの余った皮って、女の子は気持ちいいらしいよ
昨日もそのお
陰で5マンもらったし
プログラム と 雑談 の 掲示板
偶然発見しました。一応書いておきます。2の累乗制限がある場合は、補正された大きさが返るみたいです。
- 関連一覧ツリー (▼ をクリックするとツリー全体を一括表示します)
- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
> 偶然発見しました。一応書いておきます。
(英数字で8文字以内)
- 以下のフォームから自分の投稿記事を修正・削除することができます -
プログラム と 雑談 の 掲示板
上記の実験結果ですが
私の手違いでちょっと違う事になってたので
もう一回ためして書き直します。ご迷惑お掛けします。
- 関連一覧ツリー (▼ をクリックするとツリー全体を一括表示します)
▼ - マルチターゲットレンダリングの
- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
> すいません。上記の実験結果ですが > 私の手違いでちょっと違う事になってたので > もう一回ためして書き直します。> ご迷惑お掛けします。
(英数字で8文字以内)
- 以下のフォームから自分の投稿記事を修正・削除することができます -
プログラム と 雑談 の 掲示板
- 関連一覧ツリー (▼ をクリックするとツリー全体を一括表示します)
- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
(英数字で8文字以内)
- 以下のフォームから自分の投稿記事を修正・削除することができます -
プログラム と 雑談 の 掲示板
とりあえずDIRECT X をはじめたばかりでつじつまの合わない質問かと思いますが、デバイスの設定関係が良くわからないです。
例えば 画像に関するデバイスを複数のクラスで複数個設定できるのでしょうか
- 関連一覧ツリー (▼ をクリックするとツリー全体を一括表示します)
- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
> とりあえずDIRECT X をはじめたばかりでつじつまの合わない質問かと思いますが、 > デバイスの設定関係が良くわからないです。
> 例えば 画像に関するデバイスを複数のクラスで複数個設定できるのでしょうか
(英数字で8文字以内)
- 以下のフォームから自分の投稿記事を修正・削除することができます -過去問題の解答例を載せていきたいと思います。全言語制覇を狙いたいですが、とりあえずC言語系から充実させていきます。間違い、よりよい方法、分かりにくい点があれば掲示板、メールで受け付けています。
どうぞお気軽に
13問目(外接円)【まだ解けていません】
ページの一番上へ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。
今年(2006年)秋の本選優勝を目指そうというページ(まだ予選突破してすらいない)
私のねらいは「50万円+パソコン1台」それのみです。偶然見つけた、「パソコン甲子園攻略サイト」に影響されました。秋まで是非お付き合いよろしくお願いします。
ページの一番上へ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。
C言語での可変個の引数
h」のマクロを使うと思います。
x86系CPUでは普通変数をスタックに積んで関数を呼び出します(高速な呼び出しのためにレジスタで行う場合もあります)
つまりx86系CPUを対象としたこのマクロでやっていることはポインタ演算になるわけです。ボーランドとマイクロソフトのヘッダとライブラリに感謝します。まずはこのヘッダの中身を知らなければいけません。
詳細はこちら(別のサイトに飛びます)
引数のサイズを知る。アドレス演算をするためにはそれぞれの型のサイズを知る必要があります。そして、ソースコードを読む限り引数のサイズはintのサイズ以上なのです。というわけで以下のようなマクロを先に定義しておきます。いわゆる切り上げをやっています。自分のスタックアドレスに自分のサイズを足して次の値を取り出せるようにしています。今度は値の取り出しです。こんな感じです。コレは一番簡単です。本当に申し訳ないんですが、手元のヘッダファイルにはコレが載っていませんでした。まあ、上の三つで代用できるので今回はパスです。とりあえず上のをまとめたものに色々足します。/* 可変個の引数をサポートをする。あなたの環境で動くかは保証できませんが、興味のある方は試してみてください。
下がテスト用のソースコードです(本当はもっと色々な引数で試してみないといけませんね)
//自分で作ったものを利用する。
ページの一番上へ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。
実行ファイルとソースコード
ソースコードとヘッダ
私はGUI環境で簡単にコマンドを送ることが出来るマウスジェスチャが大好きです。
今回はそんなマウスジェスチャを作ってみましょう
64Bit環境でのテストはしていませんが大丈夫だと思います。まずは構想を練らなければなりません。今回はサンプルなのでこちらで決めさせて頂きます。右ボタンが押されたら始まり、離されたら終わる。
入力可能方向は4方向(斜め判定は無し)
同じ方向への連続入力は無し(普通はこうすると思います)
ある方向に動かすと反対側の移動量は0になる。
縦横の移動量を比較して多い方だけを考える(より自然な移動になる)
ウィンドウの外に出てもしっかりと動作するようにする(これをしないと変なことになる)
これだけですが、一応使用に耐えうる立派なマウスジェスチャ検出になります。
縦横の移動量を比較する理由
今回のサンプルでは一回一回の移動に対して移動量の比較を行います。何故かというと、斜めの入力を適切に処理するためです。たとえば斜め移動を行ったときにこれをしないと二つの方向が交互に検出されてしまいます。ですのでそれを防ぐためにユーザがどちらへより動かしたかったのかを判定するのです。今回重要な役割を果たすのが次のAPIです。32BitWindowsでは自分のウィンドウの上のマウスの動きしか知ることが出来ません。ですが、マウスジェスチャではマウスがウィンドウ外に出てしまったときのことも考えなければなりません。そのため上の二つの関数を使うことになります。これらは「自分のウィンドウ内でボタンが押されたマスカーソルをボタンが押されている間だけ追跡することが出来る」関数です。マウスジェスチャを行う上ではちょうど良いくらいの機能です。ちなみにキャプチャされた移動と、ボタンを放す動作は「WM_~」としてウィンドウプロシージャに送られてきます。マウスジェスチャを検出するために作る構造体です。C++であればクラスにまとめるのがベストかと思いますがC言語との相互運用を考えて今回は構造体です。
//方向を表す列挙型
//それぞれの方向への情報を持つ。
//マウスジェスチャを行うための要の構造体
それぞれの方向に有効判定を付けたのは2連続を防止するためです。その位置を起点にして累計移動量を出していきます。今回作る関数は下の4つだけです。
//マウスジェスチャのスタート
//マウスジェスチャの終わり
//マウスジェスチャの判定を行う。
//移動情報のリセット
再度のリセット関数は内部的に必要なるだけの関数なので使用者は使うことがありません。行っているのは「direc」の移動距離リセットと有効化です。
マウスジェスチャのスタート
//マウスジェスチャのスタート
//押されている間だのキャプチャを開始
マウスジェスチャ構造体、ウィンドウハンドル、位置を使ってマウスジェスチャの準備をします。
マウスジェスチャの判定
ここがマウスジェスチャの心臓部です。//マウスジェスチャの判定を行う。//有効なときだけ判定する。//情報を入れ替えておく。
//移動量を判定して縦横どっちに動くかを判定
//移動を検知したとき
//同じ向きが2度入力されないようにする。直感に反しないよう私なりに調整してあります。流れは次のようになります。
マウスジェスチャが有効かの判定
縦横の移動量を判定
左右(または上下)どちらへ移動しているのかを判定
移動量を加算
反対への移動量を0
その移動が有効であるかを判定
移動量が検出量に達しているかを判定
もっと良い工夫をお持ちの方もいると思います。色々な人に試して貰いながらどんな仕組みにするのかを決定するのが良いと思います。
マウスジェスチャの終わり
//マウスジェスチャの終わり
//マウスキャプチャの終わり
サンプルの使い方
そしたら、ウィンドウプロシージャの設定をします。マウスジェスチャはアプリケーションに大きな魅力を付加します。
使いこなせばボタンにカーソルを移動することなく素早く操作できるようにな
是非、実装を検討してみてください。
ページの一番上へ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。
GUI環境での強力な価値となるマウスジェスチャを
Net環境で行ってみましょう
1以上の環境
まずは構想を練らなければなりません。今回はサンプルなのでこちらで決めさせて頂きます。右ボタンが押されたら始まり、離されたら終わる。
入力可能方向は4方向(斜め判定は無し)
同じ方向への連続入力は無し(普通はこうすると思います)
ある方向に動かすと反対側の移動量は0になる。
縦横の移動量を比較して多い方だけを考える(より自然な移動になる)
ウィンドウの外に出てもしっかりと動作するようにする(これをしないと変なことになる)
これだけですが、一応使用に耐えうる立派なマウスジェスチャ検出になります。それと、今回は構造があまりすっきりとしていません。勘弁してください。
縦横の移動量を比較する理由
今回のサンプルでは一回一回の移動に対して移動量の比較を行います。何故かというと、斜めの入力を適切に処理するためです。たとえば斜め移動を行ったときにこれをしないと二つの方向が交互に検出されてしまいます。ですのでそれを防ぐためにユーザがどちらへより動かしたかったのかを判定するのです。32BitWindowsでは自分のウィンドウの上のマウスの動きしか知ることが出来ません。Netのアプリケーションでもそうなっているようです。そこで、「マウスのキャプチャ」を行います。このプロパティをいじるとマウスをキャプチャーしたり外したり出来ます。
//マウスをキャプチャ
//マウスのキャプチャを解除
インターフェイスとデータ構造
マウスジェスチャを検出するために次のクラスと列挙型を作ります。/// マウスジェスチャの判定を行う。
/// マウスジェスチャの有効無効
/// 四方向それぞれについての情報(要素の大きさは4)
/// マウスをキャプチャしているコントロール
/// 移動距離計算用の古い位置
/// マウスジェスチャの開始
/// マウスジェスチャの終わり
/// マウスジェスチャの判定
/// 4方向の情報をリセットする。/// 一定の方向に関する情報を持つ。とりあえずはこれらを実装すればちゃんとマウスジェスチャになります。下では重点項目だけ説明してきます。
マウスジェスチャのスタート
/// マウスジェスチャの開始
方向情報の初期化、位置のセット、コントロールから取得したウィンドウハンドルを使ってのマウスキャプチャを行います。
マウスジェスチャの判定
ここがマウスジェスチャの心臓部です。
/// マウスジェスチャの判定
//有効なときだけ判定する。//情報を入れ替えておく。
//移動量を判定して縦横どっちに動くかを判定
//移動を検知したとき
//同じ向きが2度入力されないようにする。直感に反しないよう私なりに調整してあります。流れは次のようになります。
マウスジェスチャが有効かの判定
縦横の移動量を判定
左右(または上下)どちらへ移動しているのかを判定
移動量を加算
反対への移動量を0
その移動が有効であるかを判定
移動量が検出量に達しているかを判定
もっと良い工夫をお持ちの方もいると思います。色々な人に試して貰いながらどんな仕組みにするのかを決定するのが良いと思います。
マウスジェスチャの終わり
ボタンが離されると、マウスキャプチャの魔法が解けてしまいます。よって、「MouseUp」イベントあたりでこのメソッドを呼ぶようにするのが妥当だと思います。
/// マウスジェスチャの終わり
まとめて使う。そしたら、イベントの設定をします。マウスジェスチャはアプリケーションに大きな魅力を付加します。使いこなせばボタンにカーソルを移動することなく素早く操作できるようになります。是非、実装を検討してみてください。それと、今回はサンプルなので使いやすさよりも説明のしやすさを優先させて頂きました。せっかくイベントという仕組みがあるのですからそれをしっかりと利用した方がよりよいくなると思います。
ページの一番上へ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。
Netの中の覚えておきたい例外
Netでは要求に応えられない状態の通知方法として「例外」という仕組みがとられています。その例外の中でも特に覚えておきたい例外を独断と偏見で選びました。
この名前空間にあるものは
Netの中でも中心に位置する例外です。いくつか、DLLや、型に関する通常使わないものも混じっています。//致命的でないアプリケーションエラーが発生した。//アンロードされたアプリケーションドメインにアクセスしようとした。
//メソッドに渡された引数のいずれかが無効
//null参照を有効な引数として受付にメソッドにnull参照を渡した。//呼び出されたメソッドで定義されている許容範囲外の値が引数として渡された。//同期オブジェクトの配列に1つのオブジェクトが2回以上現れた。//算術演算、キャスト演算、又は変換演算におけるエラーが原因でスローされる。
//整数値又は小数値を0で除算しようとするとスローされる例外
//浮動小数点値が星の無限大、負の無限大、又は非数(NaN)の場合にスローされる。//又は変換演算の結果オーバーフローが発生した。//間違った型の要素を配列に格納しようとした。//DLL又は実行プログラムのファイルイメージが無効である。//アプリケーションドメインをアンロードしようとして失敗した。//コンテキストの境界を越えてオブジェクトをマーシャリングしようとして失敗した。//共通言語ランタイムの実行エンジン内部にエラーが発生した。//引数の書式が呼び出されたパラメータの仕様に一致していない。//無効なURIが検出された場合にスローされる。//配列の境界外のインデックスを使用して配列の要素にアクセスしようとした。//無効なキャスト又は明示的な型変換に対してスローされる。//オブジェクトの現在の状態に対して無効なメソッド呼び出しが行われた。//破棄されたオブジェクトで操作が実行されるとスローされる。//プログラムに無効なMSIL又はメタデータが含まれている。//クラスメンバにアクセスしようとして失敗した。
//クラス内部のプライベートメンバ又はプロテクトフィールドに対して
//無効なアクセスが試行された。
//クラス内部のプライベートメソッド又はプロテクトメソッドに対して
//無効なアクセスが試行された。//存在しないクラスメンバに動的にアクセスしようとした。//存在しないフィールドに動的にアクセスしようとした。//存在しないメソッドに動的にアクセスしようとした。//要求されたメソッド又は操作が実装されない。
//呼び出されたメソッドがサポートされていない場合、//又は呼び出された機能を備えていないストリームに対して
//読みとり、シーク、書き込みが試行された場合にスローされる例外
//特定のプラットフォームで機能が実行されない場合にスローされる。//nullオブジェクトの参照をしようとした。//プログラムを継続するためのメモリが不足している。//間違った次元の配列がメソッドに渡された際にスローされる。//保留状態のメソッド呼び出しが多くなりすぎ、実行スタックがオーバーフローした。//クラス初期化子によってスローされた例外をラップするラッパーとしてスローされる。//型の読みとりエラーが発生した。//開始メソッドが指定されていない事が原因でクラスの読み込みに失敗した。//アンロードされたクラスにアクセスしようとした。
//オペレーティングシステムがI/Oエラー又は特定の種類の
//セキュリティエラーのためにアクセスを拒否する場合、スローされる。見た事のある例外も多々あると思います。また、これらの例外の中には特にコードを書かなくても勝手に投げられるものも多いです。
自分でコードを書く時に覚えておきたい例外
System名前空間内でも特に次にあげる例外はよく使うと思います。
//メソッドに渡された引数のいずれかが無効
//null参照を有効な引数として受付にメソッドにnull参照を渡した。//呼び出されたメソッドで定義されている許容範囲外の値が引数として渡された。//オブジェクトの現在の状態に対して無効なメソッド呼び出しが行われた。//破棄されたオブジェクトで操作が実行されるとスローされる。//要求されたメソッド又は操作が実装されない。
//呼び出されたメソッドがサポートされていない場合、//又は呼び出された機能を備えていないストリームに対して
//読みとり、シーク、書き込みが試行された場合にスローされる例外
//間違った次元の配列がメソッドに渡された際にスローされる。
引数に関するもの、状態に関するもの、機能に関するもの
それらについての例外としてはこれらが妥当でしょう
覚えておくと、互換性の高いコードが書けると思います。
ページの一番上へ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。
Netの中の覚えておきたい例外
中学生の時に読んでからお気に入りの作品の1つです。「星界の紋章」「星界の戦記」「星界の断章」という名前で本が出ていたと思います。この前アニメを少し見たのですが、キャラの絵はともかく雰囲気がとても好きになりました。宇宙の広さと暗さを感じる作品です。ゴースロスの戦闘も見たのですが、痛ましい描き方で悲しくなるのですが作品に入り込めました。
電磁シールドを突破して陽電子が戦艦に穴を開けていきます(武器の名前あっているのか
電磁シールドが無くなった瞬間は響きました。メカニック系はよく分かりませんがコンピューターのUIには古さを感じました。
でも、私はそんなに嫌いなデザインではありませんでしたけど
全体的なシステムとしてはほどよいサポートとして描かれているような気がします。
人工知能系分野の現状を考えるとあれくらいがちょうど良いかなと
まあ、全部見たわけではないので全部についてな訳ではありませんが
全体的にあまり古くさく感じず良かったです。図書館でそんなタイトルの本を見つけた。少し読んでみたい。と思って少し調べてみた。
あれ、なぜ「エニアック」
まあ、ノイマン型パソコンの解説読んだら確かにと思えるけど
この流れでいくと、あの回路を書き込める4文字の(FPGA)とかもそれに当たるのかな
パソコンを使わないように
パソコンに頼りすぎないように最近気を付けようとしています。
視力の低下とか、時間の消費とか結構してしまうので
でも、パソコン使わないとサイト更新できないし、プログラムできないし
本気で編み物習おうかな
・・・別な今しながら文章書くと意味不明になりますね
ごめんなさい。「ジハイドロジェン・モノオキサイド」非常に危ない物質です。知らない方は調べておいた方が良いです。
便利で簡単になる影に
人に対して多くの事が要求されればその中で自分の居場所を見解けることは容易になると思われます。たとえば、人が多くのことをしなければならなければ「人間誰しも取り柄がある」理論の的中率が高くなります。
まあ、それが一番な訳ではないけど
何言いたいのか分からないですね
最近体力が衰えたせいで寝たり無くてたまりません。
生きていく上で体力は必須ですね
他の色んな能力さしおいてそれだけは必須と最近本当に思います。電算部なんかをしてると体力だだ下がりで大変です。
少し体力付けないと
特にスパコンはキツイだろうからその前に
というものを同居人が調達した。勝手に私のパソコンにドライバ以下ユーティリティーソフトをインストールして使っている。そんな同居人に最近絵を描くように迫られる。
はっきり言って私は絵が下手なのだが仕方なく見よう見まねで書いてみる・・・
というわけで落ちていた画集をトレーシングペーパーで写し取ってみる。
抜けていた線を足して眺めてみるとなかなか良い感じ
小学校の書写と漢字練習を思い出しました。
写してみて、ただ写すのってどうにもならないなと思ったり(練習にはなりそうだけど)
絵って難しいですね
ちなみに家にはタブレットもあったりする。ゲームする時に便利だから私も使っていたりする。
IL命令を実行できるチップ
というのはないのだろうか
いや、それを作ってはいけないのか
でも、OSの仮想化の先では高速化のためにまた良き昔が出てきそうな
それでなくても仕組みの本質的な理解のために電子工作、マイコン、アセンブリ言語はやっておいた方が良いと思う。
言わずとしれた有名コマンド
Windowsを使っていると標準のテキストボックでは一回分の履歴しか記憶していないことが気になります。大抵はそれでよいのですが(メモリ的にも)メモ帳を作る時にさえそのままというのはいただけない。でも、ちょっとだけ良いところがあって連続操作分を一気に戻してくれる点である。これは時と場合によって良い悪いが別れるだろうが薬指の負担が少なくて使いやすかったりする。普通、文字を削除したければバックスペースやデリートを使う。
そこで「元に戻す」を利用する場合何らかの大きな単位で操作を戻したいということだろう
それを見越した実装をした方がもちろん使いやすい。ちなみに、この操作単位での「元に戻す」の内容はエディタによっては独自の観点から整理実装している物もある。
「元に戻す」マスターを目指して色々と試してみるのはどうだろうか
一度書いた文章を見直すのは結構めんどくさい作業ですよね
まあ、さぼっていたらこの有様です。
誤字脱字の多いこと多いこと
先生が事故に遭ってしまったのでどうして良いか困惑中です。
レポートは誰に出せばいいのだろうか
それよりも問題なのは今後の実験スケジュール
いやはやどうなるのやら
100%ジュースって表示をみると、大抵「香料」とかと書いてありますよね
その理由は「濃縮時に飛んだ香りを戻すため」と昔父に教えてもらいました。そのころの私は濃縮して水をとばすということを「粉」にしていると思いこんでしまいました。
実際には4~7倍程度の濃縮を行っているのですね
こういうようなことにもしっかりとした決まり事がある物なんですね
私の好きな100%ジュースについてでした。表現の統一がままなっていない。語尾もそうだし、言葉も滅茶苦茶になっている。
自分はこれそれでもある程度理解できているが、ちょっと公開に耐えうる品質じゃないなと
問題との相性が良かったようで、予選通りました。去年は自信あったけど今年はダメだと思っていた。良い結果でとても嬉しいです。放課後の時間に愚痴を聞いてくれた1年生さんに感謝です。でも、今年の実装時間はきつかったので来年あったらもっと余裕を持って作れたらなと思います。
ここをみているスパコン参加者の方がいたら東京でお会い(大阪だったらどうしよう)しましょう
というわけでアルゴリズム解説を始めようかな・・・(の前に他のをしっかりやらねば)
翻訳で少しは力がついたかと思われた英語はダメでした。でも、私の所属クラスは歴代でもかなり悪い成績をたたき出すクラスなので順位はそこそこです。
良いのか悪いのか・・・
Vistaでのグラフィックの拡張と使い方は耳にはいるのですが、音の拡張については聞いてもその扱い方は聞きません。
どなたかご存じないでしょうか
実は今も作れたりして
いや、そうじゃなくてWPFとかとの関連でお願いできればありがたいです。
いや、自分でちゃんと調べればいいのですよね
今の私の経済状況ではスタートと同時にVista稼働無理なので身が入らないのですよ
内容が「教えて欲しい」ばかりで申し訳ないです。しかもサイトの方更新できなかった。こちらもごめんなさいです。
「教えて欲しい」の方は掲示板の利用促進にならないかなと思って書いています(それと自分で忘れないためのメモ)
今年はダメです。実装時間が足りませんでしたし、アイデアも足りませんでした。
ごまかしのかけ方
ハードディスクの容量って1000でやるので誤魔化されますよね
そのうち改めてくれますよね
「流」は「流れ」と書くのが正しいのだろうか
名詞と動詞で違うのか
ATOKでは両方出るからよく分からない。何か自分が一番の優先順位で行っている事に時間の経過が必要であり待つ時間が出来る場合、その何かを犠牲にすることなく他の何かを同時に行うことが出来る。反対にその一番がこちらの時間全てをかけても追いつけない速度で進行する場合それすらも犠牲にしながらそれを追ってゆくことになる。
時間がかかることも悪くないのではないかという話
これから全般
やっとやる気が出てきました。今週末にはサイトの更新が出来そうです。
とりあえずSoundを更新したいかな
プログラムは慎ましい方がよい。
Netのコマンドラインプログラム
かっこいいGUIや超高機能ソフトも良いですが、起動するとやることをやって終了してくれるプログラム
本当に動いてくれたのかも分からないくらいこっそりした物
それ単体では一定のことに関してはちゃんと出来ても高機能といえるほどの機能はついてない。物によりけりですがコマンドラインで操作できるプログラムはなかなか便利です。
毎日同じ操作ばかりしているとだんだん飽きてきますから
それはともかく
Netのコマンドラインプログラムってちょっと起動のもたつきが気になったりします。
ウィンドウ物だとあんまり気にならないんですけど
まあ、色々と裏側で頑張っているようです。
C言語における多次元配列のキャスト
ちょっと手間取ってしまいました。試してみると意味が分かります。それにしてもなんて難しい区別なんだ。
何もしなくても良い日
人間後から考えるとどうでも良いことを考えてしまった時間や何も考えていない時間があった方が豊かになるような気がします。
物質世界の限界
コンピューターはデジタルではない。デジタルに見せかけたアナログ機械である。
まあ、表に出る概念としてはデジタルだからそれで良いのですが
そんなことより問題なのはインターネットの情報は結局物理依存を断ち切れないと言うことです。
情報は殺すことは容易ではないですが、情報が寄生している宿主は情報よりも殺しやすいです(実体のない情報を殺す方法は思いつかないが、宿主を全部殺すことは可能な気がする)
情報それ自身を考えた時にはやっぱりリンクではなくコピーの方が良い。
宿主が増えることは情報にとっては優位になる(物理的に安定する)
逆にリンクが増えることは情報にとって良いこととは限らない。確かに誰かの目に触れることが増えればコピーしてくれる可能性もある。だが、誰かがコピーを行う前にリンクによって宿主が潰れる危険もある。せっかく物理的な制約をある程度無視できるはずなのに人間が物理的な制約をかけてしまっている気がします。
多分、情報を自分とリンクさせておきたいのでしょう
情報を『情報』としてみているのではなく自分の一部として
ちょっと気になった。
そしたら春の七草の1つナズナでした(セリ・ナズナ・ゴギョウ・ハコベラ・ホトケノザ・スズナ・スズシロ)
ぺんぺん草一本生えないとはこの草のことだったのですね
生命力、繁殖力が強い草のようです。スパム投稿が多い。掲示板へのスパム投稿が多い。perlで自作掲示板を作ろうかとも思ったが今はそんなことをしている場合でもない。適宜消しているが利用者のいない掲示板の整備も寂しい物だ。
もっともここの掲示板を利用するほどのことなんて無いのが原因なのだが
ほぷしぃ-Perlによる掲示板の作り方
インターネットは強いのか
インターネットの機械的な部分は確かに非中心的でありどこか一部が壊れても全体としては利用を行うことが出来る。そこら変のサーバーが落ちているなんて日常茶飯事だ。だが、人間が膨大な情報に対してアプローチをしていく時には何かしらのとっかかりが必要になってくる。が使用不能になっても困らないが、googleが使用不能になるとすごく困る。確かにほかの手段での情報へのアプローチは出来るが、よく知りも知らない物では知っている物を扱うよりも効率がすこぶる悪い。確かに、仕組みも、実際の情報もある程度は分散されている。そこらへんは信用できるインターネットである。でも、有益な情報源はある程度まとまってしまう。
情報はバックアップが沢山あっても、検索エンジンの結果はバックアップが足りないかも
未来の検索エンジンは分散型の目録になってくるのかな
(うん、上手く想像できないけど)
そういえば梅雨っていつまででしたっけ
と思って調べてみたら、平均期間では東北地方北部なのでつい先頃入ったばかりですね
もうあけたかなと考えていた私の季節感覚はダメダメな模様です。
物事に関する感覚
才能とかと表現すると先天的な雰囲気が出そうなのでめんどくさい言葉で話すと、絵でも、文章でも、プログラミングでも、書く(描く)前に本人の頭の中ではもうやるべき事が分かっているんですよね(多分)
そういう事って、分かる人には分かるけど分からない人にはなかなか分からないんですよね
でも、その力はやりようによっては身に付く物だし、ちょっと方面が違うと身につけるの時間がかかってしまう物なんですよね
多分「センス」とかと表現するんですよね
ここまで書いたら、この話にまったく意味がないことが分かりました。
センスは大事ですね
ビビッと来るんですよね
色んなセンスを身につけたい物ですね
が、たまっていてサイト更新の優先順位が下がっています。
ああ、今年は東京行けないな
最近自分の精神が不安定です。多分自分の寄って立つ「何か」を無くしてしまったせいです。人間自分を維持するために色々なものの中に自分を映しながら生きている物だと思います。
その移す対象が無くなたっり、像が薄くなったりするとすごく不安になるんですよね
人間関係、能力、過去、未来・・・それをを組み合わせて作った自己世界(自分だけの居場所)
自分を維持するためのもう一つの世界ですね
多分人間は世界を意識し出した時から本来の世界ではなく、その世界を見だすのだと思います。でも、人間その世界だけを相手にして生きてゆくことは出来ません。本来の世界、そしてそこにある他人の世界と繋がらなければいけません。
自分の世界がある程度大きく、基盤がしっかりしていれば他の世界との交わりはそれほど大きな影響がないでしょう
むしろ自分の世界を更に大きくすることさえあります(無垢な状態からの自分の世界の想像ではそういう過程を踏んでいる)
でも、他の世界との交わりによって自分の世界を否定されたり、大きな流の中にはまりこんでしまったら・・・大変ですね
精神の病は人間にとってかなり大きな病気です。でも、人間(又は個人世界)の防衛機構は結構良くできていて「同化・離脱・切り捨て・・・」等を行い薄れた像の回復を行います。まあ、意識せずとも精神はそのような自己防衛を絶えず行っています。
まあ、自己の不安定はそんな防衛機構がキャパシティを越えた攻撃にさらされているんですよね
それに防衛機構自体も他の世界と繋がることによって機能します(殻にこもるは別だけど)
だから、その防衛行為自体が新たな隙を作ってしまうことさえあり得ますから
結構精神って大変なこととしてますね
これを再現する必要があるのかな
ああ、先が思いやられる。
時々、こんな内容を書きたくなるんですよね
まあ、話半分、意味がない物と思ってください。なれないことは大変だ。CGIをサーバー上で動かしたら失敗して色々やっていたら、カウンタと、掲示板も壊してしまいました。とりあえず復旧しましたが不具合があれば教えていただけるとありがたいです。
多分随所で文字化けが出るでしょう
文字コードめんどくさかった。何となくやりたくなって初歩の初歩作品を作成しました。役に立たない。
世界で計算できたら
世界は一定の法則に基づき一瞬前の状態から一瞬後への状態を計算している。
もちろんただそうなっているだけでもあるが、人為的にそのスケールでの演算が出来れば楽しいかも
よくよく考えてみれば、パソコンだって人間の精神活動だってそういう部分からの推移でしかないけどそれを量子、素粒子へと小さく、そして世界規模の大きさで行うことが出来れば恐ろしい演算スピードになるような気がする。
その小さなスケールでの行いではきっとエラーも多いだろうけど、頑張って大規模な並列化でカバーしてって
心を操るウイルス
パソコンに自立知性を持たせるためには「本能」が必要なのかな
近々テストがあるので更新が止まっています。しかもその後にはスパコンがあるので更新スピード更に減です。このサイトは「×××以上のサイズでご覧下さい」などの制限は設けていません。元々がテキストサイトなので、別にそんな制限が無くても大丈夫なためです。でも、閲覧するのに快適な環境はあります。トップページのように2段組になっていたり、IL翻訳のように要素がネストしているときは適度に大きい方が良いです。時々、ブラウザの画面を小さくしてテストするのですが、やっぱりPDAサイズでの閲覧では横の空白が気になってしまいます。
大きな画面の時には程度にあった方が良い空白も小さい画面では邪魔ですね
一応、こだわりとして印刷時の見栄えがあります。
「preタグ」を使っているので、適度な改行の挿入を行ったり、印刷用のスタイルシートを用意してなるべく枚数が少なくてすむように工夫していたりします(空白を読みやすさのギリギリまで削っています)
こんな事を話すのも、今日ちょっとスタイルシートをいじってみたからです。
もしも、何かお気づきの点があればどうぞ
中身がダメな文章なので、見栄えをいじってこれ以上読む人を減らさないように頑張ります。
そうそう、私はずっと「カスケード・スタイル・シート」だと思っていましたが、「カスケーディング・スタイル・シート(シーツ
)」なのですね
いや、もしかしたら日本語では今までの言葉で通じるのかも
昔、「tri-」という接頭語が気になったので調べ直してみた。1つからなる。なんか色々間違っているような気がしないでもない。
ページの一番上へ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。
1週間半ほど更新停止です(通算2週間ですね)
東京行ってきます。
仕方のない事だけど
今までいけない事に気付いてそれを捨てた。でも、壁が現れてそれをこえるためには捨てたものを広う方が良い事に気付いた。そして、再びそれを手に取った。
それで良いのだろうか
コードを書き書き
していたら夜の3時
お風呂に入って寝ようと思ったら風呂場で鼻血出して目が覚めたので本を読んで寝た。
翌朝起きたら12時
・・・なんだかな
手首の手の平側の血行
キーボードを打つ時手首をくっつけたままなのでそこの血行が悪くなりそう
という訳でタオルを敷いてみる。
昨日からしているネタ
実はちょっと不具合があるので
と思ったら、引数の順番が反対だった。シビアな世界です。
誰が必要とする情報なんだか・・・
こことか、一つのお題で書いていますけど、時間的には1日の中でぽつぽつと書いています。
そのため、自分で書いておいて突っ込みしてしまうわけですけど、MCIダメですね
色々と試しているのですが、動画が再生できなかったり、自動早送りになったり、色がにじんだり、音が出なかったり
ダメダメですね
が、分からない。
いや、どうしたものか
というわけで、DLLを作成する事に・・・
そんなコトするくらいだったら、C++/CLIとか使えばいいかも
半日かけてDLLを発見
いや、良かった良かった。
Netのフォーム関連
誰かどういう仕組みなっているのか教えて欲しい。すごく気になる。いや、逆アセしたコードじゃ辛すぎる。それに私はWin32の表面しか知らない。この二つは微妙に挙動が違います。一番の違いは、データ保持の基準で、RECTは左上と右下の座標を保持します。
まあ、みんな普通に通り過ぎてしまうところですね
ちなみにRectoangleのWidthやHeightにマイナスの値を設定すると、すんなり通って、結果が変な事になります(左上の座標よりも右下の座標の方が左上になったりする)
気をつけましょう
今の今まで気がつかなかった。
作成CGIを勉行がてら作成
意外と手こずった。実は一つかなり大きな妥協点があります。フォームの検索文字列文字コードはちゃんと設定通りにEUC-JPなどを出力しますが、文字コード変換がどうしても出来ずに一緒に表示されるサンプルの検索文字列文字コードは常にutf-8です。まあ、たいした問題ではないので公開です。へたれですが、ソースコードが知りたい方は言って頂ければ差し上げます。
夏休みに入ったので・・・
前半はちょっと忙しめです。
後半はゆっくりしているかな
というわけで色々と頑張るかなと考えています。
そうそう、組み合わせを考えると次のようになりますね
0をやっていくべきだと思うのですが、まだ微妙そうな部分があるので・・・
画像の読み込みくらい作らないと
メモリを増設
Net系はメモリ沢山食べますからね
どうにかして、Netのメモリ食いを止められないものか
をしっかりと作り直しました。使い所がよく分からないものですが、要望があれば機能付け足したりしてみるかもしれません。
生成物のページで公開中
友人がまた1人サイトを開いたようです。
後でちゃんとリンクをつけなきゃ
私の友人だと思う人は掲示板に書き込んでくれたらリンク貼ります。
って、ここを読んでいる友人は果たしているのか
それが問題だ。
特徴を述べますと
SSIでご利用下さい。出てくる結果を自由にタグで囲め、色々と装飾可能です。
ロック機構無し
その代わりに、二つのログファイルに交互書き込みを行います。
壊れる時は壊れます(笑い)
手動復旧してください。
そのままの利用、改変、再配布、自由
掲示板メール等で要望があれば答える時もあります(口答でも可)
生成物のページで公開中
昔作ったアプリです。そこのデータを半透明ウィンドウにフレームレートと同じ回数描画します。結構面白い作品に仕上がっています。実用性はほとんどないです。
生成物のページで公開中
パソコンをつけない日
ここを更新するためにはどうしてもパソコンをつけなければならないのにパソコンをつけられない日や、パソコンをつけたくない日があります。昨日は地元神社のお祭りに行って来ました。もっぱら友人とぷよぷよフィーバー2をしていました。昔64でぷよぷよはした事があったのですが、フィーバーモードは慣れるまで辛かった。友人にぼこぼこでした。ネタがないので、当然の事を書いてみる。当たり前の事ですが、C#で「struct」の中に自分を参照するようなメンバ(またはstructの循環)があるとコンパイルに失敗します。
回避する方法ってありましたっけ
ちょっと、CGIカウンタで、ロック機能のチェックをしました。一時的に結構負荷をかけたので、他の方にはごめんなさいです。テストは微妙に失敗でした。負荷がかかりすぎて、CGIが実行されない場合があったためです。
分かった事としてはよっぽど頑張らないとカウンタは壊れないという事です(カウント漏れは起きる時には起きます)
そして、壊れる時には壊れると
今になってみれば、もう少し工夫すればしっかりとテストが出来たなと
まあ、もう遅いですが
というわけで、カウンタが自作のものになりました。
というわけで、とりあえずカウンターを自作
といっても、ロック機能すらない代物ですが
今までeucでしてきましたが、コレで統一できそうです。
掲示板頑張らねば
夏休み中にする事
とりあえず、掲示板を作りたいなと思います。
今の掲示板、機能は満足しているのですが、出てくるHTMLがすごい事になっているので
それにしても、これだけのものだと作るのにだいぶ骨が折れますね
意外と見られているページ
「WAVEファイルのデータをリアルタイムに書き換えて再生する」が意外と見られているらしい。
まあ、DirectXよりも使えそうな記事ではあるから納得
・・・って、別件でたどり着いただけ
社会-広がりと爆発-
とかと意味不明なサブタイトルを付けてみたかっただけ
まあ、私の考え無しの文章にはふさわしいレベルでしょう
というわけで今日もいい加減な事ををつらつらと
人間は欲のある生き物
また、自分を維持するためにユニークになろうとする生き物(普通の人間になりたい人も、一番の普通、絶対的なスタンダードに立ちたいと考えていると私は勝手に思いこむ)
だがしかし、世界とはそう言う事で言えば意外と広いもので一番になんてそうそうなれなどしない。いや、だからといって方法がないわけではない。井の中の蛙になればいいだけの話である。自分を否定する要素の排除を行う。もちろんの事だが、唯一の解決方法な訳ではない。だが、まあ、それでは生きて行きにくいわけで人間は勝手に枠組みを決めて世界を作る。それは本来の世界の一部である。コレに言葉を当てはめるとすれば、『社会』となる。「昆虫たちの社会」「車社会」「人間社会」これらは全て枠である。
世界を区切る国境線のようなもの
もちろんその境界はしっかりしている事もあれば曖昧な事もある。ココで重要なのは中の人々にとってはそれが世界である点である。つまり、小さな世界を自分で作る事によってその中の一番になり自分を維持するというわけである。・・・とまあ、ただの暇つぶしです。
誰か文句の1つでも言ってくれるとありがたいかも
普通は心の中にしまっておくか、友人に話してバカにして貰うかなのですが、新たな試みという事で(私にとって)
何の裏付けも、しっかりとした理論武装もありません。次の二点を言ってみたかっただけです。人はユニークだと思う事によって自我を維持する。今思えば、その人の人生自体がユニークとかとも思わなくもないです。でも、人は何かにすがって生きているものだと思います。
明るく締めくくりましょう
別に負けても良いじゃないですか(ただし、負けている事をユニークにしてすがってはいけない。
それはもっと悪い)、あなたはあなたの出来る事を今の『社会』ですべきかと
嫌になったら今の社会から逃げればいいじゃないですか
平行宇宙の存在を私は疑っているため世界は1つだと考えておいたとしても社会はいっぱいあります。
それこそあなた1人の社会だってあります(ただし、それは難しいというより『社会』という言葉の統一が出来なくなる)
私がいなくなったって世界はどうもしないでしょう
でも、私は私が行きたいからここにいます。誰も必要としていないかもしれないし、誰かが必要としているかもしれない。そんなのはどうでも良い。もちろんユニークになりたい事もある。その時はとりあえず頑張ろうと思う。
だがら今は・・・
本を読んで寝よう
上の話がいささか邪魔であるが私のもう一つの人格が消すのを許さないため放置、でないと作業を続けられない。
えぇっとですね
「点の内外判定」が出来ました。って、前にも書いた。方法は簡単、どこかの方法にずっと延ばします。
その時交差する線の数を数え、奇数であれば中
偶数であれば外
はい、意外と簡単でした。諦めていたら、偶然どっかのページ載っていたので参考にしました。あと、ちょっとエレガントじゃないです。気付きました。最大範囲と最小範囲四角形で、x,yを絞ればOKです。
今作り終わったばっかりなので後で直しましょう
めんどくさいです。
C言語は不滅か
友人に「C言語って無くなる。」と聞かれた。私は次のように答えた。「多分C言語は無くならない。
アセンブリ言語よりも簡単で、それでいながらポインタ等細かいことまで出来る言語だから」(実際にはもっと言ったこともあるけど)
この予想が外れたとしてもC++がある限りCは消えてないことになると解釈するから大丈夫
と、そんなことはともかく
結局C#だけではOSは書けないですよね
前提条件が厳しすぎて(C#のOSもあった気がするけど)
それに、HLSLとか、今後もCライクな言語は消えないでしょうから
プロトタイプが出来た。
でも、これMPCとたいして変わらないソフトなんですよね
「ピクセルシェーダ使ってリアルタイムエフェクト」私としてはMPCよりももっと使いやすくしたかったのですが、ちょっと無理そうです。C#で作ろうとしているのですが、アンマネージリソースとの兼ね合いで例外が多発します。
どうした物か
U20でアプリケーションを作っている途中でどうしようもなく気になってしまったことはTextBoxで「元に戻す」が1回しか使えないことではなく、「全て選択」がctrl+Aで出来ないことです。これは前々から気になってた事でした。というわけでRichTextBoxを使ってみたのだが、こっちはこっちでハズレでした。
貼り付けを行うと書式まで持ってくる(まあ、しゃあないんだけど)
というわけで全て選択だけ実装した。皆さんもちょっと長めの文字を打つテキストボックスでは上の機能を付けてみてください。些細なことですが、キーボードショートカットになれた人には嬉しいと思います。何か色々とバグがあるらしいです。私の環境ではボリュームをいじるとビデオの終了通知がされなくなりました。それに、Dispose()を呼び出すと高確率でメモリの不正アクセスになるのもどうにかして欲しい物です。
やっぱり正攻法でC++が一番かなぁ
メインメモリを湯水のごとく使っておきながらビデオメモリだけ仲間はずれなんていけないですね
将来的にはビデオメモリもガベージコレクトかな
それにハードウェア業界が潤う。
あんまり本気にしないように
アクセス時間がシビアなのにその上ガベージコレクタなんて動かしたら・・・
でも、メインメモリに載っているリソースよりもビデオメモリ載っているリソースは粒度が大きい(多分)
そうだとしたらガベージコレクションも可能かも
ただし、再配置は大変かもしれない。昨日はどうやら七夕だったらしい。
何か願っておけば良かった・・・いや、いつも願っているな
HLSLで書いているのですが、対応するC#側のAPIが変わってしまってよく分からない。
サンプル読んでも古くなっているし、新しく出役に立ちそうなのは独自のフレームワークを使っていて解読に時間がかかりそうだし、日本語で出ているドキュメントは当然ダメ
一応英語のドキュメントではちゃんとしているけど・・・やっぱりちょっと分かり難い。
実際に使えるコンパクトなサンプルがないと
と思ったら日本語ドキュメントの意外なところに説明が
まあ、足りないけど役には立った。
「そもさん、せっぱ」
「せっぱ、そもさん」の順番だと勘違いしていた。
何も2ヶ月ごとなんて高頻度で出さなくても
と思いつつも、ダウンロードしてしまう。
やっぱり無いと困るから
サイトのソースコードを読んでいてダメなところを発見
ダメダメですね
書き換えないと
0で使えない。
こまったなぁ
というわけで最新版を・・・
日付感覚とスケジュール
いつの間にやら7月に
今日1つ書類を出したのですが、事務の人に3日とささやかれました。
今日は四日ではないか(正確にはもう5日ですけど)
ちゃっちゃかとやらなければスケジュールが詰まりそうです。
問題はU20構想は出来てるけど、どれくらいで実装できるか
昨日布団を干したのですが、やっぱり柔らかくなりますね
これも後で調べないと
父親は手っ取り早く布団乾燥機でふかふかにしています。何だかなーという感じです。色々関連項目をあさっています。
もしも「非ノイマン型コンピューター」が関連項目だとすればですが
お願いだから先読みしてくれ。マイクロソフトのページでオンライン講座みたいなのを見ているのだが、wmvのファイルを帯域が空いているのに先読みしてくれず15秒おきにかっつんかっつんする。見ててつらい。ちゃんとバッファして欲しい。
言葉に表しづらいのですが、何か違うような気がするんですよ
Netも楽しく使わせていただいているんですけどどうしてもつぎはぎが見えて来ちゃうんですよね
それに私としてはこの方向が最終的なコンピューターの向かう先だと思いたくないんですよね
自分でも説明できないんですが
Vistaについてはコンセプト、技術、インターフェイス、からもう一度理解し直してみます。とりあえず、今日感じたことは、XAML等WPFは今までしようとしていながらしていなかったインターフェイスの開発の改善ということです。ユーザーへの見せ方というよりも開発の側を変化させようとしている気がします。でも私としては、記述がスマートになるのは嬉しいですが、格好いいGUIが出来ても「ふーん」という感じです。
私としては察しの良いOSが出て欲しいですね
色んな事を先読みして補助してくれるようなOSが(別に上の話と無理矢理からませた訳ではありませんよ)
それと、これは仕方が無いことではあるのですが、「隠蔽が深くなるのは逆効果である時もある」ということです。整理整頓はすべきですが、隠蔽はほどほどにしないと絡み合いの中で「本当」を見つけにくくなります。「それが何のためにあるのか」よく分からなければ誰かの混乱を招くだけです。自分がどんなパソコンを欲しているのかよく考える必要がありそうです。
メモですが、今のパソコンは「合わせて貰って」「命じられて動く」それは将来的には「相手に合わせる」「自分で動く」そうなるべきなのかなと
特に今のインターフェイスはどんなに頑張っても相手に合わせてもえらっていますからね
しょうがない事
でも、妥協しなければ何かが見えてくるかも
アシモにスパコンを載せてみるか・・・ダメですね、上に載るプログラムがない。まだ1行も書いていない。部活の雑談で「制作時間:48時間」とかって書けたらいいよねという話題が出た。
基本部分だけなら何とか出来るかも
もっとも構想で半日くらいかかるだろうけど
一日はいつから始まるのか
検索かけたら1件出てきた。
何となく朝のような気がするけどちょっと違うよな
まるで「小さい秋見つけた」を歌ってくださいと言われて、元気よく「小さい秋、小さい秋」と歌っているようなkんあじ
はっきり言ってこれに対する答えに意味はないと思う。だけど、これを考える事やそれに含まれる「時間、思考過程」には意味があるかもしれない。
そんな余裕のある生活
そんなことに気づける生活
私は社会人になってもそんな人でありたいです。それに私にとってはまんざら意味がないわけではありません。
「朝に今日も一日頑張るぞ」と言って一日を始めた方が頑張れそうな気がするから
は、書いた日の日付にすべきですよね
でも、この日記は前の日付に昨日の日付で日記が書かれていたり明日の日付で日記が書かれていたりします。まあ、無駄なことを考える余裕がなさそうな日の分を先と後で分担しています。
ページの一番上へ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。あまり色々と終わらないうちに終わってしまいました。
何か凶悪そうな字面ですね
とりあえず今回のキャッチフレーズです。たとえば高機能で網羅的なシステムを考えます。色々なことは出来ますがその半面ものすごく簡単に出来て欲しいことが簡単程度になってしまっています。やりたいことを100%とした時大抵のことは凄く簡単なことで終わるはずな場合を考えます。
全体としてどうでしょうか
何が言いたいかというと「分離」です。非網羅的で簡単なことが凄く簡単にしかできないようにしてしまいます。反対に網羅的なものは利用手順が数段階難しくなります。ですが、全体としての簡単さは上がります。もちろんこれは偏った難しさレベルを持つものについて言っている場合です。ですが、これは意外と色んな所にあるものでプログラマーは日常的にその片鱗に触れています。私としては「網羅的であるか」よりも「全体としてどれだけ簡単になるか」を考えれば上手くいくのではないかと思います。というわけでそれを実践していきます。結果は・・・数年後にはでると思います。思えば、物事の解説も「非網羅的」な方が大抵利用しやすいです。
つまり、「簡単なことをするのだから簡単に知りたい」ということを叶えているわけですね
もちろん、網羅的も必要です。むしろ網羅的に対してフィルターをかけるだけです。
「非網羅的」万歳ですね
ただし、網羅的なものへのアクセス方法を残しておいて欲しいですね
たとえ数%でも網羅的でなければ解決できなものもありますから
いつの間にやら秋
朝晩が冷えてきました。
窓を開けていると寒いですね
スクリプターの作成
完成する目処のまったく立たないスクリプターを作成しています。色々と迷走しています。
修正しなくては
バグ取り、キャプチャ時のちらつき改善
その他、機能追加
やっと5問分作成
やっていないこと
手軽にパソコン上で画像メモをとる。パソコン甲子園のページを更新しようと思ったら、その支援ソフトを思いついて1日作ってしまいました。このソフトは、選択範囲のスクリーンショットを撮り、ウィンドウ化して表示するものです。
使い所としては次の通り
画面の一部分をメモしておきたい。ある画像を常に最前面に表示しておきたい。
ドットが荒れない拡大鏡
パパッとスクリーンショットを保存したい。
最前面表示機能がなくてオーバーレイ表示を行うソフトの画面を取得(かなり特殊な使い方)
ウィンドウズの制約上ちょっと不思議なマウスさばきをします(嘘です。
もっと直感的な操作が出来るようなソフトもあります)
一度使ってみていただけるとありがたいです。
何故月曜日は図書館が休みなのか
なぜでしょうかねぇ
後ろのウィンドウを呼び出すのがめんどくさすぎる気がする。ただ単にウィンドウがあるだけで使いやすい気がしない。かといって、タイル分割のウィンドウシステムを求めているわけではない。もっと手軽にたくさんのウィンドウを扱えるシステムが欲しい。それぞれのウィンドウには欲しい面積がある。また、同時に並べなければいけないウィンドウもある。
重なっても良いけど、一発でウィンドウを呼び出せるシステム・・・
まあ、そこら辺は下にあるバーにウィンドウリストを出して対処しているけど、情報量が足りないような・・・
別に、角が丸かったり、モーションしてくれたり、バーだけが半透明になっていたりという機能なんていらない。私としては、ユーザーの操作を調べ、ウィンドウサイズと、ウィンドウの透過率を調節してくれるシステムが欲しい。それが、難しいのであれば、対象ウィンドウの選択カ所を残して半透明化という機能でも試験的に実装してほしい。対象への操作は同時に一つだが、参照は同時に複数になるからである。また、選択カ所をスナップにして最前面表示にするソフトウェアも良いと思う。
要するに面積が足りないだけなのだから、画面を360度の全展開出来れば私は不満がないのだけど
指定範囲をキャプチャして最前面表示
するプログラムを作成中
キャプチャ取得までは完成
後は、選択範囲をもっと直感的に取得できるようにしなければ
・・・できた。紹介は次の日の雑記にあります。
時間が・・・
いつの間にか後夏休みが10数日
ああ、パソコン甲子園間に合わない。極端に低下して、いっこうに進みません。
ダメダメですね
どうせ最後は一緒だけど
次のコードをILに落とすと違うコードが出来る。
ただし、コンパイラ依存だけど
どちらがよいかは非常に微妙だろう
いや、最終的には違いがなくなるかもしれないけど
例外処理の方針
ちょっと前に本を読んで以来私の例外方針は次のようになっています。Exceptionなどの継承もとの型で例外をなるべくキャッチしない。理由、例外が細分化されている意味がない。想定外の例外が混ざる可能性がある。例外は例外のまま伝播させる。boolなどに直さないようにする。
これをちゃんと実践するために、例外関係についてもう一回勉強中
ちなみに、Direct3Dのコードは「何か起こったらすべて終了」という方法で動いているのでこれまでのサンプルはとりあえず無修正
新しく項目を作って例外についてはその中で触れたいと思います。ユーザー入力に反応するようなプログラムじゃない時点で例外処理=終了処理が多いような気がする。
デバイスの初期化は成功、メッシュは失敗
サンプルでは起動している意味がないからね
Netの逆アセンブラだけど、結構遊べる。難読かが掛けられていると結構分かり難い。でも、継承や、文字列を検索すると結構いける。
仕方がないので、ビューワーを作成
たとえば一つの変数に状態を記録するとする。すると、ILのコードでは「st~」系の命令で記述される事になる。だから、機能制限をその変数に頼ると、その変数に対して書き込んでいるところをことごとく変える事で機能制限を解除できる。
もっとも、書き換えたとたんに別の現象が起きてダメだったのだけれども
もう少しお勉強かな
Reflectorには継承追っかけ機能がついているからクラスの関係はそれで
あと、閲覧しているデータがリンクを作っているからコードを辿りやすい。
だけど、特定のコードの呼び出しはエディタの検索の方が断然楽
あとは、再アセンブル時にどのデータならいじっても大丈夫かの調査(または、どのデータを修正すべきかの調査)をすれば大丈夫かな
私は結構忘れっぽいです。何かをやろうと思っていてもいつの間にか忘却の彼方へ・・・となってしまいます。
そう言うわけでメモを残すのですが、役に立たないんですよね
見ようと思って忘れてしまうんですよ
それにメモを書くのすらも忘れてしまったり
何か良い方法はないものか
父方は母方の実家にお墓参りに
母方の方に行ったら、小さい子が何人か
最近子供と触れ合っていないなと
まあ、自分が十分子供でけど
ちょっと例外処理を本格的に直さねばと
ずっと考えていたのですが、こういうサイトの解説って印刷しますか
そうであれば画像はあまり入れない方が読みやすいのかなと考えたり
IL入門の方針
書き始めて分かったのですが、やっぱり理解すべき事柄が多いなと
というわけで「最初は命令を少なく汎用的なものに、そしてなるべく多くの概念の基礎をしっかりと身につける」という方針でいきたいと思います。0とかを飛ばすのちょっとと思わないでもないですが、この際それには目をつぶります。そんな事をいちいち説明していては先に進めないからです。
まあ、完全じゃない知識ではじめた入門なので最初は浅く広くなのは仕方ないですね
とりあえずは、理論と、コード書きを交互にしていくようなイメージで進めていきたいとおもいます。昨日の夜は、ごろごろと雷が鳴っていました。当然の事ながら、コンセントを抜いてパソコンを保護していたのですが、今鳴ってみると、ルータのコンセントを抜き忘れていたために、実際に雷が落ちたらLANを伝ってダメになっていたかなと思います。もう少し管理しやすくしておかないと、いつか本当に大変な目に遭いそうです。ILの中で、メモリの安全性を確保するために「検証」というものが実行時に行われます。
」とでもなるでしょうか
色々あさると、「コードの検証」というものにたどり着きました。色々と謎なものです。
どういう訳か知らないが、常時CPUを使用するアプリケーションの一つ
ちなみにどちらも2000です。
古いからかな
それにしても、バックグラウンドで勝手にCPUを使われると気持ち悪い。
私の考える本当のプログラマ
先日お目にかかった方を見て考えた事なんですが、「プログラマはコードで書けると楽しくなる」のではないかなと
私も割とそうです。
物覚えが悪いのでとっかかりは遅いですが、ちょっとできはじめると単純な事でもわざわざコードを書きたくなってみたり・・・
やっぱり、絵を描く、文章を書く、と同じようにプログラムを書くが成り立つのだなと
今私の手元には「プログラミング
ものすごい厚さなのですが、この中では
Netの型を中心に説明が展開されています。
問題はILを学ぶとすれば、最終的にはこの本全部+ILの言語使用を覚える事になるという事です(あくまで目標ですが)
かなりくじけそうな量です。一応頭の中でまとめてからアウトプットするのですが、全部をカバーしきれずに後から色々追加されたりしそうです。これと同時に思うのが、ILを読もうとする人は何となくILが分かっていそうな気がするという事です。まあ、アセンブリをして、オブジェクト指向を学べば分からない事はないと思います。考える事で色々と理解しようとする姿勢は大事です。でも、しっかりとした知識を身につける事も大事だと思います。と、自分に言い聞かせながら学んでいきたいと思います。えー早速頓挫しています。
更新は明日かな
私は自作パソコンを使っているのですが、ファンのパワーが足りないようで、日中にはパソコンに扇風機を向けながら作業しています。
空調設計が悪いなぁ、と
ILでの多言語やキーワードとかぶった場合の名前の扱い+エスケープシーケンス
次のようにすると、「今からはじめるIL」という名前のクラスが作れる。また、これを応用すると、次のような事も出来る。これでDLLを作って配ればちょっと呼び出しづらいクラスやメソッドが作れます。
一体どう使えばいいのやら・・・
究極例としては次
これ、コンパイル通ります。また、「\0」を利用するとそれ以降の名前が無効になるらしい。
それを確かめる事が出来るのが、下
有意義にどうぞ
と言ったものの第3回目で私の守備範囲外に到達しました(いや、1回目からぶっ飛んでたけど)
とりあえず頑張ります。お時間のある方、フォローよろしくお願いします。東京から帰って参りました。
公式ではないのですが、7位相当の順位です(たぶん)
まあ、私としては上出来です。入賞とかではないですが、嬉しいです。チューターやスタッフの方々、坂本さんありがとうございました。私としてはスパコンにさわれる事も嬉しかった事ですが、先輩方とお話しできた事の方が大きな思い出です。というわけで、サイト更新再開です。まあ、スローリスタートですが頑張りますのでよろしくお願いします。
質問等もしっかりとお返事書かせていただきますのでそちらもどうぞ
ソースコードの色つけ
読みやすさを追求するのであれば、C#では色つけした方が良いでしょう
そのようなわけでソフトを使って色つけしていたのですが、考えてみれば、「ソースコードをコピー」「ワードに貼り付け」「HTMLとして保存」で、色つきが出来る。まあ、理屈上層であり、それで出来るのではあるが、あんな気持ち悪いHTMLソースはちょっと抵抗がある。わたしはこれを今さっきまでディスプレイの事だと思っていました。実際にはビデオボードの事を指すようです。すいませんでした。
ページの一番上へ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。Netの時代になってまで、あえてアセンブリ言語と同じようなレベルのILをいじる必要はほとんど無い。そんなことをするくらいだったら素直にアセンブラで書くと思います。
しかし、ILを学ぶことによってより
Netを理解できるようになる可能性はあります。
まあ、デバック時くらいだと思いますけど
私は正確なドキュメントを持っていないのでここに書いてあることは経験と逆アセンブル、そしてインターネットで得た情報で構成されています。私はこれに対してあらゆる保証が出来ません。Net上で動いているのだからパソコンは落ちないだろうが、心してかかって欲しいということです。フィードバックやアドバイスなどは大歓迎です。スペシャルサンクスとしてどこかに名前を載せさせて頂きます。
ILについての予備知識
Net関連の言語、環境使用者向けのIL解説です。
数字と文字列とコンソール出力
整数の算術演算
定数のロード
論理演算・シフト演算・2の補数・符号なし除算余り算
日本語訳「マネージドポインタ」「アンマネージドポインタ」訳しました。現在これの日本語版作成中です。
私が見つけることが出来た恐らく日本唯一のCIL(MSIL)についてまともにまとめているページ
色つきで分かり易いです。こちらで勉強するのもまた手です。グローバルフィールドのメソッドにはスタティック属性がつく。CIL命令っぽいもの一覧とりあえずこんな命令があるらしい。
CIL予約語っぽいもの一覧これで色付けると見やすいかも
何となく分かるかも
CIL関係の情報の在処
ILについての予備知識
番外編は価値有り
数字を表示させる。
スタックの大きさ
書き方とラベル
インスタンスを作ってみる。
ヘクサエディタでの解析
多言語やキーワードと名前がかぶった時の扱い(エスケープシーケンスも)
ILを色つき表示にしよう
リファレンスっぽいもの
CIL予約語っぽいもの一覧
色々とご助言頂いた方です。
ほなだいく さん
ページの一番上へ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。
等しいとき分岐
上の短い形式
s命令で1バイト)として命令の始まりから表されます。受理可能なオペランド型は表4:バイナリ比較と分岐命令を参照してください。目標命令に1つ以上のプリフィックスコードがあるなら、コントロールをこれらのプリフィックスの一つ目にだけしか移すことができません。(そのような分岐は、厳しく制限されて、代わりにleave命令を使用しなければなりません。詳細は次にあります。この命令は、次の命令を「オフセット0」と考えます。そのことに注意してオフセットを指定してください。正しいCILは、コントロールのすべて移り変わりが上で指定された規則を満たさなければなりません。また、スタック上のトップ2つのアイテムが表4:バイナリ比較と分岐命令で、比較できることを保証しなければなりません。さらに、安全なコードは目的地指示にあらゆる可能な経路のためのスタック、ローカル変数、および引数の型一貫性を必要とします。詳細は次にあります。
ページの一番上へ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。この文書は完璧なもの(ただし、原文に忠実にする完璧ではなく、より理解しやすい方向での完璧さ)を目指していますが、内容の保証は出来ません。また、細部に独自解釈が混じっている場合もあるので、不安な場合は原文の方を参照してください。この文章には著作権侵害の意図は全くありません。日本語に訳すことによってさらに多くの人にCILを知ってもらうために公開しているものです。
これらの著作権は私にはありません(多分)
よって利用したことにより、何かあった場合に私は責任を負えません。それでも利用したい方は利用しても良いです。現在の所翻訳作業を1人で行っているため、作業が間に合っていません。そのため、重点項目だけを先に公開していくことになります。
間違いについては
こちらのメールまたは、掲示板で受け付けています。また、表現の統一や、訂正、アドバイスについても受け付けています。
もしも、ECMAの方か誰かが公開停止を日本語で要求してくれれば直ちに止めます(英語のメールは読めません)
また、一定の条件を設けたい場合も連絡して頂きたいです。【この前文は適当に訳されています。
気を付けて】
この明細は「共通中間言語(CIL)命令セット」、共通言語インフラストラクチャの明細の一部の詳細な記述です。Partition I【訳していないため、英語のページに飛びます】は、CLIのアーキテクチャについて記述し、CIL命令セットに関係の多くの問題の概観を提供します。その概観は、ここで記述されるような命令セットについての理解にとって必要です。各命令記述は1セットの関連するCLIマシン命令について記述します。各命令定義は5部から成ります。
詳細については「1
命令前、および後の評価スタックの状態について記述するスタック推移図
詳細については「1
命令の英語の記述【この文章では日本語で説明してます】
命令によってスローされるかもしれない例外のリスト
例外のスローは任意の命令によって行われる場合もありますが、命令でリストされない次の3つの例外もスローされる可能性があります。この例外の正確なタイミング、およびそれが生じる条件は実装依存です(注意:この例外は「Must_Provide_Maxstack【まだ訳していません】」に記載されている最大スタックサイズと無関係です。
サイズは、この例外が物理的なハードウェア上のその方法状態の実装と関係する間に、Partition I【英語のドキュメントに飛びます】に記述された方法状態の一部である評価スタックの深さに関係があります)
【どなたか、文章まとめてください】
また、あるいは実装に特有の理由(例えば、ネイティブコードへのJITコンパイルに基づいた実装は、与えられたメソッドへの一回目の呼び出しあるいはcallvirtを実行する間に翻訳されたメソッドを格納するためにスペースを使い果たすかもしれません)のために起こる場合もあります。「コードの検証」条件について記述するセクションは、命令と一緒になっています。さらに、数値のオペランドを持っている命令は、それらがオペランドの型に基づいて、どのように作動するか説明するオペランド型表を指定します。すべての命令がすべてのCLIのプロフィールに含まれるとは限らないことに注意してください。しかし、CLI自身ははるかに簡単な型に対処します。これらの型はユーザによって定義された値の型と内蔵型のサブセットを含めます。サブセットは「基本的なCLI型」として一括して知られています。
示されたオブジェクトについての区別無しの参照
示された型に対する区別無しの参照
オブジェクト参照とポインタ型には「null」が割り当てられる可能性があるので注意してください。しかしながら、CIL命令セットは追加のデータ型が実行されるのを許容します。評価スタックは4バイトか8バイトの整数を保持するだけです。しかし、 ほかの場所(引数、ローカル変数、静的変数、配列要素、フィールド)では1バイトか2バイトの整数を使うかもしれません。
これらの位置からスタックにロードするにはゼロ拡張(ldind
i*,など)を使って4バイトの値にします。
整数をストアするときは桁を切り捨てます(stind
*」命令を使うと、正しくない値になるのを教えてくれます。注意: アーキテクチャにかかわらず、1~2バイト整数も4バイト整数としてロードされ、その後は4バイト整数として扱われます。8バイト整数は種類の異なるものとして別扱いとします。ovf 命令を実行しなくても、すべての実装において同一の結果になることを保証し、コードのポータビリティに役立ちます。
1~2バイトの整数型をもたらす変換命令が実際にスタックの値をint32(32ビット)にしますが、値は低ビットにだけ入ります(つまり、上のビットは符号付き拡張又は符号無し拡張されます)
1~2バイトの整数の操作を正しくシミュレートするために、1~2バイト整数の形への変換がdiv、rem、shr、比較および条件付き分岐命令の前に必要です。明白な変換指示に加えて、次の4つのケースでCLIが特別な方法で1~2バイトの整数を扱います。代入先をローカル変数(stloc)か、引数(starg)に指定した場合、代入先が1~2バイトの整数であると宣言されているときにはあふれる分を切り捨てます。1~2バイトの整数型の引数を使って「call」する場合は引数値への指示と同じ事を行います。
戻り値の型が1~2バイトの整数の場合、格納時に1~2バイトの整数への格納とされる(すなわち、CLIが自動的に切り捨てる)
そして、呼び出し側ではその値を1~2バイトの整数型としてロードします(CILが自動で0拡張または符号拡張を行います)
最後の2つの手順では、実際の値の切り捨てがネイティブの呼び出し規約に到達しています。ですが、CILではこれの影響を受けずにまるで適切な「conv」命令を含んでいるかのように動きます。
4バイトの整数
実際にスタックに格納される中で最も短い値は4バイトの整数です。「conv*」命令を使用することでこれらを8バイトの整数かネイティブのサイズ整数に変換することができます。ネイティブのサイズ整数を4バイトの整数に変換することができますが、アーキテクチャーに依存することになります。
余分な重要なビットが無視されるなら、この変換に「conv
u4」命令を使用することができます。
オーバーフロー(情報の欠落)を検出するのに「conv
u4」命令を使用することができます。ネイティブサイズ整数との四則演算を行うと、結果はネイティブサイズ整数で返されます。
4バイトの整数は直接8バイトの整数との演算が出来ないかもしれません(最初に、それらを8バイトの整数に変換しなければなりません)
ネイティブのサイズ整数
通常の計算命令のどれかを使用することでネイティブのサイズ整数を4バイトの整数に結合することができます。
結果はネイティブのサイズ整数になるでしょう
8バイトの整数との計算に使用する前には、明示的にネイティブサイズ整数を8バイトの整数に変換しなければなりません。
8バイトの整数
32ビットの演算は、現在の64ビットハードウェアの上で利用可能であって効率的ですが、32ビットのハードウェアの上で8バイトの整数をサポートするのは高コストであるかもしれません。上の理由より、数値命令はint32とIデータ型【ここどなたか助言お願いします。】が混ぜられるのを許容しますが(入力されるように使用される中で最も大きいタイプをもたらして)、これらのタイプをint64sに結合することができません。
符号無し整数
特殊命令は、まるでそれらが符号無しであるとしてスタック位置にタグ付けをするよりむしろ符号無しであるかのようにスタックの整数を解釈するのに使用されます。
【分かる方正確な意訳をお願いします】
【まだ翻訳していません】
浮動小数点の数(クラスのフィールド、配列の要素、静的変数)のための番地は固定サイズのものです。他の所(引数、戻り値、評価スタック、ローカル変数)では、浮動小数点数は、内部の浮動小数点のタイプを使用することで表されます。変数か表現の名目上の型は、そのような各例では、float32かfloat64のどちらかですが、値は大きいサイズかそのまま、またはその両方の精度で内部的に表されます。内部の浮動小数点表現サイズは実装に依存していて、異なる可能性があります。精度は表される変数と少なくとも同じです。通常、内部の表現は操作の効率的な実現のためにハードウェアで処理しやすいサイズです。内部の表現には、以下の特性があるものとします。内部表現は元々の精度と同じかより高いものです。注意: 上の仕様は、対応する実装が、中間計算型の精度に切り捨てするのを避けるのを許容します。従って、より広い精度ハードウェアレジスタの使用を許可します。また、同じであるか、より大きい精度をもたらす最適化変換アプリケーションも許可します。正確に複製可能な振る舞いが言語かアプリケーションによって要求される場合、明示的な変換が使用されてもよい。浮動小数点式の内部表現がその名目上の型より大きな範囲あるいは精度を持っている時に記憶位置に入れられる場合、自動的に記憶位置の型になります。これは、正確の損失あるいは範囲外値(NaN、+無限、または-無限)の生成を含んでいるかもしれません。しかしながら、もし値が変更されずにそれが記憶位置から再びロードされる場合、値は将来の使用時に内部表現で保持されているかもしれません。エイリアシング(訳注:様々な型でのアクセス)することおよび他のスレッド実行の影響(メモリ・モデル・セクションを参照)を考慮に入れ、メモリ位置が後のロードの時にまだ有効であることを保証することはコンパイラの責任です。
しかしながら、余分な正確さを持つこの自由は、明示的な変換(conv
r8)の実行に続いて許されません(その時に内部表現は関連する型において正確に表現可能であるに違いない)
注意: 特定の記憶型に変換することができない値を検知するために、変換指示(conv
特定の記憶型に切り替える場合にアンダーフローを検知するため、変換の前後に0との比較が要求されます。注意:これらは、デノーマライズされた浮動小数点数上の算術演算の振る舞いを指定しません。また、はそのような明細が作成されても、それを指定しません。さらに、この標準は、作成されるNaNsの正確なビット・パターンにアクセスする方法、および32ビットおよび64ビットの表現間のNaNを変換する場合振る舞いを指定しません。CLIのブール型はメモリの中で1バイトを占めます。すべてが0のビットパターンは、偽(false)の値を表します。任意のビットセット(0でない整数)を備えたビットパターンは、真(true)の値を表します。オブジェクト参照(「O」型)は完全に不透明です。これらには算術演算命令はありません。可能なたただ一つの比較オペレーションが2つのオブジェクト参照間で等しい(また等しくない)を判定できます。オブジェクト参照で定義された変換命令はありません。オブジェクト参照は、引数として渡すこと、返り値として使うこと、ローカル変数として格納することができ、配列よびオブジェクトのフィールドに格納出来ます。ポインタには2種類あります。
1つは管理されていないポインタ
もう一つは管理されたポインタ
ポインタへの整数加算では、整数はバイト数として解釈されます。結果では同じ種類のポインタが返されます。ポインタから整数(バイト数)を引くと同じ種類のポインターが帰ります。整数からポインタを引くことが許されないことに注意してください。2つのポインタは、それらが参照するアドレスを種類にかかわらず互いから引くことができます。結果は整数になります。これらのオペレーションのどれも「安全なコード」の中で許可されません。異なる種類のポインタ間での算術を使用することによるガベージコレクタへの影響を理解することは重要です。管理されていないポインタは、ガベージコレクタによってコントロールされるメモリに参照を付けてはなりません。
それらの上で算術を行なうことは、システムのメモリ安全性を危険にさらすかもしれません(従って、それは安全ではありません)
しかし、それらはガベージコレクタに報告されないので、その演算への影響はありません。しかしながら、管理されたポインタは、ガベージコレクタに報告されます。ガーベジコレクションの一部として、それらが指す位置の内容およびポインターそれ自体の両方は修正することができます。
それらが、その管理下(評価スタック、呼び出しスタック、スタティック・メモリあるいは別のアロケーターの管理下のメモリ)にないメモリを指す場合、ガベージコレクタは管理されたポインタを無視するでしょう
しかしながら、管理されたポインタがガベージコレクタによってコントロールされたメモリを参照する場合、それはオブジェクトのフィールド、配列の要素あるいはちょうど配列の終了を過ぎた要素のアドレスを指示するに違いありません。アドレス算術が他の位置(割り付けられたメモリ中のオブジェクトヘッダーあるいはギャップ)を参照する、管理されたポインタを作成するために使用される場合、ガベージコレクタのオペレーションは無指定です。管理されていないポインタはC/C++のような言語の中で使用される従来のポインタです。それらの使用上の制限はありません。しかし、それらの大部分は証明することが出来ないコードになります。アンマネージドポインタは、あたかもそれらが符号なし整数(CLIではそのように扱われます)かのように、アンマネージドポインタを含んでいるマーク位置へ完全に有効ですが、特定のタイプのデータにアンマネージドポインタとしてそれらを目立たさせるほうが多くの場合よい。これは、返り値、ローカル変数あるいは引数のためにシグネチャの中で「ELEMENT_TYPE_PTR」を使用する、あるいはフィールドまたは配列要素のためにポインタ型を使用することにより行われます。管理されていないポインタはガベージコレクタに報告されず、整数が使用することができる方法の中で使用することができます。
アンマネージドポインタは符号無し整数として扱われるべきです(つまり、conv
u等を使用する)
安全なコードは、参照記憶へのアンマネージドポインタを使用することができません。証明されないコードはアンマネージドポインタをマネージドポインタへ渡すことができます。下記のうちの1つが真実の場合のみ、これは安全です。アンマネージドポインタは、ガベージコレクタによって管理されていないメモリを参照します。アンマネージドポインタは、オブジェクト内のフィールドを参照します。アンマネージドポインタは、配列内の要素を参照します。アンマネージドポインタは、配列中の最後の要素に続く位置を参照します。マネージドポインタ(&)は、ローカル変数、メソッドの引数、オブジェクトのフィールド、値型のフィールド、配列の要素、あるいは配列の終了を過ぎた要素が格納されるアドレス(管理された配列の中へのポインタインデックスのために)を指し示します。マネージドポインタは「null」にはなりません。
(マネージドメモリを指さなくても、それらはガベージコレクタに報告されるに違いありません)
マネージドポインタは、引数として渡すことや、ローカル変数に格納することができます。あなたが参照によってパラメーターを渡せば、対応する引数はマネージドポインタです。マネージドポインタは、静的変数、配列要素、オブジェクトのフィールドあるいは値型に格納することができません。マネージドポインタは、オブジェクト参照と交換可能ではありません。マネージドポインタは、別のマネージドポインタを指すことができません。しかし、オブジェクト参照あるいは値型を指すことができます。
マネージドメモリを指さないマネージドポインタはアンマネージドポインタに変換することができます(conv
しかし、これは検証可能ではありません。マネージドポインタを誤ってアンマネージドポインタに変換する証明されないコードは、CLIの完全を危険にさらすことになります。下記のうちのどれかが真実であると知られている場合、この変換は安全です。マネージドポインタは、ガベージコレクタのメモリ領域を指さない。メモリ参照した全ての時にアンマネージドポインタが使っていた。アンマネージドポインタが使用されている間、ガベージコレクションは生じることができません。CLIの定められた実行のためにガベージコレクタは参照が付けられたメモリを移動させないと知られています。3章では、各命令が同系統命令表にまとめられて示されます。それは、命令の各変形について説明しています。「フォーマット」テーブルのは、すべての引数に加えて、命令のオペコードをリストします。「フォーマット」の最初の1つあるいは2つの番号は、この指示がどのようにコード化されるか(その「オペコード」)を示します。したがって、ldarga命令は、別の命令の終わりに「FE」続けて「0A」を保持するバイトとしてコード化されます。タイプ名は、1つの命令列の中で続くべき数を表わします。2バイトこの例において、符号なしの整数として直接扱われることになっている量は「FE 0A」オペコードに続きます。これらの型は、引数用のバイトの数およびどのようにそれを解釈しなければならないか(符号付き、符号無しあるいは浮動小数点)を定義します。さらに、メタデータ・トークンが<T>として示されて現われることができます。印は4バイトの整数としてコード化されます。引数はすべて、リトル・エンディアンです。命令オペコードおよび引数のためのバイトは、できるだけ(整列パディングは終っていません)しっかりとパックされます。命令列が引数を伴っているものについては、命令への引数の各々に名前を付けます。これらの名前は、命令記述の中でその後使用されます。
CIL オペコードは長さ1バイト以上です(更にオペランドが続くかもしれません)
任意の方法の実験オペコードの使用は無効の、そして結果証明できない方法を与えます。現在定義された命令コードは、表1の中で指定されます。スタック推移図は命令が実行される前、および後の評価スタックの状態を示します。以下は、典型的なスタック推移図です。この図は、スタックがその上に少なくとも2つの要素を持っているに違いないことを示します。
(このような図では、スタックはページに沿って右に成長します)
その命令はスタックからこれらの値を取り除き、それらをresultと呼ばれる別の値に取り替えます。英語の記述は、フォーマットおよびスタック推移だけでは明白でない命令に関するどんな詳細も記述します。多くのCIL処理がスタック上で数値のオペランドをとります。これらの処理はそれらがどのようにオペランドの型に対処するかに依存して、いくつかのカテゴリーに分類されます。次の表は有効な型のオペランドおよび結果の型を要約します。ここで引用されたタイプが、CIL立証のようなツールによって使用されるもっと詳細な型ではなくCLIによってトレースされるような型であることに注目してください。CLIによってトレースされた型は次のとおりです。下記の表はオペランド型の個々の可能な組み合わせのために、結果の型を示します。マークされないマスは無効なCIL命令を示します。暗くなったマスは、検証可能でないCIL命令を示します。命令のリストを備えたマスはそれらの命令にのみ有効です。マークされない箱は無効なCIL命令を示します。この命令の有効な用途はすべて検証可能です。
ペランドの型
下の表は、スタック上のトップ2つの値に基づいて、ブールの返り値または分岐を行う命令についてです。un、に使用されます。「OK」そのオペランドタイプが全ての処理について有効であることを示しています。何も書かれていないマスは無効なCIL命令を示しています。暗くなったマスは、検証可能でないCIL命令を示します。命令のリストを備えたマスはそれらの命令にのみ有効です。
表4:バイナリ比較と分岐命令
beqを除いて、両方のオペランドが同じ配列要素へのポインタであると知られている場合、これらの組み合わせはbne
un(あるいは短いバージョン)あるいはceqで意味を持ちます。しかしながら、CLIはこの強制をチェックしないためのセキュリティ問題はありません。注意 : 2つのオペランドが同じ配列へポインタでない場合、結果は、ガベージコレクトの中の2つの関係ないデータ項目の距離です。
この距離は、次のガーベジコレクションで変わるでしょう
本質的に、結果は有用なものではなく計算するために使用することができません。un、xorを使用した場合、これらの命令は整数型でのみ作動します。unの命令は符号なし整数としてそれらの引数を扱い、符号無しの結果に対応するビットパターンを出力します。しかしながら、CLIの明細に記述されるように、CLIはスタック上の符号有り・符号なし整数を区別しません。そのnot命令は単項で、入力と同じタイプを返します。shlおよびshr命令はそれらの最初のオペランドと同じタイプを返します。また、それらの2番目のオペランドは符号無しネイティブ整数型であるに違いありません。空白のマスは無効なCIL、命令です。他のすべてのマスは、オペランドの検証可能な組み合わせを表します。下の表はシフト演算についてのものです。
シフト演算のためのオペランドおよび結果の正しい組み合わせを表しています(shl、shr、shr
空白のマスは無効なCIL命令を示します。他のすべてのマスは、オペランドの検証可能な組み合わせを表示します。もしも、「シフトする量」オペランドが「シフトされる」オペランドより大きい幅の場合、結果は実装に依存します。
シフトする量
シフトされる側
下の表はオーバーフロー付きの演算に関する命令についての表です。目標データ型の中で結果を表わすことができない場合、これらの命令は例外を生成します。暗くなったマスは検証可能ではありません。また、空白のマスは無効なCIL命令を示しています。
表7:オーバーフロー付き算術演算
下の表は変換命令についてのものです。これらの命令は、評価スタック上のトップのアイテムをある数値の型から別の型に変換します。
結果型は、命令の一部として指定されたデータ型として表現可能なことを保証されます(つまり、conv
u2命令は、符号無しint16に格納することができる値を返します)
しかしながら、スタックには、最小で4バイトの値しか格納できません。un命令が使えます。暗くなったマスは検証可能でない命令を示します。また、空白のマスは無効なCIL命令を示しています。また、スタックに積む場合に4バイトの幅よりも狭い場合には、0拡張または符号拡張が行われます。評価スタックで利用可能な現在の正確さから指示によって指定された正確さに切り替えます。
「Stop GC Tracking(ガベージコレクタ追跡停止)」は変換後のアイテムの値がガベージコレクション操作に報告されないことを意味しています(つまり、ガベージコレクションによってその値は追跡されません)
メソッドの呼び出しの時、CLIは次の表の中に詳述されている暗黙の型変換を行ないます(概念的に、それは適切なconvを挿入します。
それらの結果は切り捨てや、丸め誤差があるかもしれないです)
「OK」と書かれているマスは、暗黙の変換が行われます。暗くなっている箱は検証可能でない変換です。
また、無効な変換は空白のマスになっています(コンパイラーは目的の効果を得るために明示的なconv
ovf命令を使うことも出来ます)
表9:暗黙の引数変換
内蔵の型を値型であることを要求されるパラメーターへ渡すことは許可されません。CLIのスタックは値型を含むことができます。スタック上の特別の値型が対応するパラメータによって要求されたクラスと正確に一致する場合、これらは単に渡されるかもしれません。1を見てください【まだ訳していません。
英語のドキュメントへのリンク】
ovfあるいは同様の命令を含んでいるかもしれません。
この表に関するさらなる注:
64ビットの機械においては、それが暗黙に変換されます。
「Start GC Tracking(ガベージコレクタ追跡開始)」は暗黙の変換後、アイテムの値がガベージコレクタに報告され、恐らくヒープの中で再配置される位置を示すように結果が変更されるでしょう(つまりガベージコレクタの管轄下に置かれる)
確実さのために、CILコードには詳細な制限があります。これらはCILからネイティブコードへの単純なコンパイラを構築することをより容易にするために課されて、いくつかのさらなる制限もあります。このセクションは適用される一般的な制限と、個々の命令のためにあります。メソッドの実装は下に指定されるようにコード化されて、CIL命令から連続するブロックによって提供されます。第1の命令は、命令ブロックの第1のバイト(最低のアドレス)にあります。命令は可変サイズです。各命令のサイズは、命令バイト自体の内容(を解読することによって)から決定することができます。サイズ、また、命令内のバイトの注文は各命令定義によって指定されます。命令は、バイトストリームの中で詰め物をせずに続きます。アラインメントおよびバイトオーダー両方に関係しません。各命令は、バイトの正確な数を占めます。また、命令ブロックの終了まで、次の命令は次のバイトに直ちに始まります。命令ブロックが(指定されたブロックの長さまでに)完全な最後の指示を形成せずに終了することは無効です。命令プリフィックスは、新しい命令を導入せずに命令の長さを拡張します。1つ以上のプリフィックスがある命令は、第1の命令プリフィックスの第1のバイトにからのみ始まります。【ここの囲みは間違っている可能性大です。注意:命令ブロックの終了まで、それが分岐の目標でなくても、どんなコントロールを移す命令の後に続く命令はデコードされます。コントロールが到達不可能な場合でも命令が命令ストリームへと現れるかもしれません。相対アドレスなデータアドレッシングモードはありません。また、生のデータは、直接命令ストリームの内に埋め込むことができません。ある命令は命令の一部として即値を埋め込むことを可能にします。しかしながら、それは命令ストリームに直接埋め込まれていた生のデータの許可と異なります。到達不能コードがマシンに生成されたコードの結果現われるかもしれないし許可されます。しかし、それは、常に適切に決まった命令シーケンスの形をしているに違いありません。命令ストリームは、翻訳の実行に先立って翻訳することができます。また、関連する命令ブロックが廃棄されます。したがって、コード・アドレスを捕らえて操作するcall、retなどのような命令さえ、CIL命令ストリームのアドレスの代わりに翻訳されたアドレス上で作動するために仮想になることができます。
ページの一番上へ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。数字を表示させる。そういえば、命令の説明をしてきませんでした。
そこで、命令を説明したいのですが
私にもよく分かりません。最初から読み進めてもらえば分かると思いますが、この記事群はリファレンスではなく「解析」です。
ですから、解析していきましょう
そうはいった物の、あまりに分からなさすぎるのも困るので、今の時点で分かっていること説明します。MSILにはレジスタがないと思われます。計算は全てスタックを返して行われます。
このようなマシンはスタックマシン
スタックマシンについて少し説明します。スタックマシンでは主にスタックを返して処理が行われます。1+2をしたいとします。このときはまず「1」と「2」をスタックに積みます。そして足し算を行います。するとスタックの先頭から2つの数字を取り出し足しあわせた結果をスタックの先頭に戻してくれるのです。とりあえずそのような動きでスタックマシンは動きます。
1と2をプッシュ
足し算を実行
結果が先頭に書き込まれる。利都はjavaの処理系もCLRの処理系も未だに完全に理解できていないのでここの記述は間違っている可能性があります。スタックに積む。というわけで文字列を表示させていたソースコードは次の動作をしていたわけです。" //スタックに文字列を積む。
//関数をコール
中間コードならではの文字列の扱い方ですね
文字列を標準で扱えるとは
とりあえず今回のことから「ld」というのがスタックに何かを積むための命令であることが分かりました。
では、いよいよ数字を表示させましょう
今回はとりあえず「0」を表示させましょう
新しい命令がありますね
残りの「0」はプッシュする数ですね
~」はどの程度の種類があるのでしょうか
正解は次の通りです。
まあ、簡単ですね
s」を使えば、-128~127までの範囲なら少ないバイト数で行うことが出来ます。Netでも即値を使う場合はなるべくこれらの数を使うようにすると良さそうです。次回は今回の知識を応用して計算をしてみたいと思います。
ページの一番上へ
前のページへ一覧に戻る 次のページへ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。今回は計算を行います。命令の一覧をこちら「命令一覧」に載せておきました。
まあ、眺める分には不自由しないでしょう
とりあえず今回使う「add」と「sub」を見つけたら戻ってきて下さい。
スタックに積んで計算
計算を行うためにはまず2つの値を積まなければいけません。というわけで積みます。そして、「add」を実行すれば値がスタックに乗っかるのでWriteLineで書き込めるという算段です。
どうでしょうか
出来ましたか
ではこの勢いでちょっと複雑な計算をしてみましょう
計算式は次の通りです。まあ、これでも良いです。
でも、加法定理の中では並べ替えを行うことが出来ますよね
というわけで並び替えてみましょう
それと、今回は「-3」を一区切りと考えて全て足し算で行ってみましょう
当然の事ながら答えは合っています。
では次にもっと長い式行っていましょう
これを行ってみましょう
エラーがでてしましました。というわけで何がいけないのかを解決したいところですがまた次の回に行いたいと思います。とりあえずしたに動くコードを載せておきます。
どうして失敗するのかは逆アセンブルすると分かるかもしれませんよ
ではまた次回
ページの一番上へ
前のページへ一覧に戻る 次のページへ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。ローカル変数です。スタックというのは便利です。これに入れることによって演算命令等はレジスタを意識すること無いプログラムが出来ます。ですが、いくつもの変数を作りたくさんの関数を呼ぶようなときにスタックだけでは力不足です。そこで今回の主役ローカル変数の登場です。
0 //スタックから、ローカル変数の0番へ値を移動
0 //ローカル変数の0番から、スタックへ値をプッシュ
0 //再びローカル変数の0番からスタックへ値をプッシュ
内容としては0を二回出力しているだけです。別に変数を使う必要性はないですが、あえて使っています。
ローカル変数の内部的な仕組み
変数は宣言した順番に0番柄の番号が割り振られ、その番号を使ってスタックと値をやりとりします。ですが、この方法はある意味すごく分かりづらいです。そのため、宣言時に付けた名前を利用して書くことも出来ます。
したのはラベルを使った場合
これら2つは同じ事が出来ます。同じ名前の変数をいくつも宣言することが来ます。その場合に変数名を利用すると、その変数名のうちで一番最初に宣言されたもをアセンブラが選びます。それぞれ実験してみてください。上と反対に型名だけ宣言して、名前をつかないことも可能です。この場合は、変数についている数を指定することで利用することが出来ます。下のサンプルはちょっと長いですが、これらのことをふまえたローカル変数へのアクセスの例です。0 //一番短いコードになる。1 //一番短いコードになる。s 1 この方法ではアクセスできない。2 //一番短いコードになる。3 //一番短いコードになる。
小さい命令形式
コンパイル後のコードは小さい方が良いと思います。上のサンプルでは上に行くほど小さいコードがはき出されます。
ちょっとまとめると
これらでアクセスできる「0~3」までのローカル変数は1バイトのコードで操作を行えます。よく操作する値はこれらで扱うと良いかもしれません。これは、後ろに変数名又は変数番号を取ります。2バイトのコードになります。全ての変数へアクセスできます。4バイトのコードになります。
これでとりあえず順次実行なプログラムは組めるでしょう
次回は分岐を行ってみたいと思います。
ページの一番上へ
前のページへ一覧に戻る 次のページへ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。前回の無条件分岐で分岐の雰囲気はつかめたと思います。
今回は条件分岐をしてみましょう
同じ時に分岐します。//下が実行されない。//下は実行される。分岐では上のようにスタックから2つの値を取り出して比較を行います。s」があります。スタックに値を2つ積みます。その時、先に積んだ方の値が後に積んだ値以上の時に分岐を行います。//実行されない。スタックに値を2つ積みます。その時、先に積んだ方の値が後に積んだ値より大きい時に分岐を行います。スタックに値を2つ積みます。その時、先に積んだ方の値が後に積んだ値以下の時に分岐を行います。スタックに値を2つ積みます。その時、先に積んだ方の値が後に積んだ値より小さい時に分岐を行います。
ここにあげた命令にはそれぞれ「~
s」という形式があります。
ページの一番上へ
前のページへ一覧に戻る 次のページへ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。
ILのソースコード版の拡張子は「*
というわけでただのテキストエディタで作成します(もちろんVSとテキストエディタに使っても良いです)
そして、保存する時に「*
il」という形式で保存してあげてください。
ツールの場所
まずは環境がそろっている確認します。
あなたの環境には「
入っているという前提で進めさせていただきます。そこをすっ飛ばしてILをするのを私はオススメしません。Net ~ コマンドプロンプト」という項目があると思います。操作は全てコマンドプロンプトです。前提の知識はそんなに要求しないつもりですが、こういう事はあまり多くの人がしないためにこういう操作になってしまいます。え~と、精進です。Netをコンパイルする方法を説明します。ドライブ I のボリューム ラベルがありません。
※「\」がバックスラッシュ表示になっている方
はい、この二つをコンパイルします。
コンパイルの仕方は次の通り
安易なネーミングで分かり易いです。」とすると、ヘルプがでます。
しかも日本語で
Netコンパイラを使います。こちらも安易なネーミングで分かり易いです。」とすると、ヘルプがでます。
こちらも日本語
後々、「これをやってみたいんだけどC#では書けるけどILでは書けない」という時に役に立ちます。次は逆コンパイルです。ひねくれていますが、次に必要になるので先に説明します。
逆コンパイルは次の通り
Net系の実行ファイル又はDLLを指定してください。ウィンドウが立ち上がって親切にツリー形式で表示してくれます。ですが、これではちょっと困ります。一続きのソースコードが欲しいです。そういう時は次のようにします。
ちなみに、最初の3文字で判定しているようなので「/tex」でも良いです(tex形式で出力はしてもらえませんよ)
そして、三つ目、ファイルへの出力
「/out=ファイル名」とすると、ファイルに出力してくれます。さて、いよいよILコードのアセンブルが出来ます。
アセンブリ言語・・・言語の事
アセンブリ・・・アセンブリ言語で書かれたコードの事
アセンブル・・・アセンブリを機械語(今回は
アセンブラ・・・アセンブルするプログラムや機械の事
一応こういう用語の使い方でお願いします。ちなみに、後に「アセンブリ」には別の意味が加わります。
斜め読みする方は注意を
それで、今回はアセンブルします。そのためにアセンブラを使います。一応皆さん、このテストをしてみてください。
Netで短いソースを作成、コンパイル、逆アセンブル、アセンブル
全て成功すれば問題ありません。安心して次に進めます。
失敗した方は・・・あなたの最善だと思う行動を
まさか、今回のためにコマンドプロンプトを覚えた人はいないと思うので元々統合開発環境以外でもプログラム経験があるモノかと
頼もしいです。
ページの一番上へ
前のページへ 一覧に戻る 次のページへ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。
では、何もしないプログラムの解説をしましょう
何もしないコード
何もしなくてもとても大切な要素を内包しています。コンパイルが通る事です。逆アセンブルしてもほとんど同じコードになるはずです。
どうでも良い事のように思えもしますが、情報の再現性は大事ですからね
それでは説明しましょう
アセンブリ言語のコードとは違います。おおざっぱに言うと、アセンブリとはILにおけるクラスなどのようなまとまりの事を指す言葉です。Netの管理のまとまりの一つです。一つのクラスは複数のdllにまたがる事が出来ません。しかし、アセンブリにはそれが出来ます。それによって何が出来るかというと、よくバージョンアップする物と、そうでない物を別のDLLに分ける事が出来ます。これだけでは何が良いのか分かりませんが、そこにセキュリティや、リソースデータが絡んでくると役に立つそうです。とりあえず、そのために「このコードはこれこれのアセンブリに属しています」という宣言が必要になります。アセンブリ名を適当に埋めてください。どんな文字が使えるかは不明です。情報お待ちしております。それ以外ではコンパイルに躓くか、日本語が悲惨な事になります。これから「名前」をつける機会がいくつかあります。
思い出して欲しいのですが、あなたは
Netで日本語の変数名やメソッド名、クラス名が使えた気がしませんか
もちろん使えます。使い方は次の通りです。つまり「'」で囲えばいいわけです。それで更に重要なのが、この中でエスケープシーケンスが使える事です。暇な時にでも試してみてください。何か傑作な事をやり遂げた方はお知らせください。C#では全てのメソッドが何かしらのクラスに属す事になっていたと思います。
ILではそんな事は一切不要
普通に書くと、ILではグローバルなメソッドになります。
ただし、そのアセンブリ内についてグローバルなのでそこに注意
実は、ここら辺ですら私はまだ解析しきれていません(英語のドキュメントはあるのですが、ちょっと量が)
気を取り直して説明です。「戻り値の型」ILではあらかじめ、いくつかの型が用意されています。今回は何もないのでvoidです。
「メソッド名」自由に
「実装属性」今回はなし
ILでは一定の名前のメソッドがプログラムのスタートになるわけでもなければ、頭から実行される訳でもありません。
エントリポイントのメソッドには「
上のようになります。このようにすると「hoge」メソッドがエントリポイントになります。
コードの中身
メソッドは必ず制御を返さなければなりません。必ず最後には書きます。retがなくてもコンパイル時には文句を言われません。ですが、実行時に確実に例外を起こされます。
プログラムの最後には必ずつけましょう
本当はもう少し説明したいのですが、次回という事で
空白と改行についてです。今までのコードは次のように書く事も出来ます。コンパクトで読みにくいコードです。つまり、最低限区切りが分かればどんなにくっついても離れてもOKです。C++(C#と同じ)形式のコメントをサポートしています。色々出来ます。次回からは本格的な解説に入ります。私の頭は本格的な混沌へと突入します。
ページの一番上へ
前のページへ 一覧に戻る 次のページへ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。前回のが、コードの雰囲気です。今回は「CLRとCTS」について説明させていただきます。その名の通り、異なる機能を持った様々な言語から利用可能なランタイムの事を指します。これをターゲットに言語のコンパイラを作れば、CLRの環境全てでその言語が動く事になります。また、CLRを対象にライブラリを実装すれば、CLRを対象としたどの言語からでもそれ利用出来る事になります(ただし、言語によってはCLRの全てに従う事が出来ない場合もあります。
詳しくは後で解説します)
型とは「0個以上のメンバを含むもの」です。
ILを使う事の利点はCLR/CTSの全ての機能を使える点にあります(C#ですら制限があるのです)
私たちはこれからILについて学んでいきますが、同時にCLR/CTSを学んでいく事にもなります。たぶんここで説明しても問題ないと思います。ILのコードはスタックマシンと呼ばれる仮想マシンをターゲットとした作りになっています。分からない方が大半だと思うので説明します。スタックというデータ構造は知っていると思います。一番最後に追加されたデータが一番最初に取り出されるLIFO(後入れ、先出し)のデータ構造です。このスタックについてはpushとpopの二つの操作があります。pushはデータの追加、popはデータの取り出しになります。スタックマシンのデータ操作はこのスタックを中心に動きます。機械語ではレジスタとメモリ間の移動についてロードと、ストアという言葉を使います。ロードはメモリからレジスタへ、ストアはレジスタからメモリへの転送です。これらの命令は全て、レジスタではなくスタックを中心に動きます。
簡単な演算でのデモ
用語と概念の説明が終わったところで、簡単なデモです。
命令列にすると次のような感じでしょうか
この表現は今作った即席の物です。でも、言いたい事は分かると思います。これを実行すると、次のようになります。
スタックマシン まとめ
私たちは、ILがスタックマシンを対象としたコードだった事に感謝するべきなのかもしれません。
何せ、私たちでレジスタ割り当てを考えなくて良いのですから
といっても、実際には実行時に機械語化されてレジスタ割り当てもちゃんとしてもらえるようになっています。それと、もうしばらくしたらローカル変数みたいな物がILでも使える事をお教えします。ですが、いっぺんはあまり良くないです。
この話はまた今度
また、レジスタ割り当てと同じように、足し算をしたい場合は「add」と簡単に記述できます。この事で、スタックマシンのコードは命令パターンを減らし完結に記述できます。バイナリエディタでも結構読めます。
最後に次回のために重要な点を二つ
ILはスタックマシンです。全ての命令はスタックを中心に回ります。
つまり、ロードストアをひたすら繰り返します(addのような命令も内部ではロードストアです)
では、次回とりあえずコンソール出力をしてみましょう
ページの一番上へ
前のページへ 一覧に戻る 次のページへ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。
数字と文字列とコンソール出力
それでは、タイトル通り出力をしてみましょう
とりあえず、サンプルコードです。
それでは、おさらいと説明を行いましょう
「hina」という文字は自由ですが、これは必須です。含めなくてもコンパイルは通りますが、実行時にエラーがでます。
つまり、解決策があるわけですが、今は放っておきましょう
method」はここからメソッドの記述をはじめる事を表しています。このメソッド宣言はどこのクラスにも属していないためグローバルなメソッドとなります。「public」はどこからでもアクセス可能な事を表します。「static」はこのメソッドがインスタンスに関係のない物である事を示しています。これからもグローバルなメソッドは「static」が必ずつきます。それでは、本題に入ります。i4」についての説明です。繋げると4バイトの数値定数のロードです。実は「ldc」には何個か親戚がいます。
それらについてはまた後ほど説明しますので今はldc
i4を覚えてください。使い方はその後に数字を続けるだけです。使える範囲は32ビット符号付き整数が扱える範囲です。
まあ、2の補数ですので常識ですね(ちなみに、私は今知りました)
というより、Netではコンソールですら特別扱いしないのですね
というわけでいきなり正攻法の関数呼び出しです。今回はとりあえず外部のクラスのスタティックメソッドの呼び出し方です。
::スタティックメソッド()//引数なしの場合
※折り返しているのはスペースの関係です。引数なしの場合には「void」と書く必要はないです。このDLLはとても重要なライブラリです。ほとんどの基本的な型がこの中で宣言されています。そのため、このDLLについては他のDLLに必要な煩雑な宣言を飛ばして利用する事が出来ます。というわけで、特に何もしなくてもcall出来るわけです。今回利用する「WriteLine」というメソッドはコマンドラインへデータを表示し、改行します。あらかじめスタックに積んでおいたint32という型のデータ出力したいため、引数の型はそのように指示します。このように戻り値と、引数の型を事細かに書くのはメソッドのオーバーロードがあるためです。ちなみに、CLRでは戻り理の型が違うだけのオーバーロードも許しています。そのため、ILでは戻り値の型も書く必要があります。長々となりましたが、後は「ret」を忘れずにつけてください。
文字列の表示
文字列の表示も同じ要領で出来ます。
ではサンプルコード
ILでは効率のためにstring型を言語レベルでサポートしています(CLRでサポートしているという表現の方が適切かも)
この命令は次に続く2重引用符でくくった文字列をスタックにロードします。二重引用符の中ではエスケープシーケンスが使えます。あとは、これに合わせてメソッド呼び出しをstringに変えればできあがりです。今までの応用で、何行かの表示が出来るようになります。一つ注意をするとすれば、「スタックは空っぽにしてからretする」という事です。空になっていないのにretしているという事は無駄があるという事です。
よく確認してみましょう
1行ずつチェックして見てください。次回はこれからの事を考えスタックについてちょっと補足説明です。
ページの一番上へ
前のページへ 一覧に戻る 次のページへ
質問から意見、誤字訂正まで気軽に連絡してください。こちらに掲示板も用意しています。
リンクに関してはご自由にどうぞ
書いてある情報については、特に断り書きがない限り自由に使ってください。そのまま転載しても、書き換えたりして再利用してもかまいません。今回はスタックサイズについて学びます。まずは紫檀のコードの実行結果を予測してみてください。
分かりましたか
スタックは後入れ先出しの構造ですので、出力は「今日」「明日」「あさって」の順になります。
では、これを三回出力するコードを作成してみましょう
これをコンパイルして実行してみてください。たぶん、実行時に例外が発生すると思います。実は、このプログラム、ちょっとの修正でちゃんと動くようになります。都合上、ldstrの順番が変わってしまっていますが、している事は同じです。最大スタックサイズをいじる。最大スタックサイズとはload出来る最大数の事です。
まず、上の二つの最大スタックサイズを考えてみましょう
そのため、最大スタックサイズは「9」になります。
では、下はどうでしょうか
同じく「ldstr」は9回ありますが、一回ごとにcallを呼び出しているため、ロードされたデータはその都度なくなります。そのため、最大スタックサイズは「1」になります。このように、二つのプログラムはしている事が同じでも最大スタックサイズが違います。ILでは一つのメソッドで必要になる最大スタックサイズをユーザーが自分で設定できます。そして設定しない場合には最大スタックサイズは「8」になります。というわけで、設定方法です。同じ要領で、さっきエラーのでた、9回連続のldstrもエラーがでないように出来ます。