D言語を使って書かれた将棋プログラム「D将棋」について気になったので少し書いてみたいと思います。
D言語でコンピュータ将棋プレイヤを作りました
http://qiita.com/kfule/items/6b13d00524c00c8de7bf
LDCという、D言語からLLVMのコードを生成してコンパイルするコンパイラがあって、これが公式のD言語コンパイラより2,3倍ぐらい速いコードを生成するようです。
公式のD言語のコンパイラ要らないじゃん…。
まあ、LLVMの最適化と同じレベルのものを公式のコンパイラに求めるのがいけないのでしょう。というか、それなら公式のコンパイラ、LLVMのコードを生成するようにしてくれても良さそうな…。
それはともかく、LLVMでコード生成をする以上、GC(ガーベジコレクタ)ができるだけ走らないようにすれば、C/C++と同等ぐらいの速度が出るようですね。
D将棋では、MBA (mid 2013, i5 4250U 1.3-2.6GHz 1コア)で指し手生成祭りの局面で4.0M回/秒の速度が出ているようです。は、、速い!
※ 指し手生成祭りの局面 → position sfen l6nl/5+P1gk/2np1S3/p1p4Pp/3P2Sp1/1PPb2P1P/P5GS1/R8/LN4bKL w GR5pnsg 1
Apery(2012)のアピール文書にcore i7 2700k 1コアで「400万回/秒」と書いてあります。
http://www.computer-shogi.org/wcsc22/appeal/Apery/appeal.txt
だいたい同等の速度が出ていることがわかります。
実は、やねうら王(2015)は、指し手生成にあまり力を入れてなかったのでCore i7 4771で4.2M/秒ぐらいしか出てなくて、指し手生成において(同じ環境で比較すればおそらく)D将棋に負けてました。
やねうら王mini=やねうら王(2016)では、Core i7 4771において5.2M~5.4M/秒程度。Apery(2015)と同等程度の速度が出ていると思います。D将棋とも同じぐらいかも。
そんなわけで、確かにD将棋は決して遅くない、というか、C/C++と同等程度の速度が出ていると見て間違いなさそうです。
D言語の記法が使えて、C/C++と同等程度の速度が出るのは嬉しいですね。
>D言語の記法が使えて、C/C++と同等程度の速度
囲碁や将棋ゲームの開発において、D言語の方が向いている、と考えてよいのでしょうか。
C/C++で書かれた資産(将棋で言うところのStockfish)が利用できるか/参考に出来るかだとか、技術的な情報がインターネット上に十分にあるかだとか、デバッガを含めた統合環境が無料で利用できるかだとか、ソースコードを公開したときに協力してくれそうな人がどれくらい見込めるかだとか、そういうことを考えると現実的にはD言語を採用するのは難しい気はしますけども。
D将棋の作者は、一人で開発してて、C++は知っていて、Stockfishのソースコードも読んでいて、すでにD言語のノウハウがある程度あるということだったのでうまくいったわけですけども。
言語仕様的には、D言語のメリットはありますでしょうか。
入門用資料を読んだだけでは、GCが言語としてサポートされている以外、C++に比べて優位性は良くわかりませんでした。
この本文記事中にあるD将棋の作者による記事のなかに指し手生成のコードがあって、C++のtemplate糞味噌テクニックとは全く違った、大変美しいコードになっているかと思いますが…。
自分の中のD言語はD1で止まってるわけなんですが、その後どうなったんでしょうかね。
バグバグだったD2がいまでは主流なのでしょうか。
D触ってわかったことは、自分にはビジュアルデバッガが必要ということでした。
それがVCから離れられない理由です。
しかし、すごい可能性は感じたものですよ。
関数チェインで変なライブラリ作りたい欲求に駆られたりとか、いろいろ面白かったなぁ。(遠い目)
Visual Dというのがあって、Visual C++のデバッガが使えるみたいですよ。pluginでしょうからExpress Editionでは使えないかも知れませんが…。
情報ありがとうございます。
へぇ、そんなのあるんだ。
コミュニティエディションなので使えなくはなさそうですね。
まぁ、今はもう興味がないというか、C++にズブズブなんでちょっと難しいですけど、初心者の一助になればいいですね。
Dって昔から気になってました。
やねさんも昔、Dの記事等、力を割いていたように
思っています。
現在の状況では、今後Dはどう思いますか?
やねさんクラスの方にあえてお聞きしたいです。
※DやSwift、ScalaやRubyなど、やねさんの言語の良しあしなど、知っている範囲でもよいので、やねさんにはどのように見えているのか知りたいです。
あと、RustやNimなども。。。
やねさんクラスは言語は道具であって、
どれでもよいというのが本当のところと思いますが、
あえて、やねさんクラスから言語評論をあえてお聞きしたいです。
当時を振り返ってやねさんのブログを見ていました。
当時リアルタイムでDのことを読ませてもらっていましたが、
それが10年も前とは時間の流れは恐ろしい。。。
今Dの記事を読んでいて以下でめっちゃ吹きました。。。
面白すぎです。
ぽっくんの考えによると、s.length == 0 と !sがsの空洞性的に等価ならば、s = “”でnullがセットされないのは甚だ遺憾なのだー。だからナオセナオセ、ハヨナオセ。すぐに治ることを銀河系で一番祈ってる。
D言語。static if一つとっても素晴らしいアイデアで、現実的な機能を提供してくれますね。C++にこれがあればC++の糞味噌templateなんか要らないのに!
Ruby。{ }とか; とかあまり書かなくていいところが気に入ってます。Rubyに慣れるとC++のlambda式とか汚すぎて目が腐りそう!
Scala。C++がどこかの時点で過去のコードとの互換性を捨てて1から作りなおせばこうなってたのかも知れないぐらいの言語。
Swift。C#に近いのでC#が活躍するような領域では重宝するのでは。GUI関係の処理が大変なC++とは違って。
RustとNimはよく知らないです。
現実的な機能か~D言語はC++に置き換わってほしいな~^^
※ですがCからの歴史や資産もありますし、C++領域では置き換えがどんどん進んでいくような未来は希望薄いのかな。。。
現実的にはストレスない言語として
RubyとかScala、C#(Swift)あたりが有望なのかもしれませんね。。。
なんにせよ、D言語って楽しそうなので暇をみてやってみます!
興味がまたわいてきました。