プログラミング言語 D (D Programming Language) について語るスレッドです。
■本家
http://dlang.org/ - 公式(英語)
http://www.kmonos.net/alang/d/ - 公式の和訳 (やや古いので注意)
https://issues.dlang.org/ - D言語バグ報告
https://github.com/D-Programming-Language - D言語開発リポジトリ
■Wiki
http://wiki.dlang.org/ - 公式Wiki
http://dusers.dip.jp/ - D言語友の会(日本語フォーラムあり)
■プログラミング言語D (TDPL: The D Programming Language)
Andrei Alexandrescu 日本語版
http://www.shoeisha.co.jp/book/detail/9784798131108
ソース貼付サイト http://dpaste.dzfl.pl/
<$><$> https://www.bountysource.com/trackers/383571-d-programming-language
■前スレ
D言語 Part33
http://toro.2ch.net/test/read.cgi/tech/1396145538/
■過去スレ、関連スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=D%8C%BE%8C%EA&sf=2&all=on&view=table&shw=5000
D言語 Part34©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2015/01/25(日) 12:07:29.52ID:gAd5OZDm
235226
2015/10/16(金) 22:51:07.22ID:GwISFyO6236デフォルトの名無しさん
2015/10/17(土) 09:05:55.54ID:M7lcZRBS >>231
バグっぽい removeしつくしたら null になってるはずなんだけど
バグっぽい removeしつくしたら null になってるはずなんだけど
237デフォルトの名無しさん
2015/10/17(土) 09:08:29.29ID:M7lcZRBS それに連想配列の内部実装は最近まで大きく書き換えられてて
動作の微妙な違いとかあるのでトリッキーなことは避けるべき
動作の微妙な違いとかあるのでトリッキーなことは避けるべき
238226
2015/10/17(土) 22:20:49.79ID:KpZ8gQf0 >>236-237 そうなんですね。書き換えます。ありがとうございます。
239デフォルトの名無しさん
2015/10/20(火) 00:01:18.64ID:wy5QxwnK リンクエラー。2.067.1では通ってた。
http://dpaste.dzfl.pl/255495e7489a
1. -m64 で
2. CTFEで実行されるラムダ内で定義されている
3. 配列をメンバに持つ構造体の
4. 配列のconcatを行う
http://dpaste.dzfl.pl/255495e7489a
1. -m64 で
2. CTFEで実行されるラムダ内で定義されている
3. 配列をメンバに持つ構造体の
4. 配列のconcatを行う
240デフォルトの名無しさん
2015/10/22(木) 22:35:23.39ID:WlXBpB56241デフォルトの名無しさん
2015/10/28(水) 16:43:28.27ID:w9dndjrH D言語って、Javaみたいにソースファイル名とクラス名を同じにしてしまうと、
他のソースでクラス名のつもりで記述したものがパッケージ名扱いになってしまうため
Hoge.Hoge のように同じ名前を2回書かないとクラス名と解釈してくれないと思うのですが、
これを1回だけの記述で済ましたい場合、皆さんはどのように解決されているんでしょうか?
ソースファイル名を変えるのもmodule文で別名にするのも、何か違うように感じてしまいます。
他のソースでクラス名のつもりで記述したものがパッケージ名扱いになってしまうため
Hoge.Hoge のように同じ名前を2回書かないとクラス名と解釈してくれないと思うのですが、
これを1回だけの記述で済ましたい場合、皆さんはどのように解決されているんでしょうか?
ソースファイル名を変えるのもmodule文で別名にするのも、何か違うように感じてしまいます。
242デフォルトの名無しさん
2015/10/28(水) 19:24:28.95ID:9zUX3+we モジュール名とファイル名は小文字
クラス名は大文字始まり
それでもカブるようなケースはパッケージを作るからまず困らない
クラス名は大文字始まり
それでもカブるようなケースはパッケージを作るからまず困らない
243デフォルトの名無しさん
2015/10/29(木) 01:37:25.50ID:0VE0VetC >>241 D言語の命名規則に則れば >>242 の言うとおり。
ただ、どうしてもと言うならこんなんはいかがか。
http://dpaste.dzfl.pl/dce8977dacc7
えーと。やっぱ242で。
ただ、どうしてもと言うならこんなんはいかがか。
http://dpaste.dzfl.pl/dce8977dacc7
えーと。やっぱ242で。
244デフォルトの名無しさん
2015/10/29(木) 10:25:47.23ID:xCMI4xlR >>242
なるほと確かにD言語の命名規則からするとモジュール名は小文字でしたね。
でも、どうしても大きなクラスは同名の一ソースにしたいのです‥すみません。
ところでパッケージで気付かせてもらったのですが、この問題って、
クラスのソースらをルート階層に置いているからこそ起きる問題なのですね。
というわけでディレクトリを一つ掘ってパッケージ下に配置することで一応解決しました!
ただ、パッケージ下にあるソースって module パッケージ名.モジュール名 の記述は必ず必要なのでしょうか?
module文の記述が無いとルートパッケージ下として格納されてしまうようで、
module文を普段省略していた身からするとちょっと面倒に感じています。
この辺りの挙動はjavaのpackage文の踏襲かなと思うのですが、
D言語ではパッケージはディレクトリに対応すると書かれているようなので、
module文を省略しても適切なパッケージに配置してくれて良いような?
>>243
おぉ‥改名選択importというやつでしょうか。確かにこれで通りました。
import _Hoge = Hoge : Hoge; という風に変換されるんですね。
import文までコンパイル時生成できるとは、D言語きm‥素晴らしいです。
ただこの書き方ではモジュール名変更リファクタリングの際にIDEが解析しにくい気がするので
(そもそもそこまでお世話してくれるIDEは現存しないようですけれど‥)、
取り敢えずは先のパッケージへの配置法でがんばってみます。
凄いものをありがとうございました。今後の困難の際に参考にします。
なるほと確かにD言語の命名規則からするとモジュール名は小文字でしたね。
でも、どうしても大きなクラスは同名の一ソースにしたいのです‥すみません。
ところでパッケージで気付かせてもらったのですが、この問題って、
クラスのソースらをルート階層に置いているからこそ起きる問題なのですね。
というわけでディレクトリを一つ掘ってパッケージ下に配置することで一応解決しました!
ただ、パッケージ下にあるソースって module パッケージ名.モジュール名 の記述は必ず必要なのでしょうか?
module文の記述が無いとルートパッケージ下として格納されてしまうようで、
module文を普段省略していた身からするとちょっと面倒に感じています。
この辺りの挙動はjavaのpackage文の踏襲かなと思うのですが、
D言語ではパッケージはディレクトリに対応すると書かれているようなので、
module文を省略しても適切なパッケージに配置してくれて良いような?
>>243
おぉ‥改名選択importというやつでしょうか。確かにこれで通りました。
import _Hoge = Hoge : Hoge; という風に変換されるんですね。
import文までコンパイル時生成できるとは、D言語きm‥素晴らしいです。
ただこの書き方ではモジュール名変更リファクタリングの際にIDEが解析しにくい気がするので
(そもそもそこまでお世話してくれるIDEは現存しないようですけれど‥)、
取り敢えずは先のパッケージへの配置法でがんばってみます。
凄いものをありがとうございました。今後の困難の際に参考にします。
245デフォルトの名無しさん
2015/11/04(水) 15:13:08.14ID:L5M/yopQ dmd2.069.0
246デフォルトの名無しさん
2015/11/06(金) 23:00:00.73ID:XSTiM1/K Error: template std.algorithm.searching.countUntil cannot deduce function from argument types !()(int[11], int), candidates are:
こういうエラーが出たんですけど、countUntilに静的配列は使えないということでしょうか?
Error: template instance sort!((uint a, uint b)
あと、sortに無名関数を渡したらエラーが出ました。無名関数も使えないのでしょうか?
こういうエラーが出たんですけど、countUntilに静的配列は使えないということでしょうか?
Error: template instance sort!((uint a, uint b)
あと、sortに無名関数を渡したらエラーが出ました。無名関数も使えないのでしょうか?
247デフォルトの名無しさん
2015/11/07(土) 11:16:15.31ID:oYYknJv4 静的配列に対して popFront() が呼べない(初めて知った!)
だからレンジ系操作に対しては全滅に近い
ソートの方はそれだけじゃ分からんね
無名関数は使い方間違えた時にわかりづらい
だからレンジ系操作に対しては全滅に近い
ソートの方はそれだけじゃ分からんね
無名関数は使い方間違えた時にわかりづらい
248デフォルトの名無しさん
2015/11/07(土) 15:26:06.21ID:k3hAw3NX 静的配列は要素数が変更できないからですか。
Rangeの要件を満たしてないとなると結構不便ですね。
sortはエラーメッセージがこの1行しか出ないんですよね。
シンプルな例でテストしたらコンパイルは通ったんですけど、他のコードが影響してるのかなぁ。
Rangeの要件を満たしてないとなると結構不便ですね。
sortはエラーメッセージがこの1行しか出ないんですよね。
シンプルな例でテストしたらコンパイルは通ったんですけど、他のコードが影響してるのかなぁ。
249デフォルトの名無しさん
2015/11/07(土) 22:04:33.49ID:X4t7LIyp 固定長配列の全体のスライスを取って動的配列に見せかければ
ある程度のRange操作だったら固定長配列にもかけられるのでちょっと便利です
ある程度のRange操作だったら固定長配列にもかけられるのでちょっと便利です
250デフォルトの名無しさん
2015/11/09(月) 04:06:00.73ID:PiWCufYC はあ、なるほど。
251デフォルトの名無しさん
2015/11/09(月) 04:09:17.37ID:PiWCufYC delegateのcovariane/contravarianceはなくなったんですかね
252デフォルトの名無しさん
2015/11/14(土) 10:33:38.52ID:TuAUCuHQ SortedRange!(R, ((a, b) => binaryFun!less(unaryFun!transform(a),
unaryFun!transform(b))))
schwartzSort(alias transform, alias less = "a < b",
SwapStrategy ss = SwapStrategy.unstable, R)(R r)
if (isRandomAccessRange!R && hasLength!R)
{ ... }
こんなの見ても揺らがないのが真のD言語er
unaryFun!transform(b))))
schwartzSort(alias transform, alias less = "a < b",
SwapStrategy ss = SwapStrategy.unstable, R)(R r)
if (isRandomAccessRange!R && hasLength!R)
{ ... }
こんなの見ても揺らがないのが真のD言語er
253デフォルトの名無しさん
2015/11/14(土) 12:16:16.84ID:AP01jWaC 真のD言語erはそんなに書いて(書かせて)もらえることに感謝する
254デフォルトの名無しさん
2015/11/14(土) 20:42:57.89ID:uWuWWunU デバッグ用に関数名を出力したいんですけど、関数名を取得する方法はあるでしょうか?
__FILE__や__LINE__みたいな感じのが欲しいです。
__FILE__や__LINE__みたいな感じのが欲しいです。
255デフォルトの名無しさん
2015/11/15(日) 00:26:31.44ID:4YAQhy/L 標準入出力をフラッシュするにはどうすればいいですか?
256デフォルトの名無しさん
2015/11/15(日) 00:49:19.11ID:DVr3HCs9 基本的には、DではCの標準ライブラリと同等の関数をほぼそのまま薄いラッパで提供しています
257デフォルトの名無しさん
2015/11/15(日) 01:23:34.60ID:4YAQhy/L dout.flush()ということですか。
writeln()に対応するものはないんでしょうか?
writeln()に対応するものはないんでしょうか?
258デフォルトの名無しさん
2015/11/15(日) 02:08:17.69ID:4YAQhy/L stdout.flush()でできました。
259デフォルトの名無しさん
2015/11/15(日) 07:41:57.52ID:ndJn5r2D260デフォルトの名無しさん
2015/11/15(日) 14:56:12.51ID:4YAQhy/L261デフォルトの名無しさん
2015/11/15(日) 15:01:11.74ID:4YAQhy/L 自作のプログラムを実行すると毎回同じ場所でobject.Error: Access Violationが発生します。
エラーとは関係なさそうな修正(stderr.writeln()を増やしたり減らしたり)をするとエラー発生の場所が変わったり、
InvalidMemoryOperationErrorに変わったりします。
エラーの原因がさっぱり分からないんですけど、どういうことが考えられるでしょうか?
エラーとは関係なさそうな修正(stderr.writeln()を増やしたり減らしたり)をするとエラー発生の場所が変わったり、
InvalidMemoryOperationErrorに変わったりします。
エラーの原因がさっぱり分からないんですけど、どういうことが考えられるでしょうか?
262デフォルトの名無しさん
2015/11/15(日) 15:29:26.30ID:r8bNQIop リーク
263デフォルトの名無しさん
2015/11/15(日) 16:21:30.07ID:4YAQhy/L GCのある言語でメモリリークとなると、どういうケースがあるのか想像がつかないです。
エラー発生の場所も変わるので謎です。
エラー発生の場所も変わるので謎です。
264デフォルトの名無しさん
2015/11/15(日) 17:04:42.06ID:PV6fOtMt GCのリーク以外に
確保してない場所に書き込むのもリークって言わない?
確保してない場所に書き込むのもリークって言わない?
265デフォルトの名無しさん
2015/11/15(日) 17:07:38.68ID:lu/bgS1P こマ?初めて聞いたその結び付け
リーク=解放処理漏れ 以外の認識ないわ
リーク=解放処理漏れ 以外の認識ないわ
266デフォルトの名無しさん
2015/11/15(日) 17:19:50.76ID:4YAQhy/L newする前のクラスのインスタンスの関数を使ってAccess Violationが出たことは過去にありますね。
しかし、今回はちゃんとnewされているし、1回目の呼び出しでエラーが発生してるわけでもないんですよね。
そして>>261で書いたようにstderr.writeln()を追加するだけでエラー発生のタイミングが変わるので難解です。
しかし、今回はちゃんとnewされているし、1回目の呼び出しでエラーが発生してるわけでもないんですよね。
そして>>261で書いたようにstderr.writeln()を追加するだけでエラー発生のタイミングが変わるので難解です。
267デフォルトの名無しさん
2015/11/15(日) 18:08:15.11ID:PV6fOtMt 初期化してない変数でアクセス
268デフォルトの名無しさん
2015/11/15(日) 18:39:09.01ID:ndJn5r2D AVならばぬるぽか RangeErrorか deleteの間違い
-g -debug してないんかいな
InvalidMemoryOperationError
ならばデストラクタの中で何か変なことしてる疑い
デストラクタの中でdeleteとかしちゃダメダメよ〜
-g -debug してないんかいな
InvalidMemoryOperationError
ならばデストラクタの中で何か変なことしてる疑い
デストラクタの中でdeleteとかしちゃダメダメよ〜
269デフォルトの名無しさん
2015/11/15(日) 18:44:09.41ID:zgz009B6 似たことなったことあるなあ。なんやったか。
templateとかmixinがらみで依存関係見落としててobjの更新忘れとか。
templateとかmixinがらみで依存関係見落としててobjの更新忘れとか。
270デフォルトの名無しさん
2015/11/15(日) 19:02:33.53ID:4YAQhy/L すみませんReleaseビルドになってました。
DebugビルドにしたらRangeErrorになりました。
DebugビルドにしたらRangeErrorになりました。
271デフォルトの名無しさん
2015/11/15(日) 19:09:44.01ID:PV6fOtMt 報告乙
272デフォルトの名無しさん
2015/11/19(木) 16:51:28.76ID:I2rQS35X char *hoge[] = new char *[N];
scope(exit) free(hoge.ptr);
とするのと
char **hoge = cast(char **)(new char *[N]);
scope(exit) free(hoge);
とするのとでは同じ動作が期待出来ますか?
あとガベコレを期待するなら
scope(exit) free(hoge.ptr);
も
scope(exit) free(hoge);
もどちらも不要ですか?
scope(exit) free(hoge.ptr);
とするのと
char **hoge = cast(char **)(new char *[N]);
scope(exit) free(hoge);
とするのとでは同じ動作が期待出来ますか?
あとガベコレを期待するなら
scope(exit) free(hoge.ptr);
も
scope(exit) free(hoge);
もどちらも不要ですか?
273デフォルトの名無しさん
2015/11/19(木) 23:48:30.24ID:kWkiLP1L 色々とカオス(感想)
C : malloc/free
C++: new/delete
D : new/[destroy]
GCがあるので解放は不要だが、領域が不要になったことをdestroyで明示してもよい
ただしdestroyで領域が即時解放されるわけでなく、GCが必要に応じてよしなにやる
C++のdeleteと区別するために、destroyになった(想像)
---
auto hoge = new int[][N]; // int型の動的配列をN要素もてる動的配列(二次元配列)
foreach (elem; hoge)
elem = new int[色々]; // ジャグ配列も可能
// 以下は不要(してもよい)
foreach (elem; hoge)
destroy(elem);
destroy(hoge);
---
GCを使わずmalloc/freeすることも一応可能
(今だと、std.experimental.allocatorを使うべき?)
newしたものをfreeすることに保証はないと思う、知らんけど
C : malloc/free
C++: new/delete
D : new/[destroy]
GCがあるので解放は不要だが、領域が不要になったことをdestroyで明示してもよい
ただしdestroyで領域が即時解放されるわけでなく、GCが必要に応じてよしなにやる
C++のdeleteと区別するために、destroyになった(想像)
---
auto hoge = new int[][N]; // int型の動的配列をN要素もてる動的配列(二次元配列)
foreach (elem; hoge)
elem = new int[色々]; // ジャグ配列も可能
// 以下は不要(してもよい)
foreach (elem; hoge)
destroy(elem);
destroy(hoge);
---
GCを使わずmalloc/freeすることも一応可能
(今だと、std.experimental.allocatorを使うべき?)
newしたものをfreeすることに保証はないと思う、知らんけど
274デフォルトの名無しさん
2015/11/20(金) 01:05:01.96ID:gniDkGmv × foreach(elem; hoge)
○ foreach(ref elem; hoge)
○ foreach(ref elem; hoge)
275デフォルトの名無しさん
2015/11/20(金) 10:48:03.85ID:LnAg0HCn ありがとうございます!!
276デフォルトの名無しさん
2015/11/20(金) 22:50:35.51ID:KMWFgUCm クラスのstaticメンバ関数で、継承先の型って見られますか?
class Base {
static T[] takusanMake(T)(int n) { //Hogeから呼んでT=Hogeがほしい
T[] ret = new T[n];
foreach (ref e; ret) {
e = new T;
}
// ... Baseのフィールドしかいじらないような設定 ...
return ret;
}
}
class Hoge : Base {
}
void main() {
//Hoge
auto hoge = Hoge.takusanMake(30);
}
内容はともかく、大体こんな感じのことをしたいです
Baseから派生したクラスで定義するとか、ちゃんと!(Hoge)してもいいんですが、
(this T)を見てから何か方法があるような気がしてきて・・・
class Base {
static T[] takusanMake(T)(int n) { //Hogeから呼んでT=Hogeがほしい
T[] ret = new T[n];
foreach (ref e; ret) {
e = new T;
}
// ... Baseのフィールドしかいじらないような設定 ...
return ret;
}
}
class Hoge : Base {
}
void main() {
//Hoge
auto hoge = Hoge.takusanMake(30);
}
内容はともかく、大体こんな感じのことをしたいです
Baseから派生したクラスで定義するとか、ちゃんと!(Hoge)してもいいんですが、
(this T)を見てから何か方法があるような気がしてきて・・・
277デフォルトの名無しさん
2015/11/21(土) 13:20:00.57ID:1cOWOBSi staticなメンバ関数からは、thisは見えないので
UFCS前提でいっそ外部に出して
===
import std.stdio;
class Base {}
class Hoge : Base {}
class Other {}
T[] takusanMake(T : Base)(lazy T d, int n) {
auto ret = new T[n];
foreach (ref e; ret) {
e = d();
}
return ret;
}
void main() {
auto hoge = (new Hoge).takusanMake(30);
typeid(hoge).writeln;
// Baseに暗黙変換できない型はNG
//auto other = (new Other).takusanMake(30);
}
===
こういうのはどうだろう
(もっといい方法ありそう。。)
UFCS前提でいっそ外部に出して
===
import std.stdio;
class Base {}
class Hoge : Base {}
class Other {}
T[] takusanMake(T : Base)(lazy T d, int n) {
auto ret = new T[n];
foreach (ref e; ret) {
e = d();
}
return ret;
}
void main() {
auto hoge = (new Hoge).takusanMake(30);
typeid(hoge).writeln;
// Baseに暗黙変換できない型はNG
//auto other = (new Other).takusanMake(30);
}
===
こういうのはどうだろう
(もっといい方法ありそう。。)
278デフォルトの名無しさん
2015/11/21(土) 14:42:18.71ID:8z9xCqW5 Hoge という型と Fuga という型があって
Hoge[Fuga] hage;
という連想配列は定義できるみたいなのですが
Any という任意の型があるとして
Any[Any] moge;
みたいな連想配列は作れますか?
Hoge[Fuga] hage;
という連想配列は定義できるみたいなのですが
Any という任意の型があるとして
Any[Any] moge;
みたいな連想配列は作れますか?
279デフォルトの名無しさん
2015/11/21(土) 14:47:56.80ID:8z9xCqW5 ちなみに
["A": "B", "C": 3, 4: "E"]
みたいなのを作りたいのです
["A": "B", "C": 3, 4: "E"]
みたいなのを作りたいのです
280デフォルトの名無しさん
2015/11/21(土) 15:28:20.57ID:8z9xCqW5 Object[Object] moge = ["A": "B", "C": 3, 4: "E"];
これでだめでした orz
これでだめでした orz
281デフォルトの名無しさん
2015/11/21(土) 22:31:38.28ID:jpeEJ7vY import std.variant;
auto moge = [Variant("A"): Variant("B"), Variant("C"): Variant(3), Variant(4): Variant("E")];
とかいうダサい感じのしか思いつかない。
auto moge = [Variant("A"): Variant("B"), Variant("C"): Variant(3), Variant(4): Variant("E")];
とかいうダサい感じのしか思いつかない。
282デフォルトの名無しさん
2015/11/21(土) 23:35:17.00ID:BXVotCtM283デフォルトの名無しさん
2015/11/22(日) 12:23:27.44ID:rXOpUu6m >>278
型付き言語に喧嘩売ってんのか
型付き言語に喧嘩売ってんのか
284デフォルトの名無しさん
2015/11/22(日) 12:42:54.55ID:rXOpUu6m >281
ダサくてよければ
Variant[Variant] constructor(T...)(T plist){
Variant[Variant] result;
foreach(ref p; plist) result[new Variant(p.keys[0])] = new Variant(p[p.keys[0]]);
return result;
}
Variant[Variant] moge = constructor(["A": "B"], ["C": 3], [4: "E"]);
試してないけど
ダサくてよければ
Variant[Variant] constructor(T...)(T plist){
Variant[Variant] result;
foreach(ref p; plist) result[new Variant(p.keys[0])] = new Variant(p[p.keys[0]]);
return result;
}
Variant[Variant] moge = constructor(["A": "B"], ["C": 3], [4: "E"]);
試してないけど
285デフォルトの名無しさん
2015/11/22(日) 18:10:01.30ID:K6EhBG35 引数が1個ずつ別のAAになってる…?
きもちわるすぎる
きもちわるすぎる
286デフォルトの名無しさん
2015/11/22(日) 18:34:22.00ID:uPJ5yBy3 import std.variant;
import std.stdio;
Variant[Variant] makeTable(T...)(T p) {
static assert(T.length%2 == 0);
Variant[Variant] t;
foreach (i, ref v; p) {
static if (i%2 == 0) {
t[Variant(p[i])] = Variant(p[i+1]);
}
}
return t;
}
void main() {
auto t = makeTable(1, 2, "hoge", 123.2);
writeln(t);
}
import std.stdio;
Variant[Variant] makeTable(T...)(T p) {
static assert(T.length%2 == 0);
Variant[Variant] t;
foreach (i, ref v; p) {
static if (i%2 == 0) {
t[Variant(p[i])] = Variant(p[i+1]);
}
}
return t;
}
void main() {
auto t = makeTable(1, 2, "hoge", 123.2);
writeln(t);
}
287デフォルトの名無しさん
2015/11/22(日) 19:32:11.41ID:QPIcOg4c288287
2015/11/22(日) 19:46:28.38ID:QPIcOg4c やっぱコード追加で。連投御免。
http://dpaste.dzfl.pl/19cc3ea3bd0d
http://dpaste.dzfl.pl/19cc3ea3bd0d
289デフォルトの名無しさん
2015/11/23(月) 14:44:46.01ID:5yZmzCJ8 mixin使ったら負けな感じ半端ない
290デフォルトの名無しさん
2015/11/23(月) 23:06:50.39ID:zlo1l7ot やろうとしてること自体闇魔術臭いしわりと妥当なのかもしれない
291デフォルトの名無しさん
2015/11/24(火) 12:03:53.42ID:Dj+m8Q01292デフォルトの名無しさん
2015/11/25(水) 00:37:26.01ID:euvQfHeH >>291
どんなコードが生成されるか知らないのでベンチとって見た結果
http://dpaste.dzfl.pl/85212474e9f0
281: TickDuration(3595337)
284: TickDuration(9347285)
286: TickDuration(4128184)
288: TickDuration(3554533)
どんなコードが生成されるか知らないのでベンチとって見た結果
http://dpaste.dzfl.pl/85212474e9f0
281: TickDuration(3595337)
284: TickDuration(9347285)
286: TickDuration(4128184)
288: TickDuration(3554533)
293デフォルトの名無しさん
2015/11/26(木) 17:49:18.83ID:yeqvnwwH Dでcomのclientを書こうとして付属のサンプルソースを試したら動作しました
wshサーバーをdispatchしてEcho('hoge')みたいなポップアップを出したいのですが
サンプルをどのように書き直せばよいのですか
wshサーバーをdispatchしてEcho('hoge')みたいなポップアップを出したいのですが
サンプルをどのように書き直せばよいのですか
294デフォルトの名無しさん
2015/11/26(木) 17:58:08.82ID:yeqvnwwH 途中まで書いたコードです
extern (Windows) HRESULT CLSIDFromProgID(const wchar *, CLSID *);
const string wsh = "WScript.Shell";
interface IWSH : IUnknown {
extern (Windows) int Echo();
}
DWORD dwVer = CoBuildVersion();
HRESULT hr = CoInitialize(null);
hr = CLSIDFromProgID(wsh.toUTF16z(), &clsid);
IWSH pIWSH;
hr = CoCreateInstance(&clsid, null, CLSCTX_ALL, &IID_IUnknown, &pIWSH);
// FAILED(hr)の判定コードは省略していますがここまでは動作しているようです
// pIWSHに値は入っているようですが次の場所でAccessViolationします
pIWSH.Echo();
CoUninitialize();
pIWSH.Echo(); の行をコメントアウトすると何も起きませんが正常に完了します
あと
&IID_IUnknown
のところを
&IID_IDispatch
に書き換えてもだめでした
extern (Windows) HRESULT CLSIDFromProgID(const wchar *, CLSID *);
const string wsh = "WScript.Shell";
interface IWSH : IUnknown {
extern (Windows) int Echo();
}
DWORD dwVer = CoBuildVersion();
HRESULT hr = CoInitialize(null);
hr = CLSIDFromProgID(wsh.toUTF16z(), &clsid);
IWSH pIWSH;
hr = CoCreateInstance(&clsid, null, CLSCTX_ALL, &IID_IUnknown, &pIWSH);
// FAILED(hr)の判定コードは省略していますがここまでは動作しているようです
// pIWSHに値は入っているようですが次の場所でAccessViolationします
pIWSH.Echo();
CoUninitialize();
pIWSH.Echo(); の行をコメントアウトすると何も起きませんが正常に完了します
あと
&IID_IUnknown
のところを
&IID_IDispatch
に書き換えてもだめでした
295デフォルトの名無しさん
2015/11/26(木) 21:43:51.54ID:FqPwpLUO296デフォルトの名無しさん
2015/11/27(金) 08:55:22.81ID:H96QzFnR297デフォルトの名無しさん
2015/11/27(金) 09:52:51.69ID:c/N8jVfb >>294
WScript.Shell に Echo は無いよw
WScript.Shell に Echo は無いよw
298デフォルトの名無しさん
2015/11/27(金) 10:48:43.15ID:Og1YQ9Di >>297
うっかり勘違いしてました
標準のinterfaceから継承する方法ですが
interface IWSH : IUnknown { // add vtbl to define as IDispatch
extern (Windows) HRESULT GetTypeInfoCount(UINT *);
extern (Windows) HRESULT GetTypeInfo(UINT, LCID, REFIID);
extern (Windows) HRESULT GetIDsOfNames(REFIID, LPOLESTR *, UINT, LCID, DISPID *);
extern (Windows) HRESULT Invoke(DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *);
}
にして
hr = CoCreateInstance(&clsid, null, CLSCTX_ALL, &IID_IDispatch, &pIWSH);
したら
後は >>295 さんと同じように PopUp("Hage") を Invoke 出来ました
ほんとうにありがとうございました
うっかり勘違いしてました
標準のinterfaceから継承する方法ですが
interface IWSH : IUnknown { // add vtbl to define as IDispatch
extern (Windows) HRESULT GetTypeInfoCount(UINT *);
extern (Windows) HRESULT GetTypeInfo(UINT, LCID, REFIID);
extern (Windows) HRESULT GetIDsOfNames(REFIID, LPOLESTR *, UINT, LCID, DISPID *);
extern (Windows) HRESULT Invoke(DISPID, REFIID, LCID, WORD, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *);
}
にして
hr = CoCreateInstance(&clsid, null, CLSCTX_ALL, &IID_IDispatch, &pIWSH);
したら
後は >>295 さんと同じように PopUp("Hage") を Invoke 出来ました
ほんとうにありがとうございました
299デフォルトの名無しさん
2015/11/27(金) 11:49:41.82ID:c/N8jVfb 質問です。
SysTime st = Clock.currTime();
writefln("%s", st.toISOExtString());
writefln("%s", st.toISOString());
の動作で末尾の小数点以下の数字 (hnsecs) が
7桁になるときと6桁になるときがあるみたいです。
先頭の 0 が表示されないケースがあると思ったのですが
通常の '年月日T114500.1234567' 以外に
'年月日T114500.0123456' は表示されました。
ところがたまに '年月日T114500.123456' と表示されることがあります。
つまり '年月日T114500.0123456' なのか '年月日T114500.1234560' なのか判りません。
hnsecs==0 のときにこのパターンがあるみたいなのですがみなさんのところはどうですか?
DMD32 D Compiler v2.063.2
です。
SysTime st = Clock.currTime();
writefln("%s", st.toISOExtString());
writefln("%s", st.toISOString());
の動作で末尾の小数点以下の数字 (hnsecs) が
7桁になるときと6桁になるときがあるみたいです。
先頭の 0 が表示されないケースがあると思ったのですが
通常の '年月日T114500.1234567' 以外に
'年月日T114500.0123456' は表示されました。
ところがたまに '年月日T114500.123456' と表示されることがあります。
つまり '年月日T114500.0123456' なのか '年月日T114500.1234560' なのか判りません。
hnsecs==0 のときにこのパターンがあるみたいなのですがみなさんのところはどうですか?
DMD32 D Compiler v2.063.2
です。
300デフォルトの名無しさん
2015/11/27(金) 11:52:34.38ID:c/N8jVfb ちょっと紛らわしいので一部訂正します。
x 小数点以下の数字 (hnsecs) が
o 小数点以下の数字 (total hnsecs) が
x hnsecs==0 のときにこのパターンが
o msecs==123, usecs=456, hnsecs==0 のときにこのパターンが
x 小数点以下の数字 (hnsecs) が
o 小数点以下の数字 (total hnsecs) が
x hnsecs==0 のときにこのパターンが
o msecs==123, usecs=456, hnsecs==0 のときにこのパターンが
301デフォルトの名無しさん
2015/11/27(金) 14:33:53.29ID:gmvL3Mcs "年月日T114500.123456" == "年月日T114500.1234560"じゃないの?
302デフォルトの名無しさん
2015/11/27(金) 15:13:20.37ID:c/N8jVfb なるほど小数点以下だから末尾の0は除かれるんですね。
7桁だと思って決め打ちしない方が良いですね。
7桁だと思って決め打ちしない方が良いですね。
303デフォルトの名無しさん
2015/11/27(金) 15:16:44.79ID:c/N8jVfb Duration d = hoge - fuga;
d.total!"msecs", d.total!"usecs", d.total!"hnsecs" を使うことにします。
d.total!"msecs", d.total!"usecs", d.total!"hnsecs" を使うことにします。
304デフォルトの名無しさん
2015/11/28(土) 10:52:50.96ID:BU0Z8dtz python の __getattr__
ruby の method_missing
javascript の __noSuchMethod__
みたいなものを期待して
D で同じようなものが有るかどうか検索したら
http://forum.dlang.org/post/op.usipp0mij5j59l@my-tomato
というやりとりが見つかりました
そこのサンプルをコンパイルしようとしたのですがエラーになります
D で opDotExp ってどう使うんですか?
ruby の method_missing
javascript の __noSuchMethod__
みたいなものを期待して
D で同じようなものが有るかどうか検索したら
http://forum.dlang.org/post/op.usipp0mij5j59l@my-tomato
というやりとりが見つかりました
そこのサンプルをコンパイルしようとしたのですがエラーになります
D で opDotExp ってどう使うんですか?
305デフォルトの名無しさん
2015/11/28(土) 11:37:36.45ID:3W8Apw0w opDispatch()
ただし型のコントロールは引数とか名前付けとか工夫して自前で面倒を見る必要がある
ただし型のコントロールは引数とか名前付けとか工夫して自前で面倒を見る必要がある
306デフォルトの名無しさん
2015/11/28(土) 17:00:55.36ID:OpEOTh0X ないですね
307デフォルトの名無しさん
2015/11/29(日) 18:45:48.60ID:DyLnKIJJ import std.stdio;
class Hoge {
void opDispatch(string s)() {
class Hoge {
void opDispatch(string s)() {
308デフォルトの名無しさん
2015/11/30(月) 20:34:23.05ID:SJumDZBl 有賀d
309デフォルトの名無しさん
2015/11/30(月) 20:43:06.11ID:SiMJvgO4 IDispatch で
auto xl = Dispatch("Excel.Application");
xl.Visible = true;
auto workbooks = xl.Workbooks;
まではうまく逝くのに
auto book = workbooks.Add();
で Access Violation してしまう
何が間違ってるんだろう
auto xl = Dispatch("Excel.Application");
xl.Visible = true;
auto workbooks = xl.Workbooks;
まではうまく逝くのに
auto book = workbooks.Add();
で Access Violation してしまう
何が間違ってるんだろう
310デフォルトの名無しさん
2015/12/01(火) 02:22:06.91ID:Zh0/OJc/ Excel持ってないんであれだけど、Workbooksが返すのはコレクションらしいよ。
https://msdn.microsoft.com/ja-jp/library/aa288625%28v=vs.71%29.aspx
https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.collection.add%28v=vs.90%29.aspx
とか見るに、Add()はリストに追加しますよってメソッドじゃね?
https://msdn.microsoft.com/ja-jp/library/aa288625%28v=vs.71%29.aspx
https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.collection.add%28v=vs.90%29.aspx
とか見るに、Add()はリストに追加しますよってメソッドじゃね?
311デフォルトの名無しさん
2015/12/01(火) 08:39:45.47ID:yW8K+bhB Add がデフォルト引数を持ってるけど引数明示したらどうなるかな
ぐぐったら xlFileFormat 列挙型 とか出てくる
ぐぐったら xlFileFormat 列挙型 とか出てくる
312デフォルトの名無しさん
2015/12/01(火) 20:10:30.52ID:9BYkXgQy a.unknownproperty = hoge;
みたいなのも opDispatch!"unknownproperty"(Args args...) で書けますか?
みたいなのも opDispatch!"unknownproperty"(Args args...) で書けますか?
313デフォルトの名無しさん
2015/12/01(火) 23:55:05.63ID:LyUKVfDv314デフォルトの名無しさん
2015/12/02(水) 04:01:42.11ID:53wnCEvY ちょっと違う気がしますが
なんとなく方向性はわかりました
なんとなく方向性はわかりました
315デフォルトの名無しさん
2015/12/02(水) 05:34:41.55ID:53wnCEvY さっきから変な現象になりました
windows10 なのですが
import std.stdio;
int main(string[] args)
{
writefln("@");
return 0;
}
だけのファイルを d_opDispatch.d というファイル名で保存して
dmd -run d_opDispatch.d を実行しても何も表示されないので
dmd d_opDispatch.d を実行して出来た d_opDispatch.exe を
cmd.exe から実行すると UAC のポップアップが出ていることがわかりました
そのまま許可すると別の cmd.exe が開かれてその中で @ が出力されています
また d_opDispatch.exe を test.exe に rename したら UAC は出なくなりましたω
それで test_opDispatch.exe にするとまた UAC が出たので
test_op_Dispatch.exe とか op_Dis_patch.exe とか試したのですが
この二つも UAC が出てきますω
また test.exe に戻したら普通に動くようになりました
ソースのときのファイル名は関係ないみたいなので
dmd -oftest.exe -run d_opDispatch.d
でとりあえず解決は出来てるんですけど何なんですかねこれ
windows10 のブラックリストに登録されちゃってるんですか?ω
それともうちだけですか?
windows10 なのですが
import std.stdio;
int main(string[] args)
{
writefln("@");
return 0;
}
だけのファイルを d_opDispatch.d というファイル名で保存して
dmd -run d_opDispatch.d を実行しても何も表示されないので
dmd d_opDispatch.d を実行して出来た d_opDispatch.exe を
cmd.exe から実行すると UAC のポップアップが出ていることがわかりました
そのまま許可すると別の cmd.exe が開かれてその中で @ が出力されています
また d_opDispatch.exe を test.exe に rename したら UAC は出なくなりましたω
それで test_opDispatch.exe にするとまた UAC が出たので
test_op_Dispatch.exe とか op_Dis_patch.exe とか試したのですが
この二つも UAC が出てきますω
また test.exe に戻したら普通に動くようになりました
ソースのときのファイル名は関係ないみたいなので
dmd -oftest.exe -run d_opDispatch.d
でとりあえず解決は出来てるんですけど何なんですかねこれ
windows10 のブラックリストに登録されちゃってるんですか?ω
それともうちだけですか?
316デフォルトの名無しさん
2015/12/02(水) 05:39:16.56ID:53wnCEvY opDis_patch.exe もだめです
名前変えるだけで動かなくなります orz
名前変えるだけで動かなくなります orz
317デフォルトの名無しさん
2015/12/02(水) 06:03:46.07ID:J+Rb91dQ UACのインストーラ自動判定によるものだね
http://sceneryandfish.withnotes.net/?p=1632
http://sceneryandfish.withnotes.net/?p=1632
318デフォルトの名無しさん
2015/12/02(水) 08:37:40.95ID:nn4vPBry 実行ファイル名で必要権限が変わるという余計なお世話なアレか
319デフォルトの名無しさん
2015/12/02(水) 19:11:19.07ID:7L3lrCLQ >>317
横からですがありがとう
横からですがありがとう
320デフォルトの名無しさん
2015/12/03(木) 01:03:51.80ID:8SmBlBH8321デフォルトの名無しさん
2015/12/03(木) 01:25:39.08ID:y1qNQeGi 名前付きenumが普通に想像するようなenum
名前なしenumは常時インライン展開されてデータセクションに出力されないconstもどき、じゃなかったっけ
その上で 型.メンバ の形で使えるプロパティは 変数(定数).メンバ の形でも使えるというだけのような気がする
名前なしenumは常時インライン展開されてデータセクションに出力されないconstもどき、じゃなかったっけ
その上で 型.メンバ の形で使えるプロパティは 変数(定数).メンバ の形でも使えるというだけのような気がする
322デフォルトの名無しさん
2015/12/03(木) 01:51:22.50ID:2XsySS+x323デフォルトの名無しさん
2015/12/04(金) 09:37:05.62ID:prxSfFNA auto hoge(T...)(T args){ return args[0] ; }
みたいな関数があるとき
呼び出し側で
auto fuga = hoge();
で呼ばれたか
auto fuga = hoge;
で呼ばれたか
どちらなのかを呼ばれた側で区別出来ますか?
みたいな関数があるとき
呼び出し側で
auto fuga = hoge();
で呼ばれたか
auto fuga = hoge;
で呼ばれたか
どちらなのかを呼ばれた側で区別出来ますか?
324デフォルトの名無しさん
2015/12/04(金) 11:41:34.38ID:qnfnKzej たぶん無理
それにその辺りの仕様はふらついているので
今の仕様で組んでも後でダメになる可能性がある
それにその辺りの仕様はふらついているので
今の仕様で組んでも後でダメになる可能性がある
325デフォルトの名無しさん
2015/12/04(金) 15:12:03.13ID:prxSfFNA call と get と set を実装して dispatch する目論見だったんですが
PyObject だと get と call の区別が微妙なんです
PyObject だと get と call の区別が微妙なんです
326デフォルトの名無しさん
2015/12/04(金) 15:29:35.37ID:eLJR6e6w DWT(https://github.com/d-widget-toolkit/dwt)を試しているのですが
Drag and Drop のサンプル(snippetxx.d)が全く見つからないので
SWT(http://www.eclipse.org/swt/snippets/#dnd)を取ってきて試すも
cannot cast expression event.data of type object.Object to string
のコンパイルエラー、cast じゃダメなので何がしかの変換が必要らしい
で、DWT の Drag and Drop はこんな感じで
動かしてるよ〜という情報をお持ちの方おしえてくださいませm(_ _)m
Drag and Drop のサンプル(snippetxx.d)が全く見つからないので
SWT(http://www.eclipse.org/swt/snippets/#dnd)を取ってきて試すも
cannot cast expression event.data of type object.Object to string
のコンパイルエラー、cast じゃダメなので何がしかの変換が必要らしい
で、DWT の Drag and Drop はこんな感じで
動かしてるよ〜という情報をお持ちの方おしえてくださいませm(_ _)m
327デフォルトの名無しさん
2015/12/04(金) 16:03:35.97ID:u0bQfuw3328デフォルトの名無しさん
2015/12/04(金) 18:01:46.27ID:5R2qZuA/ 2.069.2でDelimited Strings内にASCII以外があると怒られるよぅ
q"EOS
日本語 ← Error: character 0xa5 is not a valid token
EOS"
q"EOS
日本語 ← Error: character 0xa5 is not a valid token
EOS"
329デフォルトの名無しさん
2015/12/04(金) 18:39:04.25ID:qnfnKzej 2.069の文字列処理で日本語入ってるときの挙動が変わって往生した
330デフォルトの名無しさん
2015/12/05(土) 11:43:03.20ID:pK0sc289 >>324
とりあえず呼び出し側で
auto fuga = hoge.unknownmethodcall([]);
と
auto fuga = hoge.unknownproperty;
で区別することにしたらうまく別けられました
ところが今度は
hoge.unknownproperty = hage;
で代入しようと hoge class 内で
void opDispatch(string propertyname, T)(T arg){
}
と setter を定義したのですが
hoge.unknownmethodcall([]);
の方まで setter に奪われるようになってしまいました
とりあえず呼び出し側で
auto fuga = hoge.unknownmethodcall([]);
と
auto fuga = hoge.unknownproperty;
で区別することにしたらうまく別けられました
ところが今度は
hoge.unknownproperty = hage;
で代入しようと hoge class 内で
void opDispatch(string propertyname, T)(T arg){
}
と setter を定義したのですが
hoge.unknownmethodcall([]);
の方まで setter に奪われるようになってしまいました
331デフォルトの名無しさん
2015/12/05(土) 23:07:38.68ID:IGesALUR getterのopDispatchの戻り値を構造体でラップするとか。
http://dpaste.dzfl.pl/e089dbd99093
http://dpaste.dzfl.pl/e089dbd99093
332デフォルトの名無しさん
2015/12/06(日) 13:00:28.84ID:OHUYOsyJ ああテンプレートで呼び分けるんじゃなくて
全部まとめて一ヶ所で受けて if で分けるんですね
参考になります
ありがとうございます
全部まとめて一ヶ所で受けて if で分けるんですね
参考になります
ありがとうございます
333デフォルトの名無しさん
2015/12/07(月) 22:12:53.36ID:yUJmRPdi import std.process;
で pipeProcess とか spawnProcess とか使えるのは判ったのですが
windows で win32api の CreateProcessAsUser とか CreateProcessWithLogonW
に相当することが実行可能なモジュールはありますか?
で pipeProcess とか spawnProcess とか使えるのは判ったのですが
windows で win32api の CreateProcessAsUser とか CreateProcessWithLogonW
に相当することが実行可能なモジュールはありますか?
334デフォルトの名無しさん
2015/12/07(月) 22:30:26.17ID:ka6hrItk 標準では最低限のAPIしかないので
自分でポーティングするか拾ってくるかしましょう
自分でポーティングするか拾ってくるかしましょう
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【和訳付き】レーダー照射問題 中国軍と自衛隊との“音声データ”公開 中国国営メディア [♪♪♪★]
- 「中国側も日本機のレーダーを感知していた」 中国メディアが報道 [♪♪♪★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 空自機レーダー照射、音声データ公開 中国 ★2 [蚤の市★]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★2 [597533159]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★3 [597533159]
- 【悲報】JA「全然米が売れなくて倉庫を圧迫してる。助けて!」米卸売り業者「安売りしたら赤字になる…助けて!」 [802034645]
- 【悲報】日本人「大日本帝国はアジア諸国を解放した。現地民は自分で独立も達成できないヘタレwww」 [354616885]
- フェラシーンって勃起するもんなの?
- 高市早苗「そんなことになってんの?!」👈驚いたこと [931948549]
