2008/8/5 - 2011/7/28
Pen Jr.D言語なんてやってみそWelcome BeginnerアバウトD
<<・・アバウトD
・・>>
D言語とは( Overview
C言語 の後継として、C++ に代わるマルチパラダイムプログラミング言語。

Zortech C++コンパイラやDigital Mars C/C++コンパイラ の作者 Digital Mars社の Walter Bright 氏によって開発された ネイティブコンパイル言語

開発モデル
D言語 の開発モデルは C、C++ などの既存言語と同じで、テキストエディター や デバッガー など既存のツールを使えます。
互換性
ソースコードの互換性はどの言語ともありませんが、
ルック&フィール
  • ほとんどの式や文、全体的なレイアウトも C/C++ と同じ形です。
  • Cの演算子とその優先順位、式の評価順序規則、型の昇格規則を全て保っています。
対 C
  • 呼び出し規約
  • 構造体・共用体・列挙型・ポインタ・基本データ型

宣言は置き換える必要があるのでヘッダーファイルの変換は必要になりますが、C の関数へ直接アクセス出来ますから、OS の API(Win32API)にも直接アクセス出来ます。

対 C++

C++ との互換性は不完全ですが

  • C++ と名前マングリング規則を合わせる
  • C++ と関数呼び出し規約を合わせる
  • C++ と、単一継承の場合に限り仮想関数テーブルの形式を合わせる

COMインターフェイスは使えますから、Windows のアプリケーションを作る場合の致命的な問題はほとんどないでしょうが、C++ のライブラリーはほとんど使えないでしょう。

ネイティブコンパイル言語
ネイティブ言語
ネイティブ言語 とは 機械語 のことで、一般的な CPU は機械語以外は理解できませんから、Windows などの OS も 機械語 に変換されてものをインストールしますし、PC で実行されているものは 全て どこかで ネイティブ言語 に変換されています。

プログラム言語によって、ネイティブ言語 への変換(コンパイル)が明確なものと、そうではないものに分類されたりもします。

オブジェクトファイル
オブジェクトファイル(Object File)またはオブジェクトコード(Object Code)とは、コンパイラがソースコードを処理した結果生成される中間的なコード表現である。オブジェクトファイルの内容はバイナリであり、コンパクトで構文解析済みのコードである。オブジェクトファイル群をリンクすることによって最終的な実行ファイルやライブラリが作成される。

コンパイラー の処理が終了した 機械語 の バイナリーコード で、実行情報も含まれるが確定していないのが一般的。

リンク

機械語 も共通言語ではありませんが、アセンブラー も オブジェクトファイル を出力しますから、同じ 機械語 で オブジェクトファイル形式 が同じなら異なった言語のとの リンク も出来ます。

エントリーポイント
ネイティブコンパイル言語 のプログラムは普通 エントリーポイント から記述する必要がありますが、面倒な処理を書く必要はありませんし、より自由な設計が可能になります。

スクリプト言語 や RAD環境 でプログラムを組む場合、エントリーポイント を意識する必要がなかったりしますが、C、C++ や D言語 は エントリーポイント が明確です。

利点
プログラマが特別な実行時VM (仮想マシン) に縛られる Java VM や Smalltalk VM のような機構とは無関係です。 D VM なんてものは存在せず、 D は普通にリンクできるオブジェクトファイルを生成する、 直接的なコンパイラです。D は C と同様にOSに直結しています。

いろいろありますが、基本的にはアセンブラ言語(機械語)で出来ることは何でも出来るようになっていますから、その環境で出来ることは何でも出来ると言うことになります。

また、ネイティブコンパイル言語 = 難解 とは限らず、ある意味シンプルでわかりやすかったりもします。

主要言語機能
ガベージコレクション
オブジェクト指向
テンプレート
配列
連想配列
動的クロージャ
RAII
演算子オーバーロード
最初に学ぶプログラミング言語
最近はプログラムを学習しようと思えば、ありとあらゆるアプローチが用意されているようですが、初心者が手軽に触ってみられるものとなるとその選択肢は意外と少ないのではないかと思います。
BASIC
PC には OS すら付属せず、電源を入れると BASIC だったりして、出来ることがプログラミングかゲーム以外ほとんどないような頃は、PC を触ること = プログラム(BASIC)学習だったりもしました。

BASIC とアセンブラ以外は高嶺の花ばかりで手軽に触れる言語はほとんどなく、まずは BASIC を覚えることが自然で、BASIC のマニュアルも当たり前のように付属していたりしましたから、当然インターネットなどと言う情報源などありませんでしたが独学で何とかなったものです。

最初に学んだ言語は BASIC という人は多いでしょうが、そういう時代のお話。

Visual Basic は言語仕様が似ているだけで別物でしょうし、現在の Windows の環境で 初心者が学べる BASIC を探すだけで大変です。

スクリプト言語(インタプリタ)
機械語への翻訳が不要で、ソースコードをダイレクトに実行出来るように見えるものですが、言語仕様としてその分類が明確な言語とそうではない言語があります。

また、RAD のようにほとんどインタプリタな開発環境もありますし、D言語にもインタプリタのようなことをさせることは出来たりしますから、言語の分類項目としては曖昧。

すでに使える環境があれば初心者向きな言語はあると思いますが・・・
C言語
情報が豊富でツールなんかも沢山ありますから、取り付きやすさでは一番でしょう。

何とかなるかも知れませんが、ポインターやメモリー管理、プリプロセッサ(マクロ)などは初心者の天敵で、避けて通れない仕様なのも問題です。

Object Pascal(Delphi6)
無償で手に入った Delphi6 は RAD が使えて、また、普通にテキストエディターでソースコードを書いてコンパイルすることも出来き、言語仕様も初心者に向いていました。

Delphi6 はちょっと古すぎますし、最近はどうなってるの?

D言語
初心者を考慮した言語仕様ではないことは確かです。

確かに高機能過ぎて 初心者 にとって難解でしょうが、冗長な記述の多くは省略できますし、初心者 にも理解しやすいところだけを使っての プログラミング も出来ます。

どちらにしても、初心者にどうなのかは判断できませんが、

間違ったやり方より正しいやり方の方が簡単に書けるようにすること。

いかにも学習向きです。

最小限の投資
過去の BASIC がそうだったように、最初は最小限の投資( PC があれば無料 )で済むべきでしょう、少なくともどんな教科書が自分に必要なのかを判断できるようになるまでは。
D言語の問題点
日本語環境に弱い
日本語環境ではデフォルトの Shift-JIS の方に問題があるのですが、文字コード の指定が必要だったり、変換が必要だったり、

最初は戸惑うかも知れませんが、最近では Shift-JIS がアホな規格だと教えてくれる環境がとっても少なくなりましたから、ある意味貴重?

不安定
破壊的な仕様変更など当たり前、バグが減るどころか増える傾向があったりして、最新バージョンはある意味とても楽しみ、

だった?のは、過去の話になるかもしれません。

人気がない
初心者は D言語 の存在を知ることもないでしょう。

・・・・

多機能過ぎる
基本を身につける前におかしなテクニックを憶えてしまい、基本的なことが出来ないというかコードが書けない自称プログラマーが多いらしい。

基本を身につけるには最小限の機能で十分で、ある程度の身につくまではその中で出来るだけ我慢強く遊んだ方が良いのは確実でしょうが、今日日そんな環境があって、しかもそこで我慢強く遊べればのお話。

Windows D Compiler
D 1.0D 2.0
D 1.0Change Log
統合環境が選べたり、使えそうなライブラリーがあったりしますが、安定版というポジションは微妙。

また、D 2.0 との互換性が異種言語と言っても良いほど考慮されていませんから、後で 2.0 へ移行するというのも?

ちなみに、このサイトでは 1.0 は対象外。

D 2.0Change Log
最近(2011年1月30日現在)は Bugfix が中心で、変更や追加があるのは標準ライブラリ(Phobos)。

簡単に遭遇できるようなバグもなく、仕様も安定している様子。

1.0 の方がライブラリや開発環境の選択肢は多いでしょうが、ほとんどが古く更新されていないものが多いでしょうから、あえて 1.0 を使う理由はほとんどないでしょう。

ダウンロード( D Programming Language 2.0 )

先頭には version 1 がありますが、すっ飛ばして、

DMD - Digital Mars D Programming Language version 2

  • dmd.2.xxx.zip( dmd D 2.0 compiler )
  • dmd Windows installer( dmd D 2.0 compiler 1-click install for Windows )

のどちらか1つをダウンロード

最新情報
更新履歴や内容のチェックは
いの一番で最新バージョンを使いたければ、ここから。

最新バージョンでは都合が悪い時は任意のバージョンもダウンロード出来ます。

インストール
インストールする場所はどこでも良いと思いますが、以前は空白入りのディレクトリー名があったりするとダメだったりしましたから、出来るだけ日本語や空白の含まれないところの方が問題は起きづらくなるでしょう。
.zip
dmd2 以下を好きなところに解凍するだけですが、
\dmd2\windows\bin

PATH に追加する必要があります。

dmd Windows installer
実行すれば最新版をダウンロードして任意の場所にインストール出来ます。

PATH の設定もしてくれますが、環境変数は SystemPATH に追加されます。

また、全部インストールするとデフォルトが 1.0 になってしますので、普通は D 2.0 だけをインストールした方が良いでしょう。

環境変数(PATH)
まずは「コンピューター右クリック -> プロパティー」とかなんとかから、「システムのプロパティー」の「詳細設定」にたどり着きましょう。
システム・プロパティー

「環境変数」をクリック

環境変数

「ユーザー環境変数」と「システム環境変数」がありますが、「ユーザー環境変数」の方がいじりやすいでしょう。

新品状態の場合「PATH」はないと思いますから「追加」を、すでにあるなら選択して「編集」をクリック。

編集

変数名は PATH

変数値は、dmd をインストールしたところの \dmd2\windows\bin を、すでに何かあるなら、その後に必ず ; を入れてから追加しましょ。

コマンドプロンプト
コンパイル は コマンドプロンプト を使うのが基本です。
コマンドプロンプト は

スタートメニュー -> 全てのプログラム -> アクセサリー -> コマンドプロンプト

から起動できます。

コマンドプロンプト
カレントディレクトリー
筆者の環境で コマンドプロンプト を起動すると カレントディレクトリー は

C:\Users\Pen-Jr

ということになります。

普段 Windows は GUI で操作しますから、カレントディレクトリーやパスなんか知らなくても、マウス操作だけで任意のファイルにたどり着くことが出来ますが、

コマンドプロンプト ではいちいち 正確な入力 が必要になります。

ディレクトリー情報は dir コマンドを使えば表示されます。
dirコマンド

0個のファイル、9個のディレクトリーということですが、

. はカレントディレクトリーで、

.. は親ディレクトリーです。

ディレクトリー の移動は cd を使います。

cdコマンド
D Compiler の起動
C:\Users\Pen-Jr>dmd
と実行ファイル名だけ入力します。
コマンドプロンプト は カレントディレクトリー を検索して、dmd.exe が見つからないと、
環境変数 PATH で指定された ディレクトリー を検索をします。

dmd.exe が見つかれば

dmd

dmd.exe が見つからないとか言われたら、環境変数 の設定に間違いがあるはず。

コマンドプロンプトを好きなフォルダで起動
カレントディレクトリー を ソースファイル のあるところにしないといろいろ面倒ですが、Vista 以降ならエクスプローラから任意のフォルダーで

Shift + 右クリック のメニューに「コマンドウィンドウをここで開く」

がありますから、エクスプローラからソースファイルのあるフォルダから Shift + 右クリック で起動すれば OK。

Vista より前の OS や Shift+ とか面倒だったりなら以下のツールが便利。
UAC が有効だと、管理者権限が必要な時がありますが、権限付きでの起動も簡単になります(普通にコンパイルするだけなら、管理者権限とかは不要)。

また、レジストリをいじるのが平気で Vista 以降ならツールを使わなくても

HKEY_CLASSES_ROOT\Directory\shell\cmd の Extended

を削除すれば Shift+ はいらなくなりますし、UAC も無効にすれば面倒はなくなります。

dmd はどこからでも起動できますから、ソースファイルのあるディレクトリーで コマンドプロンプト を起動すれば、作業が楽になります。

2011年7月27日

E-Mail : open@pen-jr.org

ご意見やご指摘は大歓迎ですが、質問など返信は期待しないでください

pen jr.
D言語研究
わかったつもりになるD言語
D言語友の会
News&Days
はじめてのブログ選び