タグ

Dに関するyheldのブックマーク (20)

  • クラス間依存関係の除去 第1回 - 継承とポリモーフィズムを使ったコードの基本形 - ...ing logging 4.0

    次のコードは,オブジェクト指向における継承とポリモーフィズムを使った代表的な例です. インタフェースと実装を分離する最も基的な形ですね. ただ,このままではまだ各クラス間および各ファイル間の依存関係が強いです. そこで,このコードをベースとして,それらの依存関係を除去していきましょう. なお,++ で始まるコメント行は,それ以降のコードが書かれているファイル名を示しています. その次のコメントにおける import 文は,そのファイルが依存しているファイルを示すために書いてあります. 最初の import std.stdio; は,全部のファイルで共通して import していると思ってください. import std.stdio; // ++ animal.d interface IAnimal { void bark(); } // ++ dog.d //import animal;

    クラス間依存関係の除去 第1回 - 継承とポリモーフィズムを使ったコードの基本形 - ...ing logging 4.0
    yheld
    yheld 2007/06/25
    なぜかはてなが500なので、自分のコメを訂正。s/claass/class/, すいませんでしたorz
  • クラス間依存関係の除去 - ...ing logging 4.0

    うまくいくかどうかはわかりませんが連載に挑戦してみます(^^; 第1回 - 継承とポリモーフィズムを使ったコードの基形 第2回 - テンプレートを用いた継承関係の除去 第3回 - ファクトリクラスの導入によるインスタンス生成処理の分離 第3.5回 - ファクトリメソッドパターンを適用しない理由 第4回 - ファクトリクラスと生成されるクラスの分離 第5回 - ファクトリクラステンプレートの導入

    クラス間依存関係の除去 - ...ing logging 4.0
    yheld
    yheld 2007/06/25
    index, wktk
  • const/invariant member function - ...ing logging 4.0

    なにげに const メンバ関数が追加されてる? それと invariant メンバ関数なるものも. class A { private: int value; int mutableMember() { value = 1; return value; } const int constMember() { /+value = 1;+/ return value; } invariant int invariantMember() { /+value = 1;+/ return value; } public: void foo() // mutable member { auto x = mutableMember(); auto y = constMember(); //auto z = invariantMember(); // error, mutable member can

    const/invariant member function - ...ing logging 4.0
  • 渋滞情報 - Outlandish Watch

    実は先の方が詰まっていて更新が滞っています……。 標準ライブラリ移植は実際ソースもあるし、さらに言えばコピペばっかりで特に書くようなことをしてないし(爆)、どうでもいいのですが、実はこの先にページング・メモリ管理・割り込み処理が待ち受けていて、そちらの実装に手間取っているのです……。 ひみつプロジェクトの〆切もあるし、しばらく更新が滞るかもしれません。まあまっさらな状態でD言語を動かすだけならもうソースもあるし、今の状態でもきっと遊べます。私なんかよりうまい実装をしてもらえるかもしれない(笑)。 さらに問題なのがD言語のバージョン2.0が出てしまったことだったりします(滝汗)。

    渋滞情報 - Outlandish Watch
    yheld
    yheld 2007/06/23
    >さらに問題なのがD言語のバージョン2.0が出てしまったことだったりします(滝汗), あぁ、そういえば、そうだ。D言語の仕様がまだ定まってないことをすっかり忘れてたw
  • 配列同士の比較演算 - ...ing logging 4.0

    配列同士の比較演算についてあまり理解していなかったので補習. import std.stdio; void main() { string a = "EXIT"; string e = "EXIT".dup; bool _is = a is e; // false bool _equals = a == e; // true writefln(_is); writefln(_equals); } ということは; is : 参照先アドレスでの比較 == : 値での比較 でいいのかな.

    配列同士の比較演算 - ...ing logging 4.0
    yheld
    yheld 2007/06/20
    あ、そっか、isはオブジェクトか。
  • dmd 2.000 - 謎's キッチン

    まだ試してないけど感想だけ。 文字列と配列リテラルの動作の不整合が解決されてる。内部のコードが幾分ましになってるはず。 const、invariant、finalはしっかり考えられてる。当にこれが一番なのかは疑わしかったが、読んでみるとこれが一番な気がしてきた。 stringという型名は長すぎ。strにしてほしかった。それと文字列がimmutableである必要はあるのか(スレッドを使う場合を除く)。まぁchar[ ]使えばいいんだけど(phobosも問題無い感じだし)。 .idupはconst(char)[ ]からinvariant(char)[ ]を作成することか。 後は速度がどう変化したかが気になる。 幾つか追記。 2.000のリリース早杉と思った。結局ASTもExpression Aliasもyieldも入らなかったけど、でもまあ幾つかの重要なリテラルのサポートの為だけでも2.00

    dmd 2.000 - 謎's キッチン
  • Final / Invariant / Const - ...ing logging 4.0

    ふむふむ. import std.stdio; void main() { // Note: type of "string literal".dup is char[] { // char[] s = "hoge"; // error, invariant(char)[] to char[] char[] s = "hoge".dup; s[0] = 'H'; s = "HOGE".dup; writefln(s); } // Note: type of string literal is invariant(char)[] { invariant(char)[] s = "hoge"; //s[0] = 'H'; // error, not mutable s = "HOGE"; writefln(s); } // Note: alias const(char)[] string; {

    Final / Invariant / Const - ...ing logging 4.0
  • string の導入 - ...ing logging 4.0

    なるほどなぁ! 色々いじってて感じたのは,これからは char じゃなくて string を使えという意思. 後で見直すために書いておこう. (あ,いや,えらい人には当たり前のことかもしれないです(^^;;;) テンプレートに値パラメータとして文字列リテラルを渡すとき,パラメータの型は文字列リテラルの型である invarint(char) になる. ここでテンプレート側を template f(char s) と書いてしまうと,マッチするテンプレートがないとコンパイラに怒られる. invarint(char) から const(char) への暗黙の変換は許されているから,テンプレート側を template f(string s) にすると素直だ. string は const(char) のエイリアスだから. //template f(char[] s) // error, "hello

    string の導入 - ...ing logging 4.0
  • polymorphism vs duck typing (3) - ...ing logging 4.0

    http://d.hatena.ne.jp/haru-s/20070614/1181841613 の続きというか関連. C++ で多態(polymorphism)を実現する方法はたくさんある。 昔は継承で実現するのが一般的だったが、最近は 委譲が推奨されている。そこで、以下のコードを書いてみた。 おそらくその筋の人からみれば当たり前だと思うけど。 きまぐれ日記: C++ で多態 何の変哲もないコードをD言語で書いてみた. import std.stdio; class Dog { void bark() { writefln("wan!wan!"); } } class Cat { void bark() { writefln("nyan!nyan!"); } } interface IAnimal { void bark(); } class Animal(T) : IAnimal {

    polymorphism vs duck typing (3) - ...ing logging 4.0
  • ABA style で pixel shader とか - 兼雑記

    なんか長らくシェーダとか触ってみたかったのに触ってなかったので触ってみた。 http://shinh.skr.jp/tmp/pbg_ps.tar.bz2 ABA style ってのは id:ABA さんが偉大すぎてプリミティブと半透明だけでデザインがんばってゲーム作るとそう呼ばれるらしい。で、こう shader とかって基的にはリアル絵出すためのものだけど、まぁそいうの興味無いっていうか絵かけないしモデリングとかよくわかんないしーってこと(興味はあるけどいじけてるというか)でそっち方向でもシェーダって使えないのかなとかそんなことを思って勉強してみることに。うーん日語になってないがまぁそんな感じ。 中身は pbg.exe を実行すると動く。左と右でピクセルシェーダ変更 (PS 0 ってなってるところが変わるはず) 、 r で PS のリロード、 s で現在の PS を一番最後のシェーダ番

    ABA style で pixel shader とか - 兼雑記
  • 起動するまでの長い道のり D言語編(3) 標準ライブラリ格闘の巻(1) - Outlandish Watch

    D言語を使って(あれを「使って」と言って良いなら……)、シリアル・ポートを叩くことに成功した。 しかし今のコードはカッコ悪い。IOを直に叩いているだけで、printfでHello,World!するのとあまり変わらない。これから先シリアル・ポートを叩く機会もたくさんあるだろうから、シリアル・ポート操作用の処理をまとめておきたい。今回はそれにチャレンジし、壁にぶちあたる(笑)。 今回のソース startup.d serial.d シリアル・ポート・クラスの作成 さて、シリアル・ポートの処理をまとめる。しかもオブジェクト指向らしくクラスでラップする。ポート番号をメンバ変数に持ち、初期化はコンストラクタ・入出力や待機処理はメンバ関数で行わせる。定数は全部enumで定義する。 で、大体以下のようになった。 module outlandish.os.serial; import std.stdint;

    起動するまでの長い道のり D言語編(3) 標準ライブラリ格闘の巻(1) - Outlandish Watch
    yheld
    yheld 2007/06/08
    シリアルポートキターーーーー!!!今自分が一番知りたい場所ですw
  • 起動するまでの長い道のり D言語編(2) それとなくシリアル・ポートの巻 - Outlandish Watch

    D言語の関数を呼び出すことに成功した。これからどんどんD言語で機能を追加していく。 OSを作っている以上、外部デバイスをいじれないとつまらない。画面表示や何かに動いているという証が欲しい。今回は、割合制御が簡単なシリアル・ポートに文字列を出力させてみる。シリアル・ポートの出力ならqemuからも簡単に見られたりする。 今回のソース startup.d io.d IO関数の用意 シリアル・ポートはIOポートを叩くことによって制御する。IOポートはアセンブラの命令で叩くことができる。が、D言語の世界に既に移行してしまったので、できればD言語の関数でIOポートを叩けるようにしたい。今後もIOを操作する機会は多いだろうから、アセンブラ命令を単純にラップした関数を用意しておく。 実はD言語の標準ライブラリ(Phobos)には、IOポートを叩くための関数が用意されている。しかし、OSを作るに当たって標準

    起動するまでの長い道のり D言語編(2) それとなくシリアル・ポートの巻 - Outlandish Watch
  • 起動するまでの長い道のり D言語編(1) 関数呼び出しの巻 - Outlandish Watch

    不完全ながらプロテクト・モードに移行し、通常の32ビットコードを使う準備ができた。ここでいよいよD言語を導入していくことにする。 モジュール階層の準備 D言語のソース・ファイルをこれから追加していくわけだが、そのためにモジュール階層をまず用意することにする。モジュールとは、Javaで言うパッケージとほとんど同じものだ。ファイルパスでx/y/z.dというソースファイルは、モジュールで言うとx.y.zに属することになる。1ソースファイルが1モジュールとなる。で、x.y.zというモジュール階層を作る場合はxとyディレクトリを掘らなければならない。 ここではoutlandish.os以下に各ソース・ファイルを置くことにした。つまり各ソースファイルはoutlandish.os.XXXというモジュールを作ることになる。というわけで、outlandish/osディレクトリを掘る。 ソースコードの追加 と

    起動するまでの長い道のり D言語編(1) 関数呼び出しの巻 - Outlandish Watch
  • Wiki4D: DanielKeep/Variant

  • 関数のコンパイル時実行のメモ@配列周り - 謎's キッチン

    配列にはnullではなく空リテラル(""や[])を放り込むべし arr/!arrではなくarr.length/!arr.lengthを使うべし arr.length = arr.length+1ではなくarr~="\0"を使うべし。というかバグ回避。 arr[1..$]=arr[0..$-1].dupではなくarr = "\0"~arr[0..$-1]を使うべき。これもバグ回避。 エラーの原因が良く分からないときはとりあえず配列の変数を空リテラルで初期化しておくこと。 さて、gladeの読み込みもあと少しか…と思ったけど全然駄目だ。dmdのコンパイル時実行の対応が増えたので逐次じゃなくて一括で扱った方がよさげ。 dmd 2.010に更新。

    関数のコンパイル時実行のメモ@配列周り - 謎's キッチン
  • プロジェクトD ~車輪を再発明せよ!~ Wiki - プロジェクトD ~車輪を再発明せよ!~ - OSDN

    yheld
    yheld 2007/05/22
    へぇ。sourceforgeってwikiもあるんだ。
  • SourceForge.jp: Project Info - プロジェクトD 〜車輪を再発明せよ!〜

    D言語でひたすら車輪を再発明します。現在はOS・パーサフレームワークの開発を行っています。ゆくゆくはスクリプト言語・GUIツールキット・ゲームエンジン等も開発していく予定です。

    SourceForge.jp: Project Info - プロジェクトD 〜車輪を再発明せよ!〜
    yheld
    yheld 2007/05/19
    IDE たのむ
  • dsource.org: home

    Note: This website is archived. For up-to-date information about D projects and development, please visit wiki.dlang.org. Welcome to dsource.org This site serves as an open source community for the D Programming Language. Our goal is to provide an environment conducive to open-source development, including forums, source-code control, bug-tracking, and distribution. To further knowledge of program

    yheld
    yheld 2007/03/08
    dsource
  • わかったつもりになるD言語

    はじめに 2012年5月現在、最近、このページはあまり更新できていません。すみません m(_ _)m。 D言語友の会 が、長期間ちゃんと更新されている D 言語関係の日語サイトとしておすすめです。 こんにちは。ここは、プログラミング言語 D (D Programming Language, 通称D言語)を紹介するサイトです。 すでに Java など一般的なプログラミング言語の経験がある読者を前提として書かれています。 一部古いページを除いて、基的に、D 2.x 系統の言語仕様をベースに解説しています。 → 更新情報は RSS で 目次 1. Dってどんな言語? サンプルコード色々 D言語を大きくカテゴライズすると、「C風の構文を備えた」 「静的型」の「ネイティブコンパイル」言語と いうことになります。オブジェクト指向やテンプレートメタプログラミングなど、 幾つかのパラダイムをサポートし

    yheld
    yheld 2007/03/06
    わなD
  • Home - プログラミング言語 D (日本語訳)

    #!/usr/bin/rdmd // Computes average line length for standard input. import std.stdio; void main() { ulong lines = 0; double sumLength = 0; foreach (line; stdin.byLine()) { ++lines; sumLength += line.length; } writeln("Average line length: ", lines ? sumLength / lines : 0); } Standard input Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris tristique rutrum sem, nec convallis enim bibe

    yheld
    yheld 2007/03/04
    日本公式
  • 1