3 :
デフォルトの名無しさん:2007/04/25(水) 20:29:49
', ./:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::_ハ_,,. -┐ / /
', ___,,.へ./:::::::/\:::::::::::::__::::::::::::::::::::_;;:-‐''" |_____ /
', 「 `` ヽ、_ハ-'ァ´ ハ⌒ヽ-''" _,,. / /
rソ \__ >''`'ー---─'--< _;:イ___ / _,、∧/
\ く >'"::;:- '"´ ̄`ヽ、::::-─- '"´ ̄ `ヽ、:::::::::`"'< 「
ノ>'"_:;ア´ ヽ、::::::::::::<
_,,.:::''":::::ア´ / , '´ / i ', i Y:::::::::::::_;> 嫌 何
..,,_ く;::::::::::::::/ / / i. 、,' ハ ,ハ ,i ハ_ iヽ;__;;;:::::> い が
`ヽ、::::ノ ,' .i ハ i\/ ', / i / i ,.イ´./i ! i / .か
_____ ,,.イ i i ./ ァ'" ̄`ヽー/ | /,ァ''" ̄`ヽハ ハ ∠_ よ
∧ '" /| ノ ,ハイ i'´'`i レ' i'´'`i. ト| / i ヽ7 り
\∧/ Vi/ |_,. -‐ァi/ !__,リ !__,リ ' レ'_ン i /へ
/ | `'' ー- -‐ ''´ i ハ' ハ i\/V\/
自 何 ∠,ハ "" ` ""〈 ,.イ ./ ! ', ---─
分 が /从 /´ ̄`' ー--‐ '"´ ̄`ヽ ハ ノ /‐ 、' ヽ.
を. 好 /_ ,.へ. i `'' ー- ー─-‐‐ ''" i ,.イ人iハr' ヽ、. ヽ. ', - ..,,__
語 き /| .ノヽ、r'´ ``ン'7 i ノ ヽ. ヘ/
れ か く |/ i::::::`i>.、.,,_______,,.. イ:::::::iヽへi Y \
よ で > ,イ::::::::::|ヽ、.,____l_」___,.イi::::::::>-く | ', \
!!! < |/:::::::::::|_____ |o| __rへi_ン-‐ァ _r'-イ> ',
乙
7 :
デフォルトの名無しさん:2007/04/25(水) 21:59:23
キタ━━(゚∀゚)━━!!!!
(i_i)
しJ
。 + 『新スレ ぃ ゃ っ ほ ぉ ぉ ぉ ぅ ー !』 * 。 .
. * .
* + 。 。 +
__ _ /ヾ_/ヽ 旦
f ミv'´{ごづヾ彡 , '´⌒'v'ヾ '´ ̄`ヽ * 。
゙i´!(((从 从リ ! ifi」liリ゙l i!卯、 (((/从从 i
!○(l ^ヮ゚ノ!| i * |i、゚ヮ^ |!)○゙ 。 从゚- ゚ ||○ *
ノノ ヽ)本iO ヾ Oi本(~/ヽ OL介_(ノ . +
ガタン||| ((´ く/_i_iヾ )) ||| /i_i_ヾ> ) )) ||| + /_|_|ヾ> |||ガタン +
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ロ リ 絶 賛 !
>>1 の ス レ 立 て に 超 感 動 !
/: : : : : : : : : : : : : : : : : `丶、
/ : : : : : : : : ‐- : :、: : : : :ヽ: : : : \
{  ̄: : : : : : : : : : : : : : :ヽ、: : : ヘ: : : : : ヽ
,.ヘ: : : : : : : `丶 : : : : : : : : `く/ ヘ: : : : : :',
/: : ヽ: : \: : : : : \: : -―: : : :`く: : '.,: : : : :l
,': {: : : \: : :ヽ、: : : : :\ー‐、: : : :ヽ:\: ヽ : : :|
l: :l : : : l \: : : \‐=V弋芝圷\: \l\l : : :|
|: :l: :: : {xく´_\`ヽ:ヽ Vヘソ |: : |: : }: :./i
l: :l:ヽ : ヽ仗圦 \ ゞ''´ ノ: /l: :ハ/ 、ノN
ヽヘ: :\ ヽVヘ:} // j/-j/ 乂 ノ: :j
>>1乙
丶\: ヽ: ゞ'' 、 ハ! : : :ヽj、_,ヘヘi彡'
`ヘ> - ' / V廴V-へ∠`´__
ヽ、_ / ヽ/ ̄/ '⌒ヽ `丶
\ミ、ー:- -イ / / / ヽ \
ヽ:八{\少} / / / ∨ \
'′_>' /’ __,/ / / | \
,イ /、 ´/ /´ | \
/l│ / __/ / / | /
/│| /V / / / | _/
││{ / /V / r'´ ノ¨ ̄´
| ヘ ∨ ∨ ̄ ̄/ } /
Dの利用者ってロリヲタばっかりなん?
D言語は未熟だから良いのです。
/.::::;: -''´..:::,. -−- 、:::_\
/.::::/..::::::,ィ ´.:::::::::::::::::::::::.....`ヾ、
, ′::/.:::::::::〃.::::::::::::::::::::::::::::::::::::::.....ヽ
/.::::::/.:::::::::::://:::,、::::::::,:::::,、::,::::i:::::::::::::::::::. ',
/.::::::/.:::::::::::://ィグ::/,ィ:::://イ::::,!:::::::::iヘ::::::: l
/.::::::/.:,:::::::::::/^ー-、‐'゙ノ::ノ / ノ:::,ィ,1:::::::lv!:lヘ:: |
. /.::::::::i::::{:::::::::::| ,ッィテrミ-、´ノノ:::ノノ ,!:::ノ!:::::!:レ゙::;!
/.::::::::::{::::|::::::::::::! ゞノ ヾ`'  ̄,=≧-' ,リ::::ノ::}:〈
/.::::::::::/:`::|::::::::::::i、 ` ̄ ´ヒ_ツ F ブ;:'::;:ハ::}
/.::::::::::,':::::::::l:::::::゙、::iヾ、 、`ー'' /::ノ ノ' ソ
//.::::::::::i:::::::::::',::::::: t、ヽ、 ┘ /:「
. //.::::::::::,:::::|::::::::::: '、:::: l\` (⌒7 .イ:::| 過疎ってないでもりがろうや
/::/.:::::::::::::::::!:::::|::::::::::::::::ヽト! ヽ、 `ニ′_, ィ´:ハ::|
/.:::/.::::::__::::::::|:::::l;::::::::::::::: H、 /`ー T´.:/!::/ ソ
.::::::/ / . : : : : ̄| l 八::::::::::::: リ、`ーォ..::::: /:/ j/
::::/ / . : : : : : : j / ヾ、::::::: | `7|:::::::: /´
::..:/. : : : : : : レ′ ヽ::::::: l、′い::: ト 、
ノ . : : : : : : : ゙、:::::::} : :`'|:: |: : ヽ
-、: : : : : : : : : : : ',::::ハ : : l::,! : : ,!
:::::.ヽ、: : : : ;、-: : : : V : : :.jノ: : /
`ヾ::::::ヽ/: : : : : : : : : : : : : :「h
死ねよ
15 :
デフォルトの名無しさん:2007/04/27(金) 11:02:40
過疎るもなにも、元から盛り上がってないだろ・・・
16 :
デフォルトの名無しさん:2007/04/27(金) 14:52:14
gdcってGCの実装が悪いのか大きなファイルを読み込ませて処理させようとすると
すごく遅くなるんですけど、何か簡単に効率化できる方法ないですかね?
いつの間にか1.014
ついに動的配列リテラル/構造体リテラルktkr
>>16 おまえの実装が悪いだけだと思うが
なるべくnewを使わずに、確保できるものは最初から確保しておく
20 :
デフォルトの名無しさん:2007/04/27(金) 16:48:48
>>18 いやいや、巨大なファイルを読み込んでその一部を解析するプログラムで、
性能に響く部分は自分のクラスのnewは使ってないですよ。
間接的に
Stream file = new BufferedFile( filename );
foreach ( char[] line; file )
で呼んでるんで、これやめないといけないですかね?
>>19 ファイルが巨大なのでそれやるとメモリ不足になります。
一定期間ためてやっても性能上がりませんでした。
>>1 乙
What's New for D 1.014
Apr 20, 2007
New/Changed Features
* Added associative array literals
* Added struct literals
* Array element assignments can now be done in CTFE
Bugs Fixed
* Bugzilla 1000: writefln fails on nested arrays
* Bugzilla 1143: Assertion failure: '0' on line 850 in 'template.c' - On specialization of IFTI template parameters.
* Bugzilla 1144: template mixin causes DMD crash
* Bugzilla 1146: mixin + assert() crashes compiler
* Bugzilla 1153: dmd assertion failure
* Bugzilla 1159: Various mixins cause "CompileExp::semantic" message, some crash DMD
* Bugzilla 1174: Program hangs creating an array of enums with nonzero initializer
* Bugzilla 1177: no longer works inside CTFE functions.
* Bugzilla 1180: the GC failes to handle large allocation requests propperly
* Bugzilla 1189: Reverse the titles on web pages
連想配列リテラルキタ━━━━(゚∀゚)━━━━ッ!!
それで構造体リテラルってどうやって書けばいいんだ?
>>24 ああ、そこにあったのか。ありがと。
しかしこの書き方はなんか気持ち悪いな。
名前で指定できればよかったのに。
つーか、これって前にも書けなかったっけ?
opCallが不要になった。
>>25 S(x: 1, y: 2) みたいな感じ?
たしかにこれは気持ち悪いな。
static な opCall と構造体リテラル、優先して呼ばれるのは opCall っぽいしな。
どっちを使うか明確にできて、さらにメンバの名前で指定できたらうれしいね。
久しぶりに嬉しいなあこの更新。
個人的には名前で指定するのは別の言語っぽくてあんま気分よくない。
というか、それなら普通の関数呼び出しも名前で指定できるべきじゃね?
>>28 そうそう。Cの複合リテラルみたいに。
Size(10, 20) のどっちが幅か確かめるのにいちいちリファレンスなりソースなりを
確認しなきゃならんのはどう考えても非効率。ミスも出るだろうし
最初は構造体リテラルで書いてたけど、
途中から、何か処理入れた方がいいからと opCall を実装する・・・
ということはありそうな話ではあるけど、
まあ、そういうのは構造体には向いてないか。
というか、この構造体コンストラクタみたいなものを
static opCall で実装してる部分に関しては
そろそろどうにかならんのだろうか。
もう、普通にコンストラクタ作れても良いと思う。
あるいは、ほとんどの状況下では
static opCall を使わなくてもいいような文法にするか。
初期値を指定できるようにして、
構造体リテラルで名前指定するようにすれば、
static opCall が必要になる状況は少ないと思う。
関数の実引数を名前で指定できるのはVBだっけ?
あれは結構便利だと思うなあ。
Foo(/* hoge */ 0, /* fuga */ false);
Foo(hoge := 0, fuga := false);
要するに、
struct S {
int a;
int b;
int c = 4;
int d = 8;
}
で、
S(a: 1, b: 2) // OK
S(a: 1, b: 2, c: 3, d: 4) // OK
S(d: 4, c: 3, b: 2, a: 1) // OK
S(a: 1) // Error
みたいな感じ。
>>30 >普通の関数呼び出しも名前で指定できるべき
オーバーロードが複雑になりそう。
#ってかvbの名前付き引数思い出す。
>>34 4つめはいささか互換性を崩しすぎではなかろうか
>>37 S(1) が通るのに S(a: 1) がエラーになるのは気持ち悪いな、と思っただけ。
>>38 b を初期化すれば通る。
でも、そういや
>static X x = { a:1, b:2}; // c is set to 0, d to 7
では、値を指定してないところは 0 で初期化されるのね。
なら、b に 0 を入れる風にしてコンパイル通るようにした方がいいか。
0ってよりint.initだとおも
まあ、正確にはそうね。
初期化の部分に合わせるなら
S { a: 1, b: 2 } とかいう文法もアリかもしれんな。
なぜ { } じゃなく ( ) にして、しかも : を排したのか、だが、
とりあえず実装しやすかったからなんだろうか?
>>42 無名デリゲートリテラルと紛らわしくなる、ってことはないか。
前に型が来るから大丈夫ってことはないのかな?
よー分からんけど。
型というか、この段階だとシンボルか?
const b = (["hoge"[]: true, "fuga": false])["fuga"];
感動した。。。
ふがー
二段
const b = ((["hoge"[]: ["foo"[]: 1, "bar": 2], "fuga": ["foo"[]: 3, "bar": 4]])["fuga"])["foo"];
しかし、これといって面白い使い方も思いつかんな
const a = (["a"[]: true, "b": false]);
ができないとあまり意味無い気ガス。
それと何故か以下のが通る。
auto test = (["a"[]:true,"b":false]);
const a = test.init["a"];
static assert(a==true);
添え字が整数の連想配列リテラルって、配列のイニシャライザと区別付かんじゃん。
将来的なこと考えると、失敗じゃないのかね・・・?
それとも、静的配列以外のイニシャライザは未来永劫に実装されないということだろうか。
>>50 配列リテラルと配列初期化子が分かれてるところも問題だしなぁ。
連想配列リテラルは"test"dのように[1:"a",2:"b",3:"c"]aとするべきだと思う。
["a", "b", "c"] と [0:"a", 1:"b", 2:"c"] は明らかに違うのでは。
>>52 静的配列のイニシャライザでは同じであるにも関わらず、
その他のコンテクストでは違う意味を持っているところに問題があるのではないか?
>>53 ん?
int[3] = [0:"a", 1:"b", 2:"c"];
とか通るの?
うち Mac だからまだよー分からんのだが。
変数名忘れた。まあいいや。
>>55 static char[][3] a = [0:"a", 1:"b", 2:"c"];
intではなくchar[]だと思うが、staticな配列は添え字付で初期化できるよ。
uuperl化してるなぁ
っつーか早く仕様堅めんとマジでPerl6の二の舞になるぞ
ヲルターたんの近くに誰か仕事の邪魔するスパイがいるの鴨試練
>>57 あ、型も間違えてた。
適当に書きすぎたな。
そうか・・・。添字付きで初期化できたんだ。
そりゃマズいな。
@ とか余ってるんだから有効活用すればよかったのにな。
何でもできるからといって何でもやってしまうと良くない好例
先駆的な言語だからその辺は問題無いでしょ。
まずかったらなかったことにすればおk
ネストしてない無名構造体って書けたっけ?
いや、無理
連想配列って、中身のリセットできないんだよな
newできないからクラスの中に突っ込むみたいな使い方できないし
使い勝手がいまいち
まあ、ハッシュテーブルクラス自作しちゃったから別にいいけど
こういうこと? これ以前話出てたよな
int[char[]] s = (["foo":1, "bar":2]);
writefln(s["foo"]);
writefln(s["bar"]);
writefln("length=", s.length);
s = null;
s["boo"] = 3;
writefln(s["boo"]);
writefln("length=", s.length);
>>65 中身のリセットならaa=null;とかaa.remove(key)とかで事足りる気がする。
あと、クラスの中に入れたきゃ、
普通にメンバ変数にしときゃ問題ない気もする。
使い勝手がいまいちなのは、
外部イテレータが欲しいとか、
キーが存在しない程度のことでいちいち例外投げるなとか、
いろいろあるからまぁ同意。
>キーが存在しない程度のことでいちいち例外投げるな
C#のNullableみたいなものがあれば使いやすくなるのかな。
C#使ったこと無いんでよく知らんけど。
例外を投げるようにするなら、
せめて assoc.has(key) てメソッドくらい持っててホスィ……
Value* valuePtr = (key in assoc);
Value value = (valuePtr != null) ? *valuePtr : null;
とか怪しすぎる。
そういえば、D言語には「コンパイラ組み込みクラス」
という概念は無いんだろうか?
Javaのintみたいなもののこと?
>>69 if( key in assoc )じゃだめか?
>>71 こうじゃね?
if(auto ptr = key in assoc)
writefln(*ptr);
普通に
TValue get(TKey, TValue)(TValue[TKey] aa, TKey key) {
auto p = key in aa
return (p != null) ? *p : TValue.init;
}
とかつくっときゃいいんじゃね?
void main() {
generics(519); // ここは定数でコーディング
}
void generics(int n) {
dout.writefln(n);
generics_!(n);
}
void generics_(int n)() {
dout.writefln(n);
}
>519
>1
いろいろ遊んでて途中でこういうコードがコンパイルできてたんだけど
出力もおかしいんですし、コンパイラ側のバグとかですか?
519は定数だけど、
genericsの引数のnは定数じゃないんだから
テンプレートのint引数に使えちゃまずい、
ってことか。
76 :
69:2007/04/28(土) 21:50:41
ああー、ポインタ使いたくない使いたくないと思ってるうちに、
if文でnullテストとかの発想自体頭から消えてたヨー。
……でもif文にbool以外渡したくねぇなあ、とか思う俺は
もうJavaから帰ることはできないのかもしれない。
http://www.kmonos.net/alang/d/type.html > 式をboolへとキャストするのは、数値型に対しては0のの比較 !=0 と同じ意味で、
> ポインタや参照型に対しては、null との比較 !=null と同じ意味です。
というように、小手先の省略記法ではなくて
言語の意味に含まれているやり方だという点で
精神衛生的にはいい感じ。
まあ個人によりけりだろうけどね。
Ruby の場合 false != nil だったりして
WideStudio使えりゃ面白そうなんだがなぁ
81 :
80:2007/05/01(火) 12:02:37
簡単なアプリを作るときはいいんですけど、大規模になると・・・。
>>81 Dの大規模アプリなんてこの世にあるのか?
83 :
80:2007/05/01(火) 17:35:22
>>82 WideStudioのことです。
説明不足ですみません。
84 :
81:2007/05/01(火) 19:04:21
なんか番号が面白いことになっている気がする
レベルの高い自作自演だなー
if(a == typeof(a).init)
return;
_a = a;
if(b == typeof(b).init)
return;
_b = b;
こんな感じの式の繰り返しを
check_and_assign("a");
check_and_assign("b");
check_and_assign("c");
テンプレート使ってこんな感じで書くことってできますか?
呼び出し元関数からreturnしたり、
呼び出し元関数からみえる識別子を使ったり、
ってことだよね。
まさに宣言した位置に文を読み込みたい、という。
テンプレートには宣言しか書けないから無理じゃないかなあ。
テンプレート関数にaliasとして変数名を渡して、その戻り値をみて
returnするかどうか分岐して、…というようにまどろっこしいこと
しないと無理だと思う。
あるいは、
mixin(check_and_assign!("a"));
という構文で87の言うようなものを実現することは、一応不可能じゃないと思う。
import std.metastrings;
template check_and_assign(char[] id){
const char[] check_and_assign = Format!(import("base_d_code.dtxt"),id);
}
とかいう感じになるのかなあ。
大変だと思うけど。
mixinでおけ
char[]check_and_assign(char[]a){
return `if(`~a~` == typeof(`~a~`).init)return;_`~a~`=`~a~`;`;
}
mixin(check_and_assign("a"));
>>88-89 回答ありがとうございます。
やってみたのですが、
cannot evaluate check_and_assign("a") at compile time
argument to mixin must be a string, not (check_and_assign("a"))
このようなエラーがでてしまいます。
GDCを使わなければならない関係で、
DMDのバージョンが1.007と古くなっているのがいけないのでしょうか。
コンパイル時の関数実行ってもっと新しいバージョンのDMDでないと対応していなかった気がします。
91 :
90:2007/05/02(水) 10:45:21
勘違いしていました。
mixin文はDMD1.005から対応していますから、1.007なら当然動くはずですよね。
check_and_assignを関数内で宣言していたのでコンパイル時に評価できなかったようです。
staicにしたらうまくできました。
どうもありがとうございました。
"a" "a" ("a") "a" "a"
なるほど、関数のコンパイル時実行か。
すごいなあ。
あれっ
そんなことできるのか
テンプレートの再帰呼び出しの組み合わせで処理してたのを、
コンパイル時関数実行に書き換えたら、コンパイル速度一気に上がった。
メモリ消費も少ないし、変態コーディングしなくてもよくなったし、こりゃ便利。
ぐっすんの人ケアレスミス多すぎwwwwwwwww
誤爆・・・
98 :
デフォルトの名無しさん:2007/05/03(木) 17:21:28
ATL見たいな事をやりたくて、こんなコードを書いたんだけど、
コンパイル通らないのはこんなものなのか?
class ITestImpl(T) {
char[] name_ = "super class";
void print() { printf(cast(char*)this.name_); }
}
interface ITest {
void print();
}
class TestClass : ITestImpl!(TestClass), ITest {
char[] name_;
this(char[] name) { name_ = name.dup; }
}
void test() {
ITest t = new TestClass("test class");
t.print();
}
>>98 class TestClass じゃなくて、class ITestImpl の方に ITest を派生させればいいんじゃない?
>>98 コンパイルエラーと関係ないけどTestClassのchar[] name_;はいらね。
>>99案をとるとこうか。
こうすれば楽にできるとはいえ、
個人的には
>>98のやりかたでコンパイルが通ってほしいとは思う。
class ITestImpl(T,Bases...) : Bases{
char[] name_ = "super class";
void print() { printf("%.*s",name_); }
}
interface ITest {void print(); }
class TestClass : ITestImpl!(TestClass,ITest) {
this(char[] name) { name_ = name.dup; }
}
void test() {
ITest t = new TestClass("test class");
t.print();
}
~
インターフェイスの再実装のときは基底クラスの実装を継承せず
そのクラスで実装しろ、ということだから、再実装に限らず
実装するときはそのクラスで、ということなんじゃないかと思った。
けど、そうすると、
class TestClass : ITestImpl!(TestClass), ITest {
alias ITestImpl!(TestClass).print print;
this(char[] name) { name_ = name.dup; }
}
とか、aliasのかわりに import hogemodule: print = hogeprint
とかで通らないのは微妙な気がする。
あと
http://www.kmonos.net/alang/d/interface.html の
> インターフェイスは、そのインターフェイスを継承する関数が
は関数じゃなくてクラスなんじゃないかと思った。
mixin
>とかで通らないのは微妙な気がする。
ん? インターフェイスに限らず、クラスの中にalias書いただけでは実装できんでしょ。
テンプレートの仕様ってとてもコンピュータ言語の仕様とは思えないんですが、
何考えてあんな阿呆みたいな事(学生の思いつきレベル?)やってるんでしょうか。
批判したいならもうちょっと具体的にどうぞ
>>105 まずboostのソースを見て耐性を付けることをお勧めします。
Boostのテクニックは凄いし、Lisp以上の工夫はしてる。しかし、Lisp以上の
柔軟性は実現出来てないかも。
予約語になったmacroってどんな機能になるんだろうか
---main.d----------
import sub1, sub2;
void main() {
test("abcd\0"w.ptr);
printf("%d\n", lstrlenW("abcd\0"w.ptr));
}
---sub1.d----------
extern(Windows) int lstrlenW(wchar*);
---sub2.d----------
private extern(Windows) int lstrlenW(wchar*);
void test(wchar* p) { printf("%d\n", lstrlenW(p)); }
-------------------
なんでlstrlenWがコンフリクトするんでしょうか?
main.d(4): Error: sub1.lstrlenW at sub1.d(1) conflicts with sub2.lstrlenW at sub2.d(1)
試しに、main.dのimportからsub1はずしたら、
main.d: module main sub2.lstrlenW is private
main.d(4): Error: function sub2.lstrlenW is not accessible from main
と、sub2のprivate属性効いている様なんですけど。
private の場合に private ですよとエラーが出るってことは、
private でも認識はしてるわけで、
だからコンフリクトするんだろう。
>>104 基底クラスから継承しない、ってのは、派生クラスでの実装の意思を
確認し(て、実装し忘れバグを防ぎ)たいというだけのことだと思うから、
シンボルを明示的にインポートしてる場合は実装したことにしておいても
よさそう、
というような意味。そのクラスでの実装がされるわけじゃないね、たしかに。
>>112 private importの話とは違って、private属性のモジュールメンバは
外部から参照不可になるだけであって名前が隠されるわけじゃ
ないんだろうね。
じゃないかね。
名前の衝突を避けるなら、main.d側で選択・改名・staticインポートを
使うという手もある。場合によるけど。
Javaスレかと思た
119 :
デフォルトの名無しさん:2007/05/05(土) 09:13:51
D言語がやっとこさVer.1を出したのにはわけがある。
それはNemerleだ。
これ以上はいうまい。
マネージド言語とネイティブ言語では対象領域が違うぜ。
121 :
デフォルトの名無しさん:2007/05/05(土) 23:34:56
おっ、ネマール知ってんだ!?
やるねっOTL
Dやってる人には言語オタ多そうだよな。
Dやってる時点で言語オタじゃね
>>119 Nemerleは昔さわってたな
開発スピードが鈍化したせいでなんとなく放置状態になってた
なんか動きでもあったの?
別にオタでよくね
別に誰もオタ否定してなくね
サイレント魔女リティーに耳を傾けるのは紳士としてのたしなみじゃね
128 :
デフォルトの名無しさん:2007/05/07(月) 10:37:17
屁の合間にオヤジみたいな声を出した時
ブッ
「あー、クソっ!」
ブッー、ブブッ
「うぇぁー、チキショウ!」
(´ω`)
誰かD HACKSとか書けばよくね?
1ヶ月年後には多分一部使えなくなり、
1年後には多分使えなくなる。
じゃ「日刊 D HACKS 」でよろ
日刊D HACKSスレとか、2chにホスティングしてもらってさ。
shinichiro_hさんとか、書かないかなぁ...
134 :
デフォルトの名無しさん:2007/05/07(月) 19:00:15
DもHaskellもはやらねーな
共闘するか?
Daskell
Taskell
今はErlangだろ...常識的に考えて。
ダーラン
なんでも頭にDつけりゃいいってもんじゃないだろw
D#
このままアルファベットのHまで進めば、
「はじめてのC」どころの騒ぎじゃなくなるな。
BCDEFGH
C++
C#
>141
はじめてのZ#
そしてα言語・・・
漢字ならまだいっぱい余ってるよ!
日本に"なでしこ"があるように、中国には漢字で記述するプログラミング言語あるんだろうなあ。きっと。
それ C じゃんw
そういや、殆ど英文で書ける言語があった気がするけど、あれってEiffelだっけ?
COBOL か?
Appletalk だな。
ほとんど英文なんて見づらそうだな
VBですら読みにくくてしょうがないのに
Javaだろ
バージョンうpまだー?
やっぱみんな並列言語か...
この過疎ぶりをみると...
並列言語とはなんのこといってんの?
コルーチンはまだ?
>>157 Erlangとか、Erlangとか、Erlangとか。
Nemerle
マジで!?
と思ったけど別物じゃねーかチクショウ
パテント主張せな逝かんね。
これはひどい
Javaへのダメージを考えて先手を打って潰しにかかったな
SunのDのが先だよ
ヲルタのDは99年だろ?
Solaris 10 が出た数年前から名前がダブったことは知られているのに(w
D言語研究ってGoogle八分くらってない?
>172
PageRankが下がっただけだろう。現在28位。
dsss(version 0.64)の依存関係の解決が便利すぎるのでWin環境で利用しているんですが、
dmdのように .res (リソーススクリプトをコンパイルしたやつ) をリンクしてビルドさせることは可能なんでしょうか?
たとえば >dsss build -gui main.d resource.res みたいに使えないのかなぁと
175 :
デフォルトの名無しさん:2007/05/16(水) 02:01:04
本命はコードギアのターボD。
DでVCLを使える。
176 :
デフォルトの名無しさん:2007/05/16(水) 02:01:52
自力でMSのVisualStudioには勝てないからね
言語仕様とかどうでもいいからさっさとIDEを作るべきだと思う。
じゃないと一生普及しないよ。
Eclipseプラグイン作るとか。
>>177 漏れはIDE好きじゃないけどその意見には同意
あとどっちかっつーと各種Frameworkの充実も待たれる
いまどき何かしようとして全部土台から作るって
Cと変わらんじゃないかと
いや、自動補完がないプラグインなんてヘタレ作者のオナニーだろ。
せめてコンパイラが構文解析とかをxmlとかで吐いてくれたら作りやすくなるんだが。
いや、言語仕様が確定しないと怖くて使えないよ。
バージョンアップは仕様変更だけじゃなくて、
バグフィックスも含んでるんだから。
仕様が確定してもバグが出なくなるわけじゃないと思うけども
仕様が確定してるんだから、
バグフィックス版を適用するのに問題はないだろ。
ある仕様固定で開発してる時に何か致命的なバグに遭遇した場合に、
以降のバージョンで大きく仕様が変わってたら困るっしょ。
バグの無いようにもよるけど
それでメリットがあるなら乗り換える
改悪だったら捨てる
IDEいらね
一応"-v1"という確定した仕様もある気がするけど……
最新の各ライブラリは-v1に準拠とかしてるんだろうか。
1.007での演算子の優先順位の変更なんか、地味に挙動が変わりそうで不安だ。
>>181 dmd/src/dmd/ に在る parse.c が構文解析なんじゃないの?
DMDをDで書きなおす計画とかないのかな。
やる意味がないか。
192 :
デフォルトの名無しさん:2007/05/17(木) 00:22:54
>>191 正式版がリリースされればそれもありじゃないかと。今の時期それをやる意味はなさそうです。
1.0って正式版じゃないの?
正式版とは何か
import package.*;
みたいにできるようにならんかなあ。
>>194 仕様がダイナミックに変更される今の状態を正式版と呼ぶのは躊躇われる・・・
「仕様が固まったら」の方が正しいですかね。
197 :
デフォルトの名無しさん:2007/05/17(木) 02:59:52
PCスペックがダメダメだから自動補完イラネ
プロジェクト管理だけで十分
198 :
デフォルトの名無しさん:2007/05/17(木) 03:28:23
>>196 そんなこと言ってたら廃れた後になるぞw
Tango 0.98 released
* Added Signals and Slots implementation
* Reworked the Time package
* Updated for DMD 1.014
* More documentation examples
* Exception stack-trace example using Flectioned
>>191 まぁ今のところは、他ならぬ自分らが言語仕様を信じてなさそうだからねw
彼らの界隈でそういう話が出るまでは、こっちも大がかりなことにはDを使えない。のかも。
>>196 template mixinでやろうと思ったけど、よくよく考えれば無理だった
202 :
201:2007/05/17(木) 14:06:12
別に大したこと書いてないがな
"本家"Wikipediaとは?
uncyclopediaとかMonapediaじゃない本物って事だろ。
>>204 いや、日本版Wikipediaの項目があんまりにも質素だから...
既出ならすまん
struct A{int v;}
void main(){
A a = A(10);
if (a == a.init) writefln(a.v,"(a==a.init)");
else writefln(a.v,"(a!=a.init)");
a.v = 100;
if (a == a.init) writefln(a.v,"(a==a.init)");
else writefln(a.v,"(a!=a.init)");
a = A(1000);
if (a == a.init) writefln(a.v,"(a==a.init)");
else writefln(a.v,"(a!=a.init)");
}
全部のif文がtrueの方になるんだが・・・
2つ目と3つ目はなんでfalseにならないの?
それよりも全部10返してるってほうが問題だわな。
import std.stdio;
struct A{int v;}
void main(){
A a = A(10);
a.v = 100;
writefln("a.v = %s", a.v);
writefln(a == a.init);
writefln("a.v = %s", a.v);
}
構造体リテラルで初期化された構造体変数をinitと比較すると値が変わってしまうみたいだな。
これはバグだろな。
writefln(a.v);とかa.init;とかを間に挟むとさらに挙動不審になるし。
どんなバグなのかは分からんけど。
212 :
208:2007/05/17(木) 20:20:34
struct A{int a;static A opCall(int x){A a;a.v=x;return a;}}
に構造体を変えたら正常に動いた。構造体リテラルのバグのようだ
213 :
208:2007/05/17(木) 20:31:55
俺にはなんとも原因が想像できんバグだなあ
えらい人報告お願いしますm(..)m
GDCの更新が止まってる件について。
更新されてるよ?
なんでgdcmacはPanther用のバイナリを用意してくれなくなったんだろ・・・
>>216 Pantherでテストしてくれる人が居ないとか
お、日本語版WikipediaのD言語の項目で、加筆以来がある
仕事はやw
後は誰かが、
>>208を書けば良いだけだな
219 :
214:2007/05/18(金) 13:32:52
>>215 GDC0.23が最新ですよね?
DMD1.007相当なんでそろそろ新しいのが出ないかなぁと思っているんですが。
意訳。
const、final、invariantの準備
これはD 2.0のベータに来る予定であり、いくらかのソースコードの変更を必要とします。
その為、配列やポインタな関数の引数に明確に"in"を用い初めてください。
"in"は"scope const final"をあらわすようになります。その意味は:
final - 引数は関数の中で再代入されなくなります。
const - その関数は参照先の内容を変えようとさせなくなります。
scope - その関数は関数の範囲で持続する引数のデータの参照を保たなくなります。
例:
int[] g;
void foo(in int[] a)
{
a = [1,2]; // error, a is final
a[1] = 2; // error, a is const
g = a; // error, a is scope
}
引数でこれらの操作のどれかをしたいのなら、"in"を使用しないでください。"in"を使うことはD 1.0のコードでは特に意味は無いので、それは後方互換になるはずです。
Adding in all those 'in's is tedious, as I'm finding out :-( , but I think the results will be worth the effort.
c++でconstをへっちゃらべっちゃら書き込む作業がinで完結するようになるのか
SelfTypeが言語的にサポートされるといいなあ……
むしろデフォでそれにしてもらいたいくらいだ。
うわーん引数に代入するなー誰が保守すると思ってるんだー。
ところで
>>221の原文はどこでっしゃろ?
const地獄に辟易してるWalterタソらしい仕様だな。どうせメインはこれなんだから、これだけで十分でしょ?って感じか。
あとはconstなオブジェクトかあ。
>>221 2.0bの構想が既にあるってことは、もうすぐ2.0になるってこと?
俺がconstの機能だと思ってたものがfinalの機能だったのね・・・
んでconstの意味も再確認
俺の無知さに乙
あれだけ1.0が長引いたんだし、macroの実装、yieldの実装の後じゃね?
割と早めの予感・・・
Java みたいに、そのうちバージョン付けの方針がいきなり変わりそうだなあ。
Dのconstやfinalは変数を修飾していて、型を修飾しているわけじゃないんだよね?
yaccみたいなのってないですか?
D のコードを吐く yacc みたいなやつ、ということ?
D で作られた yacc みたいなやつ、ということ?
237 :
232:2007/05/20(日) 00:06:09
すいません。Dのコードを吐くyaccみたいなやつです。
239 :
238:2007/05/20(日) 13:12:20
あ、すまん。もう無いようだ。
wikiのリンクがおかしなことになってる。
a-hatena.com/bbsとかinterq.com/bbsとかなんだこれ。
>>241 それ、最近、流行ってるwikiスパムだ
>>242 そうか、直そうと思ったけどどこをいじればいいのか。。。
で、たぶん初歩的な質問だと思うんだけど、Win32APIのSetFileAttributesを使いたいんだが
関数定義しても使えない。
Kernel32.libをいじらないといけない?
>>243 SetFileAttributesA とか SetFileAttributesW で定義してるかい?
>>244 うん、してるんだけどね。。。って自己解決したんだ。
3時間悩んでここに書いた直後、extern(Windows)のつけ忘れってことにきづいた。ごめんね。
書いた直後に気づいてなんか申し訳なくなるってよくあるよねそれ俺
早くもレスがついちゃってたりするとすごく申し訳ないよなw
他人に説明するために、客観的に整理して書こうとするので、自然と頭の中が整理されるからかな?
という論を挙げておく。
それありうるね
ということで、みんな何か書けば良いと思うよ。
>>245 間違い方も流れも予想通りすぎてワロタwww
俺もたまにある。
整理されるというよりは、他人に聞くという行為によって
考えがいったんリセットされて、そこで改めて考え直すことで
見落としに気づけるんだろうな。
いったん変な考えにとらわれるとなかなかそこから離れられないものだから。
全然関係ない話だけど、
mixin Slot!(Dummy)
.decl!("add", int, int,int)
.decl!("mul", int, int,int)
.end;
というような文で
int function(int, int) add;
int function(int, int) mul;
というような一定形式の宣言を行うテンプレートを、
macro(Slot){
int add(int,int);
int mul(int,int);
}
と書けるようになるのがmacroだといいなあ、と思った。
要は、D言語の適当な構文要素にあうトークン列を、
別の適当なD構文に組み替えるような機能。
Nemerleみたいなもんか
Nemerleはそこまで器用なことできないだろ
なんでみんなNemerleなんだ
Erlangしようぜ、Erlang
はぁ?マクロの話だろ?バカか
もっとしっかりしようよ
つよししっかりしなさい
,',i><iヽ
/((ノノリノ)) ヒナの菊に
. ((ミi!゚ ヮ゚ノミ)) 指を入れてほしいの〜
(⊃⌒*⌒⊂) ∧_∧
/__ノ(i)ヽ__) ( )
._______ / ヽ
||\ / .| | |
||\..∧_∧ (⌒\|__./ ./
||. ( ) ~\_____ノ| ∧_∧
/ ヽ \| ( )
| ヽ \/ ヽ.
| |ヽ、二⌒) / .| | |
はやく2.0b来ないかな
2.0b来れば、多分、Dでも大規模な機能変更は無いと思うし
チョコラテ入れ
┃ ┃
┗━━━┛
>>261 2.0b -> 2.0RCで鬼のような仕様変更が予定されています
D言語は永遠に変り続ける言語
mixinに期待。
使われはしないがな
dsssに対応したIDEがほしくね
IDE(゚听)イラネ
\(´ω`)ノ┌┛)`д) ;∴
Entice Designer は、よくがんばってると思う。
つーかDFLってシンプルでいいよね
いで?
中身の頭が別の構造体の構造体を作ろうとするとコンパイラが落ちる。
……ような気がする。詳しい条件はよくわからんけど。
struct S { int a; }
struct S2 { S s; }
void main() { auto b = S2(); }
がとりあえず落ちた。S2の中身をintとSにすると平気。
既出だったらごめん。いまわりと困っている。
273 :
デフォルトの名無しさん:2007/05/22(火) 04:35:34
D言語がC++を駆逐する方法はただひとつ!
Qt並のRADツールを備えたVC並の統合開発環境を無償で提供することだ。
これからのプログラミング言語はライブラリの充実がものをいうのであって、言語仕様は二の次なのだ。
struct S { int a; };
struct S2 { S s; };
void main() { auto b = S2(); }
>>273 二の次っていうと極端だが、まぁそこ抜きに語るのが「不自然」であるという時代なのはその通り。
>>272 落ちなかった。
試したのはWindows版dmdの1.014。
>>276 同じなんだけどなあ。
俺の環境かな、とりあえずコンパイラ再インストールしてみる。スレ汚しすまん。
D#マダー?
>>270 DFLはかなりC#(というか.NET Framework?)の影響を受けているみたいで
先にそっちをやってると自然に使えるね
プロパティの定義がもうちょっと楽にならんかなあ。
ゲッタとセッタでプロパティ名を二回書くのはどうも無駄な気がするんだよな。
>>281 メンバフィールドをただラップするだけでないプロパティに対応させるのは無理かね?
>>282 メンバになんかの処理を行って返すような場合ってこと?
その「なんかの処理」が汎用的な場合ってあんま無いんじゃないのか。
「なんかの処理をつけ加える」汎用的な方法が欲しいってことならたぶん無理。
import std.stdio;
template Property(T, char[] name, char[] getter = null, char[] setter = null) {
static if(getter)
mixin("public T " ~ name ~ "(){" ~ getter ~ "}");
static if(setter)
mixin("public T " ~ name ~ "(T value){" ~ setter ~ "return value;}");
}
class Klass {
mixin Property!(int, "prop", `
return 1;
`, `
writefln(value);
`);
}
void main() {
with(new Klass) prop = prop * 2;
}
こんなんとか。
テンプレート引数にデリゲートって言うか処理を書けたらいいのにな。
プロパティに関しては、
・クラス外からは読めるが書けない変数
・クラス外からは読めるが書きこみ時はメソッドで処理したい変数
とか欲しくなることはある
速度重視で直接アクセスしたいときに
変数返すだけのプロパティはインライン化されるんじゃね?
ちゃんと見てないが。
仮想関数だから無理だろ
>>280みたいに
ゲッタとセッタでプロパティ名を二回書くのが無駄な場合ってフィールドをpublicでいんじゃね?
+=みたいな演算子が使えたりとちょっと挙動が違う。
まあ実際のところはpublicでいいのかもしれない。やらんけど。
int型とかならpublicでいいけど、
classとかをプロパティにしたいときはpublicだと困るんじゃないか?
メンバ変数はfinalにならないみたいだし?
class HOGE{
final FUGA fuga;
this(){ fuga = new FUGA; }
}
class FUGA{ int data; }
void main(){
auto hoge = new HOGE;
hoge.fuga = new FUGA;// finalを無視?
hoge.fuga.data = 100;
/+...+/
}
mixinスゲー
全然判らん。
いいかげんchar[]をstringと表記したいんですが
alias char[] string;
final answer = true;
undefined identifier answer
そうはならんだろ。
>>291 変更禁止はfinalじゃなくてconstじゃね
299 :
291:2007/05/23(水) 15:21:15
なるほど、constか。
コンパイル時に評価できる定数ってなってたからできないかと思ってた。
じゃあ変数に使うfinalってなんだ?
>>294 それを世界65億人のphobos内に追記してくれ
ばかばかばか
誤爆です・・・
なるほど。D言語使う香具師の層が理解できたぜ。
だが断る
>>301 やっぱりD言語使いにはゲームプログラマが多いんだなw
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
【総合】FF6スレNo.84〜ついでに服も盗んだ〜 [FF・ドラクエ]
これか?
>>300 typedef enum {false, true} boolean;
>>301 手首まだ俺も見たことねえのにうらやましいぜ
>>305 ゲームプログラマじゃない俺はどうしたらいいんだろう…
今すぐゲームをプログラミングし始めれば
とりあえず歩調は合わせられるぞ。
312 :
デフォルトの名無しさん:2007/05/24(木) 14:57:42
よーしパパmixinでタスクシステム作っちゃうぞーとか言ってるの。もう見てらんない。
バージョンアップまーだー?
はやく仕様落ち着かせろよといいながら一ヶ月も音沙汰ないと不安になる言語。
こういうときに仕事してんのかなー
もう一ヶ月か。
さぞすばらしい機能が追加されているに違いない
機能毎にbranchを切って、どの時期に何を投入するか決めている気がする。
この一ヶ月はDでコンパイラ書いてるんだって
いや、コンパイラをコンパイルするコンパイラをDで書いてるのかもしれないぞ
320 :
デフォルトの名無しさん:2007/05/26(土) 01:15:46
最近は大抵のコンパイラが自己記述されてるだろ。
最近はコンパイラ・コンパイラもないのか・・・・・
Dでコンパイラコンパイラをコンパイルするコンパイラを書いてるんじゃね?
Dでコンパイラコンパイラをコンパイルするコンパイラをコンパイルしてそのコンパイラコンパイラでコンパイラを作成してるんじゃね?
そろそろ天才の登場が待たれるな
近代的なコンパイラがアセンブラでイキナリ書かれることは無いだろうから
順々にコンパイラをコンパイルしたコンパイラを遡っていくと何にたどり着くんだろう
>>326 職人が紙テープにせっせと穴あけたりしてたのにたどり着くんだろうと思うと、ワクワクするなw
人間のハンドアセンブルに辿り着くね。
それはネタで言ってるんだよな?な?
意訳。
文字列の型: const(char)[] と cstring
新しいconst/invariant/finalの制度のもとでは、文字列はどうなりますか?
他の言語の経験によると、文字列はイミュータブルであるべきであると思います。
定文字の配列を表すために、こう書くでしょう:
const(char)[]
しかし、それが明確であるのにキーボードですらすらと打てません。文字列が非常に一般的であるのでこのように別名を必要とします:
alias const(char)[] cstring;
何故 cstring なのか。それは"文字列"はモジュール名と公共(common)の変数名の両方に表れるからです。また、cstringの導入ははwcharの文字列の為のwstringと、dcharの文字列の為にdstringを含みます。
その一方で文字列リテラルはinvariantにするでしょう(読み込み専用メモリに入れることができるのを意味します)。なので:
typeof("abc")
は
invariant(char)[3]
となります。
暗黙的にinvariantをconstにキャスト可能です。
私がソースコードをいじくったところ、かなりうまく解決するように思えます。
何故cstringをinvariant(char)[]のエイリアスにしないのか。そのようにすると、文字列は確かに不変になるでしょう。 理由はミュータブルをinvariantに暗黙的にキャストすることができないということです(これはコードには多くのキャストがあるのを意味してます)。
キャストはハンマーであり、あまりにたくさんのキャストを必要とするコーディングスタイルは悪いコーディングスタイルです。
どこが意訳なんだよ。
引数とか完全に禁止したのをデフォにして、
色々許可する方を指定した方がいいと思う。
原文はどこの話だろう
>>333の要点をまとめると
-型としてinvariant(type)とconst(type)が追加になる
-const(type)は値が一定。ようは実行時に一意に決まる。
-invariant(type)は値が不変。ようはコンパイル時に一意に決まる。
-暗黙的にinvariantをconstにキャスト可能
-暗黙的にミュータブルをconstにキャスト可能
-暗黙的にミュータブルをinvariantにキャストは不可
ってことだと思う。間違ってたらスマソ。
俺もBj?rklund氏と同じでcstringよりはstrの方がいいなぁ。
ただしstr/cstr/istrと分かれるならそっちの方が良い。
ややこすぃ!
cstringにしたら
UTF-16版がwcstringになる。
トイレかよ。
標準の文字列をイミュータブルにしてスレッドやパフォーマンス以外でなんか良い事ってあるの?
文字列のずらしとかが遅くなるの嫌なんだけど。
参照の変更で元の文字列まで変わっちゃったとかいう
バグが起きなくなる。
現状では関数の引数でinだったらコピーされてるから問題無い気が。
>>341 それ、何てMozilla?
>>343 これパフォーマンス厨が良くやらかすんだよなwwwwwww
職業柄wcはオメガシーって読んじゃうよ。
>>341 cwstringだろ、常識的に考えて。
結局char[]のaliasかいな。
"あいう"[0] がどうしても1文字目じゃなく1バイト目になってしまうのは
この言語の宿命なのか。
しかしconst(type)とかinvariant(type)とか、
いつの間に()が要るようになってるんだろう。
前置キーワード方式じゃダメだったのかな。
wchar[]使えばいいじゃん
>>344 inをコピーじゃなくして、デバッグビルド時にoutでassertかませば性能面の問題も起きないと思うけどなぁ。まぁマルチスレッドで問題起きるけど。
今の時代100MBあるchar[]でも無ければパフォーマンスなんてほとんど変わらんだろ。
組み込み機器じゃGCとかあるようなDなんて使えないだろうし。
>>342 データの内容が書き換わらないことが保証されてると
コードがとても単純になって可読性・保守性がよくなる。
# でも一時変数を使い回しまくってると意味無いな……ええい引数に代入するな!
# しかもすぐ捨てる作業用オブジェクトを! しかもfor文の中のif文の中で!
# for文抜けた後でも参照してるじゃねぇか、このコードまずいだろ!?
constとかfinalにすれば引数に代入なんかできないだろ。
いっそのこと標準でinにしちゃえばいいのにな。
>>352 ># でも一時変数を使い回しまくってると意味無いな……ええい引数に代入するな!
inになってる引数に代入してそのまま返してる関数が多数な俺。
やっぱりauto rv=arg;って一行入れるべきだよなぁ>俺。
># しかもすぐ捨てる作業用オブジェクトを! しかもfor文の中のif文の中で!
># for文抜けた後でも参照してるじゃねぇか、このコードまずいだろ!?
これは現状でもD言語では無問題だしなぁ。
const char[] str; という宣言があったとき、
* 変数 str は const
* 変数 str の型は、(const char[])
のどっちなの?
>>355 現状ではどっちでも大差無い。まぁソース嫁。
配列であることを意識しないでいいような構文になればなんでもいいや・・・
>>351 GCに怯えすぎ。
組み込みだろうと問題にならない。
こわがりすぎー :)
Dで書かれたOSってありますか?
DOS
おお、組み込みでも既にGC載ってるのか。
って思ったけど携帯とかずっと前からJava入ってるんだよな……
DのGCくらい携帯以外でも楽勝なのか。
いつまでこの地味な状況って続くんですか?
誰かがキラーライブラリつくるまで。
tangoはキラーすぎて逆に駄目そうだな
まぁ DOS くらいならいまの D でも書けそうだ w
DのGCってメモリ確保関数さえあれば動くんだよね?
スレッドも必要です><
OSがGCを実装して、下位のプログラムがメモリを管理しなくてすむようになればいいなあ。
>>372 MonaOSがそんな感じだったような。ただD言語のgcは一部の型を把握するようになったから、そう簡単にはいかないだろうけど。
すいません、ちょっと質問させてくださいな。
D言語で、interactive shell(pythonみたいに、対話的に一行ずつ
実行できるようなもの)ってありますでしょうか。
その場でスクリプトをコンパイルして実行という機能がはあったんですが・・・
>>374 共通型システムみたいなものを導入すればいいんじゃね?
>>374 Monaにそんな機能はないよ。正直メモリ関連は結構ややこしい方だと思う。
>>375 ないと思う。
そういう用途としては python なり ruby なりを使った方がいい。
普通にbashでいいだろ
dsh
(゚听)イラネ
383 :
375:2007/05/27(日) 20:48:25
レス下さった方々、どうもありがとうございます。
自分でもいろいろ探していたんですが、やっぱりないんですね〜残念。
実は主にpythonとC++を使っているんですが、どっちも一長一短でなにかいい方法が
ないか探していたんです。D言語でまとめられたら、凄くハッピーだったのですけど。
主に使う用途としてはデータ解析などなので、bashだとちょっと厳しいです。
変数の内容を保持したまま、対話的に関数が呼べるものを探していました。
話はちょっと変わりますが、Dの言語仕様、ver1で一旦新しい追加は置いておいて、
bug fix重点的にやるって噂ですね。
これで少しは落ち着いてアプリが作れる・・・かな?
>>383 そんなことは無いが、後方互換は保たれてる。
ちょっと前に予約語の追加があったばかりじゃないか・・・
もうすぐ2.0betaが出てくるという話だからね。
そっちが優先されるかも。
今MLで議論されている
const/invariant/finalの話ってどう思う?
はっきり言ってinvariant要らないような気がするんだが。
別にあってもいいと思うよ
ちゃんと追ってなくてよくわからんのだが、どういう機能?
>>389 以下、Walter氏が示したcode例
int x = 3;
final int* p = &x;
p = null; // error, p is final
*p = 1; // ok
const(int)* q = null;
q = &x; // ok, q is not const, and now *q is 1
*q = 2; // error, *q is const
*p = 5; // ok, but now *q is 5, too!
x = 6; // ok, but now *q is 6
invariant(int)* s = null;
s = &x; // error, cannot implicitly convert int* to invariant(int)*
int y = 4;
s = cast(invariant(int)*)&y; // ok, trust programmer that y is immutable
*s = 3; // error, *s is immutable
y = 5; // undefined behavior, as y is never supposed to change,
// and compiler assumes *s is still 4
<X>(char)[] parm; に対して
*-------------------------------------*
| <X> + parm.ptr | parm[0] |
|-------------+-----------------------+
| const | mutable | immutable |
| final | immutable | mutable |
| invariant | mutable | immutable |
| (何も無し) | mutable | mutable |
*-------------------------------------*
(
>>390の続き)
constな値へのポインタは
指している先が別のところで書き換えられることが
有り得るのに対して、
invariantな値へのポインタは
書き換わることがないと仮定されている
(書き換えると未定義動作になる)
おそらく関数引数(const)とリテラル(invariant)を
想定していると思われるが、
invariantってのは結局コンパイラ側の都合で
あった方がいいというだけのように思えるんだ。
ちなみに
Note that int* can be implicitly converted to const(int)*, and invariant(int)* can be implicitly converted to const(int)*.
(意訳) int*はconst(int)*に暗黙的にキャストされ、invariant(int)*は暗黙的にconst(int)*にキャストされます
とのこと。
> invariantな値へのポインタは
> 書き換わることがないと仮定されている
訂正
> invariantな値へのポインタは
> 指している先の値が書き換わることがないと仮定されている
ありがとう。なんか豪い煩雑になるなあ。
しかし、invariantはプログラマは滅多に使う機会ないんでない?
最適化効率が上がるんならあってもいいように思うな。
使用頻度如何では invar くらい短くして欲しいが、
あまり使わないのなら長い方がいいな。
もう少し考えてみたが、
invariantな値というのはつまり、
"あいうえお"
[ 1, 2, 3, 4, 5 ]
などのコンパイル時に決定される値ということだよな。
([ x, x+1, x+2 ]とかは実行時に決定されるので範疇に入らない)
これらはconst値に暗黙変換されるから、使う方としては
const(char)[] s = "あいうえお";
の様にconstで受ければいいのか。
それなら invarint〜 と頻繁に書く必要はほとんどないな。
*でも結局はconstで受けるんだから、
>>393が言うような最適化効率には
あまり貢献しないような…? あ、autoを使えってことか?
ただ、
char[] = "あいうえお";
はたぶん暗黙変換エラーになると思われるので、
そのあたりを意識してCodeを書けということだろうか。
>>395 char[] = "あいうえお"
はコピーになってくれないと正直困る。
これネイティブjava?
いいえDです
いちいち
char[] = "あいうえお".dup;
しろってことになるかもな
またウォルターたんは変なことを思いついたもんだな
失敗だったらバッサリ切り捨てるだろうから心配はしてないがw
というかなんで文字列リテラルがimmutableなんだ?
意味なくね?
constとかの場合のみでよくね?
文字列リテラルが immutable なのは普通だろ。
C/C++ だってそうだ。
"abc" と "bc" ってのがあった場合に
重ねて置ける最適化ができるというのもそうだけど、
唯一しかないものをホイホイ書き換えられても困る。
問題は char[] str1 = "abc"; とした時に、
str1 が文字列リテラル自身を指すことになってしまう点。
C/C++ みたいに、文字列リテラルで配列変数を初期化する場合は、
特別にコピーが発生するようにすべき。
>>403 そこらへんが上にあった変更で改善されるわけだな。
書き換えるならdupれ、書き換えないならconstにしろ、
という感じか。
immutable なら文字列リテラル自身を指すようになって構わないけど、
そうでなければ自動的にコピーして欲しい。
その方が自然だと思う。
ウォルターは天才なので彼に全て任せておけば問題ない
まあ糞言語だがな
eclipse プラグインまだ?
あるがな。
自動的にコピーだとコストに気がつかない可能性があるから、エラーの方が良くない?
配列のリテラルによる初期化でコストが発生するのはむしろ普通のことでは?
const(char)[] foo = "str"; // 参照代入
char[] bar = "str"; // コピー
とか。ややこしいだけか。
char[] hoge = "fuga" + "hage" + "boke";
コピーは何回発生するでしょうか?
ベクトル演算は実装されていません><
どうもコンパイル開発のしやすさに重点が置かれてるのかな?
プログラムは日増しに組みにくくなってる。
コンパイラ開発の楽さは重点に置いてる一つではあるんだけど、
あまりに組みやすさが犠牲になると流石に困るよな。
日増しにっていうほど変わってないだろ。
GUIライブラリならいまはどれがベターですか?
WindowsならDFLじゃないかな。
クロスプラットフォームのならDWTか。
任意の比較関数を使ったソートってどうやってやるんですか?
それ用にクラスつくったりstdlib.c.qsortを使えというのはなしで
デリゲート
>>422 どうもです。でも理解できません。
delegate使ってどうやってやるんですか?sortはdelegateを受け取らないと思います。
また関数ポインタでやるならqsortと変わらないと思います。
単純なchar[][]の場合もdelegateで解決できるんでしょうか?
ユーザー定義型じゃないなら専用の関数作るしか無いと思う
425 :
デフォルトの名無しさん:2007/05/29(火) 19:12:58
char[][] ss= ["hello","test"];
foreach( int i; char[] s; ss) {
writefln( s);
}
こんなのって無理ですか?
foreach( int i; char[] s; ss) {
は
foreach( int i, char[] s; ss) {
だな。
ああ・・・
ありがとうございます・・・
すいませんでした
ドンマイ
ドンマイ
Win32APIのwrapperみたいなのあります?
自分で定義して直接呼ばないとだめ?
あるよ
>>423 少し反則気味だけど、こんなんとか
import internal.qsort;
T[]sort(T)(T[]a,bool delegate(T,T)dg){
static class Ti : TypeInfo{
bool delegate(T,T)dg;
override size_t tsize(){return typeid(T).sizeof;}
override int compare(void*a,void*b){
return dg(*cast(T*)a,*cast(T*)b) ? -1 : dg(*cast(T*)b,*cast(T*)a);
}
}
scope t=new Ti;t.dg=dg;
_adSort(Array(a.length,a.ptr),t);
return a;
}
import std.stdio;
void main(){
int []a=[3,4,2,4];
writefln(a);
a.sort((int a,int b){return a<b;});
writefln(a);
a.sort((int a,int b){return a>b;});
writefln(a);
}
>>431 ありがとうございます
フレームワークは何が標準ですか?
434 :
423:2007/05/30(水) 10:55:14
>>432 レスありがとうございます。
テンプレート+デリゲートですか。私の足りない頭では理解が・・・
残念ながらこのコードはgdcだとコンパイルが通りませんでしたが、参考にして
ポートしてみます。
>>436 ありがとうございます。
ところでカレーはスパイスだけでも作れますか?
Vriant型って何が便利なの
一つの構造体に二つのソートを登録したい場合は
どうしたらいいのでしょうか?
(この発想からしてダメかも知れませんが…)
一回目は配列全体をメンバ変数intを対象にしてソートします
二回目はスライスを用いて
{0..8}のように特定の範囲のみを相手に
メンバ変数のchar[]を対象にソートしたいのですが
なかなか良い作り方が分からず…
少し上でもソートが出てましたが
難しいそうですね…
どのようにすれば良いでしょうか
ごく普通に、opCmp内部で変数みてモードかえればいんじゃね?
つ
///クイックソート
template quickSort(alias cmp){
void quickSort(T)(T[] a){
void loop(int l, int r){
auto i = l;
auto j = r;
auto pivot = a[(l + r) / 2];
for(;;){
while(cmp(a[i], pivot)){
i++;
}
while(cmp(pivot, a[j])){
j--;
}
if(i >= j){
break;
}
auto tmp = a[i];
a[i] = a[j];
a[j] = tmp;
i++;
j--;
}
if(l < i - 1){
loop(l, i - 1);
}
if(r > j + 1){
loop(j + 1, r);
}
}
loop(0, a.length - 1);
}
}
///比較関数
bool more(T)(T a, T b){
return a < b;
}
やっぱりC++のSTLでstd::algorithmに相当するのがDにもあると便利だよね。
ソート以外にもbinary_searchとかrandom_shuffle, find_ifとか使いでがあるし。
クイックソートだけじゃなくてマージソートも欲しい。
import std.algorithmとかで実装されないかな。
折角 lambda あるんだしな。
ていうか今のDには主要なテンプレートライブラリがないもんなー
DTLはどうなったんだ?
bindならid:shinichiro_hさんが
std::functionalならid:rinsetさんがだいぶ前にやってたような気がする
このスレのレベルが急速に低下してるな……
> 爆釣れ
しかし本当に音沙汰ないなあ
SWTを移植してるひといますか?
tioportっつ〜、javaのリソースをDに変換するツールのプロジェクトがあって、
SWTも対象だったような・・・
455 :
デフォルトの名無しさん:2007/06/06(水) 00:54:04
英語の公式サイトでdmdをダウンロードして
-vでバージョンを確認したらdmd 1.010なんだけどこれが最新?
このスレに1.014という記述があるんだけど・・・
ChangelogのページからDLできました。
static コンストラクタやデストラクタがある D だと、
シングルトンパターンってあんま意味ないのかな?
初期化のタイミングを調整できるって程度か。
もしかして
class Hogehoge {
static:
fugafuga;
}
ってクラスの先頭にstatic:つければほぼシングルトンパターンじゃね
それでも static this やらはちゃんとstatic付けないとダメだけどね
それどこのJava?
D 1.015
きたああああああああああああああああああああああああああ
New/Changed Features
該当なし
しょぼーん
バグ抜きだけか
>>208 のバグはまだ直ってないな
気がついてないんだろうか
誰も報告してないんじゃないの?
報告しとけよw
誰か報告する(した)人いる?
なんかニュースグループみてみたら
リリース関係についてなかなかおもしろい議論がされてた
それを受けて開発参加者のうちの1人(?)からmy visionとして
・あと1・2ヶ月でTangoリリース
・2008年はじめごろにD2.0リリース
というロードマップが示されてたのでいちお報告
とりあえずposeidonに期待と言っておく。
連想配列リテラル、キーの文字列を同じ長さにしないといけないのか・・・
>>467 むしろお願いします
>>470 例によってcastが必要だな
//for dmd 1.015
void main(){
char[][char[]] s = [cast(char[])"key_hoge":cast(char[])"hoge","key_hogehoge":"hogehoge"];
}
472 :
デフォルトの名無しさん:2007/06/07(木) 14:12:46
C#のArrayListのように型関係なく追加できるものってありますか?
動的配列
.NETよーしらんけど、こんなん?
import std.boxer;
class ArrayList {
Box[] array;
int Add(T)(T x) {
int idx = array.length;
array.length = array.length + 1;
array[idx] = box(x);
return idx;
}
int opApply(int delegate(ref Box) dg) {
int result = 0;
for (int i = 0; i < array.length; i++) {
result = dg(array[i]);
if (result) break;
}
return result;
}
}
あーありがとございます。
とてもいいコンパイラになってきたと思うけど悲惨な言語にもなりつつあるな。
弩言語
478 :
僕は上げたい:2007/06/08(金) 05:27:29
すみません ものすごくスキルの無い、低レベルでくだらない質問です。
int main(char[][] args)
{
printf("吉田十四朗です。一応180cmのイケメン19歳です。\n");
retrun 0;
}
WinXpでこれを普通にコンパイルしようとするとUTF-8がどうのこうのと文句いってコンパイルできません。それで、ソースの保存の際にUNICODEでソースを
保存してコンパイルすると、きちんとコンパイルできるのですが、激しく
文字化けをします。 どうしたらいいのでしょう?
ウィンドウズのコンソールにちゃんと表示したいなら
std.windows.charset だかに入ってるtoMBSzを使ってS-JISに変換とかしないとだめぽいよ
あーでも、
import std.stdio;
import std.windows.charset;
void main()
{
char[] msg = "ほげ!";
printf("%s", toMBSz(msg));
writefln("%s", msg);
}
こういうコードで、UTF-8なコンソールだと、toMBSzの方が化けるな・・・
一回の出力で違う文字コードがあると化けるって事か。
でも、これって、一行ずつバッファしててそのバッファ毎にコード変えていれば、表示できなくね?
struct LineBuffer
{
struct LineBuffer *next;
struct LineBuffer *prev;
char *data;
unsigned long length;
unsigned int code_page;
};
みたいなのでさ。
extern (C) {
void hoge(int);
}
T hoge(T)(T[] a) {
return a[0];
}
void main() {
int[1] a;
writefln(a.hoge());
}
これで、conflict するのは仕様?
>>471 おk つたない英語で(しかもつづり間違えたw)報告しておきました
まだ認知されてないバグだったようです
>>483 スマン 漏れにはよくわからないがtemplete書かずにそういうのができるんだっけ?
>>471 "string literal"[]
でchar[]型になるよん。
ツリー状になってるリンクたどったらなんか関係ないページに飛ばされるし
ログインしないと見ることもできないのか?
使い方わかんね・・・orz
>>487 そうそれです
>>488 ログインとかはないはず・・・
ひょっとしてニュースグループ全体のツリーに飛んじゃった?
なんか夏にD言語のカンファレンスがアメリカで開催されるらしいけど
誰か日本から参加する人いるのかな・・・
>>489 へ?マジで?
生Walterタソが見れるのか。
ああ,アドレスから .bugs が抜け落ちてる・・・バグ報告サイトのバグか(^^;
ほんとだ バグだw
ニュースサイト全体のツリーでbugsのリストを取得してから
>>491のページに行くとちゃんと.bugsがつくから
サイト全体のリストを通さず直に行くっていうのが仕様外なのかなw
微妙にリスト表示のページも変な挙動するなと思ってたら・・・
んじゃこれも報告しとく
eclipse+ddbg+descentの構成でデバッガ、まともに動いている人いませんか?
ddbgによるステップ実行はできているようなのですが、Eclipseとうまく連携できていないようで、
ソースファイルを見つけることができず、ステップ実行している箇所の矢印が現れませんorz
Eclipseのソース・ルックアップ・パスの編集は、しっかり行っているつもりです。
現在、疑っているのはコンパイルとリンク時のパラメータ設定ですが、
他に出来ている方がいないようでしたら諦めようかと・・・
DってARM用バイナリとか作れるんかな?
WindowsCEで動く小物とか作りたいんだけど。
GCCはARMにも対応してるんじゃなかろうか。
cast(char[])"hoge" as "hoge"[]
cast(char[])"hoge" as "hoge"c[]
cast(wchar[])"hoge" as "hoge"w[]
cast(dchar[])"hoge" as "hoge"d[]
おーるぺーじでぃー?
char[][] libs = listdir(source,"*.lib");
foreach(char[] lib;libs)
{
char[] s = lib;
char[] d = std.path.join(destination,getBaseName(lib));
char[] command = std.string.format("%s \"%s\" \"%s\"",converter,s,d);
dout.writefln(command);
exec(converter,[converter,s,d]);
// system(command ~ ">dump.log");
}
なぜ動かない。execだとforeachにならずにexecからプログラム抜ける。
ほかのソフトを起動する方法はほかにないのだろうか?
// systemだと正常に動くけど…
Shift_JISで記述されたファイルの内容を正規表現で解析したいのですが、
正規表現中にユニコードの文字が入ると案の定うまくいきません。
うまいことShift_JISの文字列を読み込んで処理する方法はないものでしょうか。
対象のファイル自体をUTF-8に変換するってのはできればナシでお願いします。
(他のプログラムが吐くログが本来の対象なので)
----- main.d -----
import std.regexp;
import std.stdio;
import std.stream;
int main(char[][] args){
auto r = new RegExp("(ほげ)+");
auto fp = new BufferedFile("hoge.txt", FileMode.In);
foreach(char[] line; fp){
foreach(char[] s; r.exec(line))
writefln(s);
}
return 0;
}
----- hoge.txt (Shift_JIS) -----
ほげ
ほげほげ
もげ
---------------------------
ファイル読み込み時に逐次ShiftJISからUTF-8に変換するしかなくね?
あるいはRegExpに与える文字列をShiftJISバイト列で書くとか
>506
やっぱりそれですかね。できれば標準ライブラリのみで完結したかったのですが・・・
とりあえずShift_JIS→UTF-8の変換ライブラリを導入して一応解決したので質問を終えたいと思います。
回答ありがとうございました。
import std.windows.charset;
int main(char[][] args){
auto r = new RegExp("(ほげ)+");
auto fp = new BufferedFile("hoge.txt", FileMode.In);
foreach(char[] line; fp){
foreach(char[] s; r.exec(fromMBSz((line~'\0').ptr)))
printf("%s\n", toMBSz(s));
}
return 0;
}
だめ?
509 :
デフォルトの名無しさん:2007/06/14(木) 19:38:54
>494
うちも最初はそうだったけど、「外部ツール」の設定でdmdの起動引数にソースコード名を直接記述してやると
上手くソースコード上でステップ実行できるようになったよ。
あと、うちの環境ではwindow blinds入れていたら、dwtが上手くデバック実行出来なかった。
→wbsys.dllが起動時にACCESS VIOLATIONおこすぽい。
Visual StudioとかはDLLの読込でACCESS VIOLATION発生しても大丈夫なのに・・・
510 :
505:2007/06/14(木) 20:55:28
>508
その方法で動作する事を確認しました。ありがとうございました。
ただ、このUTFに一旦変換するやり方では、UTFの変換のオーバーヘッドのためか
プロトタイプ用に書いたスクリプトに速度で負ける有様です。(実際にはログが数十MBほどあります)
C++あたりで書いたほうが幸せになれるのでしょうか。
RegExpにShift_JIS文字列を渡す方法だとより難儀なはまり方をしてしまいそうです。
>>510 てゆーかphobosのstd.regexpは死ぬほど遅いから
普通にRubyとかPerlの正規表現には速度で負けるとおもう
言語仕様って最近落ち着いてるの?
ここ一月半は更新がなかったから落ち着いてるよ
目下D2.0の仕様を検討中。
それのどこが落ち着いていると言うのかw
嵐の前の静けさ
dsource.org ddl の meta.regex はどーなん?
>>516 まさにそれだな。v1の互換も落とすって言ってるし。
正規表現は鬼車を使えばよくね?
互換捨てるってマジかよ
過去の自分にさえとらわれないどこまでも前向きな言語
それでこそ僕らのウォルターたん
未だに実用に耐えられませんか?
言語仕様はすごくイイと思うよ
コンパイルも早いし、C++の知識があればすんなり入り込めるのもディモールト良い
>>522 実用の意味による。
少なくとも仕事で使うわけに行かない場合がある(標準が策定されていないとか)
採用者の責任が取れる範囲で類焼しない小さなプロダクトならいいんじゃないの?
実用になるかどうかは、本人の能力次第でしょう。
D言語は初心者向けのの言語ではありません。初心者にはJavaかVBをお勧めします(Walter談)。
526 :
525:2007/06/15(金) 22:05:41
ののって・・・>をれ
バルス
滅びの呪文?
>>524 ABAさんのちょっと前のゲームのソースとか、もうコンパイルできなくなってて吹いた
530 :
デフォルトの名無しさん:2007/06/16(土) 11:04:07
D言語でOSとかって作られてるのかね
DOS禁止
作られてるよ
作られてないよ
ちなみにGCを完全にオフる事は可能?
可能
不可能
どちらでもない
DFLのソースに日本語のリテラルをいれる方法はありますか?
539 :
538:2007/06/16(土) 15:48:03
解決しました。文字コードが悪かったようです。
GC を完全オフって、要するにメモリリークしまくりってことか。
プログラマがdeleteのタイミングを管理するってことでは
OSの話でカーネルを作るならって話です。
オフにしてまでD言語を使う意味があるの
オフにしないとD言語を使えない状況があるって事なだけなんぢゃないの?
それは意味不明だ
オフにしても使えるような、泥臭い部分も仕様に入ってるというのが俺の理解だけど。
GCをオフにすると配列の結合演算~が行えないのでは
使わなければいいだけでは?
DMD 2.000 リリース
New/Changed Features
* Added aliases string, wstring, and dstring for strings.
* Added .idup property for arrays to create invariant copies.
* Added const, invariant, and final.
* in parameter storage class now means final scope const.
* foreach value variables now default to final if not declared as inout.
* class and struct invariant declarations now must have a ().
Bugs Fixed
* Added missing \n to exception message going to stderr.
* Fixed default struct initialization for CTFE.
* Bugzilla 1226: ICE on a struct literal
ktkrはいいんだけど、変更範囲多杉なので日本語訳待ち
>This is an alpha release to try out the const/final/invariant stuff.
>Treat this as an alpha release. Although it passes its test suite, I'm sure there are plenty of bugs remaining. Phobos also has not been thoroughly gone through to put const/final in all the right places.
ついにブランチしたか。
ちょw
2.0はやいな
バージョン番号の付け方が相変わらず適当すぐるんだがw
同じ値の文字列リテラルがなぜか一緒に書き換えられる件について
//dmd2.000
char[] a = cast(char[])"hello";
const char[] b = "hello";
a[0] = 'H';
writefln(a); // Hello
writefln(b); // Hello <- ?
っ dup
>>556 >a[0] = 'H';
ここでROMを書き換えてるのが原因。Linuxだと落ちるのにWindowsだと落ちないという罠。
>>556 > modification after casting away const
> No:
char[] a = cast(char[])"hello";
ここでconst(char)[] から char[] にキャストしてるけど、
これを変更するのは undefined behavior
bの型は const(char)[] じゃなくていいんか?
>>558 Linuxだと落ちるのか
いままで、何で書き換え禁止のはずのリテラルを普通に書きかえれるんだよ!
とか思ってたけど
562 :
556:2007/06/18(月) 20:45:14
thx
ずいぶんたくさんのレスついたな
final invariant const を勉強中なんだが なるほど
ROMを書き換えるような処理は基本的に不正ってわけか
何という不意打ち。
どう考えてもstringとか中途半端にしか使われなさそうだ。
structはコンストラクタ書けるようになったのか……?
ってか、typeid()でconst/invariantでないじゃん。
いや、出るけど括弧がないのか。
writefln(typeid(typeof("str")));
char[3] になるけどいいのかな?
const char[] と const(char)[] は別物っぽいから string が const(char)[] の alias になっているのは
const(char)[] b = "hoge"; // string b = "hoge";
の形を一番よく使うからってことかな
あとは
invariant(char)[] a = "hoge";
char[] c = "hoge".dup;
のどちらかになるのかー
const char[] と const(char[]) は別物??
よう分からん。
void main() {
const(int[]) a = [1];
const int[] b = [1];
const(int)[] c = [1];
a = [2]; // OK
b = [2]; // Error
c = [2]; // OK
a[0] = 2; // Error
b[0] = 2; // Error
c[0] = 2; // Error
a.length = 2; // OK
b.length = 2; // Error
c.length = 2; // OK
}
* aは(変更不可能な配列型)の変数。
* bは変更不可能な(配列型の変数)。
* cは(要素を変更不可能な配列型)の変数。
って理解でいいのかな
(1)と(2)の理解はこれで正しいのでしょうか
char[] a = "hello".dup;
string b = a; // ok, char[] から const(char)[] へは暗黙変換される?(1)
b = "HELLO"; // ok
writefln(a); // hello, 変化してないから (1) で deep copy されてる?(2)
writefln(b); // HELLO
>>571 それであってんじゃね?
うーん 難しいな
こんなにポインタ操作を意識するのは久しぶりだ
>>572 (1)はたぶんあってる。
> Implicit Conversions
> Mutable and invariant types can be implicitly converted to const.
(2)は違うと思う。
b = "HELLO"; は参照が取り替えられてるだけ。
>>574 え・・・ほんとだ・・・(2)
言われて見直したらそれだけのことだった orz
正直すまんかった
誰か1.0と2.0の違いをkwsk
1.0の系統は残るの?
もはやv1がウォルタたんの探究心を満たすことはできないだろ。
しかし正月に1.0が出てから半年で2.0か。
来年の正月には3.0になってる??
その次に 4.0 が出て、その次は何故か 0.5.0 になったり。
void main(const(const(const(char)[])[])args){
foreach(const const(char)[]arg;args)
printf("%.*s\n",arg);
}
何が何だかよくわからん
これはalias使わないのは悪の流れかな?
>>580 printfにchar[]を渡すときはtoStringzいるんじゃなかったけか
%.*sはchar*
しまった、%.*sはchar[]だ。
>>580 int main(in char[][] args)
これじゃだめなの?
main(in string[] args) でいいだろ。
とりあえず 2.0 系にして色々やってみて、
やばかったらまた 1.0 系に戻すつもりだったりして。
>>293 これで、いちいちaliasしなくても良くなったな。
while文とかfor文とかの中でないといけないもので最初(または最後)にだけ実行される機能っての結構あるよね
そこをこうfirst文とかで自動でやってくれたら楽じゃね
いや自分で最初かどうかのbool値とかループカウンタ用意するのもいいけどさ・・・
どうにかなりそうな面倒さだったんでついwww
最初は for の最初のとこでいいと思うけど、
最後は俺も欲しい。
前に話題に出た事あったような気はするんだけど、
結局うやむやに終わったんだっけか?
あるいは for の前だな >最初の
>>468 のロードマップはなんだったんだろうなw
forとかwhileの外に書くと関連性があるのやらないのやらでたまに困る
そういうときは
{/*処理の説明*/
処理本編
}
というように括る。
while .. finally
for .. finally
とか?
perl には while .. continue 構文があったな。
invariant表明に括弧いるようになったんかいな・・・
きたねえのう
{}
ブロック機能を使え
>595
Pythonにもwhile-elseとfor-elseがあるな。
というかD2.0はalias stringがあるだけで使う価値があると思う
こうなると1.016と2.000のどっちを使うか迷うなあ
当然2.000を使いたいのだがライブラリ全滅だし
え 2.0って既存のライブラリ使えないの?!
>>603 phobosは使えるけど、それ以外のユーザーが作成したやつは全滅かも。
今までもライブラリが使えなくなることはよくあったんだから
問題は1.x/2.x両方に対応することができるのかってことだよね
1.xが中途半端に生き残ってる限りライブラリ開発が進めにくいのが痛い
>>605 >>596とかどうやって切り替えればいいんだろうな。
Cみたいなテキストマクロが使えればv2なら括弧だけ補うなんてこともできるんだが。
そういう部分もカンファレンスで議論するために2.0リリースを早めたのかな
2.0系って下位互換をそれほど犠牲にしてまで使いやすい仕様になってるの?
仕様書が見あたらなくてよくわからない・・・
あんまり変わってない気がするなあ・・・
アルファだし叩き台の意味もあるんだろうが、
どうせ互換性切るなら構造体リテラルとか連想配列リテラルとかも考え直して欲しい。
たしかに・・・
動的配列も・・・・
カンファレンスにはぜひマルチバイト文字列圏の人間にも参加して欲しい
そのうちアスペクト指向とか取り入れられたりすることを期待
>>610 FAQに「Why not in Europe?」とかあるものなw
>>611 FAQからして日本は眼中にない罠w
つーか おいおい
よく見たらMC++DのAndrei Alexandrescuも発表者として参加するのか
2.0のリリースっていつなんだろ。
出たら何か作ろ!
まだΑ版だろ
あぼーん版だな
constメンバ関数増えてるのか
invariantメンバ関数まであるみたいだな。
うお ver.1.017がいつのまにかリリースされている・・・
D 1.017
New/Changed Features
Added __VENDOR__ and __VERSION__.
Bugs Fixed
std.compiler now is automatically updated.
dmd.zip の方か・・・。
alias char[] string;
string s = new string(80);
s[] = 'a';
とか、してたトコは逆に、charにしないといけないのか?>2.0
string hoge() { return "hoge"; }
writefln(std.string.join([cast(string)"hoge", hoge(), hoge()], ","));
writefln(std.string.join(["hoge", hoge().idup, hoge().idup], ","));
なんか、びみょー。
>>620 これってstd.compilerが自動的にアップデートをチェックしてくれるってこと?
>>624 dmdをアップデートさせたらstd.compilerの内容もアップされるということか
コンパイラに関する情報をphobosからなくしたってことか
>>627 消えたね。
Walterタン曰く
>It's not done yet!
おういえ、さんくすです
なんか最近 開発陣も混乱してる感があるなw
陣っていうほどいるの?
をるちゃんだけでやってると思ってた
最終的にはWalterタンの鶴の一声で決まってる感があるけどw
議論はニュースグループとかでみんなでしてるし
コンパイラもオープンソースだろ
みんな開発に参加しる!
純正コンパイラはプロプライエタリじゃねえの?
やっぱgdcじゃだめ?w
純正も完全なオープンソースにならねぇかな
俺、プロプライエタリって言えないんだよなあ。
客先とかで絶対に噛む。
クローズドでいいじゃんねぇ?w
>>635 まず「プロプラ」って言ってみ。それが言えたら、その嬉しさのままに「言えたり!」って
叫んだら良いよ。これで君も「プロプラ言えたり!」。
プロペラになった
2.0 対応の htod ほすぃ・・・
mixin(include!("hoge.h"));
そのincludeはまじであるのかい?
ねえよ。
>俺、プロプライエタリって言えないんだよなあ。
>客先とかで絶対に噛む。
>このスレを見ている人はこんなスレも見ています。(ver 0.20)
>発音を良くするスレ2 [ENGLISH]
warosu
マングリングって言葉の響き、エロいよな
tangoは2.0様子見っすか
なんつーかWalterタン
ライブラリとかまわりと協調する気
ゼロの気がするんだが気のせいか
そらそうだろ。
そこら辺を意識して負の遺産が山積みの言語にするのは
Walterタンが D に求めているものではないだろう。
そして正の遺産も積まれないわけですね
賽の河原だな
「完成」 すれば、そこからいくらでも正の遺産は積めるだろう。
それまでは実用できないってのは、今までで証明されている。
まあ問題は、いつ 「完成」 するのかだな・・・。
せめて「完成」してから1.0を名乗って欲しかったのは俺だけではあるまい
もうなにがなんだかよくわからナス
どうせ「完成宣言」も永遠にしないんだろ
最後の一行は厨臭い願望だな。
D言語に完成なんて求めてどうするんだ?
こいつは永遠の実験言語だってば
その恐れはあるが、完成しないともったいないとは思う。
Walterタンが生きている限り変わり続ける希ガス
しかし砂上の楼閣じゃ使い物にならない罠
なんかタチの悪い社会主義みたいだw
さすがに8年経とうとしてるし
Dが世の中に受け容れられるかどうかはこのへんが正念場だと思う
カンファレンスで今後のビジョンも示されるらしいから期待して待つよ
リリース版とRC、BETAを分ければいいのに。
名前を分けたって物凄い勢いで変わることに違いはあるまい。
この流れ……
飛鳥配列を思い出す
>>657 永久革命ってやつだね
政治でやられると確かにメチャメチャタチ悪いw
でもプログラム言語だけのことならこんなのも世の中に一つぐらいはあってよさそうな気もしてきたw
>>658 今の段階だと分けるにしても使用者層が少なすぎるし
リリース版だからといって人に勧められるほど安定化してるわけでもないと思う
2.x系がベータという位置づけなのかもしれないけど
>>661 ユーザーとしては困るw
カンファレンスがシアトルで開催ってのは企業等へのアピールという
思惑もあるだろうからサポート企業が出てきてくれることに期待
個人的にはWolframタンとかも呼んでホスィw
1.xでさえ人柱専用なのに2.xはさらに仕様検討用だからなw
2.xで何か作ることを考えるのは早すぎる
やるなら1.xにしなされ
ところで・・・
Digital Mars社のTシャツにマックスウェル方程式柄があるんだが
ありゃDigital Marsとなんか関係あるのか?w
何かシンボル的なものなのかね
そういえば、物理屋に言わせればマクスウェル方程式ってスゲー美しいらしいが
アインシュタインも理想としたと聞く
ウォルたんの趣味?
マクスウェル方程式の真の美しさは
四元ベクトル形式じゃないと分かんないよ。
>>664 たんにクールだろってことだと思うけどなw
>>668 「四元ベクトル形式」っていう言葉ははじめて聞いた気がするけど
テンソル形式のことだよね?
特殊相対論までならそれでもいいんでない?
と思いはするけどたしかに共変形で書いて欲しかった気もするw
class A {
A *getthis() {
return( &this );
}
};
int main()
{
auto a= new A();
printf( "%p %p", a.getthis(), &a);
}
thisのアドレスとインスタンスのアドレスが違うのは、なんでだろう
クラス内でインスタンスのアドレスはとれないもんかな
違って当たり前だろう・・・。
D 1.017
>>671 違う理由はなんとなくわかったんですが、
インスタンスのアドレスとれないでしょうか
そのアドレスもGCでかわる可能性があるんでしょうか
インスタンスのアドレスとって、それを何に使いたいの?
使い道がよく分からないんだけど。
>>670 class A{
void *getthis(){
return cast(void*)this;
}
}
void main(){
auto a= new A();
printf( "%p %p", a.getthis(), cast(void*)a);
}
1.017の.initの変更ってどういうこと?
> The .init property for a variable is now based on its type, not its initializer.
変数を使った .init プロパティは、
その初期化に使った値ではなく、
その型に対して使った場合と同じ値
(変数を初期化しなかった場合に入れられる値)になりました。
うわぁきっつぅ・・・
かなり書き直しいるなあ
1.x系でもこれかwww
なんだってまた今更こんな変更が・・・w
ちなみになんかホームページすごい見にくい気がする
コンパイラ履歴のolder versionsからのリンク先が
1.0までで終わっているのはなんで?
一応誤訳じゃないか実行して確かめてけれ。
俺は Mac だから_。
682 :
677:2007/06/27(水) 21:29:55
やっぱりそういうことか(;´Д⊂)
自分を信じたくなかた・・・テラヒドス
>>680 1.0系と2.0系で別のページになっている
上のほうに切り替え用のリンクがあったはず
1.0系のchange logにはもっと古いバージョンのも書いてあるよ
俺は元々変な仕様だなあと思ってたから
この変更には納得できる。
>>682 漏れも信じたくなかったw
んで別のページになっているのはわかるんだけど
例えば2.0系のコンパイラのページで
上のolder versionsの最新がD 1.00で止まってるのは
なんか使いにくいなと思ったもので・・・
この場合だと1.00以降のログが表示されないとまずくない?
>>683 そっか 漏れはゲームつくるときに初期値化すぐできて便利だなー
とか思っていたんだが・・・orz
ちょっと処理の巻き戻しするときとか便利だったんだが、奇妙な機能ではあったから仕方ないな。
型の初期値なんてメリットあんの?
typedef int myint = 7;
とかやってる型の初期値とるときは有用なんじゃね
そうかtypedefすればいいのか
>>687 それ知らんかったわ。
さすがウォルターたんだ
そんなことができたのかw
すげーや。
DMD 2.001 リリース
New/Changed Features
* Added D_Version2 predefined identifier to indicate this is a D version 2.0 compiler
* Added __VENDOR__ and __VERSION__.
* Now an error to use both const and invariant as storage classes for the same declaration
* The .init property for a variable is now based on its type, not its initializer.
Bugs Fixed
* std.compiler now is automatically updated.
* Fixed problem catting mutable to invariant arrays.
* Fixed CFTE bug with e++ and e--.
* Bugzilla 1254: Using a parameter initialized to void in a compile-time evaluated function doesn't work
* Bugzilla 1256: "with" statement with symbol
* Bugzilla 1259: Inline build triggers an illegal error msg "Error: S() is not an lvalue"
* Bugzilla 1260: Another tuple bug
* Bugzilla 1261: Regression from overzealous error message
* Bugzilla 1262: Local variable of struct type initialized by literal resets when compared to .init
* Bugzilla 1263: Template function overload fails when overloading on both template and non-template class
* Bugzilla 1268: Struct literals try to initialize static arrays of non-static structs incorrectly
* Bugzilla 1269: Compiler crash on assigning to an element of a void-initialized array in CTFE
* Bugzilla 1270: -inline produces an ICE
* Bugzilla 1272: problems with the new 1.0 section
* Bugzilla 1274: 2.0 beta link points to dmd.zip which is the 1.x chain
* Bugzilla 1275: ambiguity with 'in' meaning
* Bugzilla 1276: static assert message displayed with escaped characters
* Bugzilla 1277: "in final const scope" not considered redundant storage classes
* Bugzilla 1279: const/invariant functions don't accept const/invariant return types
* Bugzilla 1280: std.socket.Socket.send (void[],SocketFlags) should take a const(void)[] instead
* Bugzilla 1283: writefln: formatter applies to following variable
* Bugzilla 1286: crash on invariant struct member function referencing globals
{
int a = 10;
a = 20;
printf("%d %d %d",a, a.init, int.init); // 20 0 0
}
なんで a.init == ini.init に変えちゃったんだろう
>>695 お世話になったことは無い身ですが、
メソッド名はDのスタイルガイドに従ってlowerCamelにしませんか。
うほ スタイルガイドだと定数名はすべて大文字なのか
なんで先頭文字だけ大文字にしないのかしら?
先頭ですよってわかりやすいから?
C のマクロ時代からの名残なんじゃないかな。
Javaもそうだしな。趨勢に合わせてくれる事はいいよ。
utf8_euc()とかはlowerCamelじゃなくていいよね?
695じゃないけど気になった。
lowerCamelにするならutf8Encだな。
メソッド呼び出しを英語として読み下したとき、
主語->動詞の動詞が大文字になっちゃって違和感があるんじゃなかろーか。
encodeToUtf8
utf82eucだろ
普通は主語がオブジェクトになるんじゃないかな。
UTF-82 って凄いですね><
いや、オブジェクトは目的語になることもあるか。
typedef ubyte[] EucString;
EucString toEuc(char[] utf8_string);
とかが綺麗そうだけどな。
>>708 char[] toUtf8(EucString euc_string);
を用意しても、EucString型オブジェクトのプロパティっぽくは使えないんだな…
オブジェクトのメソッド名は動詞で始めるべしと言うけれど、関数の場合どーしたもんだろうね。
Dの場合 method(Type[] arg) が arg.method() とも書ける仕様があるけど、
動詞で始めた場合、結局 arg.method() と書かないと不自然になっちゃうのね。
charをUTF-8でない文字に使うのは誤り?
前置詞で終わるようにするとか。
indexOf()とかinsertAt()とか?
俺は、それっぽければいいと思ってるので、英語の文法にはあまりこだわらないな。
エスペラント語にすれば順序気にしなくて済むよ
いちいち変数を格変化させるわけですね。
三角関数とかベータ関数とか正規分布関数とか動詞にはできないなあ。
culcSin(double)
calc
クルックー
>>715 Jes. 下四つとも一緒になるし。
int hogeo, fugeo;
c^uHavas(hogeo, fugeon);
c^uHavas(fugeon, hogeo);
hogeo.c^uHavas(fugeon);
fugeon.c^uHavas(hogeo);
alias作るテンプレートがほしいなw
スペルミスorz
予約語以外は日本語も通るから日本語でやってみようぜ。
予約語もaliasすれば大丈夫。
alias real 実数;
実数 正弦(実数 角度);
というか、Dは日本語も使えるんだから、
alias char[] 文字列
文字列 フルパスからファイル名だけを取得する(文字列 フルパス)
でいいじゃん。
クラスの場合なら、
class 固定小数点数 { ... }
文字列 = 小数.を文字列に変換();
小数.の整数部 = 整数;
とか。
なでしこ顔負けだな。
演算子とかが反って打ち込みにくいような気がする。
たのしそうだwwwww
なんかネタでそういうの組んで見たくなったwwwww
このワクワク感は前スレの演算子オーバーロード以来だな。
>>727-730 wwww
伏線上手すぎるだろ。
なんだこの少年漫画ばりの盛り上げ方は。
ifelse.d:1: invalid UTF-8 sequence
ifelse.d:1: invalid UTF-8 sequence
ifelse.d:1: unsupported char 0x81
とかボロボロエラーが出るんだけど、俺だけ?
ソースコードの文字コードをUTF-8に直す作業に戻るんだ
いや、UTF-8 なんだけど。
環境は MacOSX GDC 0.23 (D 1.007)
例えば 「もし」 とか定義しようとするとあかん。
Macじゃしかたないのでは
Mac とか関係あるのか?
最初の2文字は ASCII 文字だなあ。
とりあえずソースは
>>737 にある。
Windows だと大丈夫なのかな?
738だけどWindowsでもだめだったよ
1.014
そうか・・・。じゃ、本格的なバグか?
ifelse.dの[、]、io.dの[「][」]を削除したらコンパイルできるようになったよ
@Win2k, dmd1.015
お、そいつらは「普遍基本文字」とやらに含まれないのかな?
まあ、Mac だとそれ以外でもエラーになるけど。
DMD1.014 + Codeblocks @ Vistaで試してみたんだが、
メジャーな言語はだいたい通る。
西欧語(ローマ字、キリル文字、ギリシャ文字)は特に問題なし。
日本語や中国語は約物が通らない。
アラビア語は母音記号やシャッダ、スクーンが入るとNG。
Vistaだと自動的に右から左に書く書式に直されるので、使いづらい。
インド諸語や記号類はだめだったなあ。
シグマはいけたが、ルートはだめ。
個人的にはギリシャ文字が通るのは結構有難いな。
要するに、基本的に記号類はアウトってことか。
コンパイラ的にアウトにしないとなんか不都合でもあるのかしら?
全角の演算子が識別子に使えたら不都合ではあるだろうね。
>>750 ISO/IEC 9899:1999 (E)って書いてある訳だが?
あ。確かに。
すんませんした
better C が欲しかった俺にとって D は結構良い選択肢なんじゃないかと思えて来た。
C のライブラリがそのまま使えて、C++ よりコンパイル速度が速いらしいというのは良いね。
ああ、なんかDigitalMarsのCライブラリにバグがあるような気がしてきた
え でもあれってポーティングしただけじゃないの?
やっぱDが一番使いやすい言語だな。
そういやopIndexで多次元配列的なことはできるの?
>>757 > i = a[5,6,7]; // i = a.opIndex(5,6,7); と同じ
> a[i,3] = 7; // a.opIndexAssign(7,i,3); と同じ
とか
まじDつかいやすいな
delegate は一度使うと癖になるな
delegateはC#のパクリ
ただのクロージャオブジェクトだろ。
そもそもDにオリジナルの新機能ってなんかあるの?
ないよ。
C++0xの案も含めた様々な言語の良いとこ取りに過ぎない。
"\©" こういうの採用したプログラミング言語って先例あるか?
珍しいが新機能ってほどでもないなw
良いトコ取りを良い感じにまとめてくれた言語が 5 年毎に作られたら嬉しいな
10年ごとでいい
1つあれば十分。
いいや4つくれ
2つでじゅうぶんですよ
ちなみにコードの可読性ってJavaより低い気がするんだけど漏れだけ?
慣れの問題
どちらもC系で微妙に似ているから逆に違和感がある
あ、↑の二行目はあくまでオレの場合だから、他に理由が無いとも限らんが
まあ、標準ライブラリの恩恵とかはあるかも
ネイティブで1つ、
インタプリタで1つ、
IL で1つ、の合計3種類あれば十分だな。
ついでに、それぞれ手続き型、関数型、論理型の3種類で、
合計9個の言語があればいい。
ネイティブでもsandbox化できるからインタプリタもilもイラネ。
手続き型を単純にしたのが関数型だから関数型イラネ。
>>758 それできるの?
a[5][6][7]
とかがいいんだけど
できんこともないが。
struct S{
struct S1 {
struct S2 {
int i, j;
int opIndex(int k) { return i * j + k; }
}
int i;
S2 opIndex(int j) { return S2(i, j); }
}
S1 opIndex(int i) { return S1(i); }
}
void main() {
writefln(S()[2][5][3]);
}
>手続き型を単純にしたのが関数型
???
782 :
777:2007/07/01(日) 16:07:52
手続き型にも関数あるじゃん。
偶然、名前が同じだけだろ。
関数型の関数という言葉と、手続き型言語の中の関数を混同して勘違いする
人間がまだ居たのには驚いたけど、D言語とは全く関係無いしスルーの方向で。
実際の所、関数型の関数と手続き型の副作用のない関数は一緒な罠。
手続き型では普通高階関数とか作れねーだろ。
>>787 >一方、#関数を戻り値とする関数を書くことは難しい。 これは戻り値となる関数の実行時にその関数を定義した時点での環境が必要になる(クロージャ)ためである。
プログラミングにはまったく疎い人間が聞いてみるが
数学的な意味での関数(写像)を実際に実現できてる
関数のみで構成されてるのが関数型言語って理解でおk?
関数型言語は、関数を値のように引数に取ったり戻り値として返したりできる言語だと思う。
それってなんてdelegate
数学に当てはめようとするのは落とし穴
碌な事が無い
>>788 クロージャの実装なんて簡単だろ、常考。スタックの代わりをヒープから確保してespをずらすだけっしょ?
ただ最適化の面から属性で有効にするようにする必要はあるけど。
>手続き型を単純にしたのが関数型
まあ、何にせよ最初の↑は無いよな…
>>793 言語的にサポートされてない時点で無理がある。
見てて思ったが結局は言語レベルあるいはコンパイラレベルで
どこまでやってもらえるかって話に思えるが
その仕様の違いで手続き型と関数型というように分類してるってこと?
結局はどんなプログラミング言語でも他のプログラミング言語の
動きをエミュしようと思えばできるんだろ
手間がどんだけかかるかの問題であって
>>789 基本的にはそうかな。
基本的には引数と戻り値があるべきとしてるし、
基本的には同じ引数から同じ値を返すべきとしてるからな。
関数型は。
まあ、そこまで完全にやってる言語は少ないけど。
遅延評価はどうよ
lazy
>>796 プログラムの組み方の思想レベルでも違いはあるんだけど、
そう思っても大きな間違いはないと思う。
D はラムダをサポートしてるから、
あとは関数を動的に作って返せるようになれば
関数型を名乗っていいと思う。
>>788 よくわからんのだけど、デリゲート返すだけじゃあかんの?
>>802 delegate内で使う親関数の変数をヒープに取れば同じ…かな?
デリゲートの環境ってスコープを抜けると無効になってしまうのか
何で D はクロージャを入れなかったんだろう
>>804 そういうの気にせずにクロージャっぽくつかってたんだが、ダメだったのか・・・?
ニュースグループで聞いてみたら?
クロージャが無いのは仕方がないとして、クローズしてない物をクロージャと呼ぶのは
やめて欲しいな。
話が変わって恐縮なのだけど、D2.0で、final(オーバーライド不可能)かつ
const(メンバを変更しない)なメンバ関数って作れないの?
class A{
// conflicting storage class const
final const int func(){ return 1; }
}
int main(in string[] args){
auto a = new A;
return 0;
}
>>808 class A{
final: const int func(){ return 1; }
}
とすると通るから、バグだろうな
バグを直してもそれでまたバグが増えるんじゃあ・・・・
いつも思うんだけどこういうのって系統的なチェックの方法とか
ノウハウってないの?
っ DStress
814 :
808:2007/07/01(日) 18:10:35
2.001です。なるほど、バグか。サンクス。
やっぱまだ2.0ははやいか……
struct Vertex {
float[3] pos;
};
Vertex a= {
pos:[0.0f, 10.5f, 10.5f]
};
うう・・イニシャライズできない・・・
>>813 サンクス Linuxしかないのか
チェックエラーでまくりワロタ
Walterタンはこれを使っているのかな?
>>814 報告よろ
ごめんなさい、aをstaticにしたらOKでした。
>>816 試してないけど
Vertex a=Vertex([0.0f, 10.5f, 10.5f]);は?
ごめんなさい、aをstaticにしたらOKでした
>>817 Walterタンはこれとは別に持ってたと思う。
連投ごめんなさい
>>819 それもOKでした m(_ _)m ありがとうございます
823 :
808:2007/07/01(日) 18:40:58
>>817 悩むことを言ってくれるな。
英語で文章書けねぇw
誰か代打ち頼めませんか?
>>823 うまく行ったかしらんが、bugzilla投げといた。
825 :
808:2007/07/01(日) 19:13:30
D 1.018
D 2.002
What's New for D 2.002
New/Changed Features
* Renamed linux library from libphobos.a to libphobos2.a
D 1.018 はバグフィックスのみ。
バグフィックス部分は同じだな。
共通部分のみの修正か。
仕様が落ち着いたのかな
そう思うとちょっとさみしい
絶対そうじゃないけどなw
D2.002で、
struct Foo {
int f;
}
void add( ref final scope const Foo a)
{
logprint( &a );
}
Foo foo;
add( foo);
コンパイラが落ちます
ところで構造体の参照渡しで、
その引数の変更の無いときの修飾子はどうしてますか?
void add( ref in Foo a) なんてあってもいいような
むしろinがその役割を果たしたらいいと思う。
ていうか既にinはfinal scope constを意味するんだが?
コンパイラが落ちなきゃいいだけだよな
>>833 incompatible parameter storage classes
やってみたが、仕様としてゆるしてないみたい
コンパイラがエラーを出す場合、本当にエラーなのかコンパイラのバグなのか見極めないとダメだからな。
じゃ見極めた人 結果をどうぞ↓
とりあえずコンパイラが落ちるのはコンパイラのバグだと思う。
うむ 真理だ ところで誰かこのバグは報告したのか?
831ですが、してません。
昨日やろうとしたのですがちょっと怖くなって・・
誤爆?
動的配列やオブジェクト引数は元々参照渡しされますが、 これらについては、 in/out/ref は参照に対して適用され、中身には影響しません。
For dynamic array and object parameters, which are passed by reference, in/out/ref apply only to the reference and not the contents.
とドキュメントにあるんだが、void add( ref in Foo a)って必要なん?
void add(in Foo a)でfinal scope constな参照渡しなわけだし。
あ、構造体か。すんませんした。
ポインタ渡しでinを指定か?
>>831 構造体は呼び出し側に変更を加える必要がない場合、普通に値渡しすればいい。
可能な場合、コンパイラが参照渡しに最適化する。
scope変数のオブジェクトをスコープ外のscope変数に代入できるんだが、これはこういう仕様なのか?
845 :
844:2007/07/04(水) 11:11:53
ああ、外側の変数はscope変数じゃなくてもいいのか。
スコープ外へのコピーはエラーにして欲しいな
なぜ?
>>846 バグの素にしかならないと思うんだけど、どうよ?
class C { void func(){ } }
void main() {
C a;
{
scope C b = new C;
a = b;
}
if(a !is null) a.func(); // Error: Access Violation
}
げげ
たしかに、それはちょっとおかしい
つぶしてもつぶしてもまた出てくる
それがバグのバグたる所以ですよ
1つバグが見つかったら30はあると思え。
C c;
void f(scope C d) {
c = d;
}
こんなこともできるわけだが、これはバグだよな?
そのCが構造体とかtypedefあるいはaliasで値渡しならセーフじゃない?
そりゃデストラクタのない型ならscopeの影響を受けるわけはないが…
>>221 で
>int[] g;
>
>void foo(in int[] a)
>{
> a = [1,2]; // error, a is final
> a[1] = 2; // error, a is const
> g = a; // error, a is scope
>}
>
>引数でこれらの操作のどれかをしたいのなら、"in"を使用しないでください。"in"を使うことはD 1.0のコードでは特に意味は無いので、それは後方互換になるはずです。
って書いてあるから、もろバグじゃないかな。
こいりゃバグだね
こいりゃ
こいりゃ ← じっと見つめると松井秀喜に見えない
電脳こいりゃ
にしこり というのが本名で、松井はリングネームだと思ってた
alias int* pint;
static if(is(pint X == X*) ){
pragma(msg, X.stringof);
}
これでintってなるなら、
alias const(int) cint;
static if(is(cint X == const(X)) ){
pragma(msg, X.stringof);
}
これとか、
alias const(int*) cpint;
static if(is(cpint X == const(X*)) ){
pragma(msg, X.stringof);
}
これもintになるべきじゃないか?って思うんだけどどう思う?
static if(is(int X == const(X)) ){
pragma(msg, X.stringof); // int
}
const()は完全に無視されているようだな。
( ^ω^)
うはwwwwおkwwwっうぇwwwwwwwwwwっうぇwwwwwwwwwwwwwwっうぇ
D 2.003
><
さっきうpだてしたばっかなのに
ダイブミサイルTEEEEEEEEE
スカルマン神
鏡寝る予定だから切らないほうが有効活用・・・って切れた\(^o^)/
なんという誤爆の嵐・・・いったいなんなんだ
2.003 消えてるな
What's New for D 2.003
Jul 1, 2007
New/Changed Features
* Added 0x78 Codeview extension for type dchar.
Codeview extension...?
なんだそりゃ?
デバッガ用のタイプレコードじゃねえの?
よく分からんけど、デバッガ関係の話っぽい
dcharの型情報をCodeview形式で埋め込むようにしといたとか、
そういう感じの話じゃね、たぶん。
● ●
● ● <ちょっとびっくり機能>
● ●
● ● 全体をコピペすると、
● ● 使用中のWindowsの
● ● バージョンが表示される。
● ●
● ●
Microsoft Windows 95 OSR2
● ●
● ● (板によって非対応の場合あり)
● ●
● ●
● ●
● ●
● ●
● ●
macOS X
Mac OS X 10.4.10 (i386)
DOS (v1.010)
● ●
● ● <ちょっとびっくり機能>
● ●
● ● 全体をコピペすると、
● ● 使用中のWindowsの
● ● バージョンが表示される。
● ●
● ●
Microsoft Windows 95 OSR2
● ●
● ● (板によって非対応の場合あり)
● ●
● ●
● ●
● ●
● ●
● ●
bindの使い方間違ってますか?
dmd2.002
C:\...\dmd\src\phobos\std\bind.d(837): declaration _D3std4bind9EmptySlot6__initZ forward declaration
import std.bind, std.stdio;
void foo(int a, int b) {
writefln(a,"*",b,"=",a*b);
}
void main() {
foo(10, 5);
bind(&foo, 10, 5)();
bindAlias!(foo, 10, 5)();
}
bindAliasの使い方間違ってね?
間違ってるみたいですね
でも bindAlias をコメントアウトしてもエラーは変わらないような
1.018 / 2.002 どちらでも bind が使えなくなっているみたいですね・・・
配列のプロパティっぽく関数呼び出す機能壊れてる?
import std.stdio;
void func(int[] a) { writefln(a.length); }
void main() {
int[] a = [0, 1, 2];
a.func; // Error: no property 'func' for type 'int[]'
}
括弧付きじゃないと呼び出せないと思うけど、
そういえばこれじゃあプロパティ風じゃないな。
>>889じゃないけど前からそうだったような希ガス
しかしこれが仕様とも思えないような・・・
ほんとだ呼びだせないようになってる。
前から括弧付きじゃないと呼び出せなかったと思うんだが
配列のプロパティ風のやつは前からだよ
普通に仕様かと思ってたけど違うのかな
クラスメソッドをプロパティ風に扱うのはあったけど配列については出来なかったような。
D言語の精神にのっとればあくまで「使いやすい」仕様であるべきで
そう考えるとなんでこういう仕様になっているのか俺にはわからない
使い勝手以前に「わかりづらい」のはいただけないよな。
普通のメンバメソッドなら括弧いらないのに、プロパティ風呼び出しだと括弧ないとエラーになるのは一貫性に欠ける気がする。
というわけでどなたかニューズグループででも聞いていただけないだろうか
まあ単純に配列型のプロパティの中に関数風呼び出しをするものがないので、
配列.関数風()の解釈に曖昧さがないということだとは思うが。
length(int [] hoge) {}
int[] foo;
foo.length;
は目も当てられんだろ。
そんなものエラーにしてしまえば…
なるほど それなら仕方ないか
文法に一貫性がないのが困ったなぁ。
せめて.sizeと.length()だけならいいのに。
一貫性を優先するなら
>>899の言ってるようにエラーにしてしまうか・・・
他にいい解決策はないものか・・・・
プロパティですよってわかる記号を付けるとか・・・・
それも変か
エラーでいいがな
lengthとかのプロパティに使ってる名前の関数なんていらんだろ
プロパティとわかる記号ってfoo@initにしちゃうとか?
うーん
なんというperl記号
906 :
904:2007/07/09(月) 21:45:36
関数をプロパティ風に使えるようにするなら
やっぱり括弧なしでも呼べるようにして
あいまいだったらエラーにするのがいいと思う
俺もそう思ってた (笑)
ダメだ
同じ構文にしてよと言おうと思ったが英語に挫折したw
むりぽ
プロパティってオーバーライドできないんだっけ?
できるはずだよ。普通のメンバ関数と同じ。
2つ目の引数付き関数でlengthプロパティをオーバーライドしたら
a.length(3)とかでプロパティを呼び出すことになるの?
そうしたら
>>899のlengthを同じく2つ引数のある関数で定義しなおすと
結局は名前衝突が起こる?
なんかちょっと言いたいことが判らん。
オーバーロードとオーバーライド間違えてないか?
そか失礼
オーバーロードか
ていうかやってみればいいんじゃまいか
まぁ、プロパティなんてウンコ臭いものはやめて素直にメソッドをつけりゃいいのでは?
()なんてコードアシストが使えるようになればレンチン状態で入力できるし。
だぁね
プロパティはメンバ変数とsetter/getterメソッドを同じ構文で
呼び出せるのが利点だから、配列についてプロパティ形式で
呼び出せる必要は特にないんだよね。
むしろ、いまあるプロパティのうち、sortとかはメソッド形式にしたほうが
いい気がしないでもない。
sortとかrehashとかプロパティってのはすごく気持ち悪い
>>918に同意
int[] v = [3,2,1], w;
w = v.sort; // 最初間違ってこんな感じで書いてたぞ
Ruby だとカッコ省略できるし、
それで慣れてると、カッコなしでもありかなとは思う。
かっこなしだとVBみたいで恥ずかしい
あーでも元から()省略できれば
writefln("Hello,world.".toupper.tolower)
こういう風にスマートに書けるんだけどなぁ・・・
2バイト削るよりも可読性を向上させてくれ
Ruby の()の省略がキモイと感じてる俺としては、
>writefln("Hello,world.".toupper.tolower)
は嫌過ぎる
要は趣味の問題ってことだね
趣味の言語ですから
>>924 関数呼び出しとデータアクセスが同じ記法なのは俺もキモイと思うけど、
名前次第で我慢出来なくもない気もする。プロパティっぽい名前なら
ギリギリセーフ。array.sort は嫌だけど、array.sorted なら許せる。
あー、でもやっぱキモイな。
>>919の書きかたって間違ってるんだ^^ 知らなかった
ソートしたものを返すんじゃねーの?
"sort in place"
void main() {
const(int)[] v = [3,2,1], w;
w = v.idup.sort;
writefln(w);
}
invariant型の配列をソートできるんだが、いいのか?
vそのものを変えるわけじゃないからいいんじゃないの?
むしろそれができないとなるとおかしいように思うんだが・・・
idupのことだろ。
>>928 >>930 int[] v = [3,1,2];
v.sort;
writefln(v); // [1,2,3]
>>931,933
w = v.idup.sort;
^^^^
これをソートできるのがおかしいって言いたかったんだけど。
w は表示するために代入してるだけで深い意味はない。
void main() {
writefln("foobarbaz".sort);
writefln("foobarbaz");
}
こういう例のほうが判りやすいか。
936 :
デフォルトの名無しさん:2007/07/11(水) 16:45:32
>>933 invariant(int)[] v = ([3,1,2]).idup;
v.sort;
writefln(v); // [1,2,3]
なるほど
invariant型がin placeでソートできるっていうのは仕様なのかな?
そうは思えないが・・・
D2はバグだらけで報告する気になれん。
どれがバグでどれが仕様でどれが未実装なのかもよくわからんし。
940 :
デフォルトの名無しさん:2007/07/11(水) 17:25:33
>>938 sortの引数がinoutだと考えれば変ではないのが難しいところ。
参照が取り替えられてるわけではないだろ。
D2のバグを議論するのは時期尚早と出ました
ところで今たまたま手元にあったdmd1.015に戻してみても
やっぱりbindが動かないみたいなんだが
どの時点で動かなくなったのかな
944 :
デフォルトの名無しさん:2007/07/11(水) 17:46:27
>>941 試してみたけど参照は変わってないね。こりゃどう考えてもバグ。
ちょっと寝てくるから、2.010出たら起こしてくれ。
2.004マダー?(・∀・)っ/凵チンチン
2007ならもうきてるよ
どうしてプライベート仮想関数が禁止されているんでしょうか
NVIパターンで使おうと思ったらエラーが出たのですが
ちなみにこんな感じです
class A {
public void foo(){ doFoo(); }
private abstract void doFoo();
}
class B : A {
private void doFoo(){ ... }
}
privateメンバは子クラスが認知できない関数。
したがってオーバーライドすることはできない。
そういう場合はprotectedを使うべし。
返信どうも
そうなるとC++では可能な理由はなんなんでしょうね
C++ではプロテクションに関わらずvirtualをつけると仮想関数にできるけど、
Dではデフォルトで仮想関数で、private関数は仮想関数にならない。
ってところか。単に設計思想の違いだと思うが。
ああデフォルトで仮想関数・・・
実際
>>951でprotectedにしてもなんら違いはなさそうですもんね
そろそろ更新こないかなぁ・・・
とにかくphobosを全部動くようにして欲しいぞ
とうとうTango 0.99RC3のロードマップが100%になった
Tango2.0マダー
普及もしてないのに2.0って・・・
きっと3.1から普及しはじめるよ。
Tango95は爆発的に普及するが、88年後の話を今からしてもしょうがないんだ。
Tango 1.0と2.0の違いってD1.0向けか2.0向けかっていう理解でおk?
964 :
959:2007/07/17(火) 09:53:01
>>963 本当にあるかどうかはおいといて、俺はそんなつもりでいいました
次スレの季節ですね
const(char)[]がキモいと思ってるのは俺だけ?
当分2.0にはしたくない・・
わかりやすいとおもうなぁ
const char[] foo = "foo"; // 1.0
を
const(char)[] bar = "bar"; // 2.0
と書くと億劫だけど
string boo = "boo"; // 2.0
と書けばいいんだよ
Tango 0.99RC3リリース
ウォルターは日本語をハックしてこのスレを見るべきだな
気持ちはわかるが
むしろ俺らがアナウンス見に行くべきだろ常考
constめんどくさー
readLineの返り値がconst付きって・・・
そりゃねーよ
どこから来たかわからない書き換えられる配列を受け取るのは不安じゃないか
かといってconst(char)[]を返されても不便だから
配列を返すときはクラスのメソッド側が.dupして返すべきだと思うんだ
場合によってはクラスのカプセル化を破壊わけだし
ちなみにconstとinvariantの違いって何だ?
把握してないんだが
invariantはそこにあるデータは絶対に変わらない。
constはそこにあるデータを変えることができない。
invariantは誰も変えることができない。
constは俺が変えることができない。
>>972 確かに、readLineは新たに配列をnewして返すような実装になってるから、
constはいらないかもしれん。
>>975,976
把握した・・・が
invariantに既に入っているデータは誰(?)が入れたんだ?
語弊ありそうな予感
プログラム内ではってことか
constは関数内とかの狭い領域で書き換え不可ってことか?
あれ?
リテラルか、invariant なデータで初期化された変数が invariant じゃないかな。
>>978 ____
/__.))ノヽ
.|ミ.l _ ._ i.)
(^'ミ/.コンパイラ
.しi r、_) | invariantはわしが育てた
| `ニニ' /
ノ `ー―i
constは、C++でも仮引数がconstとか、const関数とかよく使うだろ。
そのスコープにおいて副作用を起こす操作が出来ない。
>>980 しかし、配列リテラルはinvariantではない。
あれ
_d_assert、オリジナルがつくれないぞ?
D2.002っす
D2.0のバグの話は無益だぜ
バグだらけだから
仕様検討がいいよ
更新こないなぁ・・・
実務で使用されること無く2.0へ・・・
JCPみたいなコミュニティ作って預けちゃえばいいのに
把握した
もっと言語仕様をシンプルにできないものか。
>>988 っ Brainfuck
言語をシンプルにしすぎても書きにくくなるんで、
コードを書いたり読んだりするときの負担が最小になるよう、
うまくバランスの取れた設計が求められるかな、と。
トリック頼みになるところは言語使用で策定して欲しいというところはある。
複素数リテラルとかは、言語使用は複雑になるが、
クラスで実装とかやりたくないし。
次スレ