C言語とApplication Binary Interface(ABI)互換があるD言語を教えて!
こういった悩みにお答えします.
本記事の信頼性
- リアルタイムシステムの研究歴12年.
- 東大教員の時に,英語でOS(Linuxカーネル)の授業.
- 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校(UNC)コンピュータサイエンス学部で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
- プログラミング歴15年以上,習得している言語: C/C++,Python,Solidity/Vyper,Java,Ruby,Go,Rust,D,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
- 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」をGitHubにオープンソースとして公開.
- 2020年1月~現在はアメリカのノースカロライナ州チャペルヒルにあるGuarantee Happiness LLCのCTOとしてECサイト開発やWeb/SNSマーケティングの業務.2022年6月~現在はアメリカのノースカロライナ州チャペルヒルにあるJapanese Tar Heel, Inc.のCEO兼CTO.
- 最近は自然言語処理AIとイーサリアムに関する有益な情報発信に従事.
- (AI全般を含む)自然言語処理AIの論文の日本語訳や,AIチャットボット(ChatGPT,Auto-GPT,Gemini(旧Bard)など)の記事を50本以上執筆.アメリカのサンフランシスコ(広義のシリコンバレー)の会社でプロンプトエンジニア・マネージャー・Quality Assurance(QA)の業務委託の経験あり.
- (スマートコントラクトのプログラミングを含む)イーサリアムや仮想通貨全般の記事を200本以上執筆.イギリスのロンドンの会社で仮想通貨の英語の記事を日本語に翻訳する業務委託の経験あり.
こういった私から学べます.
C言語を独学で習得することは難しいです.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!
目次
D言語:C言語とApplication Binary Interface(ABI)互換があるプログラミング言語
D言語は,C言語とApplication Binary Interface(ABI)互換があるプログラミング言語です.
※C++言語とは異なり,D言語はC言語とソースコードの互換性はないことに注意して下さい.
D言語は,2001年にウォルター・ブライトにより開発されました.
2015年からは,ウォルター・ブライトが会長をつとめるD言語財団が開発しています.
D言語の主な特徴は以下になります.
- C言語とABI互換
- マルチパラダイムプログラミング言語
- 手続き型プログラミング
- テンプレートによるジェネリックプログラミングやオブジェクト指向プログラミング
- 関数型プログラミング
- 高性能なコンパイル言語
- システムプログラミング言語(C言語のようにインラインアセンブラやポインタを利用してOSを実装可能)
- 型推論やガベージコレクション(明示的なメモリ管理も可能)
- 動的配列や配列,連想配列
つまり,D言語は「ぼくのかんがえたさいきょうのプログラミング言語」です!?
D言語くん(D-man):D言語の公式マスコット
D言語くん(D-man)は,D言語の公式マスコットです.
D言語くんは,いわゆるD言語の「ゆるキャラ」のような位置づけです.
D言語くんの歴史を知りたいあなたはこちらの記事を読みましょう!
D言語のコンパイラ
D言語のコンパイラは主に以下になります.
- DMD(Digital Mars D):公式のD言語コンパイラ(Linux,Windows,Mac OS X,FreeBSDで利用可能)
- GDC(GNU D Compiler):GNUのD言語コンパイラ
- LDC(LLVM D Compiler):LLVMのD言語コンパイラ
Ubuntu(Linux)では以下のコマンドでGDCをインストールできます.
本記事ではGDCを利用します.
1 |
$ sudo apt-get install gdc |
D言語でプログラミング
D言語でプログラミングを紹介します.
D言語で「Hello World!」
D言語で「Hello World!」を表示するコードは以下になります.
1 2 3 4 5 6 7 8 9 10 |
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ import std.stdio; void main() { writeln("Hello World!"); } |
実行結果は以下になります.
1 2 3 |
$ gdc hello.d $ a.out Hello World! |
D言語がC言語とABI互換があることを確認するためにD言語からC言語の関数呼び出し
D言語がC言語とABI互換があることを確認するためにD言語からC言語の関数呼び出しをします.
D言語とC言語のコード一式はこちらからダウンロードして下さい.
- Makefile:ビルド構成ファイル
- d2c.d:D言語のmain関数からC言語のprint_str関数を呼び出すコード
- print.c:C言語でprint_str関数を実装するコード
- print.di:C言語のprint_str関数のインターフェースを記述するコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# # Makefile for D2C # # Author: Hiroyuki Chishiro # DC = gdc CC = gcc RM = rm -f DFLAGS += -Wall CFLAGS += -Wall LDFLAGS = SRCS = d2c.d CSRCS = print.c OBJS = $(SRCS:.d=.o) COBJS = $(CSRCS:.c=.o) TARGET = d2c .PHONY: all clean all: $(TARGET) $(TARGET): $(OBJS) $(COBJS) $(DC) -o $@ $(OBJS) $(COBJS) $(DFLAGS) $(LDFLAGS) $(OBJS): $(SRCS) $(DC) $(DFLAGS) -c $< $(COBJS): $(CSRCS) $(CC) $(CFLAGS) -c $< clean: $(RM) -r $(TARGET) $(OBJS) $(COBJS) *~ |
1 2 3 4 5 6 7 8 9 10 11 |
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ import std.stdio; import print; void main() { print_str("Hello World!\n"); } |
1 2 3 4 5 6 7 8 9 10 |
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ #include <stdio.h> void print_str(const char *str) { printf("%s", str); } |
1 2 3 4 5 6 |
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ extern (C): void print_str(const char *str); |
makeでビルドして実行します.
D言語のmain関数からC言語のprint_str関数を呼び出すことで,正常に「Hello World!」と表示されていることがわかります.
1 2 3 4 5 6 |
$ make gdc -Wall -c d2c.d gcc -Wall -c print.c gdc -o d2c d2c.o print.o -Wall $ ./d2c Hello World! |
D言語を学べる記事や動画
D言語を学べる記事は以下になります.
D言語を学べる動画は以下になります(再生リストはこちら).
D言語の本「プログラミング言語D」は,D言語の初歩から応用まで解説していますので,おすすめです!
質問:D言語は「ぼくのかんがえたさいきょうのプログラミング言語」なのに,なんで使われていないの?
D言語は「ぼくのかんがえたさいきょうのプログラミング言語」なのに,なんで使われていないのかというと,主な理由は以下になります.
- ほとんど場合はC/C++言語でOKなので,わざわざ新しいプログラミング言語を習得する必要がないこと
- C/C++言語で開発されたソースコードや教材が豊富にあるため習得しやすいこと(D言語はあまり多くないので習得が大変)
- D言語で開発された代表的なソフトウェアがないため,D言語の仕事がほとんどないこと
D言語があまり使われていない理由は,以下の記事でも考察されています.
D言語は趣味で使う分には面白いですが,仕事にするには需要があまりない感じです.
グーグルなどがD言語でソフトウェアを開発(D言語エンジニアを募集)すれば広まる可能性はありますが,実際はC/C++/Python/Go/Rust言語が多いですね...
C/C++/Python/Go/Rust言語を学びたいあなたはこちらからどうぞ.
まとめ
C言語とApplication Binary Interface(ABI)互換があるプログラミング言語「D言語」を紹介しました.
D言語は「ぼくのかんがえたさいきょうのプログラミング言語」です!?
D言語の後継ではないですが,E言語もあります.
E言語は以下の種類がありますので,興味があるあなたはこちらからどうぞ.
- E言語:セキュアな分散コンピューティングのためのオブジェクト指向プログラミング言語
- Amiga E:C言語を基本的なコンセプトとしたマルチパラダイム,関数型,オブジェクト指向,手続き型のプログラミング言語
- e言語:柔軟性と再利用性の高い検証用テストベンチの実装に特化したハードウェア検証言語(HVL:Hardware Verification Language)
- GNU E:永続的なアプリケーションをサポートするソフトウェアシステムを書くために設計された C++言語の拡張機能
A~Z言語を調べた記事もあります.
C言語を独学で習得することは難しいです.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!