D言語 Part13

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
プログラミング言語 D について語るスレッドです。
過去スレは >>2

■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)

■コンパイラ
ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ)

■参考URL
ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究)
ttp://dsource.org/ (dsource)
ttp://www.sun-inet.or.jp/~yaneurao/dlang/
ttp://wisdom.sakura.ne.jp/programming/d/
2デフォルトの名無しさん:2007/04/25(水) 20:19:17
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'-イ> ',
4デフォルトの名無しさん:2007/04/25(水) 20:32:31
関連スレ

D言語なら俺に聞け
http://pc11.2ch.net/test/read.cgi/tech/1108172110/

D言語を広めるスレ
http://pc11.2ch.net/test/read.cgi/tech/1175432606/

D言語は多分コケると思っている人の数→
http://pc11.2ch.net/test/read.cgi/tech/1136288019/

【次世代言語】D言語でOSを作ろう【Monaの移植?】
http://pc11.2ch.net/test/read.cgi/tech/1128794438/

バイナリをゲロる言語の魅力って何?
http://pc11.2ch.net/test/read.cgi/tech/1160869311/

その他リンク
【Java/C/PHP/Perl/Ruby/Python/TeX】Eclipse M22
http://pc11.2ch.net/test/read.cgi/tech/1168166588/

eclipseってそんなに良いか?【エクリプス】
http://pc11.2ch.net/test/read.cgi/tech/1099300344/

統合開発環境Eclipseプラグイン開発QA
http://pc11.2ch.net/test/read.cgi/tech/1081517094/

"Code of the Nerds" Digital Mars C/C++
http://pc11.2ch.net/test/read.cgi/tech/1044210976/
5デフォルトの名無しさん:2007/04/25(水) 20:45:05
6デフォルトの名無しさん:2007/04/25(水) 20:47:31
7デフォルトの名無しさん:2007/04/25(水) 21:59:23
キタ━━(゚∀゚)━━!!!!
     (i_i)
     しJ
8デフォルトの名無しさん:2007/04/25(水) 22:09:26
 。  + 『新スレ ぃ ゃ っ ほ ぉ ぉ ぉ ぅ ー !』    *     。       .
                 .             *        .
       *      + 。           。     +
           __   _     /ヾ_/ヽ        旦
        f ミv'´{ごづヾ彡   , '´⌒'v'ヾ      '´ ̄`ヽ       *     。
        ゙i´!(((从 从リ !   ifi」liリ゙l i!卯、   (((/从从 i
         !○(l ^ヮ゚ノ!| i * |i、゚ヮ^ |!)○゙ 。  从゚- ゚ ||○  *
        ノノ ヽ)本iO ヾ   Oi本(~/ヽ    OL介_(ノ  .      +
  ガタン||| ((´ く/_i_iヾ  )) ||| /i_i_ヾ> ) )) ||| + /_|_|ヾ> |||ガタン +
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
    ロ リ 絶 賛 ! >>1 の ス レ 立 て に 超 感 動 !
9デフォルトの名無しさん:2007/04/25(水) 22:28:51
              /: : : : : : : : : : : : : : : : : `丶、
               / : : : : : : : : ‐- : :、: : : : :ヽ: : : : \
              {  ̄: : : : : : : : : : : : : : :ヽ、: : : ヘ: : : : : ヽ
              ,.ヘ: : : : : : : `丶 : : : : : : : : `く/ ヘ: : : : : :',
          /: : ヽ: : \: : : : : \: : -―: : : :`く: : '.,: : : : :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'´         ノ¨ ̄´
                 | ヘ ∨ ∨ ̄ ̄/  }         /
10デフォルトの名無しさん:2007/04/26(木) 10:48:21
Dの利用者ってロリヲタばっかりなん?
11デフォルトの名無しさん:2007/04/26(木) 12:44:06
D言語は未熟だから良いのです。
12デフォルトの名無しさん:2007/04/27(金) 04:39:05
                     /.::::;: -''´..:::,. -−- 、:::_\
                /.::::/..::::::,ィ ´.:::::::::::::::::::::::.....`ヾ、
                 , ′::/.:::::::::〃.::::::::::::::::::::::::::::::::::::::.....ヽ
               /.::::::/.:::::::::::://:::,、::::::::,:::::,、::,::::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
13デフォルトの名無しさん:2007/04/27(金) 04:49:28
死ねよ
14デフォルトの名無しさん:2007/04/27(金) 10:43:55
15デフォルトの名無しさん:2007/04/27(金) 11:02:40
過疎るもなにも、元から盛り上がってないだろ・・・
16デフォルトの名無しさん:2007/04/27(金) 14:52:14
gdcってGCの実装が悪いのか大きなファイルを読み込ませて処理させようとすると
すごく遅くなるんですけど、何か簡単に効率化できる方法ないですかね?
17デフォルトの名無しさん:2007/04/27(金) 16:23:44
いつの間にか1.014
ついに動的配列リテラル/構造体リテラルktkr
18デフォルトの名無しさん:2007/04/27(金) 16:33:12
>>16
おまえの実装が悪いだけだと思うが
なるべくnewを使わずに、確保できるものは最初から確保しておく
19デフォルトの名無しさん:2007/04/27(金) 16:33:58
>>16
一時的にgcを止めればいいとおも
20デフォルトの名無しさん:2007/04/27(金) 16:48:48
>>18
いやいや、巨大なファイルを読み込んでその一部を解析するプログラムで、
性能に響く部分は自分のクラスのnewは使ってないですよ。
間接的に
Stream file = new BufferedFile( filename );
foreach ( char[] line; file )
で呼んでるんで、これやめないといけないですかね?

>>19
ファイルが巨大なのでそれやるとメモリ不足になります。
一定期間ためてやっても性能上がりませんでした。
21デフォルトの名無しさん:2007/04/27(金) 17:58:51
>>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
22デフォルトの名無しさん:2007/04/27(金) 18:01:12
連想配列リテラルキタ━━━━(゚∀゚)━━━━ッ!!
23デフォルトの名無しさん:2007/04/27(金) 18:15:19
それで構造体リテラルってどうやって書けばいいんだ?
24デフォルトの名無しさん:2007/04/27(金) 18:17:22
25デフォルトの名無しさん:2007/04/27(金) 18:22:11
>>24
ああ、そこにあったのか。ありがと。

しかしこの書き方はなんか気持ち悪いな。
名前で指定できればよかったのに。
26デフォルトの名無しさん:2007/04/27(金) 18:23:20
つーか、これって前にも書けなかったっけ?
27デフォルトの名無しさん:2007/04/27(金) 18:24:23
opCallが不要になった。
28デフォルトの名無しさん:2007/04/27(金) 18:44:06
>>25
S(x: 1, y: 2) みたいな感じ?
29デフォルトの名無しさん:2007/04/27(金) 18:54:04
たしかにこれは気持ち悪いな。
static な opCall と構造体リテラル、優先して呼ばれるのは opCall っぽいしな。
どっちを使うか明確にできて、さらにメンバの名前で指定できたらうれしいね。
30デフォルトの名無しさん:2007/04/27(金) 18:57:33
久しぶりに嬉しいなあこの更新。

個人的には名前で指定するのは別の言語っぽくてあんま気分よくない。
というか、それなら普通の関数呼び出しも名前で指定できるべきじゃね?
31デフォルトの名無しさん:2007/04/27(金) 18:57:58
>>28
そうそう。Cの複合リテラルみたいに。

Size(10, 20) のどっちが幅か確かめるのにいちいちリファレンスなりソースなりを
確認しなきゃならんのはどう考えても非効率。ミスも出るだろうし
32デフォルトの名無しさん:2007/04/27(金) 19:02:27
最初は構造体リテラルで書いてたけど、
途中から、何か処理入れた方がいいからと opCall を実装する・・・
ということはありそうな話ではあるけど、
まあ、そういうのは構造体には向いてないか。

というか、この構造体コンストラクタみたいなものを
static opCall で実装してる部分に関しては
そろそろどうにかならんのだろうか。
もう、普通にコンストラクタ作れても良いと思う。

あるいは、ほとんどの状況下では
static opCall を使わなくてもいいような文法にするか。
初期値を指定できるようにして、
構造体リテラルで名前指定するようにすれば、
static opCall が必要になる状況は少ないと思う。
33デフォルトの名無しさん:2007/04/27(金) 19:04:47
関数の実引数を名前で指定できるのはVBだっけ?
あれは結構便利だと思うなあ。

Foo(/* hoge */ 0, /* fuga */ false);
Foo(hoge := 0, fuga := false);
34デフォルトの名無しさん:2007/04/27(金) 19:05:11
要するに、

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

みたいな感じ。
35デフォルトの名無しさん:2007/04/27(金) 19:05:38
>>30
>普通の関数呼び出しも名前で指定できるべき
オーバーロードが複雑になりそう。
#ってかvbの名前付き引数思い出す。
36デフォルトの名無しさん:2007/04/27(金) 19:08:19
>>34
4つめはいささか互換性を崩しすぎではなかろうか
37デフォルトの名無しさん:2007/04/27(金) 19:09:28
>>36
ん、どういう事?
38デフォルトの名無しさん:2007/04/27(金) 19:12:04
>>37
S(1) が通るのに S(a: 1) がエラーになるのは気持ち悪いな、と思っただけ。
39デフォルトの名無しさん:2007/04/27(金) 19:16:03
>>38
b を初期化すれば通る。

でも、そういや
>static X x = { a:1, b:2}; // c is set to 0, d to 7
では、値を指定してないところは 0 で初期化されるのね。
なら、b に 0 を入れる風にしてコンパイル通るようにした方がいいか。
40デフォルトの名無しさん:2007/04/27(金) 19:16:50
0ってよりint.initだとおも
41デフォルトの名無しさん:2007/04/27(金) 19:30:39
まあ、正確にはそうね。
42デフォルトの名無しさん:2007/04/27(金) 19:59:14
初期化の部分に合わせるなら
S { a: 1, b: 2 } とかいう文法もアリかもしれんな。

なぜ { } じゃなく ( ) にして、しかも : を排したのか、だが、
とりあえず実装しやすかったからなんだろうか?
43デフォルトの名無しさん:2007/04/27(金) 20:12:02
>>42
無名デリゲートリテラルと紛らわしくなる、ってことはないか。
44デフォルトの名無しさん:2007/04/27(金) 20:19:34
前に型が来るから大丈夫ってことはないのかな?
よー分からんけど。
45デフォルトの名無しさん:2007/04/27(金) 20:29:19
型というか、この段階だとシンボルか?
46デフォルトの名無しさん:2007/04/27(金) 21:34:37
const b = (["hoge"[]: true, "fuga": false])["fuga"];

感動した。。。
47デフォルトの名無しさん:2007/04/27(金) 21:48:20
ふがー
48デフォルトの名無しさん:2007/04/27(金) 21:51:31
二段
const b = ((["hoge"[]: ["foo"[]: 1, "bar": 2], "fuga": ["foo"[]: 3, "bar": 4]])["fuga"])["foo"];

しかし、これといって面白い使い方も思いつかんな
49デフォルトの名無しさん:2007/04/27(金) 21:58:07
const a = (["a"[]: true, "b": false]);
ができないとあまり意味無い気ガス。

それと何故か以下のが通る。
auto test = (["a"[]:true,"b":false]);
const a = test.init["a"];
static assert(a==true);
50デフォルトの名無しさん:2007/04/27(金) 21:59:10
添え字が整数の連想配列リテラルって、配列のイニシャライザと区別付かんじゃん。
将来的なこと考えると、失敗じゃないのかね・・・?

それとも、静的配列以外のイニシャライザは未来永劫に実装されないということだろうか。
51デフォルトの名無しさん:2007/04/27(金) 22:07:42
>>50
配列リテラルと配列初期化子が分かれてるところも問題だしなぁ。
連想配列リテラルは"test"dのように[1:"a",2:"b",3:"c"]aとするべきだと思う。
52デフォルトの名無しさん:2007/04/27(金) 22:09:33
["a", "b", "c"] と [0:"a", 1:"b", 2:"c"] は明らかに違うのでは。
53デフォルトの名無しさん:2007/04/27(金) 22:11:02
>>52
静的配列のイニシャライザでは同じであるにも関わらず、
その他のコンテクストでは違う意味を持っているところに問題があるのではないか?
54デフォルトの名無しさん:2007/04/27(金) 22:12:38
>>27
あ、そっかw
55デフォルトの名無しさん:2007/04/27(金) 22:13:26
>>53
ん?

int[3] = [0:"a", 1:"b", 2:"c"];

とか通るの?
うち Mac だからまだよー分からんのだが。
56デフォルトの名無しさん:2007/04/27(金) 22:13:59
変数名忘れた。まあいいや。
57デフォルトの名無しさん:2007/04/27(金) 22:17:16
>>55
static char[][3] a = [0:"a", 1:"b", 2:"c"];

intではなくchar[]だと思うが、staticな配列は添え字付で初期化できるよ。
58デフォルトの名無しさん:2007/04/27(金) 22:51:18
uuperl化してるなぁ
っつーか早く仕様堅めんとマジでPerl6の二の舞になるぞ
ヲルターたんの近くに誰か仕事の邪魔するスパイがいるの鴨試練
59デフォルトの名無しさん:2007/04/27(金) 22:57:04
>>57
あ、型も間違えてた。
適当に書きすぎたな。

そうか・・・。添字付きで初期化できたんだ。
そりゃマズいな。
60デフォルトの名無しさん:2007/04/27(金) 22:59:36
@ とか余ってるんだから有効活用すればよかったのにな。
61デフォルトの名無しさん:2007/04/27(金) 23:02:25
何でもできるからといって何でもやってしまうと良くない好例
62デフォルトの名無しさん:2007/04/27(金) 23:17:47
先駆的な言語だからその辺は問題無いでしょ。
63デフォルトの名無しさん:2007/04/27(金) 23:35:07
まずかったらなかったことにすればおk

ネストしてない無名構造体って書けたっけ?
64デフォルトの名無しさん:2007/04/28(土) 00:40:23
いや、無理
65デフォルトの名無しさん:2007/04/28(土) 00:40:38
連想配列って、中身のリセットできないんだよな
newできないからクラスの中に突っ込むみたいな使い方できないし
使い勝手がいまいち
まあ、ハッシュテーブルクラス自作しちゃったから別にいいけど
66デフォルトの名無しさん:2007/04/28(土) 00:48:43
こういうこと? これ以前話出てたよな

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);
67デフォルトの名無しさん:2007/04/28(土) 01:02:16
>>65
中身のリセットならaa=null;とかaa.remove(key)とかで事足りる気がする。
あと、クラスの中に入れたきゃ、
普通にメンバ変数にしときゃ問題ない気もする。

使い勝手がいまいちなのは、
外部イテレータが欲しいとか、
キーが存在しない程度のことでいちいち例外投げるなとか、
いろいろあるからまぁ同意。
68デフォルトの名無しさん:2007/04/28(土) 11:42:48
>キーが存在しない程度のことでいちいち例外投げるな
C#のNullableみたいなものがあれば使いやすくなるのかな。
C#使ったこと無いんでよく知らんけど。
69デフォルトの名無しさん:2007/04/28(土) 14:03:34
例外を投げるようにするなら、
せめて assoc.has(key) てメソッドくらい持っててホスィ……

Value* valuePtr = (key in assoc);
Value value = (valuePtr != null) ? *valuePtr : null;
とか怪しすぎる。

そういえば、D言語には「コンパイラ組み込みクラス」
という概念は無いんだろうか?
70デフォルトの名無しさん:2007/04/28(土) 14:12:52
Javaのintみたいなもののこと?
71デフォルトの名無しさん:2007/04/28(土) 14:17:45
>>69
if( key in assoc )じゃだめか?
72デフォルトの名無しさん:2007/04/28(土) 14:20:18
>>71
こうじゃね?
if(auto ptr = key in assoc)
  writefln(*ptr);
73デフォルトの名無しさん:2007/04/28(土) 14:21:57
普通に

TValue get(TKey, TValue)(TValue[TKey] aa, TKey key) {
    auto p = key in aa
    return (p != null) ? *p : TValue.init;
}

とかつくっときゃいいんじゃね?
74デフォルトの名無しさん:2007/04/28(土) 18:22:20
void main() {
  generics(519); // ここは定数でコーディング
}
void generics(int n) {
  dout.writefln(n);
  generics_!(n);
}
void generics_(int n)() {
  dout.writefln(n);
} 
>519
>1
いろいろ遊んでて途中でこういうコードがコンパイルできてたんだけど
出力もおかしいんですし、コンパイラ側のバグとかですか?
75デフォルトの名無しさん:2007/04/28(土) 18:29:27
519は定数だけど、
genericsの引数のnは定数じゃないんだから
テンプレートのint引数に使えちゃまずい、
ってことか。
7669:2007/04/28(土) 21:50:41
ああー、ポインタ使いたくない使いたくないと思ってるうちに、
if文でnullテストとかの発想自体頭から消えてたヨー。

……でもif文にbool以外渡したくねぇなあ、とか思う俺は
もうJavaから帰ることはできないのかもしれない。
77デフォルトの名無しさん:2007/04/28(土) 23:33:53
http://www.kmonos.net/alang/d/type.html
 > 式をboolへとキャストするのは、数値型に対しては0のの比較 !=0 と同じ意味で、
 > ポインタや参照型に対しては、null との比較 !=null と同じ意味です。
というように、小手先の省略記法ではなくて
言語の意味に含まれているやり方だという点で
精神衛生的にはいい感じ。

まあ個人によりけりだろうけどね。
78デフォルトの名無しさん:2007/04/29(日) 01:25:05
Ruby の場合 false != nil だったりして
79デフォルトの名無しさん:2007/04/30(月) 02:48:40
WideStudio使えりゃ面白そうなんだがなぁ
80デフォルトの名無しさん:2007/04/30(月) 11:42:25
>>79
使いにくいですけどね。
8180:2007/05/01(火) 12:02:37
簡単なアプリを作るときはいいんですけど、大規模になると・・・。
82デフォルトの名無しさん:2007/05/01(火) 17:12:38
>>81
Dの大規模アプリなんてこの世にあるのか?
8380:2007/05/01(火) 17:35:22
>>82
WideStudioのことです。
説明不足ですみません。
8481:2007/05/01(火) 19:04:21
>>83
あ、いえ、なんかすみません
85デフォルトの名無しさん:2007/05/01(火) 23:04:28
なんか番号が面白いことになっている気がする
86デフォルトの名無しさん:2007/05/01(火) 23:08:18
レベルの高い自作自演だなー
87デフォルトの名無しさん:2007/05/02(水) 00:59:56
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");

テンプレート使ってこんな感じで書くことってできますか?
88デフォルトの名無しさん:2007/05/02(水) 02:43:00
呼び出し元関数から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);
}
とかいう感じになるのかなあ。
大変だと思うけど。
89デフォルトの名無しさん:2007/05/02(水) 09:44:39
mixinでおけ
char[]check_and_assign(char[]a){
    return `if(`~a~` == typeof(`~a~`).init)return;_`~a~`=`~a~`;`;
}
mixin(check_and_assign("a"));
90デフォルトの名無しさん:2007/05/02(水) 10:37:33
>>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でないと対応していなかった気がします。
9190:2007/05/02(水) 10:45:21
勘違いしていました。
mixin文はDMD1.005から対応していますから、1.007なら当然動くはずですよね。

check_and_assignを関数内で宣言していたのでコンパイル時に評価できなかったようです。
staicにしたらうまくできました。

どうもありがとうございました。
92デフォルトの名無しさん:2007/05/02(水) 10:46:23
"a" "a" ("a") "a" "a"
93デフォルトの名無しさん:2007/05/02(水) 16:17:27
なるほど、関数のコンパイル時実行か。
すごいなあ。
94デフォルトの名無しさん:2007/05/02(水) 18:10:09
あれっ
そんなことできるのか
95デフォルトの名無しさん:2007/05/02(水) 20:05:04
テンプレートの再帰呼び出しの組み合わせで処理してたのを、
コンパイル時関数実行に書き換えたら、コンパイル速度一気に上がった。
メモリ消費も少ないし、変態コーディングしなくてもよくなったし、こりゃ便利。
96デフォルトの名無しさん:2007/05/03(木) 08:03:29
ぐっすんの人ケアレスミス多すぎwwwwwwwww
97デフォルトの名無しさん:2007/05/03(木) 08:12:16
誤爆・・・
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();
}
99デフォルトの名無しさん:2007/05/03(木) 17:40:18
>>98
class TestClass じゃなくて、class ITestImpl の方に ITest を派生させればいいんじゃない?
100デフォルトの名無しさん:2007/05/03(木) 18:36:00
>>98
コンパイルエラーと関係ないけどTestClassのchar[] name_;はいらね。
101デフォルトの名無しさん:2007/05/03(木) 18:47:41
>>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();
}
~
102デフォルトの名無しさん:2007/05/03(木) 19:11:20
インターフェイスの再実装のときは基底クラスの実装を継承せず
そのクラスで実装しろ、ということだから、再実装に限らず
実装するときはそのクラスで、ということなんじゃないかと思った。

けど、そうすると、
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
 > インターフェイスは、そのインターフェイスを継承する関数が
は関数じゃなくてクラスなんじゃないかと思った。
103デフォルトの名無しさん:2007/05/03(木) 20:03:18
mixin
104デフォルトの名無しさん:2007/05/03(木) 20:06:18
>とかで通らないのは微妙な気がする。
ん? インターフェイスに限らず、クラスの中にalias書いただけでは実装できんでしょ。
105デフォルトの名無しさん:2007/05/04(金) 00:40:24
テンプレートの仕様ってとてもコンピュータ言語の仕様とは思えないんですが、
何考えてあんな阿呆みたいな事(学生の思いつきレベル?)やってるんでしょうか。
106デフォルトの名無しさん:2007/05/04(金) 01:01:06
>>105
どの辺が? と釣られてみる。
107デフォルトの名無しさん:2007/05/04(金) 01:01:12
批判したいならもうちょっと具体的にどうぞ
108デフォルトの名無しさん:2007/05/04(金) 01:19:47
>>105
まずboostのソースを見て耐性を付けることをお勧めします。
109デフォルトの名無しさん:2007/05/04(金) 01:42:24
110デフォルトの名無しさん:2007/05/04(金) 11:52:58
Boostのテクニックは凄いし、Lisp以上の工夫はしてる。しかし、Lisp以上の
柔軟性は実現出来てないかも。
111デフォルトの名無しさん:2007/05/04(金) 13:34:08
予約語になったmacroってどんな機能になるんだろうか
112デフォルトの名無しさん:2007/05/04(金) 15:32:44
---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属性効いている様なんですけど。
113デフォルトの名無しさん:2007/05/04(金) 16:32:34
private の場合に private ですよとエラーが出るってことは、
private でも認識はしてるわけで、
だからコンフリクトするんだろう。
114デフォルトの名無しさん:2007/05/04(金) 17:38:21
>>104
基底クラスから継承しない、ってのは、派生クラスでの実装の意思を
確認し(て、実装し忘れバグを防ぎ)たいというだけのことだと思うから、
シンボルを明示的にインポートしてる場合は実装したことにしておいても
よさそう、
というような意味。そのクラスでの実装がされるわけじゃないね、たしかに。

>>112
private importの話とは違って、private属性のモジュールメンバは
外部から参照不可になるだけであって名前が隠されるわけじゃ
ないんだろうね。
115デフォルトの名無しさん:2007/05/04(金) 17:46:43
ttp://www.kmonos.net/alang/d/attribute.html#deprecated
> モジュールのメンバを private と宣言するのは、 C での static 宣言と同等です。

とあったので、Cと同じく名前も見えないものだと誤解してました。
そうすると、見えなくするには、別モジュールへ分離してprivate importするしか方法ないですかね?
116デフォルトの名無しさん:2007/05/04(金) 18:19:12
じゃないかね。
117デフォルトの名無しさん:2007/05/04(金) 19:08:04
名前の衝突を避けるなら、main.d側で選択・改名・staticインポートを
使うという手もある。場合によるけど。
118デフォルトの名無しさん:2007/05/04(金) 19:19:34
Javaスレかと思た
119デフォルトの名無しさん:2007/05/05(土) 09:13:51
D言語がやっとこさVer.1を出したのにはわけがある。
それはNemerleだ。
これ以上はいうまい。
120デフォルトの名無しさん:2007/05/05(土) 09:24:26
マネージド言語とネイティブ言語では対象領域が違うぜ。
121デフォルトの名無しさん:2007/05/05(土) 23:34:56
おっ、ネマール知ってんだ!?
やるねっOTL
122デフォルトの名無しさん:2007/05/05(土) 23:47:26
Dやってる人には言語オタ多そうだよな。
123デフォルトの名無しさん:2007/05/06(日) 00:09:12
Dやってる時点で言語オタじゃね
124デフォルトの名無しさん:2007/05/06(日) 02:03:39
>>119
Nemerleは昔さわってたな
開発スピードが鈍化したせいでなんとなく放置状態になってた
なんか動きでもあったの?
125デフォルトの名無しさん:2007/05/06(日) 21:31:53
別にオタでよくね
126デフォルトの名無しさん:2007/05/06(日) 21:33:02
別に誰もオタ否定してなくね
127デフォルトの名無しさん:2007/05/06(日) 21:38:27
サイレント魔女リティーに耳を傾けるのは紳士としてのたしなみじゃね
128デフォルトの名無しさん:2007/05/07(月) 10:37:17
屁の合間にオヤジみたいな声を出した時

ブッ
「あー、クソっ!」
ブッー、ブブッ
「うぇぁー、チキショウ!」
129デフォルトの名無しさん:2007/05/07(月) 11:04:13
(´ω`)
130デフォルトの名無しさん:2007/05/07(月) 13:35:35
誰かD HACKSとか書けばよくね?
131デフォルトの名無しさん:2007/05/07(月) 14:03:55
1ヶ月年後には多分一部使えなくなり、
1年後には多分使えなくなる。
132デフォルトの名無しさん:2007/05/07(月) 14:57:27
じゃ「日刊 D HACKS 」でよろ
133デフォルトの名無しさん:2007/05/07(月) 16:13:25
日刊D HACKSスレとか、2chにホスティングしてもらってさ。
shinichiro_hさんとか、書かないかなぁ...
134デフォルトの名無しさん:2007/05/07(月) 19:00:15
DもHaskellもはやらねーな
共闘するか?
135デフォルトの名無しさん:2007/05/07(月) 19:03:31
Daskell
136デフォルトの名無しさん:2007/05/07(月) 19:04:11
Taskell
137デフォルトの名無しさん:2007/05/07(月) 22:35:57
今はErlangだろ...常識的に考えて。
138デフォルトの名無しさん:2007/05/07(月) 22:37:42
ダーラン
139デフォルトの名無しさん:2007/05/07(月) 23:44:54
なんでも頭にDつけりゃいいってもんじゃないだろw
140デフォルトの名無しさん:2007/05/07(月) 23:49:14
D#
141デフォルトの名無しさん:2007/05/07(月) 23:55:38
このままアルファベットのHまで進めば、
「はじめてのC」どころの騒ぎじゃなくなるな。
142デフォルトの名無しさん:2007/05/07(月) 23:56:26
BCDEFGH
 C++
 C#
143デフォルトの名無しさん:2007/05/08(火) 02:21:35
>>139
頭文字DってことでおK?
144デフォルトの名無しさん:2007/05/08(火) 16:09:10
>141
はじめてのZ#
145デフォルトの名無しさん:2007/05/08(火) 18:24:32
そしてα言語・・・
146デフォルトの名無しさん:2007/05/08(火) 18:26:06
漢字ならまだいっぱい余ってるよ!
147デフォルトの名無しさん:2007/05/08(火) 22:03:04
日本に"なでしこ"があるように、中国には漢字で記述するプログラミング言語あるんだろうなあ。きっと。
148デフォルトの名無しさん:2007/05/09(水) 10:56:45
149デフォルトの名無しさん:2007/05/09(水) 18:49:53
それ C じゃんw
150デフォルトの名無しさん:2007/05/09(水) 22:28:59
そういや、殆ど英文で書ける言語があった気がするけど、あれってEiffelだっけ?
151デフォルトの名無しさん:2007/05/09(水) 22:35:34
COBOL か?
152デフォルトの名無しさん:2007/05/09(水) 22:36:22
Appletalk だな。
153デフォルトの名無しさん:2007/05/09(水) 22:41:08
ほとんど英文なんて見づらそうだな
VBですら読みにくくてしょうがないのに
154デフォルトの名無しさん:2007/05/11(金) 06:05:44
Javaだろ
155デフォルトの名無しさん:2007/05/11(金) 16:51:24
バージョンうpまだー?
156デフォルトの名無しさん:2007/05/12(土) 02:09:44
やっぱみんな並列言語か...
この過疎ぶりをみると...
157デフォルトの名無しさん:2007/05/12(土) 02:27:25
並列言語とはなんのこといってんの?
158デフォルトの名無しさん:2007/05/12(土) 02:27:59
159デフォルトの名無しさん:2007/05/12(土) 02:32:02
コルーチンはまだ?
160デフォルトの名無しさん:2007/05/12(土) 03:35:23
>>157
Erlangとか、Erlangとか、Erlangとか。
161デフォルトの名無しさん:2007/05/12(土) 03:40:27
Nemerle
162デフォルトの名無しさん:2007/05/12(土) 19:53:57
163デフォルトの名無しさん:2007/05/12(土) 21:05:28
>>162
ついにSunも・・・
164デフォルトの名無しさん:2007/05/13(日) 00:11:55
マジで!?


と思ったけど別物じゃねーかチクショウ
165デフォルトの名無しさん:2007/05/13(日) 00:13:58
パテント主張せな逝かんね。
166デフォルトの名無しさん:2007/05/13(日) 00:37:29
これはひどい
167デフォルトの名無しさん:2007/05/13(日) 00:39:13
Javaへのダメージを考えて先手を打って潰しにかかったな
168デフォルトの名無しさん:2007/05/13(日) 02:15:18
SunのDのが先だよ
169デフォルトの名無しさん:2007/05/13(日) 02:16:47
ヲルタのDは99年だろ?
170デフォルトの名無しさん:2007/05/13(日) 04:40:02
Solaris 10 が出た数年前から名前がダブったことは知られているのに(w
171デフォルトの名無しさん:2007/05/13(日) 08:25:03
>>162
これはす・・・ω・`)
172デフォルトの名無しさん:2007/05/13(日) 16:13:28
D言語研究ってGoogle八分くらってない?
173デフォルトの名無しさん:2007/05/13(日) 16:21:31
>172
PageRankが下がっただけだろう。現在28位。
174デフォルトの名無しさん:2007/05/14(月) 18:24:13
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には勝てないからね
177デフォルトの名無しさん:2007/05/16(水) 02:21:07
言語仕様とかどうでもいいからさっさとIDEを作るべきだと思う。
じゃないと一生普及しないよ。
178デフォルトの名無しさん:2007/05/16(水) 02:22:39
Eclipseプラグイン作るとか。
179デフォルトの名無しさん:2007/05/16(水) 02:25:35
>>177
漏れはIDE好きじゃないけどその意見には同意
あとどっちかっつーと各種Frameworkの充実も待たれる
いまどき何かしようとして全部土台から作るって
Cと変わらんじゃないかと
180デフォルトの名無しさん:2007/05/16(水) 02:26:02
181デフォルトの名無しさん:2007/05/16(水) 02:35:52
いや、自動補完がないプラグインなんてヘタレ作者のオナニーだろ。
せめてコンパイラが構文解析とかをxmlとかで吐いてくれたら作りやすくなるんだが。
182デフォルトの名無しさん:2007/05/16(水) 04:26:47
いや、言語仕様が確定しないと怖くて使えないよ。
バージョンアップは仕様変更だけじゃなくて、
バグフィックスも含んでるんだから。
183デフォルトの名無しさん:2007/05/16(水) 04:35:10
仕様が確定してもバグが出なくなるわけじゃないと思うけども
184デフォルトの名無しさん:2007/05/16(水) 04:37:21
仕様が確定してるんだから、
バグフィックス版を適用するのに問題はないだろ。
185デフォルトの名無しさん:2007/05/16(水) 04:40:26
ある仕様固定で開発してる時に何か致命的なバグに遭遇した場合に、
以降のバージョンで大きく仕様が変わってたら困るっしょ。
186デフォルトの名無しさん:2007/05/16(水) 05:42:16
バグの無いようにもよるけど
それでメリットがあるなら乗り換える
改悪だったら捨てる
187デフォルトの名無しさん:2007/05/16(水) 07:58:21
>>181
無いよりはマシ
188デフォルトの名無しさん:2007/05/16(水) 12:12:02
IDEいらね
189デフォルトの名無しさん:2007/05/16(水) 12:29:29
一応"-v1"という確定した仕様もある気がするけど……
最新の各ライブラリは-v1に準拠とかしてるんだろうか。
1.007での演算子の優先順位の変更なんか、地味に挙動が変わりそうで不安だ。
190デフォルトの名無しさん:2007/05/16(水) 16:41:23
>>181
dmd/src/dmd/ に在る parse.c が構文解析なんじゃないの?
191デフォルトの名無しさん:2007/05/17(木) 00:02:04
DMDをDで書きなおす計画とかないのかな。

やる意味がないか。
192デフォルトの名無しさん:2007/05/17(木) 00:22:54
>>191
正式版がリリースされればそれもありじゃないかと。今の時期それをやる意味はなさそうです。
193デフォルトの名無しさん:2007/05/17(木) 00:30:29
1.0って正式版じゃないの?
194デフォルトの名無しさん:2007/05/17(木) 00:36:12
正式版とは何か
195デフォルトの名無しさん:2007/05/17(木) 00:40:41
import package.*;
みたいにできるようにならんかなあ。
196デフォルトの名無しさん:2007/05/17(木) 00:50:02
>>194
仕様がダイナミックに変更される今の状態を正式版と呼ぶのは躊躇われる・・・
「仕様が固まったら」の方が正しいですかね。
197デフォルトの名無しさん:2007/05/17(木) 02:59:52
PCスペックがダメダメだから自動補完イラネ
プロジェクト管理だけで十分
198デフォルトの名無しさん:2007/05/17(木) 03:28:23
>>196
そんなこと言ってたら廃れた後になるぞw
199デフォルトの名無しさん:2007/05/17(木) 04:12:41
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
200デフォルトの名無しさん:2007/05/17(木) 11:12:34
>>191
まぁ今のところは、他ならぬ自分らが言語仕様を信じてなさそうだからねw
彼らの界隈でそういう話が出るまでは、こっちも大がかりなことにはDを使えない。のかも。
201デフォルトの名無しさん:2007/05/17(木) 13:55:25
>>196
template mixinでやろうと思ったけど、よくよく考えれば無理だった
202201:2007/05/17(木) 14:06:12
アンカミス>>195
203デフォルトの名無しさん:2007/05/17(木) 19:32:20
そういや、本家WikipediaにD言語の項目があるんだったな
ttp://en.wikipedia.org/wiki/D_programming_language
だれか翻訳してくれ
204デフォルトの名無しさん:2007/05/17(木) 19:35:16
別に大したこと書いてないがな
205デフォルトの名無しさん:2007/05/17(木) 19:39:12
"本家"Wikipediaとは?
206デフォルトの名無しさん:2007/05/17(木) 19:44:07
uncyclopediaとかMonapediaじゃない本物って事だろ。
207デフォルトの名無しさん:2007/05/17(木) 19:44:59
>>204
いや、日本版Wikipediaの項目があんまりにも質素だから...
208デフォルトの名無しさん:2007/05/17(木) 19:56:02
既出ならすまん
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にならないの?
209デフォルトの名無しさん:2007/05/17(木) 20:02:32
それよりも全部10返してるってほうが問題だわな。
210デフォルトの名無しさん:2007/05/17(木) 20:15:02
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と比較すると値が変わってしまうみたいだな。
211デフォルトの名無しさん:2007/05/17(木) 20:15:58
これはバグだろな。
writefln(a.v);とかa.init;とかを間に挟むとさらに挙動不審になるし。

どんなバグなのかは分からんけど。
212208:2007/05/17(木) 20:20:34
struct A{int a;static A opCall(int x){A a;a.v=x;return a;}}
に構造体を変えたら正常に動いた。構造体リテラルのバグのようだ
213208:2007/05/17(木) 20:31:55
俺にはなんとも原因が想像できんバグだなあ
えらい人報告お願いしますm(..)m
214デフォルトの名無しさん:2007/05/17(木) 21:25:15
GDCの更新が止まってる件について。
215デフォルトの名無しさん:2007/05/17(木) 21:35:04
更新されてるよ?
216デフォルトの名無しさん:2007/05/17(木) 21:41:15
なんでgdcmacはPanther用のバイナリを用意してくれなくなったんだろ・・・
217デフォルトの名無しさん:2007/05/18(金) 02:56:29
>>216
Pantherでテストしてくれる人が居ないとか
218デフォルトの名無しさん:2007/05/18(金) 03:58:52
お、日本語版WikipediaのD言語の項目で、加筆以来がある
仕事はやw
後は誰かが、>>208を書けば良いだけだな
219214:2007/05/18(金) 13:32:52
>>215
GDC0.23が最新ですよね?
DMD1.007相当なんでそろそろ新しいのが出ないかなぁと思っているんですが。
220デフォルトの名無しさん:2007/05/18(金) 13:53:38
221デフォルトの名無しさん:2007/05/18(金) 21:16:25
意訳。

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.
222デフォルトの名無しさん:2007/05/18(金) 21:36:55
c++でconstをへっちゃらべっちゃら書き込む作業がinで完結するようになるのか

SelfTypeが言語的にサポートされるといいなあ……
223デフォルトの名無しさん:2007/05/18(金) 22:01:03
むしろデフォでそれにしてもらいたいくらいだ。
うわーん引数に代入するなー誰が保守すると思ってるんだー。

ところで>>221の原文はどこでっしゃろ?
224デフォルトの名無しさん:2007/05/18(金) 22:04:06
225デフォルトの名無しさん:2007/05/18(金) 22:48:06
const地獄に辟易してるWalterタソらしい仕様だな。どうせメインはこれなんだから、これだけで十分でしょ?って感じか。
あとはconstなオブジェクトかあ。
226デフォルトの名無しさん:2007/05/18(金) 23:03:19
>>221
2.0bの構想が既にあるってことは、もうすぐ2.0になるってこと?
227デフォルトの名無しさん:2007/05/18(金) 23:04:34
俺がconstの機能だと思ってたものがfinalの機能だったのね・・・
んでconstの意味も再確認
俺の無知さに乙
228デフォルトの名無しさん:2007/05/18(金) 23:04:51
あれだけ1.0が長引いたんだし、macroの実装、yieldの実装の後じゃね?
229デフォルトの名無しさん:2007/05/18(金) 23:14:56
割と早めの予感・・・
230デフォルトの名無しさん:2007/05/18(金) 23:33:37
Java みたいに、そのうちバージョン付けの方針がいきなり変わりそうだなあ。
231デフォルトの名無しさん:2007/05/19(土) 03:20:25
Dのconstやfinalは変数を修飾していて、型を修飾しているわけじゃないんだよね?
232デフォルトの名無しさん:2007/05/19(土) 08:15:33
yaccみたいなのってないですか?
233デフォルトの名無しさん:2007/05/19(土) 09:43:04
D のコードを吐く yacc みたいなやつ、ということ?
234デフォルトの名無しさん:2007/05/19(土) 09:44:39
235デフォルトの名無しさん:2007/05/19(土) 11:11:39
236デフォルトの名無しさん:2007/05/19(土) 22:59:44
D で作られた yacc みたいなやつ、ということ?
237232:2007/05/20(日) 00:06:09
すいません。Dのコードを吐くyaccみたいなやつです。
238デフォルトの名無しさん:2007/05/20(日) 13:07:12
>>237
既存の物と組み合わせて、自分で書けばいいジャマイカ
それとも急を要すのか?

だったら、dsource上にあるのだったら、
http://www.dsource.org/projects/dgrammar
とかぐらいしかないぜ?
239238:2007/05/20(日) 13:12:20
あ、すまん。もう無いようだ。
240デフォルトの名無しさん:2007/05/20(日) 13:14:12
241デフォルトの名無しさん:2007/05/20(日) 14:14:11
wikiのリンクがおかしなことになってる。
a-hatena.com/bbsとかinterq.com/bbsとかなんだこれ。
242デフォルトの名無しさん:2007/05/20(日) 18:07:43
>>241
それ、最近、流行ってるwikiスパムだ
243デフォルトの名無しさん:2007/05/20(日) 19:17:55
>>242
そうか、直そうと思ったけどどこをいじればいいのか。。。

で、たぶん初歩的な質問だと思うんだけど、Win32APIのSetFileAttributesを使いたいんだが
関数定義しても使えない。
Kernel32.libをいじらないといけない?
244デフォルトの名無しさん:2007/05/20(日) 19:43:38
>>243
SetFileAttributesA とか SetFileAttributesW で定義してるかい?
245デフォルトの名無しさん:2007/05/20(日) 19:48:33
>>244
うん、してるんだけどね。。。って自己解決したんだ。

3時間悩んでここに書いた直後、extern(Windows)のつけ忘れってことにきづいた。ごめんね。
246デフォルトの名無しさん:2007/05/20(日) 19:51:34
書いた直後に気づいてなんか申し訳なくなるってよくあるよねそれ俺
247デフォルトの名無しさん:2007/05/20(日) 19:54:15
早くもレスがついちゃってたりするとすごく申し訳ないよなw
248デフォルトの名無しさん:2007/05/20(日) 23:46:53
他人に説明するために、客観的に整理して書こうとするので、自然と頭の中が整理されるからかな?
という論を挙げておく。
249デフォルトの名無しさん:2007/05/20(日) 23:47:45
それありうるね
250デフォルトの名無しさん:2007/05/21(月) 00:44:52
ということで、みんな何か書けば良いと思うよ。
251デフォルトの名無しさん:2007/05/21(月) 00:45:55
>>245
間違い方も流れも予想通りすぎてワロタwww
252デフォルトの名無しさん:2007/05/21(月) 01:11:06
俺もたまにある。
253デフォルトの名無しさん:2007/05/21(月) 01:30:47
整理されるというよりは、他人に聞くという行為によって
考えがいったんリセットされて、そこで改めて考え直すことで
見落としに気づけるんだろうな。
いったん変な考えにとらわれるとなかなかそこから離れられないものだから。


全然関係ない話だけど、
 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構文に組み替えるような機能。
254デフォルトの名無しさん:2007/05/21(月) 01:53:20
Nemerleみたいなもんか
255デフォルトの名無しさん:2007/05/21(月) 01:55:04
Nemerleはそこまで器用なことできないだろ
256デフォルトの名無しさん:2007/05/21(月) 02:59:14
なんでみんなNemerleなんだ
Erlangしようぜ、Erlang
257デフォルトの名無しさん:2007/05/21(月) 08:46:36
はぁ?マクロの話だろ?バカか
258デフォルトの名無しさん:2007/05/21(月) 10:37:58
もっとしっかりしようよ
259デフォルトの名無しさん:2007/05/21(月) 16:11:21
つよししっかりしなさい
260デフォルトの名無しさん:2007/05/21(月) 17:46:19

  ,',i><iヽ
  /((ノノリノ))  ヒナの菊に
. ((ミi!゚ ヮ゚ノミ)) 指を入れてほしいの〜
    (⊃⌒*⌒⊂)   ∧_∧
     /__ノ(i)ヽ__)  (    )
._______  /      ヽ
||\         /  .|   | |
||\..∧_∧    (⌒\|__./ ./
||.  (    )     ~\_____ノ|   ∧_∧
  /   ヽ            \|  (    )
  |     ヽ           \/     ヽ.
  |    |ヽ、二⌒)        / .|   | |
261デフォルトの名無しさん:2007/05/21(月) 17:48:23
はやく2.0b来ないかな
2.0b来れば、多分、Dでも大規模な機能変更は無いと思うし
262デフォルトの名無しさん:2007/05/21(月) 18:14:25
チョコラテ入れ

┃   ┃
┗━━━┛
263デフォルトの名無しさん:2007/05/21(月) 18:19:57
>>261
2.0b -> 2.0RCで鬼のような仕様変更が予定されています
264デフォルトの名無しさん:2007/05/21(月) 19:17:38
D言語は永遠に変り続ける言語
265デフォルトの名無しさん:2007/05/21(月) 19:34:18
mixinに期待。
266デフォルトの名無しさん:2007/05/21(月) 20:04:05
使われはしないがな
267デフォルトの名無しさん:2007/05/22(火) 00:07:19
dsssに対応したIDEがほしくね
268デフォルトの名無しさん:2007/05/22(火) 00:19:41
IDE(゚听)イラネ
269デフォルトの名無しさん:2007/05/22(火) 00:31:37
\(´ω`)ノ┌┛)`д) ;∴
270デフォルトの名無しさん:2007/05/22(火) 02:38:14
Entice Designer は、よくがんばってると思う。
つーかDFLってシンプルでいいよね
271デフォルトの名無しさん:2007/05/22(火) 03:42:26
いで?
272デフォルトの名無しさん:2007/05/22(火) 04:16:14
中身の頭が別の構造体の構造体を作ろうとするとコンパイラが落ちる。
……ような気がする。詳しい条件はよくわからんけど。

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並の統合開発環境を無償で提供することだ。

これからのプログラミング言語はライブラリの充実がものをいうのであって、言語仕様は二の次なのだ。
274デフォルトの名無しさん:2007/05/22(火) 05:44:06
struct S { int a; };
struct S2 { S s; };

void main() { auto b = S2(); }
275デフォルトの名無しさん:2007/05/22(火) 07:20:54
>>273
二の次っていうと極端だが、まぁそこ抜きに語るのが「不自然」であるという時代なのはその通り。
276デフォルトの名無しさん:2007/05/22(火) 10:12:33
>>272
落ちなかった。
試したのはWindows版dmdの1.014。
277デフォルトの名無しさん:2007/05/22(火) 13:24:11
>>276
同じなんだけどなあ。
俺の環境かな、とりあえずコンパイラ再インストールしてみる。スレ汚しすまん。
278デフォルトの名無しさん:2007/05/22(火) 15:29:54
D#マダー?
279デフォルトの名無しさん:2007/05/22(火) 16:25:22
>>270
DFLはかなりC#(というか.NET Framework?)の影響を受けているみたいで
先にそっちをやってると自然に使えるね
280デフォルトの名無しさん:2007/05/22(火) 17:27:34
プロパティの定義がもうちょっと楽にならんかなあ。
ゲッタとセッタでプロパティ名を二回書くのはどうも無駄な気がするんだよな。
281デフォルトの名無しさん:2007/05/22(火) 18:32:32
>>280
ttp://www.kmonos.net/alang/wnd/topics/template.ja.html#strparam

かなり便利。
まあ言語のほうでなんか対策欲しいかなとは思う。
282デフォルトの名無しさん:2007/05/22(火) 18:42:15
>>281
メンバフィールドをただラップするだけでないプロパティに対応させるのは無理かね?
283デフォルトの名無しさん:2007/05/22(火) 18:51:14
>>282
メンバになんかの処理を行って返すような場合ってこと?
その「なんかの処理」が汎用的な場合ってあんま無いんじゃないのか。

「なんかの処理をつけ加える」汎用的な方法が欲しいってことならたぶん無理。
284デフォルトの名無しさん:2007/05/22(火) 19:18:00
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;
}

こんなんとか。
285デフォルトの名無しさん:2007/05/22(火) 19:28:20
テンプレート引数にデリゲートって言うか処理を書けたらいいのにな。
286デフォルトの名無しさん:2007/05/22(火) 21:39:27
プロパティに関しては、
・クラス外からは読めるが書けない変数
・クラス外からは読めるが書きこみ時はメソッドで処理したい変数
とか欲しくなることはある
速度重視で直接アクセスしたいときに
287デフォルトの名無しさん:2007/05/22(火) 21:49:27
変数返すだけのプロパティはインライン化されるんじゃね?
ちゃんと見てないが。
288デフォルトの名無しさん:2007/05/22(火) 21:53:07
仮想関数だから無理だろ
289デフォルトの名無しさん:2007/05/22(火) 22:07:36
>>280みたいに
ゲッタとセッタでプロパティ名を二回書くのが無駄な場合ってフィールドをpublicでいんじゃね?
290デフォルトの名無しさん:2007/05/22(火) 23:04:49
+=みたいな演算子が使えたりとちょっと挙動が違う。
まあ実際のところはpublicでいいのかもしれない。やらんけど。
291デフォルトの名無しさん:2007/05/22(火) 23:19:42
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;
/+...+/
}
292デフォルトの名無しさん:2007/05/23(水) 00:32:11
mixinスゲー
全然判らん。
293デフォルトの名無しさん:2007/05/23(水) 01:07:08
いいかげんchar[]をstringと表記したいんですが
294デフォルトの名無しさん:2007/05/23(水) 01:08:59
alias char[] string;
295デフォルトの名無しさん:2007/05/23(水) 06:14:27
final answer = true;
296デフォルトの名無しさん:2007/05/23(水) 08:28:42
undefined identifier answer
297デフォルトの名無しさん:2007/05/23(水) 08:32:38
そうはならんだろ。
298デフォルトの名無しさん:2007/05/23(水) 12:09:37
>>291
変更禁止はfinalじゃなくてconstじゃね
299291:2007/05/23(水) 15:21:15
なるほど、constか。
コンパイル時に評価できる定数ってなってたからできないかと思ってた。
じゃあ変数に使うfinalってなんだ?
300デフォルトの名無しさん:2007/05/23(水) 20:23:17
>>294
それを世界65億人のphobos内に追記してくれ
301デフォルトの名無しさん:2007/05/24(木) 00:11:18
http://www.vipper.net/vip238377.png
同時に入ってたんだけど結構レアっぽくね?
302デフォルトの名無しさん:2007/05/24(木) 00:12:20
ばかばかばか
誤爆です・・・
303デフォルトの名無しさん:2007/05/24(木) 00:16:17
なるほど。D言語使う香具師の層が理解できたぜ。
304デフォルトの名無しさん:2007/05/24(木) 00:17:15
だが断る
305デフォルトの名無しさん:2007/05/24(木) 01:56:32
>>301
やっぱりD言語使いにはゲームプログラマが多いんだなw
306デフォルトの名無しさん:2007/05/24(木) 02:15:15
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
【総合】FF6スレNo.84〜ついでに服も盗んだ〜 [FF・ドラクエ]

これか?
307デフォルトの名無しさん:2007/05/24(木) 02:25:53
>>306
ちげーよ。
308デフォルトの名無しさん:2007/05/24(木) 07:10:26
>>300
typedef enum {false, true} boolean;
309デフォルトの名無しさん:2007/05/24(木) 07:39:58
>>301
手首まだ俺も見たことねえのにうらやましいぜ
310デフォルトの名無しさん:2007/05/24(木) 07:57:50
>>305
ゲームプログラマじゃない俺はどうしたらいいんだろう…
311デフォルトの名無しさん:2007/05/24(木) 13:07:02
今すぐゲームをプログラミングし始めれば
とりあえず歩調は合わせられるぞ。
312デフォルトの名無しさん:2007/05/24(木) 14:57:42
よーしパパmixinでタスクシステム作っちゃうぞーとか言ってるの。もう見てらんない。
313デフォルトの名無しさん:2007/05/24(木) 19:22:32
バージョンアップまーだー?
314デフォルトの名無しさん:2007/05/25(金) 08:30:19
はやく仕様落ち着かせろよといいながら一ヶ月も音沙汰ないと不安になる言語。
315デフォルトの名無しさん:2007/05/25(金) 13:13:21
こういうときに仕事してんのかなー
316デフォルトの名無しさん:2007/05/25(金) 13:25:40
もう一ヶ月か。
さぞすばらしい機能が追加されているに違いない
317デフォルトの名無しさん:2007/05/25(金) 13:39:29
機能毎にbranchを切って、どの時期に何を投入するか決めている気がする。
318デフォルトの名無しさん:2007/05/25(金) 23:43:36
この一ヶ月はDでコンパイラ書いてるんだって
319デフォルトの名無しさん:2007/05/26(土) 00:52:43
いや、コンパイラをコンパイルするコンパイラをDで書いてるのかもしれないぞ
320デフォルトの名無しさん:2007/05/26(土) 01:15:46
>>319
それなんて Lisp ?
321デフォルトの名無しさん:2007/05/26(土) 07:37:13
最近は大抵のコンパイラが自己記述されてるだろ。
322デフォルトの名無しさん:2007/05/26(土) 09:20:45
最近はコンパイラ・コンパイラもないのか・・・・・
323デフォルトの名無しさん:2007/05/26(土) 14:49:38
Dでコンパイラコンパイラをコンパイルするコンパイラを書いてるんじゃね?
324デフォルトの名無しさん:2007/05/26(土) 15:25:01
Dでコンパイラコンパイラをコンパイルするコンパイラをコンパイルしてそのコンパイラコンパイラでコンパイラを作成してるんじゃね?
325デフォルトの名無しさん:2007/05/26(土) 16:34:15
そろそろ天才の登場が待たれるな
326デフォルトの名無しさん:2007/05/26(土) 16:45:49
近代的なコンパイラがアセンブラでイキナリ書かれることは無いだろうから
順々にコンパイラをコンパイルしたコンパイラを遡っていくと何にたどり着くんだろう
327デフォルトの名無しさん:2007/05/26(土) 16:46:59
>>326
インタプリタ
328デフォルトの名無しさん:2007/05/26(土) 16:53:42
>>326
H2O
329デフォルトの名無しさん:2007/05/26(土) 16:56:18
>>326
職人が紙テープにせっせと穴あけたりしてたのにたどり着くんだろうと思うと、ワクワクするなw
330デフォルトの名無しさん:2007/05/26(土) 17:01:07
人間のハンドアセンブルに辿り着くね。
331デフォルトの名無しさん:2007/05/26(土) 17:11:46
>>326
マジレスするとCコンパイラ
お陰でKen Thompsonが自分で言うまで誰もバックドアに気がつかなかった
ttp://memo.xight.org/2006-08-16-5
ttp://cm.bell-labs.com/who/ken/trust.html
332デフォルトの名無しさん:2007/05/26(土) 17:12:55
それはネタで言ってるんだよな?な?
333デフォルトの名無しさん:2007/05/26(土) 17:22:38
意訳。

文字列の型: 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に暗黙的にキャストすることができないということです(これはコードには多くのキャストがあるのを意味してます)。
キャストはハンマーであり、あまりにたくさんのキャストを必要とするコーディングスタイルは悪いコーディングスタイルです。
334デフォルトの名無しさん:2007/05/26(土) 17:33:01
どこが意訳なんだよ。
335デフォルトの名無しさん:2007/05/26(土) 17:40:26
引数とか完全に禁止したのをデフォにして、
色々許可する方を指定した方がいいと思う。
336デフォルトの名無しさん:2007/05/26(土) 17:41:18
原文はどこの話だろう
337デフォルトの名無しさん:2007/05/26(土) 17:59:48
>>333の要点をまとめると
-型としてinvariant(type)とconst(type)が追加になる
-const(type)は値が一定。ようは実行時に一意に決まる。
-invariant(type)は値が不変。ようはコンパイル時に一意に決まる。
-暗黙的にinvariantをconstにキャスト可能
-暗黙的にミュータブルをconstにキャスト可能
-暗黙的にミュータブルをinvariantにキャストは不可
ってことだと思う。間違ってたらスマソ。
338デフォルトの名無しさん:2007/05/26(土) 18:52:25
ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.announce&article_id=8766
ココね。>>333の訳は翻訳機にかけたような文体で漏れは好きじゃないなぁ(ゴメンね)
ちなみに、漏れはBjörklund氏の「cstring?ハァ?ダッセー(プッ」的な意見に賛成だ。
339デフォルトの名無しさん:2007/05/26(土) 19:00:29
俺もBj?rklund氏と同じでcstringよりはstrの方がいいなぁ。
ただしstr/cstr/istrと分かれるならそっちの方が良い。
340デフォルトの名無しさん:2007/05/26(土) 19:01:27
ややこすぃ!
341デフォルトの名無しさん:2007/05/26(土) 19:04:56
cstringにしたら
UTF-16版がwcstringになる。
トイレかよ。
342デフォルトの名無しさん:2007/05/26(土) 19:13:30
標準の文字列をイミュータブルにしてスレッドやパフォーマンス以外でなんか良い事ってあるの?
文字列のずらしとかが遅くなるの嫌なんだけど。
343デフォルトの名無しさん:2007/05/26(土) 19:15:11
参照の変更で元の文字列まで変わっちゃったとかいう
バグが起きなくなる。
344デフォルトの名無しさん:2007/05/26(土) 19:19:20
現状では関数の引数でinだったらコピーされてるから問題無い気が。

>>341
それ、何てMozilla?
345デフォルトの名無しさん:2007/05/26(土) 19:19:23
>>343
これパフォーマンス厨が良くやらかすんだよなwwwwwww
346デフォルトの名無しさん:2007/05/26(土) 19:20:14
職業柄wcはオメガシーって読んじゃうよ。
347デフォルトの名無しさん:2007/05/26(土) 19:26:56
>>341
cwstringだろ、常識的に考えて。
348デフォルトの名無しさん:2007/05/26(土) 19:29:39
結局char[]のaliasかいな。
"あいう"[0] がどうしても1文字目じゃなく1バイト目になってしまうのは
この言語の宿命なのか。

しかしconst(type)とかinvariant(type)とか、
いつの間に()が要るようになってるんだろう。
前置キーワード方式じゃダメだったのかな。
349デフォルトの名無しさん:2007/05/26(土) 19:30:49
wchar[]使えばいいじゃん
350デフォルトの名無しさん:2007/05/26(土) 19:34:51
>>344
inをコピーじゃなくして、デバッグビルド時にoutでassertかませば性能面の問題も起きないと思うけどなぁ。まぁマルチスレッドで問題起きるけど。
351デフォルトの名無しさん:2007/05/26(土) 19:42:16
今の時代100MBあるchar[]でも無ければパフォーマンスなんてほとんど変わらんだろ。
組み込み機器じゃGCとかあるようなDなんて使えないだろうし。
352デフォルトの名無しさん:2007/05/26(土) 19:44:25
>>342
データの内容が書き換わらないことが保証されてると
コードがとても単純になって可読性・保守性がよくなる。


# でも一時変数を使い回しまくってると意味無いな……ええい引数に代入するな!
# しかもすぐ捨てる作業用オブジェクトを! しかもfor文の中のif文の中で!
# for文抜けた後でも参照してるじゃねぇか、このコードまずいだろ!?
353デフォルトの名無しさん:2007/05/26(土) 19:45:42
constとかfinalにすれば引数に代入なんかできないだろ。
いっそのこと標準でinにしちゃえばいいのにな。
354デフォルトの名無しさん:2007/05/26(土) 19:48:53
>>352
># でも一時変数を使い回しまくってると意味無いな……ええい引数に代入するな!
inになってる引数に代入してそのまま返してる関数が多数な俺。
やっぱりauto rv=arg;って一行入れるべきだよなぁ>俺。
># しかもすぐ捨てる作業用オブジェクトを! しかもfor文の中のif文の中で!
># for文抜けた後でも参照してるじゃねぇか、このコードまずいだろ!?
これは現状でもD言語では無問題だしなぁ。
355デフォルトの名無しさん:2007/05/26(土) 20:02:52
const char[] str; という宣言があったとき、
* 変数 str は const
* 変数 str の型は、(const char[])
のどっちなの?
356デフォルトの名無しさん:2007/05/26(土) 20:06:36
>>355
現状ではどっちでも大差無い。まぁソース嫁。
357デフォルトの名無しさん:2007/05/26(土) 20:44:57
配列であることを意識しないでいいような構文になればなんでもいいや・・・
358デフォルトの名無しさん:2007/05/26(土) 21:53:50
>>351
GCに怯えすぎ。
組み込みだろうと問題にならない。
359デフォルトの名無しさん:2007/05/26(土) 22:36:54
こわがりすぎー :)
360デフォルトの名無しさん:2007/05/26(土) 22:43:39
Dで書かれたOSってありますか?
361デフォルトの名無しさん:2007/05/26(土) 22:49:25
DOS
362デフォルトの名無しさん:2007/05/26(土) 23:18:14
おお、組み込みでも既にGC載ってるのか。

って思ったけど携帯とかずっと前からJava入ってるんだよな……
DのGCくらい携帯以外でも楽勝なのか。
363デフォルトの名無しさん:2007/05/26(土) 23:35:42
>>361
お前のセンスに嫉妬
364デフォルトの名無しさん:2007/05/26(土) 23:53:06
>>361
ほほう
これはなかなか
365デフォルトの名無しさん:2007/05/26(土) 23:57:53
>>361
わずか六分か。脱帽だな。
366デフォルトの名無しさん:2007/05/27(日) 03:02:59
いつまでこの地味な状況って続くんですか?
367デフォルトの名無しさん:2007/05/27(日) 03:03:37
誰かがキラーライブラリつくるまで。
368デフォルトの名無しさん:2007/05/27(日) 03:10:52
tangoはキラーすぎて逆に駄目そうだな
369デフォルトの名無しさん:2007/05/27(日) 06:34:10

まぁ DOS くらいならいまの D でも書けそうだ w

370デフォルトの名無しさん:2007/05/27(日) 11:09:29
DのGCってメモリ確保関数さえあれば動くんだよね?
371デフォルトの名無しさん:2007/05/27(日) 13:35:52
スレッドも必要です><
372デフォルトの名無しさん:2007/05/27(日) 14:39:06
OSがGCを実装して、下位のプログラムがメモリを管理しなくてすむようになればいいなあ。
373デフォルトの名無しさん:2007/05/27(日) 14:40:18
>>372
あなたがウォルターか
374デフォルトの名無しさん:2007/05/27(日) 14:43:10
>>372
MonaOSがそんな感じだったような。ただD言語のgcは一部の型を把握するようになったから、そう簡単にはいかないだろうけど。
375デフォルトの名無しさん:2007/05/27(日) 14:48:45
すいません、ちょっと質問させてくださいな。
D言語で、interactive shell(pythonみたいに、対話的に一行ずつ
実行できるようなもの)ってありますでしょうか。
その場でスクリプトをコンパイルして実行という機能がはあったんですが・・・
376デフォルトの名無しさん:2007/05/27(日) 15:03:00
>>374
共通型システムみたいなものを導入すればいいんじゃね?
377デフォルトの名無しさん:2007/05/27(日) 15:06:52
>>376
まぁそうだけど。
378デフォルトの名無しさん:2007/05/27(日) 15:08:12
>>374
Monaにそんな機能はないよ。正直メモリ関連は結構ややこしい方だと思う。
379デフォルトの名無しさん:2007/05/27(日) 18:00:39
>>375
ないと思う。
そういう用途としては python なり ruby なりを使った方がいい。
380デフォルトの名無しさん:2007/05/27(日) 19:47:25
普通にbashでいいだろ
381デフォルトの名無しさん:2007/05/27(日) 19:51:52
dsh
382デフォルトの名無しさん:2007/05/27(日) 19:57:30
(゚听)イラネ
383375:2007/05/27(日) 20:48:25
レス下さった方々、どうもありがとうございます。
自分でもいろいろ探していたんですが、やっぱりないんですね〜残念。
実は主にpythonとC++を使っているんですが、どっちも一長一短でなにかいい方法が
ないか探していたんです。D言語でまとめられたら、凄くハッピーだったのですけど。

主に使う用途としてはデータ解析などなので、bashだとちょっと厳しいです。
変数の内容を保持したまま、対話的に関数が呼べるものを探していました。

話はちょっと変わりますが、Dの言語仕様、ver1で一旦新しい追加は置いておいて、
bug fix重点的にやるって噂ですね。
これで少しは落ち着いてアプリが作れる・・・かな?
384デフォルトの名無しさん:2007/05/27(日) 20:51:20
>>383
そんなことは無いが、後方互換は保たれてる。
385デフォルトの名無しさん:2007/05/27(日) 21:12:46
ちょっと前に予約語の追加があったばかりじゃないか・・・
386デフォルトの名無しさん:2007/05/27(日) 21:29:38
もうすぐ2.0betaが出てくるという話だからね。
そっちが優先されるかも。
387デフォルトの名無しさん:2007/05/27(日) 21:31:52
今MLで議論されている
const/invariant/finalの話ってどう思う?
はっきり言ってinvariant要らないような気がするんだが。
388デフォルトの名無しさん:2007/05/27(日) 21:37:52
別にあってもいいと思うよ
389デフォルトの名無しさん:2007/05/27(日) 21:38:06
ちゃんと追ってなくてよくわからんのだが、どういう機能?
390デフォルトの名無しさん:2007/05/27(日) 21:54:49
>>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   |
*-------------------------------------*
391デフォルトの名無しさん:2007/05/27(日) 21:58:59
(>>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)*にキャストされます
とのこと。
392デフォルトの名無しさん:2007/05/27(日) 22:01:12
> invariantな値へのポインタは
> 書き換わることがないと仮定されている
訂正
> invariantな値へのポインタは
> 指している先の値が書き換わることがないと仮定されている
393デフォルトの名無しさん:2007/05/27(日) 22:14:16
ありがとう。なんか豪い煩雑になるなあ。

しかし、invariantはプログラマは滅多に使う機会ないんでない?
最適化効率が上がるんならあってもいいように思うな。
394デフォルトの名無しさん:2007/05/27(日) 22:18:09
使用頻度如何では invar くらい短くして欲しいが、
あまり使わないのなら長い方がいいな。
395387=390-392:2007/05/27(日) 22:40:15
もう少し考えてみたが、
invariantな値というのはつまり、
 "あいうえお"
 [ 1, 2, 3, 4, 5 ]
などのコンパイル時に決定される値ということだよな。
([ x, x+1, x+2 ]とかは実行時に決定されるので範疇に入らない)

これらはconst値に暗黙変換されるから、使う方としては
 const(char)[] s = "あいうえお";
の様にconstで受ければいいのか。
それなら invarint〜 と頻繁に書く必要はほとんどないな。
*でも結局はconstで受けるんだから、>>393が言うような最適化効率には
 あまり貢献しないような…? あ、autoを使えってことか?

ただ、
 char[] = "あいうえお";
はたぶん暗黙変換エラーになると思われるので、
そのあたりを意識してCodeを書けということだろうか。
396デフォルトの名無しさん:2007/05/27(日) 23:38:14
>>395
char[] = "あいうえお"
はコピーになってくれないと正直困る。
397デフォルトの名無しさん:2007/05/28(月) 14:59:25
これネイティブjava?
398デフォルトの名無しさん:2007/05/28(月) 15:01:45
いいえDです
399デフォルトの名無しさん:2007/05/28(月) 15:02:07
いちいち
char[] = "あいうえお".dup;
しろってことになるかもな
400デフォルトの名無しさん:2007/05/28(月) 15:18:08
またウォルターたんは変なことを思いついたもんだな
失敗だったらバッサリ切り捨てるだろうから心配はしてないがw
401デフォルトの名無しさん:2007/05/28(月) 15:37:26
もともと文字列リテラルの書き換えは未定義動作なんだよな。
 http://www.kmonos.net/alang/d/arrays.html#strings
 > 文字列リテラルは immutable (読み取り専用)です。
 > char[] str;
 > char[] str1 = "abc";
 > str[0] = 'b'; // エラー。"abc" は読み取り専用。クラッシュの可能性あり
現状でも、dupるなりしなきゃまずいと思う。

402デフォルトの名無しさん:2007/05/28(月) 15:58:08
というかなんで文字列リテラルがimmutableなんだ?
意味なくね?
constとかの場合のみでよくね?
403デフォルトの名無しさん:2007/05/28(月) 17:29:08
文字列リテラルが immutable なのは普通だろ。
C/C++ だってそうだ。

"abc" と "bc" ってのがあった場合に
重ねて置ける最適化ができるというのもそうだけど、
唯一しかないものをホイホイ書き換えられても困る。

問題は char[] str1 = "abc"; とした時に、
str1 が文字列リテラル自身を指すことになってしまう点。
C/C++ みたいに、文字列リテラルで配列変数を初期化する場合は、
特別にコピーが発生するようにすべき。
404デフォルトの名無しさん:2007/05/28(月) 18:36:16
>>403
そこらへんが上にあった変更で改善されるわけだな。
書き換えるならdupれ、書き換えないならconstにしろ、
という感じか。
405デフォルトの名無しさん:2007/05/28(月) 18:51:33
immutable なら文字列リテラル自身を指すようになって構わないけど、
そうでなければ自動的にコピーして欲しい。
その方が自然だと思う。
406デフォルトの名無しさん:2007/05/28(月) 19:00:54
ウォルターは天才なので彼に全て任せておけば問題ない
407デフォルトの名無しさん:2007/05/28(月) 19:13:42
まあ糞言語だがな
408デフォルトの名無しさん:2007/05/28(月) 19:21:51
eclipse プラグインまだ?
409デフォルトの名無しさん:2007/05/28(月) 21:03:27
あるがな。
410デフォルトの名無しさん:2007/05/28(月) 23:44:31
自動的にコピーだとコストに気がつかない可能性があるから、エラーの方が良くない?
411デフォルトの名無しさん:2007/05/28(月) 23:51:48
配列のリテラルによる初期化でコストが発生するのはむしろ普通のことでは?
412デフォルトの名無しさん:2007/05/29(火) 00:11:28
const(char)[] foo = "str"; // 参照代入
char[] bar = "str"; // コピー

とか。ややこしいだけか。
413デフォルトの名無しさん:2007/05/29(火) 01:59:03
char[] hoge = "fuga" + "hage" + "boke";

コピーは何回発生するでしょうか?
414デフォルトの名無しさん:2007/05/29(火) 02:05:04
ベクトル演算は実装されていません><
415デフォルトの名無しさん:2007/05/29(火) 02:34:16
どうもコンパイル開発のしやすさに重点が置かれてるのかな?
プログラムは日増しに組みにくくなってる。
416デフォルトの名無しさん:2007/05/29(火) 02:56:24
コンパイラ開発の楽さは重点に置いてる一つではあるんだけど、
あまりに組みやすさが犠牲になると流石に困るよな。
417デフォルトの名無しさん:2007/05/29(火) 03:02:36
日増しにっていうほど変わってないだろ。
418デフォルトの名無しさん:2007/05/29(火) 05:53:17
>>413
コンパイル時解決されないか?
419デフォルトの名無しさん:2007/05/29(火) 12:43:08
GUIライブラリならいまはどれがベターですか?
420デフォルトの名無しさん:2007/05/29(火) 15:08:06
WindowsならDFLじゃないかな。
クロスプラットフォームのならDWTか。
421デフォルトの名無しさん:2007/05/29(火) 16:26:34
任意の比較関数を使ったソートってどうやってやるんですか?
それ用にクラスつくったりstdlib.c.qsortを使えというのはなしで
422デフォルトの名無しさん:2007/05/29(火) 17:16:43
デリゲート
423デフォルトの名無しさん:2007/05/29(火) 17:56:27
>>422
どうもです。でも理解できません。
delegate使ってどうやってやるんですか?sortはdelegateを受け取らないと思います。
また関数ポインタでやるならqsortと変わらないと思います。
単純なchar[][]の場合もdelegateで解決できるんでしょうか?
424デフォルトの名無しさん:2007/05/29(火) 18:40:05
ユーザー定義型じゃないなら専用の関数作るしか無いと思う
425デフォルトの名無しさん:2007/05/29(火) 19:12:58
char[][] ss= ["hello","test"];
foreach( int i; char[] s; ss) {
writefln( s);
}

こんなのって無理ですか?
426デフォルトの名無しさん:2007/05/29(火) 19:17:40
foreach( int i; char[] s; ss) {

foreach( int i, char[] s; ss) {
だな。
427デフォルトの名無しさん:2007/05/29(火) 19:26:44
ああ・・・
ありがとうございます・・・
すいませんでした
428デフォルトの名無しさん:2007/05/29(火) 19:30:08
ドンマイ
429デフォルトの名無しさん:2007/05/29(火) 23:33:24
ドンマイ
430デフォルトの名無しさん:2007/05/30(水) 06:03:58
Win32APIのwrapperみたいなのあります?
自分で定義して直接呼ばないとだめ?
431デフォルトの名無しさん:2007/05/30(水) 06:10:09
あるよ
432デフォルトの名無しさん:2007/05/30(水) 08:46:11
>>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);
}
433デフォルトの名無しさん:2007/05/30(水) 09:20:34
>>431
ありがとうございます
フレームワークは何が標準ですか?
434423:2007/05/30(水) 10:55:14
>>432
レスありがとうございます。
テンプレート+デリゲートですか。私の足りない頭では理解が・・・
残念ながらこのコードはgdcだとコンパイルが通りませんでしたが、参考にして
ポートしてみます。
435デフォルトの名無しさん:2007/05/30(水) 10:59:17
>>436
ありがとうございます。
ところでカレーはスパイスだけでも作れますか?
436デフォルトの名無しさん:2007/05/30(水) 17:35:09
tango上でのbox(variant型)についての議論で
http://www.dsource.org/projects/tango/forums/topic/12#468

http://www.prowiki.org/wiki4d/wiki.cgi?DanielKeep/Variant
phobos,tango両方で動くやつを書いた人がでました

よさげ
437デフォルトの名無しさん:2007/05/30(水) 19:44:49
438デフォルトの名無しさん:2007/05/31(木) 12:30:53
Vriant型って何が便利なの
439デフォルトの名無しさん:2007/05/31(木) 16:46:59
>>436
これはいいな
440デフォルトの名無しさん:2007/05/31(木) 22:38:02
一つの構造体に二つのソートを登録したい場合は
どうしたらいいのでしょうか?
(この発想からしてダメかも知れませんが…)

一回目は配列全体をメンバ変数intを対象にしてソートします
二回目はスライスを用いて
{0..8}のように特定の範囲のみを相手に
メンバ変数のchar[]を対象にソートしたいのですが
なかなか良い作り方が分からず…

少し上でもソートが出てましたが
難しいそうですね…
どのようにすれば良いでしょうか
441デフォルトの名無しさん:2007/05/31(木) 23:27:32
ごく普通に、opCmp内部で変数みてモードかえればいんじゃね?
442デフォルトの名無しさん:2007/05/31(木) 23:37:04

///クイックソート
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--;
}
443デフォルトの名無しさん:2007/05/31(木) 23:37:49
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;
}
444デフォルトの名無しさん:2007/05/31(木) 23:56:01
やっぱりC++のSTLでstd::algorithmに相当するのがDにもあると便利だよね。
ソート以外にもbinary_searchとかrandom_shuffle, find_ifとか使いでがあるし。
クイックソートだけじゃなくてマージソートも欲しい。
import std.algorithmとかで実装されないかな。
445デフォルトの名無しさん:2007/06/01(金) 00:04:08
折角 lambda あるんだしな。
446デフォルトの名無しさん:2007/06/01(金) 02:33:17
ていうか今のDには主要なテンプレートライブラリがないもんなー
DTLはどうなったんだ?

bindならid:shinichiro_hさんが
std::functionalならid:rinsetさんがだいぶ前にやってたような気がする
447デフォルトの名無しさん:2007/06/03(日) 00:27:52
このスレのレベルが急速に低下してるな……
448デフォルトの名無しさん:2007/06/03(日) 00:31:45
>>447
各所で爆釣れワロタ
449デフォルトの名無しさん:2007/06/03(日) 00:45:42
> 爆釣れ
450デフォルトの名無しさん:2007/06/03(日) 08:46:43
しかし本当に音沙汰ないなあ
451デフォルトの名無しさん:2007/06/03(日) 10:09:15
SWTを移植してるひといますか?
452デフォルトの名無しさん:2007/06/03(日) 12:04:23
tioportっつ〜、javaのリソースをDに変換するツールのプロジェクトがあって、
SWTも対象だったような・・・
453デフォルトの名無しさん:2007/06/03(日) 12:06:48
>>451
DWT
454デフォルトの名無しさん:2007/06/03(日) 19:10:28
>>451
k.inabaさんが紹介してたよ
http://www.kmonos.net/alang/wnd/topics/tioport.ja.html
455デフォルトの名無しさん:2007/06/06(水) 00:54:04
英語の公式サイトでdmdをダウンロードして
-vでバージョンを確認したらdmd 1.010なんだけどこれが最新?
このスレに1.014という記述があるんだけど・・・
456デフォルトの名無しさん:2007/06/06(水) 00:57:55
ChangelogのページからDLできました。
457デフォルトの名無しさん:2007/06/06(水) 06:27:01
static コンストラクタやデストラクタがある D だと、
シングルトンパターンってあんま意味ないのかな?
初期化のタイミングを調整できるって程度か。
458デフォルトの名無しさん:2007/06/06(水) 11:22:54
もしかして
class Hogehoge {
static:
    fugafuga;
}
ってクラスの先頭にstatic:つければほぼシングルトンパターンじゃね
459デフォルトの名無しさん:2007/06/06(水) 11:24:30
それでも static this やらはちゃんとstatic付けないとダメだけどね
460デフォルトの名無しさん:2007/06/06(水) 12:50:39
それどこのJava?
461デフォルトの名無しさん:2007/06/06(水) 16:08:02
D 1.015
462デフォルトの名無しさん:2007/06/06(水) 16:30:38
きたああああああああああああああああああああああああああ
463デフォルトの名無しさん:2007/06/06(水) 16:31:20
New/Changed Features
該当なし

しょぼーん
464デフォルトの名無しさん:2007/06/06(水) 16:32:54
バグ抜きだけか
465デフォルトの名無しさん:2007/06/06(水) 21:02:49
>>208 のバグはまだ直ってないな
気がついてないんだろうか
466デフォルトの名無しさん:2007/06/06(水) 21:04:30
誰も報告してないんじゃないの?
467デフォルトの名無しさん:2007/06/06(水) 22:56:27
報告しとけよw
誰か報告する(した)人いる?
468デフォルトの名無しさん:2007/06/06(水) 23:20:43
なんかニュースグループみてみたら
リリース関係についてなかなかおもしろい議論がされてた

それを受けて開発参加者のうちの1人(?)からmy visionとして
・あと1・2ヶ月でTangoリリース
・2008年はじめごろにD2.0リリース

というロードマップが示されてたのでいちお報告
469デフォルトの名無しさん:2007/06/07(木) 02:28:20
とりあえずposeidonに期待と言っておく。
470デフォルトの名無しさん:2007/06/07(木) 07:44:28
連想配列リテラル、キーの文字列を同じ長さにしないといけないのか・・・
471デフォルトの名無しさん:2007/06/07(木) 11:53:43
>>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のように型関係なく追加できるものってありますか?
473デフォルトの名無しさん:2007/06/07(木) 15:24:22
動的配列
474デフォルトの名無しさん:2007/06/07(木) 15:46:36
.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;
}
}
475デフォルトの名無しさん:2007/06/07(木) 16:30:20
あーありがとございます。
476デフォルトの名無しさん:2007/06/08(金) 02:30:31
とてもいいコンパイラになってきたと思うけど悲惨な言語にもなりつつあるな。
477デフォルトの名無しさん:2007/06/08(金) 05:03:23
弩言語
478僕は上げたい:2007/06/08(金) 05:27:29
すみません ものすごくスキルの無い、低レベルでくだらない質問です。

int main(char[][] args)
{
 printf("吉田十四朗です。一応180cmのイケメン19歳です。\n");
retrun 0;
}

WinXpでこれを普通にコンパイルしようとするとUTF-8がどうのこうのと文句いってコンパイルできません。それで、ソースの保存の際にUNICODEでソースを
保存してコンパイルすると、きちんとコンパイルできるのですが、激しく
文字化けをします。 どうしたらいいのでしょう?
479デフォルトの名無しさん:2007/06/08(金) 05:42:13
ウィンドウズのコンソールにちゃんと表示したいなら
std.windows.charset だかに入ってるtoMBSzを使ってS-JISに変換とかしないとだめぽいよ
480デフォルトの名無しさん:2007/06/08(金) 07:40:43
つまり、こういう事だな。
import std.windows.charset;

int main(char[][] args)
{
  char[] msg = "吉田十四朗です。一応180cmのイケメン19歳です。\n";
  printf("%s", toMBSz(msg));
}

>>478
もっと言うなら、k.inabaさんのtxとか使ったほうが良い。
後はココを読めばおk
ttp://www.kmonos.net/alang/wnd/topics/pitfall.ja.html
481デフォルトの名無しさん:2007/06/08(金) 07:47:22
>>471
m(_ _)mありがとうございます
482デフォルトの名無しさん:2007/06/08(金) 07:53:24
あーでも、
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;
};
みたいなのでさ。
483デフォルトの名無しさん:2007/06/08(金) 15:20:11
extern (C) {
 void hoge(int);
}
T hoge(T)(T[] a) {
 return a[0];
}
void main() {
 int[1] a;
 writefln(a.hoge());
}
これで、conflict するのは仕様?
484デフォルトの名無しさん:2007/06/08(金) 22:58:10
>>471
おk つたない英語で(しかもつづり間違えたw)報告しておきました
まだ認知されてないバグだったようです

>>483
スマン 漏れにはよくわからないがtemplete書かずにそういうのができるんだっけ?
485デフォルトの名無しさん:2007/06/08(金) 23:25:56
>>471
"string literal"[]
でchar[]型になるよん。
486デフォルトの名無しさん:2007/06/08(金) 23:47:15
>>484

どこに報告したの?
487デフォルトの名無しさん:2007/06/09(土) 00:35:41
488デフォルトの名無しさん:2007/06/09(土) 13:41:41
ツリー状になってるリンクたどったらなんか関係ないページに飛ばされるし
ログインしないと見ることもできないのか?
使い方わかんね・・・orz
489デフォルトの名無しさん:2007/06/09(土) 18:53:11
>>487
そうそれです

>>488
ログインとかはないはず・・・
ひょっとしてニュースグループ全体のツリーに飛んじゃった?


なんか夏にD言語のカンファレンスがアメリカで開催されるらしいけど
誰か日本から参加する人いるのかな・・・
490デフォルトの名無しさん:2007/06/09(土) 23:07:44
>>489
へ?マジで?
生Walterタソが見れるのか。
491デフォルトの名無しさん:2007/06/09(土) 23:14:27
>>489
ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.bugs&article_id=11355
こっちに飛んでから下のツリーを辿るとおかしなページに飛ばされるような
最初のツリーに載っている返事はどうやったら読めるのだろう
492デフォルトの名無しさん:2007/06/09(土) 23:16:02
ああ,アドレスから .bugs が抜け落ちてる・・・バグ報告サイトのバグか(^^;
493デフォルトの名無しさん:2007/06/09(土) 23:33:02
ほんとだ バグだw
ニュースサイト全体のツリーでbugsのリストを取得してから
>>491のページに行くとちゃんと.bugsがつくから
サイト全体のリストを通さず直に行くっていうのが仕様外なのかなw
微妙にリスト表示のページも変な挙動するなと思ってたら・・・

んじゃこれも報告しとく
494デフォルトの名無しさん:2007/06/10(日) 16:39:08
eclipse+ddbg+descentの構成でデバッガ、まともに動いている人いませんか?

ddbgによるステップ実行はできているようなのですが、Eclipseとうまく連携できていないようで、
ソースファイルを見つけることができず、ステップ実行している箇所の矢印が現れませんorz
Eclipseのソース・ルックアップ・パスの編集は、しっかり行っているつもりです。
現在、疑っているのはコンパイルとリンク時のパラメータ設定ですが、
他に出来ている方がいないようでしたら諦めようかと・・・



495デフォルトの名無しさん:2007/06/11(月) 03:32:12
DってARM用バイナリとか作れるんかな?
WindowsCEで動く小物とか作りたいんだけど。
496デフォルトの名無しさん:2007/06/11(月) 03:42:15
GCCはARMにも対応してるんじゃなかろうか。
497デフォルトの名無しさん:2007/06/11(月) 05:12:54
498デフォルトの名無しさん:2007/06/11(月) 08:25:06
>>494
ttp://d.hatena.ne.jp/haru-s/20061126/1164564951
この辺参考にならん?ーgオプションはつけてるよねぇ
499デフォルトの名無しさん:2007/06/13(水) 02:55:51
>>485
しらんかった・・・
500デフォルトの名無しさん:2007/06/13(水) 03:34:17
cast(char[])"hoge" as "hoge"[]
cast(char[])"hoge" as "hoge"c[]
cast(wchar[])"hoge" as "hoge"w[]
cast(dchar[])"hoge" as "hoge"d[]
501デフォルトの名無しさん:2007/06/13(水) 17:04:25
ALLPaGeD is an Attributed LL(*) Parser Generator for D
ttp://mainia.de/allpaged.zip
502デフォルトの名無しさん:2007/06/13(水) 17:56:45
おーるぺーじでぃー?
503デフォルトの名無しさん:2007/06/13(水) 18:10:16
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だと正常に動くけど…
504デフォルトの名無しさん:2007/06/13(水) 19:14:09
>>503
spawn系では?
505デフォルトの名無しさん:2007/06/13(水) 20:10:48
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) -----
ほげ
ほげほげ
もげ
---------------------------
506デフォルトの名無しさん:2007/06/13(水) 20:15:30
ファイル読み込み時に逐次ShiftJISからUTF-8に変換するしかなくね?
あるいはRegExpに与える文字列をShiftJISバイト列で書くとか
507デフォルトの名無しさん:2007/06/13(水) 20:52:24
>506
やっぱりそれですかね。できれば標準ライブラリのみで完結したかったのですが・・・
とりあえずShift_JIS→UTF-8の変換ライブラリを導入して一応解決したので質問を終えたいと思います。
回答ありがとうございました。
508デフォルトの名無しさん:2007/06/13(水) 23:39:47
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発生しても大丈夫なのに・・・
510505:2007/06/14(木) 20:55:28
>508
その方法で動作する事を確認しました。ありがとうございました。

ただ、このUTFに一旦変換するやり方では、UTFの変換のオーバーヘッドのためか
プロトタイプ用に書いたスクリプトに速度で負ける有様です。(実際にはログが数十MBほどあります)
C++あたりで書いたほうが幸せになれるのでしょうか。
RegExpにShift_JIS文字列を渡す方法だとより難儀なはまり方をしてしまいそうです。
511デフォルトの名無しさん:2007/06/14(木) 21:48:30
>>510
っBoost
512デフォルトの名無しさん:2007/06/15(金) 01:35:36
>>510
てゆーかphobosのstd.regexpは死ぬほど遅いから
普通にRubyとかPerlの正規表現には速度で負けるとおもう
513デフォルトの名無しさん:2007/06/15(金) 02:36:06
言語仕様って最近落ち着いてるの?
514デフォルトの名無しさん:2007/06/15(金) 02:40:50
ここ一月半は更新がなかったから落ち着いてるよ

目下D2.0の仕様を検討中。
515デフォルトの名無しさん:2007/06/15(金) 04:05:09
それのどこが落ち着いていると言うのかw
516デフォルトの名無しさん:2007/06/15(金) 08:31:17
嵐の前の静けさ
517デフォルトの名無しさん:2007/06/15(金) 11:12:41
dsource.org ddl の meta.regex はどーなん?
518デフォルトの名無しさん:2007/06/15(金) 17:39:27
>>516
まさにそれだな。v1の互換も落とすって言ってるし。
519デフォルトの名無しさん:2007/06/15(金) 17:41:45
正規表現は鬼車を使えばよくね?
520デフォルトの名無しさん:2007/06/15(金) 18:00:53
互換捨てるってマジかよ
過去の自分にさえとらわれないどこまでも前向きな言語
それでこそ僕らのウォルターたん
521デフォルトの名無しさん:2007/06/15(金) 20:53:38
そんな愛しのWalterタンに今年の8月に会えるらしいぞ!
ttp://www.kmonos.net/alang/d/
・・・シアトルか、遠いな。
522デフォルトの名無しさん:2007/06/15(金) 21:16:04
未だに実用に耐えられませんか?
523デフォルトの名無しさん:2007/06/15(金) 21:20:04
言語仕様はすごくイイと思うよ 
コンパイルも早いし、C++の知識があればすんなり入り込めるのもディモールト良い
524デフォルトの名無しさん:2007/06/15(金) 22:03:31
>>522
実用の意味による。
少なくとも仕事で使うわけに行かない場合がある(標準が策定されていないとか)

採用者の責任が取れる範囲で類焼しない小さなプロダクトならいいんじゃないの?
525デフォルトの名無しさん:2007/06/15(金) 22:04:42
実用になるかどうかは、本人の能力次第でしょう。
D言語は初心者向けのの言語ではありません。初心者にはJavaかVBをお勧めします(Walter談)。
526525:2007/06/15(金) 22:05:41
ののって・・・>をれ
527デフォルトの名無しさん:2007/06/15(金) 23:46:46
バルス
528デフォルトの名無しさん:2007/06/16(土) 01:06:07
滅びの呪文?
529デフォルトの名無しさん:2007/06/16(土) 01:07:03
>>524
ABAさんのちょっと前のゲームのソースとか、もうコンパイルできなくなってて吹いた
530デフォルトの名無しさん:2007/06/16(土) 11:04:07
D言語でOSとかって作られてるのかね
531デフォルトの名無しさん:2007/06/16(土) 11:21:30
DOS禁止
532デフォルトの名無しさん:2007/06/16(土) 11:59:21
作られてるよ
533デフォルトの名無しさん:2007/06/16(土) 12:04:34
作られてないよ
534デフォルトの名無しさん:2007/06/16(土) 12:58:57
ちなみにGCを完全にオフる事は可能?
535デフォルトの名無しさん:2007/06/16(土) 13:12:57
可能
536デフォルトの名無しさん:2007/06/16(土) 13:52:46
不可能
537デフォルトの名無しさん:2007/06/16(土) 15:34:58
どちらでもない
538デフォルトの名無しさん:2007/06/16(土) 15:42:38
DFLのソースに日本語のリテラルをいれる方法はありますか?
539538:2007/06/16(土) 15:48:03
解決しました。文字コードが悪かったようです。
540デフォルトの名無しさん:2007/06/16(土) 16:14:53
GC を完全オフって、要するにメモリリークしまくりってことか。
541デフォルトの名無しさん:2007/06/16(土) 18:08:57
プログラマがdeleteのタイミングを管理するってことでは
542デフォルトの名無しさん:2007/06/16(土) 20:25:11
OSの話でカーネルを作るならって話です。
543デフォルトの名無しさん:2007/06/17(日) 02:32:40
オフにしてまでD言語を使う意味があるの
544デフォルトの名無しさん:2007/06/17(日) 15:57:42
オフにしないとD言語を使えない状況があるって事なだけなんぢゃないの?
545デフォルトの名無しさん:2007/06/17(日) 17:48:00
それは意味不明だ
546デフォルトの名無しさん:2007/06/17(日) 19:24:51
オフにしても使えるような、泥臭い部分も仕様に入ってるというのが俺の理解だけど。
547デフォルトの名無しさん:2007/06/18(月) 00:10:57
GCをオフにすると配列の結合演算~が行えないのでは

548デフォルトの名無しさん:2007/06/18(月) 04:15:15
使わなければいいだけでは?
549デフォルトの名無しさん:2007/06/18(月) 14:55:49
DMD 2.000 リリース
550デフォルトの名無しさん:2007/06/18(月) 14:57:45
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
551デフォルトの名無しさん:2007/06/18(月) 14:59:44
ktkrはいいんだけど、変更範囲多杉なので日本語訳待ち
552デフォルトの名無しさん:2007/06/18(月) 15:09:31
>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.
553デフォルトの名無しさん:2007/06/18(月) 15:23:42
ついにブランチしたか。
554デフォルトの名無しさん:2007/06/18(月) 18:33:18
ちょw
2.0はやいな
555デフォルトの名無しさん:2007/06/18(月) 18:38:07
バージョン番号の付け方が相変わらず適当すぐるんだがw
556デフォルトの名無しさん:2007/06/18(月) 20:23:07
同じ値の文字列リテラルがなぜか一緒に書き換えられる件について

//dmd2.000
char[] a = cast(char[])"hello";
const char[] b = "hello";
a[0] = 'H';
writefln(a); // Hello
writefln(b); // Hello <- ?
557デフォルトの名無しさん:2007/06/18(月) 20:25:27
っ dup
558デフォルトの名無しさん:2007/06/18(月) 20:35:01
>>556
>a[0] = 'H';
ここでROMを書き換えてるのが原因。Linuxだと落ちるのにWindowsだと落ちないという罠。
559デフォルトの名無しさん:2007/06/18(月) 20:35:25
>>556
> modification after casting away const
> No:

char[] a = cast(char[])"hello";
ここでconst(char)[] から char[] にキャストしてるけど、
これを変更するのは undefined behavior

bの型は const(char)[] じゃなくていいんか?
560デフォルトの名無しさん:2007/06/18(月) 20:37:10
>>556
http://www.digitalmars.com/d/final-const-invariant.html
Removing Invariant With A Cast のとこ読みナ
561デフォルトの名無しさん:2007/06/18(月) 20:39:26
>>558
Linuxだと落ちるのか 
いままで、何で書き換え禁止のはずのリテラルを普通に書きかえれるんだよ!
とか思ってたけど
562556:2007/06/18(月) 20:45:14
thx
ずいぶんたくさんのレスついたな
final invariant const を勉強中なんだが なるほど
ROMを書き換えるような処理は基本的に不正ってわけか
563デフォルトの名無しさん:2007/06/18(月) 21:11:19
何という不意打ち。

どう考えてもstringとか中途半端にしか使われなさそうだ。
structはコンストラクタ書けるようになったのか……?
564デフォルトの名無しさん:2007/06/18(月) 21:16:10
ってか、typeid()でconst/invariantでないじゃん。
565デフォルトの名無しさん:2007/06/18(月) 21:18:24
いや、出るけど括弧がないのか。
566デフォルトの名無しさん:2007/06/18(月) 21:20:12
writefln(typeid(typeof("str")));

char[3] になるけどいいのかな?
567デフォルトの名無しさん:2007/06/18(月) 21:21:57
>>563
structのコンストラクタはない。
568デフォルトの名無しさん:2007/06/18(月) 21:43:47
const char[] と const(char)[] は別物っぽいから string が const(char)[] の alias になっているのは
const(char)[] b = "hoge"; // string b = "hoge";
の形を一番よく使うからってことかな

あとは
invariant(char)[] a = "hoge";
char[] c = "hoge".dup;
のどちらかになるのかー
569デフォルトの名無しさん:2007/06/18(月) 21:59:02
const char[] と const(char[]) は別物??
よう分からん。
570デフォルトの名無しさん:2007/06/18(月) 22:13:45
>>569
確か同じ。
571デフォルトの名無しさん:2007/06/18(月) 22:26:00
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は(要素を変更不可能な配列型)の変数。

って理解でいいのかな
572デフォルトの名無しさん:2007/06/18(月) 22:30:22
(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
573デフォルトの名無しさん:2007/06/18(月) 22:32:18
>>571
それであってんじゃね?
うーん 難しいな
こんなにポインタ操作を意識するのは久しぶりだ
574デフォルトの名無しさん:2007/06/18(月) 23:13:14
>>572
(1)はたぶんあってる。
> Implicit Conversions
> Mutable and invariant types can be implicitly converted to const.

(2)は違うと思う。
b = "HELLO"; は参照が取り替えられてるだけ。
575デフォルトの名無しさん:2007/06/18(月) 23:20:12
>>574
え・・・ほんとだ・・・(2)
言われて見直したらそれだけのことだった orz
正直すまんかった
576デフォルトの名無しさん:2007/06/18(月) 23:34:20
誰か1.0と2.0の違いをkwsk
1.0の系統は残るの?
577デフォルトの名無しさん:2007/06/18(月) 23:36:45
もはやv1がウォルタたんの探究心を満たすことはできないだろ。
578デフォルトの名無しさん:2007/06/19(火) 00:07:03
しかし正月に1.0が出てから半年で2.0か。

来年の正月には3.0になってる??
579デフォルトの名無しさん:2007/06/19(火) 00:16:12
その次に 4.0 が出て、その次は何故か 0.5.0 になったり。
580デフォルトの名無しさん:2007/06/19(火) 00:20:52
void main(const(const(const(char)[])[])args){
        foreach(const const(char)[]arg;args)
                printf("%.*s\n",arg);
}
何が何だかよくわからん
581デフォルトの名無しさん:2007/06/19(火) 00:28:29
これはalias使わないのは悪の流れかな?
582デフォルトの名無しさん:2007/06/19(火) 00:37:44
>>580
printfにchar[]を渡すときはtoStringzいるんじゃなかったけか
583デフォルトの名無しさん:2007/06/19(火) 00:41:56
%.*sはchar*
584デフォルトの名無しさん:2007/06/19(火) 00:45:07
しまった、%.*sはchar[]だ。
585デフォルトの名無しさん:2007/06/19(火) 00:54:14
>>580
int main(in char[][] args)
これじゃだめなの?
586デフォルトの名無しさん:2007/06/19(火) 01:17:50
main(in string[] args) でいいだろ。
587デフォルトの名無しさん:2007/06/19(火) 01:19:35
とりあえず 2.0 系にして色々やってみて、
やばかったらまた 1.0 系に戻すつもりだったりして。
588デフォルトの名無しさん:2007/06/19(火) 07:18:07
>>293
これで、いちいちaliasしなくても良くなったな。
589デフォルトの名無しさん:2007/06/19(火) 08:29:19
while文とかfor文とかの中でないといけないもので最初(または最後)にだけ実行される機能っての結構あるよね
そこをこうfirst文とかで自動でやってくれたら楽じゃね
いや自分で最初かどうかのbool値とかループカウンタ用意するのもいいけどさ・・・
どうにかなりそうな面倒さだったんでついwww
590デフォルトの名無しさん:2007/06/19(火) 08:48:27
最初は for の最初のとこでいいと思うけど、
最後は俺も欲しい。
前に話題に出た事あったような気はするんだけど、
結局うやむやに終わったんだっけか?
591デフォルトの名無しさん:2007/06/19(火) 08:49:09
あるいは for の前だな >最初の
592デフォルトの名無しさん:2007/06/19(火) 14:33:49
>>468 のロードマップはなんだったんだろうなw
593デフォルトの名無しさん:2007/06/19(火) 14:53:41
forとかwhileの外に書くと関連性があるのやらないのやらでたまに困る
594デフォルトの名無しさん:2007/06/19(火) 15:00:56
そういうときは
{/*処理の説明*/
 処理本編
}
というように括る。
595デフォルトの名無しさん:2007/06/19(火) 17:18:08
while .. finally
for .. finally
とか?

perl には while .. continue 構文があったな。
596デフォルトの名無しさん:2007/06/19(火) 18:21:22
invariant表明に括弧いるようになったんかいな・・・
きたねえのう
597デフォルトの名無しさん:2007/06/19(火) 19:11:47
{}

ブロック機能を使え
598デフォルトの名無しさん:2007/06/19(火) 19:20:47
>>596
さすがに醜い気がするな
599デフォルトの名無しさん:2007/06/19(火) 21:47:23
>595
Pythonにもwhile-elseとfor-elseがあるな。
600デフォルトの名無しさん:2007/06/20(水) 07:46:58
というかD2.0はalias stringがあるだけで使う価値があると思う
601デフォルトの名無しさん:2007/06/20(水) 13:51:26
>>600
1.016にもあるよ
602デフォルトの名無しさん:2007/06/21(木) 02:22:13
こうなると1.016と2.000のどっちを使うか迷うなあ
当然2.000を使いたいのだがライブラリ全滅だし
603デフォルトの名無しさん:2007/06/21(木) 16:18:15
え 2.0って既存のライブラリ使えないの?!
604デフォルトの名無しさん:2007/06/21(木) 16:21:41
>>603
phobosは使えるけど、それ以外のユーザーが作成したやつは全滅かも。
605デフォルトの名無しさん:2007/06/21(木) 17:03:23
今までもライブラリが使えなくなることはよくあったんだから
問題は1.x/2.x両方に対応することができるのかってことだよね
1.xが中途半端に生き残ってる限りライブラリ開発が進めにくいのが痛い
606デフォルトの名無しさん:2007/06/21(木) 17:07:08
>>605
>>596とかどうやって切り替えればいいんだろうな。
Cみたいなテキストマクロが使えればv2なら括弧だけ補うなんてこともできるんだが。
607デフォルトの名無しさん:2007/06/21(木) 17:09:19
そういう部分もカンファレンスで議論するために2.0リリースを早めたのかな
2.0系って下位互換をそれほど犠牲にしてまで使いやすい仕様になってるの?
仕様書が見あたらなくてよくわからない・・・
608デフォルトの名無しさん:2007/06/21(木) 17:12:18
あんまり変わってない気がするなあ・・・
アルファだし叩き台の意味もあるんだろうが、
どうせ互換性切るなら構造体リテラルとか連想配列リテラルとかも考え直して欲しい。
609デフォルトの名無しさん:2007/06/21(木) 17:27:00
たしかに・・・
動的配列も・・・・
610デフォルトの名無しさん:2007/06/21(木) 19:31:07
カンファレンスにはぜひマルチバイト文字列圏の人間にも参加して欲しい
611デフォルトの名無しさん:2007/06/21(木) 22:24:45
そのうちアスペクト指向とか取り入れられたりすることを期待

>>610
FAQに「Why not in Europe?」とかあるものなw
612デフォルトの名無しさん:2007/06/21(木) 23:43:57
>>611
FAQからして日本は眼中にない罠w
つーか おいおい
よく見たらMC++DのAndrei Alexandrescuも発表者として参加するのか
613デフォルトの名無しさん:2007/06/22(金) 01:10:40
2.0のリリースっていつなんだろ。
出たら何か作ろ!
614デフォルトの名無しさん:2007/06/22(金) 02:35:44
>>613
>>549

もっと仕様が定着したら、みたいな意味か?
615デフォルトの名無しさん:2007/06/22(金) 02:39:07
まだΑ版だろ
616デフォルトの名無しさん:2007/06/22(金) 10:47:55
あぼーん版だな
617デフォルトの名無しさん:2007/06/22(金) 20:11:25
constメンバ関数増えてるのか
618デフォルトの名無しさん:2007/06/22(金) 20:13:15
invariantメンバ関数まであるみたいだな。
619デフォルトの名無しさん:2007/06/22(金) 22:12:36
うお  ver.1.017がいつのまにかリリースされている・・・
620デフォルトの名無しさん:2007/06/22(金) 22:40:42
D 1.017

New/Changed Features
 Added __VENDOR__ and __VERSION__.
Bugs Fixed
 std.compiler now is automatically updated.
621デフォルトの名無しさん:2007/06/22(金) 22:57:36
dmd.zip の方か・・・。
622デフォルトの名無しさん:2007/06/22(金) 23:03:38
alias char[] string;
string s = new string(80);
s[] = 'a';
とか、してたトコは逆に、charにしないといけないのか?>2.0
623デフォルトの名無しさん:2007/06/22(金) 23:16:14
string hoge() { return "hoge"; }
writefln(std.string.join([cast(string)"hoge", hoge(), hoge()], ","));
writefln(std.string.join(["hoge", hoge().idup, hoge().idup], ","));
なんか、びみょー。
624デフォルトの名無しさん:2007/06/23(土) 01:28:50
>>620
これってstd.compilerが自動的にアップデートをチェックしてくれるってこと?
625デフォルトの名無しさん:2007/06/23(土) 01:48:11
>>624
dmdをアップデートさせたらstd.compilerの内容もアップされるということか
626デフォルトの名無しさん:2007/06/23(土) 09:43:37
コンパイラに関する情報をphobosからなくしたってことか
627デフォルトの名無しさん:2007/06/23(土) 16:40:00
>>620-621
消えてます?
628デフォルトの名無しさん:2007/06/23(土) 16:51:53
>>627
消えたね。

Walterタン曰く
>It's not done yet!
629デフォルトの名無しさん:2007/06/23(土) 17:45:25
おういえ、さんくすです
630デフォルトの名無しさん:2007/06/23(土) 18:23:07
なんか最近 開発陣も混乱してる感があるなw
631デフォルトの名無しさん:2007/06/23(土) 20:20:36
陣っていうほどいるの?
をるちゃんだけでやってると思ってた
632デフォルトの名無しさん:2007/06/24(日) 03:12:25
最終的にはWalterタンの鶴の一声で決まってる感があるけどw
議論はニュースグループとかでみんなでしてるし
コンパイラもオープンソースだろ
みんな開発に参加しる!
633デフォルトの名無しさん:2007/06/24(日) 03:39:28
純正コンパイラはプロプライエタリじゃねえの?
634デフォルトの名無しさん:2007/06/24(日) 12:18:01
やっぱgdcじゃだめ?w
純正も完全なオープンソースにならねぇかな
635デフォルトの名無しさん:2007/06/24(日) 12:51:08
俺、プロプライエタリって言えないんだよなあ。
客先とかで絶対に噛む。
636デフォルトの名無しさん:2007/06/24(日) 13:02:10
クローズドでいいじゃんねぇ?w
637デフォルトの名無しさん:2007/06/24(日) 15:00:27
>>635
まず「プロプラ」って言ってみ。それが言えたら、その嬉しさのままに「言えたり!」って
叫んだら良いよ。これで君も「プロプラ言えたり!」。
638デフォルトの名無しさん:2007/06/24(日) 16:51:34
プロペラになった
639デフォルトの名無しさん:2007/06/24(日) 18:17:01
2.0 対応の htod ほすぃ・・・
640デフォルトの名無しさん:2007/06/24(日) 18:50:25
mixin(include!("hoge.h"));
641デフォルトの名無しさん:2007/06/24(日) 20:00:33
そのincludeはまじであるのかい?
642デフォルトの名無しさん:2007/06/24(日) 20:12:04
ねえよ。
643デフォルトの名無しさん:2007/06/24(日) 21:36:38
>俺、プロプライエタリって言えないんだよなあ。
>客先とかで絶対に噛む。

>このスレを見ている人はこんなスレも見ています。(ver 0.20)
>発音を良くするスレ2 [ENGLISH]
644デフォルトの名無しさん:2007/06/24(日) 22:59:12
warosu
645デフォルトの名無しさん:2007/06/25(月) 03:15:28
マングリングって言葉の響き、エロいよな
646デフォルトの名無しさん:2007/06/25(月) 11:08:35
tangoは2.0様子見っすか
647デフォルトの名無しさん:2007/06/25(月) 12:07:37
なんつーかWalterタン
ライブラリとかまわりと協調する気
ゼロの気がするんだが気のせいか
648デフォルトの名無しさん:2007/06/25(月) 12:15:48
そらそうだろ。
そこら辺を意識して負の遺産が山積みの言語にするのは
Walterタンが D に求めているものではないだろう。
649デフォルトの名無しさん:2007/06/25(月) 12:23:17
そして正の遺産も積まれないわけですね
650デフォルトの名無しさん:2007/06/25(月) 12:23:46
賽の河原だな
651デフォルトの名無しさん:2007/06/25(月) 12:24:59
「完成」 すれば、そこからいくらでも正の遺産は積めるだろう。
それまでは実用できないってのは、今までで証明されている。
652デフォルトの名無しさん:2007/06/25(月) 12:25:45
まあ問題は、いつ 「完成」 するのかだな・・・。
653デフォルトの名無しさん:2007/06/25(月) 12:44:05
せめて「完成」してから1.0を名乗って欲しかったのは俺だけではあるまい
もうなにがなんだかよくわからナス
どうせ「完成宣言」も永遠にしないんだろ
654デフォルトの名無しさん:2007/06/25(月) 13:34:57
最後の一行は厨臭い願望だな。
655デフォルトの名無しさん:2007/06/25(月) 14:25:25
D言語に完成なんて求めてどうするんだ?
こいつは永遠の実験言語だってば
656デフォルトの名無しさん:2007/06/25(月) 14:29:58
その恐れはあるが、完成しないともったいないとは思う。
657デフォルトの名無しさん:2007/06/25(月) 14:33:15
Walterタンが生きている限り変わり続ける希ガス
しかし砂上の楼閣じゃ使い物にならない罠
なんかタチの悪い社会主義みたいだw

さすがに8年経とうとしてるし
Dが世の中に受け容れられるかどうかはこのへんが正念場だと思う
カンファレンスで今後のビジョンも示されるらしいから期待して待つよ
658デフォルトの名無しさん:2007/06/25(月) 15:24:05
リリース版とRC、BETAを分ければいいのに。
659デフォルトの名無しさん:2007/06/25(月) 16:37:09
名前を分けたって物凄い勢いで変わることに違いはあるまい。
660デフォルトの名無しさん:2007/06/25(月) 17:21:02
この流れ……
飛鳥配列を思い出す
661デフォルトの名無しさん:2007/06/25(月) 17:32:09
>>657
永久革命ってやつだね
政治でやられると確かにメチャメチャタチ悪いw

でもプログラム言語だけのことならこんなのも世の中に一つぐらいはあってよさそうな気もしてきたw
662デフォルトの名無しさん:2007/06/25(月) 18:30:09
>>658
今の段階だと分けるにしても使用者層が少なすぎるし
リリース版だからといって人に勧められるほど安定化してるわけでもないと思う
2.x系がベータという位置づけなのかもしれないけど

>>661
ユーザーとしては困るw

カンファレンスがシアトルで開催ってのは企業等へのアピールという
思惑もあるだろうからサポート企業が出てきてくれることに期待
個人的にはWolframタンとかも呼んでホスィw
663デフォルトの名無しさん:2007/06/25(月) 18:43:46
1.xでさえ人柱専用なのに2.xはさらに仕様検討用だからなw
2.xで何か作ることを考えるのは早すぎる
やるなら1.xにしなされ
664デフォルトの名無しさん:2007/06/26(火) 16:30:54
ところで・・・
Digital Mars社のTシャツにマックスウェル方程式柄があるんだが
ありゃDigital Marsとなんか関係あるのか?w
665デフォルトの名無しさん:2007/06/26(火) 18:05:30
666デフォルトの名無しさん:2007/06/26(火) 19:37:14
何かシンボル的なものなのかね
そういえば、物理屋に言わせればマクスウェル方程式ってスゲー美しいらしいが
アインシュタインも理想としたと聞く
667デフォルトの名無しさん:2007/06/26(火) 19:48:22
ウォルたんの趣味?
668デフォルトの名無しさん:2007/06/26(火) 19:52:05
マクスウェル方程式の真の美しさは
四元ベクトル形式じゃないと分かんないよ。
669デフォルトの名無しさん:2007/06/26(火) 20:02:04
>>664
たんにクールだろってことだと思うけどなw

>>668
「四元ベクトル形式」っていう言葉ははじめて聞いた気がするけど
テンソル形式のことだよね?

特殊相対論までならそれでもいいんでない?
と思いはするけどたしかに共変形で書いて欲しかった気もするw
670デフォルトの名無しさん:2007/06/27(水) 10:44:20
class A {
A *getthis() {
return( &this );
}
};

int main()
{
auto a= new A();
printf( "%p %p", a.getthis(), &a);
}



thisのアドレスとインスタンスのアドレスが違うのは、なんでだろう
クラス内でインスタンスのアドレスはとれないもんかな
671デフォルトの名無しさん:2007/06/27(水) 10:54:01
違って当たり前だろう・・・。
672デフォルトの名無しさん:2007/06/27(水) 11:01:30
D 1.017
673デフォルトの名無しさん:2007/06/27(水) 11:07:40
>>671
違う理由はなんとなくわかったんですが、
インスタンスのアドレスとれないでしょうか

そのアドレスもGCでかわる可能性があるんでしょうか
674デフォルトの名無しさん:2007/06/27(水) 11:10:40
インスタンスのアドレスとって、それを何に使いたいの?
使い道がよく分からないんだけど。
675デフォルトの名無しさん:2007/06/27(水) 11:27:46
>>670
class A{
  void *getthis(){
    return cast(void*)this;
  }
}

void main(){
  auto a= new A();
  printf( "%p %p", a.getthis(), cast(void*)a);
}
676デフォルトの名無しさん:2007/06/27(水) 11:51:58
>>675
あ、なるほど・・ありがとうございます
677デフォルトの名無しさん:2007/06/27(水) 19:11:21
1.017の.initの変更ってどういうこと?
678デフォルトの名無しさん:2007/06/27(水) 21:09:08
> The .init property for a variable is now based on its type, not its initializer.
変数を使った .init プロパティは、
その初期化に使った値ではなく、
その型に対して使った場合と同じ値
(変数を初期化しなかった場合に入れられる値)になりました。
679デフォルトの名無しさん:2007/06/27(水) 21:13:48
うわぁきっつぅ・・・
かなり書き直しいるなあ
680デフォルトの名無しさん:2007/06/27(水) 21:23:50
1.x系でもこれかwww
なんだってまた今更こんな変更が・・・w

ちなみになんかホームページすごい見にくい気がする
コンパイラ履歴のolder versionsからのリンク先が
1.0までで終わっているのはなんで?
681デフォルトの名無しさん:2007/06/27(水) 21:28:55
一応誤訳じゃないか実行して確かめてけれ。
俺は Mac だから_。
682677:2007/06/27(水) 21:29:55
やっぱりそういうことか(;´Д⊂)
自分を信じたくなかた・・・テラヒドス

>>680
1.0系と2.0系で別のページになっている
上のほうに切り替え用のリンクがあったはず
1.0系のchange logにはもっと古いバージョンのも書いてあるよ
683デフォルトの名無しさん:2007/06/27(水) 21:31:29
俺は元々変な仕様だなあと思ってたから
この変更には納得できる。
684デフォルトの名無しさん:2007/06/27(水) 21:39:55
>>682
漏れも信じたくなかったw

んで別のページになっているのはわかるんだけど
例えば2.0系のコンパイラのページで
上のolder versionsの最新がD 1.00で止まってるのは
なんか使いにくいなと思ったもので・・・
この場合だと1.00以降のログが表示されないとまずくない?

>>683
そっか 漏れはゲームつくるときに初期値化すぐできて便利だなー
とか思っていたんだが・・・orz
685デフォルトの名無しさん:2007/06/27(水) 21:46:17
ちょっと処理の巻き戻しするときとか便利だったんだが、奇妙な機能ではあったから仕方ないな。
686デフォルトの名無しさん:2007/06/28(木) 06:29:26
型の初期値なんてメリットあんの?
687デフォルトの名無しさん:2007/06/28(木) 06:37:53
typedef int myint = 7;
とかやってる型の初期値とるときは有用なんじゃね
688デフォルトの名無しさん:2007/06/28(木) 07:20:23
そうかtypedefすればいいのか
689デフォルトの名無しさん:2007/06/28(木) 07:55:24
>>687
それ知らんかったわ。
さすがウォルターたんだ
690デフォルトの名無しさん:2007/06/28(木) 08:46:26
そんなことができたのかw
すげーや。
691デフォルトの名無しさん:2007/06/28(木) 10:22:11
DMD 2.001 リリース
692デフォルトの名無しさん:2007/06/28(木) 10:46:24
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.
693デフォルトの名無しさん:2007/06/28(木) 10:47:47
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
694デフォルトの名無しさん:2007/06/28(木) 11:52:49
{
int a = 10;
a = 20;
printf("%d %d %d",a, a.init, int.init); // 20 0 0
}
なんで a.init == ini.init に変えちゃったんだろう
695デフォルトの名無しさん:2007/06/28(木) 12:06:38
http://www.wikiroom.com/sakurai/index.php?DJcode#q4a42aff
DJcodeを2.001に対応させときましたノシ
696デフォルトの名無しさん:2007/06/28(木) 13:40:40
>>695
お世話になったことは無い身ですが、
メソッド名はDのスタイルガイドに従ってlowerCamelにしませんか。
697デフォルトの名無しさん:2007/06/28(木) 14:00:08
うほ スタイルガイドだと定数名はすべて大文字なのか
なんで先頭文字だけ大文字にしないのかしら?
先頭ですよってわかりやすいから?
698デフォルトの名無しさん:2007/06/28(木) 14:17:54
C のマクロ時代からの名残なんじゃないかな。
699デフォルトの名無しさん:2007/06/28(木) 14:57:45
Javaもそうだしな。趨勢に合わせてくれる事はいいよ。
700デフォルトの名無しさん:2007/06/28(木) 18:53:22
utf8_euc()とかはlowerCamelじゃなくていいよね?
695じゃないけど気になった。
701デフォルトの名無しさん:2007/06/28(木) 19:07:40
lowerCamelにするならutf8Encだな。
702デフォルトの名無しさん:2007/06/28(木) 19:10:38
メソッド呼び出しを英語として読み下したとき、
主語->動詞の動詞が大文字になっちゃって違和感があるんじゃなかろーか。
703デフォルトの名無しさん:2007/06/28(木) 19:11:58
encodeToUtf8
704デフォルトの名無しさん:2007/06/28(木) 19:12:45
utf82eucだろ
705デフォルトの名無しさん:2007/06/28(木) 19:12:50
普通は主語がオブジェクトになるんじゃないかな。
706デフォルトの名無しさん:2007/06/28(木) 19:13:42
UTF-82 って凄いですね><
707デフォルトの名無しさん:2007/06/28(木) 19:14:32
いや、オブジェクトは目的語になることもあるか。
708デフォルトの名無しさん:2007/06/28(木) 19:14:58
typedef ubyte[] EucString;
EucString toEuc(char[] utf8_string);

とかが綺麗そうだけどな。
709デフォルトの名無しさん:2007/06/28(木) 19:23:34
>>708
char[] toUtf8(EucString euc_string);
を用意しても、EucString型オブジェクトのプロパティっぽくは使えないんだな…
710デフォルトの名無しさん:2007/06/28(木) 19:32:03
オブジェクトのメソッド名は動詞で始めるべしと言うけれど、関数の場合どーしたもんだろうね。

Dの場合 method(Type[] arg) が arg.method() とも書ける仕様があるけど、
動詞で始めた場合、結局 arg.method() と書かないと不自然になっちゃうのね。
711デフォルトの名無しさん:2007/06/28(木) 19:33:14
charをUTF-8でない文字に使うのは誤り?
712デフォルトの名無しさん:2007/06/28(木) 19:34:08
前置詞で終わるようにするとか。
713デフォルトの名無しさん:2007/06/28(木) 19:46:08
indexOf()とかinsertAt()とか?
俺は、それっぽければいいと思ってるので、英語の文法にはあまりこだわらないな。
714デフォルトの名無しさん:2007/06/28(木) 19:49:18
エスペラント語にすれば順序気にしなくて済むよ
715デフォルトの名無しさん:2007/06/28(木) 20:27:32
いちいち変数を格変化させるわけですね。
716デフォルトの名無しさん:2007/06/28(木) 21:23:41
三角関数とかベータ関数とか正規分布関数とか動詞にはできないなあ。
culcSin(double)
717デフォルトの名無しさん:2007/06/28(木) 21:28:43
calc
718デフォルトの名無しさん:2007/06/28(木) 21:31:16
クルックー
719デフォルトの名無しさん:2007/06/28(木) 21:33:18
>>715
Jes. 下四つとも一緒になるし。

int hogeo, fugeo;
c^uHavas(hogeo, fugeon);
c^uHavas(fugeon, hogeo);
hogeo.c^uHavas(fugeon);
fugeon.c^uHavas(hogeo);
720デフォルトの名無しさん:2007/06/28(木) 21:35:51
alias作るテンプレートがほしいなw
721デフォルトの名無しさん:2007/06/28(木) 21:36:31
>>719
キモいw
722デフォルトの名無しさん:2007/06/28(木) 21:48:34
スペルミスorz
723デフォルトの名無しさん:2007/06/28(木) 22:04:08
予約語以外は日本語も通るから日本語でやってみようぜ。
予約語もaliasすれば大丈夫。

alias real 実数;
実数 正弦(実数 角度);
724デフォルトの名無しさん:2007/06/28(木) 22:04:28
というか、Dは日本語も使えるんだから、
alias char[] 文字列

文字列 フルパスからファイル名だけを取得する(文字列 フルパス)
でいいじゃん。
725デフォルトの名無しさん:2007/06/28(木) 22:11:02
クラスの場合なら、

class 固定小数点数 { ... }


文字列 = 小数.を文字列に変換();
小数.の整数部 = 整数;

とか。
726デフォルトの名無しさん:2007/06/28(木) 22:13:02
なでしこ顔負けだな。
727デフォルトの名無しさん:2007/06/28(木) 22:31:55
演算子とかが反って打ち込みにくいような気がする。
728デフォルトの名無しさん:2007/06/28(木) 23:03:46
たのしそうだwwwww
なんかネタでそういうの組んで見たくなったwwwww
729デフォルトの名無しさん:2007/06/28(木) 23:08:48
このワクワク感は前スレの演算子オーバーロード以来だな。
730デフォルトの名無しさん:2007/06/28(木) 23:14:05
>>729
組み合わせろ把握
731デフォルトの名無しさん:2007/06/29(金) 00:02:23
>>727-730
wwww
伏線上手すぎるだろ。
なんだこの少年漫画ばりの盛り上げ方は。
732デフォルトの名無しさん:2007/06/29(金) 00:56:46
ifelse.d:1: invalid UTF-8 sequence
ifelse.d:1: invalid UTF-8 sequence
ifelse.d:1: unsupported char 0x81

とかボロボロエラーが出るんだけど、俺だけ?
733デフォルトの名無しさん:2007/06/29(金) 01:01:49
ソースコードの文字コードをUTF-8に直す作業に戻るんだ
734デフォルトの名無しさん:2007/06/29(金) 01:05:57
いや、UTF-8 なんだけど。
環境は MacOSX GDC 0.23 (D 1.007)

例えば 「もし」 とか定義しようとするとあかん。
735デフォルトの名無しさん:2007/06/29(金) 01:09:11
Macじゃしかたないのでは
736デフォルトの名無しさん:2007/06/29(金) 01:11:36
Mac とか関係あるのか?
737デフォルトの名無しさん:2007/06/29(金) 01:27:56
もうわけ分からん。
ttp://ranobe.com/up/src/up197596.zip
738デフォルトの名無しさん:2007/06/29(金) 01:37:37
>>734
http://www.kmonos.net/alang/d/lex.html
> ソースファイルが BOM で始まらない場合は、
> 最初の2文字は必ず U0000007F 以下でなければなりません。
にひっかかってるとか?
739デフォルトの名無しさん:2007/06/29(金) 01:39:56
最初の2文字は ASCII 文字だなあ。
とりあえずソースは >>737 にある。
Windows だと大丈夫なのかな?
740デフォルトの名無しさん:2007/06/29(金) 01:49:00
738だけどWindowsでもだめだったよ
1.014
741デフォルトの名無しさん:2007/06/29(金) 01:50:34
そうか・・・。じゃ、本格的なバグか?
742デフォルトの名無しさん:2007/06/29(金) 01:51:25
ifelse.dの[、]、io.dの[「][」]を削除したらコンパイルできるようになったよ
@Win2k, dmd1.015
743デフォルトの名無しさん:2007/06/29(金) 01:53:46
お、そいつらは「普遍基本文字」とやらに含まれないのかな?
まあ、Mac だとそれ以外でもエラーになるけど。
744デフォルトの名無しさん:2007/06/29(金) 01:56:52
というわけで、演算子オーバーロードを使って
条件文を日本語っぽく書けるようにするテスト。
ttp://ranobe.com/up/src/up197598.zip
745デフォルトの名無しさん:2007/06/29(金) 07:10:41
>>744
うっはwwなでしこwww
746デフォルトの名無しさん:2007/06/29(金) 10:01:00
DMD1.014 + Codeblocks @ Vistaで試してみたんだが、
メジャーな言語はだいたい通る。
西欧語(ローマ字、キリル文字、ギリシャ文字)は特に問題なし。
日本語や中国語は約物が通らない。
アラビア語は母音記号やシャッダ、スクーンが入るとNG。
Vistaだと自動的に右から左に書く書式に直されるので、使いづらい。
インド諸語や記号類はだめだったなあ。
シグマはいけたが、ルートはだめ。

個人的にはギリシャ文字が通るのは結構有難いな。
747デフォルトの名無しさん:2007/06/29(金) 10:58:09
要するに、基本的に記号類はアウトってことか。
748デフォルトの名無しさん:2007/06/29(金) 11:21:26
コンパイラ的にアウトにしないとなんか不都合でもあるのかしら?
749デフォルトの名無しさん:2007/06/29(金) 11:23:42
全角の演算子が識別子に使えたら不都合ではあるだろうね。
750デフォルトの名無しさん:2007/06/29(金) 17:20:19
Dで使用可能な普遍基本文字(独自定義の模様)
ttp://www.algonet.se/~afb/d/universalalphas/

ttp://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.learn&artnum=3458
↑の回答から誘導された
751デフォルトの名無しさん:2007/06/29(金) 17:24:24
>>750
ISO/IEC 9899:1999 (E)って書いてある訳だが?
752デフォルトの名無しさん:2007/06/29(金) 17:27:38
あ。確かに。
すんませんした
753デフォルトの名無しさん:2007/06/29(金) 22:39:20
better C が欲しかった俺にとって D は結構良い選択肢なんじゃないかと思えて来た。
C のライブラリがそのまま使えて、C++ よりコンパイル速度が速いらしいというのは良いね。
754デフォルトの名無しさん:2007/06/29(金) 22:41:34
ああ、なんかDigitalMarsのCライブラリにバグがあるような気がしてきた
755デフォルトの名無しさん:2007/06/30(土) 02:23:20
え でもあれってポーティングしただけじゃないの?
756デフォルトの名無しさん:2007/06/30(土) 08:53:08
やっぱDが一番使いやすい言語だな。
757デフォルトの名無しさん:2007/06/30(土) 09:09:21
そういやopIndexで多次元配列的なことはできるの?
758デフォルトの名無しさん:2007/06/30(土) 09:43:55
>>757
> i = a[5,6,7]; // i = a.opIndex(5,6,7); と同じ
> a[i,3] = 7; // a.opIndexAssign(7,i,3); と同じ
とか
759デフォルトの名無しさん:2007/06/30(土) 11:22:44
まじDつかいやすいな
760デフォルトの名無しさん:2007/06/30(土) 20:19:11
delegate は一度使うと癖になるな
761デフォルトの名無しさん:2007/06/30(土) 21:17:34
delegateはC#のパクリ
762デフォルトの名無しさん:2007/06/30(土) 21:29:46
ただのクロージャオブジェクトだろ。
763デフォルトの名無しさん:2007/06/30(土) 21:30:06
そもそもDにオリジナルの新機能ってなんかあるの?
764デフォルトの名無しさん:2007/06/30(土) 21:37:50
ないよ。
765デフォルトの名無しさん:2007/06/30(土) 21:53:24
C++0xの案も含めた様々な言語の良いとこ取りに過ぎない。
766デフォルトの名無しさん:2007/06/30(土) 21:55:42
"\&copy;" こういうの採用したプログラミング言語って先例あるか?
767デフォルトの名無しさん:2007/06/30(土) 22:27:17
珍しいが新機能ってほどでもないなw
768デフォルトの名無しさん:2007/06/30(土) 22:27:53
良いトコ取りを良い感じにまとめてくれた言語が 5 年毎に作られたら嬉しいな
769デフォルトの名無しさん:2007/07/01(日) 01:26:23
10年ごとでいい
770デフォルトの名無しさん:2007/07/01(日) 01:28:31
1つあれば十分。
771デフォルトの名無しさん:2007/07/01(日) 03:45:29
いいや4つくれ
772デフォルトの名無しさん:2007/07/01(日) 03:55:55
2つでじゅうぶんですよ
773デフォルトの名無しさん:2007/07/01(日) 05:31:54
ちなみにコードの可読性ってJavaより低い気がするんだけど漏れだけ?
774デフォルトの名無しさん:2007/07/01(日) 07:39:32
慣れの問題
どちらもC系で微妙に似ているから逆に違和感がある
775デフォルトの名無しさん:2007/07/01(日) 07:43:54
あ、↑の二行目はあくまでオレの場合だから、他に理由が無いとも限らんが
まあ、標準ライブラリの恩恵とかはあるかも
776デフォルトの名無しさん:2007/07/01(日) 09:32:40
ネイティブで1つ、
インタプリタで1つ、
IL で1つ、の合計3種類あれば十分だな。
ついでに、それぞれ手続き型、関数型、論理型の3種類で、
合計9個の言語があればいい。
777デフォルトの名無しさん:2007/07/01(日) 09:57:40
ネイティブでもsandbox化できるからインタプリタもilもイラネ。
手続き型を単純にしたのが関数型だから関数型イラネ。
778デフォルトの名無しさん:2007/07/01(日) 13:52:27
>>758
それできるの?
a[5][6][7]
とかがいいんだけど
779デフォルトの名無しさん:2007/07/01(日) 13:58:43
できんこともないが。

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]);
}
780デフォルトの名無しさん:2007/07/01(日) 14:02:33
>>778
できるよ。
781デフォルトの名無しさん:2007/07/01(日) 14:31:41
>手続き型を単純にしたのが関数型
???
782777:2007/07/01(日) 16:07:52
手続き型にも関数あるじゃん。
783デフォルトの名無しさん:2007/07/01(日) 16:10:12
偶然、名前が同じだけだろ。
784デフォルトの名無しさん:2007/07/01(日) 16:13:22
関数型の関数という言葉と、手続き型言語の中の関数を混同して勘違いする
人間がまだ居たのには驚いたけど、D言語とは全く関係無いしスルーの方向で。
785デフォルトの名無しさん:2007/07/01(日) 16:17:01
実際の所、関数型の関数と手続き型の副作用のない関数は一緒な罠。
786デフォルトの名無しさん:2007/07/01(日) 16:19:10
手続き型では普通高階関数とか作れねーだろ。
787デフォルトの名無しさん:2007/07/01(日) 16:20:58
788デフォルトの名無しさん:2007/07/01(日) 16:22:44
>>787
>一方、#関数を戻り値とする関数を書くことは難しい。 これは戻り値となる関数の実行時にその関数を定義した時点での環境が必要になる(クロージャ)ためである。
789デフォルトの名無しさん:2007/07/01(日) 16:25:31
プログラミングにはまったく疎い人間が聞いてみるが
数学的な意味での関数(写像)を実際に実現できてる
関数のみで構成されてるのが関数型言語って理解でおk?
790デフォルトの名無しさん:2007/07/01(日) 16:26:29
関数型言語は、関数を値のように引数に取ったり戻り値として返したりできる言語だと思う。
791デフォルトの名無しさん:2007/07/01(日) 16:28:26
それってなんてdelegate
792デフォルトの名無しさん:2007/07/01(日) 16:29:12
数学に当てはめようとするのは落とし穴
碌な事が無い
793デフォルトの名無しさん:2007/07/01(日) 16:30:08
>>788
クロージャの実装なんて簡単だろ、常考。スタックの代わりをヒープから確保してespをずらすだけっしょ?
ただ最適化の面から属性で有効にするようにする必要はあるけど。
794デフォルトの名無しさん:2007/07/01(日) 16:33:01
>手続き型を単純にしたのが関数型

まあ、何にせよ最初の↑は無いよな…
795デフォルトの名無しさん:2007/07/01(日) 16:33:11
>>793
言語的にサポートされてない時点で無理がある。
796デフォルトの名無しさん:2007/07/01(日) 16:35:29
見てて思ったが結局は言語レベルあるいはコンパイラレベルで
どこまでやってもらえるかって話に思えるが
その仕様の違いで手続き型と関数型というように分類してるってこと?
結局はどんなプログラミング言語でも他のプログラミング言語の
動きをエミュしようと思えばできるんだろ
手間がどんだけかかるかの問題であって
797デフォルトの名無しさん:2007/07/01(日) 16:40:45
>>789
基本的にはそうかな。
基本的には引数と戻り値があるべきとしてるし、
基本的には同じ引数から同じ値を返すべきとしてるからな。
関数型は。
まあ、そこまで完全にやってる言語は少ないけど。
798デフォルトの名無しさん:2007/07/01(日) 16:42:08
遅延評価はどうよ
lazy
799デフォルトの名無しさん:2007/07/01(日) 16:42:25
>>796
プログラムの組み方の思想レベルでも違いはあるんだけど、
そう思っても大きな間違いはないと思う。
800デフォルトの名無しさん:2007/07/01(日) 16:43:12
D はラムダをサポートしてるから、
あとは関数を動的に作って返せるようになれば
関数型を名乗っていいと思う。
801デフォルトの名無しさん:2007/07/01(日) 16:57:29
>>798
それはただのdelegateだしょ
802デフォルトの名無しさん:2007/07/01(日) 16:59:42
>>788
よくわからんのだけど、デリゲート返すだけじゃあかんの?
803デフォルトの名無しさん:2007/07/01(日) 17:13:24
>>802
delegate内で使う親関数の変数をヒープに取れば同じ…かな?
804デフォルトの名無しさん:2007/07/01(日) 17:26:56
デリゲートの環境ってスコープを抜けると無効になってしまうのか
何で D はクロージャを入れなかったんだろう
805デフォルトの名無しさん:2007/07/01(日) 17:32:44
>>804
そういうの気にせずにクロージャっぽくつかってたんだが、ダメだったのか・・・?
806デフォルトの名無しさん:2007/07/01(日) 17:32:54
ニュースグループで聞いてみたら?
807デフォルトの名無しさん:2007/07/01(日) 17:42:10
クロージャが無いのは仕方がないとして、クローズしてない物をクロージャと呼ぶのは
やめて欲しいな。
808デフォルトの名無しさん:2007/07/01(日) 17:51:36
話が変わって恐縮なのだけど、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;
}
809デフォルトの名無しさん:2007/07/01(日) 17:55:12
>>807
それ意味が違うから
810デフォルトの名無しさん:2007/07/01(日) 17:59:43
>>808
2.001?
俺はまだDMD2.000のままだけど、エラーでない。

http://d.puremagic.com/issues/show_bug.cgi?id=1277
これ直すときにエンバグしたんじゃないかね。
811デフォルトの名無しさん:2007/07/01(日) 18:03:47
>>808
class A{
 final: const int func(){ return 1; }
}
とすると通るから、バグだろうな
812デフォルトの名無しさん:2007/07/01(日) 18:07:07
バグを直してもそれでまたバグが増えるんじゃあ・・・・
いつも思うんだけどこういうのって系統的なチェックの方法とか
ノウハウってないの?
813デフォルトの名無しさん:2007/07/01(日) 18:08:06
っ DStress
814808:2007/07/01(日) 18:10:35
2.001です。なるほど、バグか。サンクス。
やっぱまだ2.0ははやいか……
815デフォルトの名無しさん:2007/07/01(日) 18:17:50
>>809
どゆこと?
816デフォルトの名無しさん:2007/07/01(日) 18:18:20
struct Vertex {
float[3] pos;
};

Vertex a= {
pos:[0.0f, 10.5f, 10.5f]
};

うう・・イニシャライズできない・・・

817デフォルトの名無しさん:2007/07/01(日) 18:19:56
>>813
サンクス Linuxしかないのか
チェックエラーでまくりワロタ
Walterタンはこれを使っているのかな?

>>814
報告よろ
818デフォルトの名無しさん:2007/07/01(日) 18:20:04
ごめんなさい、aをstaticにしたらOKでした。
819デフォルトの名無しさん:2007/07/01(日) 18:20:16
>>816
試してないけど
Vertex a=Vertex([0.0f, 10.5f, 10.5f]);は?
820デフォルトの名無しさん:2007/07/01(日) 18:20:54
ごめんなさい、aをstaticにしたらOKでした
821デフォルトの名無しさん:2007/07/01(日) 18:21:00
>>817
Walterタンはこれとは別に持ってたと思う。
822818,820:2007/07/01(日) 18:24:24
連投ごめんなさい
>>819
それもOKでした m(_ _)m ありがとうございます
823808:2007/07/01(日) 18:40:58
>>817
悩むことを言ってくれるな。
英語で文章書けねぇw

誰か代打ち頼めませんか?
824デフォルトの名無しさん:2007/07/01(日) 18:55:20
>>823
うまく行ったかしらんが、bugzilla投げといた。
825808:2007/07/01(日) 19:13:30
>>824
ありがとうございます。
826デフォルトの名無しさん:2007/07/02(月) 06:53:07
D 1.018
827デフォルトの名無しさん:2007/07/02(月) 07:09:09
D 2.002
828デフォルトの名無しさん:2007/07/02(月) 07:13:31
What's New for D 2.002

New/Changed Features
* Renamed linux library from libphobos.a to libphobos2.a

D 1.018 はバグフィックスのみ。
829デフォルトの名無しさん:2007/07/02(月) 07:14:31
バグフィックス部分は同じだな。
共通部分のみの修正か。
830デフォルトの名無しさん:2007/07/02(月) 08:35:41
仕様が落ち着いたのかな
そう思うとちょっとさみしい

絶対そうじゃないけどなw
831デフォルトの名無しさん:2007/07/02(月) 12:01:44
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) なんてあってもいいような
832デフォルトの名無しさん:2007/07/02(月) 13:43:13
むしろinがその役割を果たしたらいいと思う。
833デフォルトの名無しさん:2007/07/02(月) 16:15:17
ていうか既にinはfinal scope constを意味するんだが?
コンパイラが落ちなきゃいいだけだよな
834デフォルトの名無しさん:2007/07/02(月) 16:45:36
>>833

incompatible parameter storage classes

やってみたが、仕様としてゆるしてないみたい
835デフォルトの名無しさん:2007/07/02(月) 17:17:41
コンパイラがエラーを出す場合、本当にエラーなのかコンパイラのバグなのか見極めないとダメだからな。
836デフォルトの名無しさん:2007/07/02(月) 17:46:30
じゃ見極めた人 結果をどうぞ↓
837デフォルトの名無しさん:2007/07/03(火) 01:01:17
とりあえずコンパイラが落ちるのはコンパイラのバグだと思う。
838デフォルトの名無しさん:2007/07/03(火) 12:38:07
うむ 真理だ ところで誰かこのバグは報告したのか?
839デフォルトの名無しさん:2007/07/03(火) 13:03:38
831ですが、してません。
昨日やろうとしたのですがちょっと怖くなって・・
840デフォルトの名無しさん:2007/07/03(火) 15:11:53
誤爆?
841デフォルトの名無しさん:2007/07/03(火) 15:46:37
動的配列やオブジェクト引数は元々参照渡しされますが、 これらについては、 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な参照渡しなわけだし。
842デフォルトの名無しさん:2007/07/03(火) 15:48:58
あ、構造体か。すんませんした。
ポインタ渡しでinを指定か?
843デフォルトの名無しさん:2007/07/03(火) 16:33:58
>>831
構造体は呼び出し側に変更を加える必要がない場合、普通に値渡しすればいい。
可能な場合、コンパイラが参照渡しに最適化する。
844デフォルトの名無しさん:2007/07/04(水) 11:05:15
scope変数のオブジェクトをスコープ外のscope変数に代入できるんだが、これはこういう仕様なのか?
845844:2007/07/04(水) 11:11:53
ああ、外側の変数はscope変数じゃなくてもいいのか。
スコープ外へのコピーはエラーにして欲しいな
846デフォルトの名無しさん:2007/07/04(水) 11:45:51
なぜ?
847デフォルトの名無しさん:2007/07/04(水) 12:01:06
>>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
}
848デフォルトの名無しさん:2007/07/04(水) 12:40:01
げげ
たしかに、それはちょっとおかしい
849デフォルトの名無しさん:2007/07/04(水) 13:40:11
つぶしてもつぶしてもまた出てくる

それがバグのバグたる所以ですよ
850デフォルトの名無しさん:2007/07/04(水) 14:04:19
1つバグが見つかったら30はあると思え。
851デフォルトの名無しさん:2007/07/04(水) 14:35:47
C c;
void f(scope C d) {
c = d;
}

こんなこともできるわけだが、これはバグだよな?
852デフォルトの名無しさん:2007/07/04(水) 14:43:39
そのCが構造体とかtypedefあるいはaliasで値渡しならセーフじゃない?
853デフォルトの名無しさん:2007/07/04(水) 14:49:59
そりゃデストラクタのない型ならscopeの影響を受けるわけはないが…
854デフォルトの名無しさん:2007/07/04(水) 14:57:17
>>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のコードでは特に意味は無いので、それは後方互換になるはずです。

って書いてあるから、もろバグじゃないかな。
855デフォルトの名無しさん:2007/07/04(水) 23:21:32
こいりゃバグだね
856デフォルトの名無しさん:2007/07/04(水) 23:26:10
こいりゃ
857デフォルトの名無しさん:2007/07/05(木) 00:05:02
こいりゃ ← じっと見つめると松井秀喜に見えない
858デフォルトの名無しさん:2007/07/05(木) 00:12:03
電脳こいりゃ
859デフォルトの名無しさん:2007/07/05(木) 00:21:25
にしこり というのが本名で、松井はリングネームだと思ってた
860デフォルトの名無しさん:2007/07/05(木) 02:03:40
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になるべきじゃないか?って思うんだけどどう思う?
861デフォルトの名無しさん:2007/07/05(木) 02:10:23
>>860
なるべき。
862デフォルトの名無しさん:2007/07/05(木) 02:17:31
static if(is(int X == const(X)) ){
pragma(msg, X.stringof); // int
}

const()は完全に無視されているようだな。
863デフォルトの名無しさん:2007/07/05(木) 04:00:00
( ^ω^) 乗り遅れた感があるお。2.002だお。
ttp://ranobe.com/up/src/up198768.zip
864デフォルトの名無しさん:2007/07/05(木) 04:43:25
( ^ω^)
865デフォルトの名無しさん:2007/07/05(木) 06:33:54
うはwwwwおkwwwっうぇwwwwwwwwwwっうぇwwwwwwwwwwwwwwっうぇ
866デフォルトの名無しさん:2007/07/05(木) 07:26:27
D 2.003
867デフォルトの名無しさん:2007/07/05(木) 07:28:08
><
さっきうpだてしたばっかなのに
868デフォルトの名無しさん:2007/07/05(木) 07:49:26
ダイブミサイルTEEEEEEEEE
869デフォルトの名無しさん:2007/07/05(木) 07:49:57
>>163
いいなそれ^^
870デフォルトの名無しさん:2007/07/05(木) 07:51:09
スカルマン神
871デフォルトの名無しさん:2007/07/05(木) 07:53:17
鏡寝る予定だから切らないほうが有効活用・・・って切れた\(^o^)/
872デフォルトの名無しさん:2007/07/05(木) 07:53:58
なんという誤爆の嵐・・・いったいなんなんだ
873デフォルトの名無しさん:2007/07/05(木) 09:04:31
2.003 消えてるな
874デフォルトの名無しさん:2007/07/05(木) 13:52:58
What's New for D 2.003
Jul 1, 2007
New/Changed Features

    * Added 0x78 Codeview extension for type dchar.

Codeview extension...?
なんだそりゃ?
875デフォルトの名無しさん:2007/07/05(木) 14:05:32
デバッガ用のタイプレコードじゃねえの?
876デフォルトの名無しさん:2007/07/05(木) 14:08:19
よく分からんけど、デバッガ関係の話っぽい
dcharの型情報をCodeview形式で埋め込むようにしといたとか、
そういう感じの話じゃね、たぶん。
877デフォルトの名無しさん:2007/07/05(木) 14:14:59
   ●               ●
    ●             ● <ちょっとびっくり機能>
     ●           ●
      ●         ●   全体をコピペすると、
       ●       ●    使用中のWindowsの
        ●     ●     バージョンが表示される。
         ●   ●
          ● ●
   Microsoft Windows 95 OSR2
          ● ●
         ●   ●      (板によって非対応の場合あり)
        ●     ●
       ●       ●
      ●         ●
     ●           ●
    ●             ●
   ●               ●
878デフォルトの名無しさん:2007/07/05(木) 19:56:34
macOS X
879デフォルトの名無しさん:2007/07/05(木) 20:11:46
Mac OS X 10.4.10 (i386)
880デフォルトの名無しさん:2007/07/05(木) 20:51:54
DOS (v1.010)
881デフォルトの名無しさん:2007/07/05(木) 21:26:20
   ●               ●
    ●             ● <ちょっとびっくり機能>
     ●           ●
      ●         ●   全体をコピペすると、
       ●       ●    使用中のWindowsの
        ●     ●     バージョンが表示される。
         ●   ●
          ● ●
   Microsoft Windows 95 OSR2
          ● ●
         ●   ●      (板によって非対応の場合あり)
        ●     ●
       ●       ●
      ●         ●
     ●           ●
    ●             ●
   ●               ●
882デフォルトの名無しさん:2007/07/06(金) 22:11:46
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)();
}
883デフォルトの名無しさん:2007/07/06(金) 22:23:35
bindAliasの使い方間違ってね?
884デフォルトの名無しさん:2007/07/06(金) 23:23:14
間違ってるみたいですね
でも bindAlias をコメントアウトしてもエラーは変わらないような
885デフォルトの名無しさん:2007/07/07(土) 23:11:36
1.018 / 2.002 どちらでも bind が使えなくなっているみたいですね・・・
886デフォルトの名無しさん:2007/07/08(日) 13:08:35
配列のプロパティっぽく関数呼び出す機能壊れてる?
887デフォルトの名無しさん:2007/07/08(日) 16:40:07
>>886
具体的にはどんなふうになるの?
888デフォルトの名無しさん:2007/07/08(日) 16:42:51
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デフォルトの名無しさん:2007/07/08(日) 17:08:34
括弧付きじゃないと呼び出せないと思うけど、
そういえばこれじゃあプロパティ風じゃないな。
890デフォルトの名無しさん:2007/07/08(日) 17:44:28
>>889
前からそうだっけ?
891デフォルトの名無しさん:2007/07/08(日) 19:34:49
>>889じゃないけど前からそうだったような希ガス
しかしこれが仕様とも思えないような・・・
892デフォルトの名無しさん:2007/07/08(日) 20:47:22
ほんとだ呼びだせないようになってる。
893デフォルトの名無しさん:2007/07/08(日) 22:55:45
前から括弧付きじゃないと呼び出せなかったと思うんだが
894デフォルトの名無しさん:2007/07/09(月) 12:15:47
配列のプロパティ風のやつは前からだよ
普通に仕様かと思ってたけど違うのかな
895デフォルトの名無しさん:2007/07/09(月) 12:17:39
クラスメソッドをプロパティ風に扱うのはあったけど配列については出来なかったような。
896デフォルトの名無しさん:2007/07/09(月) 16:35:07
D言語の精神にのっとればあくまで「使いやすい」仕様であるべきで
そう考えるとなんでこういう仕様になっているのか俺にはわからない
897デフォルトの名無しさん:2007/07/09(月) 16:39:22
使い勝手以前に「わかりづらい」のはいただけないよな。
普通のメンバメソッドなら括弧いらないのに、プロパティ風呼び出しだと括弧ないとエラーになるのは一貫性に欠ける気がする。
898デフォルトの名無しさん:2007/07/09(月) 17:12:49
というわけでどなたかニューズグループででも聞いていただけないだろうか
899デフォルトの名無しさん:2007/07/09(月) 17:26:41
まあ単純に配列型のプロパティの中に関数風呼び出しをするものがないので、
配列.関数風()の解釈に曖昧さがないということだとは思うが。

length(int [] hoge) {}
int[] foo;
foo.length;

は目も当てられんだろ。
900デフォルトの名無しさん:2007/07/09(月) 17:30:20
そんなものエラーにしてしまえば…
901デフォルトの名無しさん:2007/07/09(月) 18:17:30
なるほど それなら仕方ないか
902デフォルトの名無しさん:2007/07/09(月) 18:23:22
文法に一貫性がないのが困ったなぁ。
せめて.sizeと.length()だけならいいのに。
903デフォルトの名無しさん:2007/07/09(月) 20:55:37
一貫性を優先するなら>>899の言ってるようにエラーにしてしまうか・・・
他にいい解決策はないものか・・・・
プロパティですよってわかる記号を付けるとか・・・・
それも変か
904デフォルトの名無しさん:2007/07/09(月) 21:30:18
エラーでいいがな
lengthとかのプロパティに使ってる名前の関数なんていらんだろ
プロパティとわかる記号ってfoo@initにしちゃうとか?
うーん
905デフォルトの名無しさん:2007/07/09(月) 21:42:33
なんというperl記号
906904:2007/07/09(月) 21:45:36
関数をプロパティ風に使えるようにするなら
やっぱり括弧なしでも呼べるようにして
あいまいだったらエラーにするのがいいと思う
907デフォルトの名無しさん:2007/07/09(月) 22:03:22
俺もそう思ってた  (笑)
908デフォルトの名無しさん:2007/07/09(月) 22:17:46
ダメだ
同じ構文にしてよと言おうと思ったが英語に挫折したw
むりぽ
909デフォルトの名無しさん:2007/07/09(月) 22:19:26
プロパティってオーバーライドできないんだっけ?
910デフォルトの名無しさん:2007/07/09(月) 22:20:12
できるはずだよ。普通のメンバ関数と同じ。
911デフォルトの名無しさん:2007/07/09(月) 23:35:27
2つ目の引数付き関数でlengthプロパティをオーバーライドしたら
a.length(3)とかでプロパティを呼び出すことになるの?

そうしたら>>899のlengthを同じく2つ引数のある関数で定義しなおすと
結局は名前衝突が起こる?
912デフォルトの名無しさん:2007/07/09(月) 23:41:01
なんかちょっと言いたいことが判らん。
オーバーロードとオーバーライド間違えてないか?
913デフォルトの名無しさん:2007/07/09(月) 23:45:50
そか失礼
オーバーロードか
914デフォルトの名無しさん:2007/07/09(月) 23:46:26
ていうかやってみればいいんじゃまいか
915デフォルトの名無しさん:2007/07/10(火) 05:25:04
まぁ、プロパティなんてウンコ臭いものはやめて素直にメソッドをつけりゃいいのでは?
()なんてコードアシストが使えるようになればレンチン状態で入力できるし。
916デフォルトの名無しさん:2007/07/10(火) 11:59:24
だぁね
917デフォルトの名無しさん:2007/07/10(火) 17:04:20
プロパティはメンバ変数とsetter/getterメソッドを同じ構文で
呼び出せるのが利点だから、配列についてプロパティ形式で
呼び出せる必要は特にないんだよね。

むしろ、いまあるプロパティのうち、sortとかはメソッド形式にしたほうが
いい気がしないでもない。
918デフォルトの名無しさん:2007/07/10(火) 17:06:03
sortとかrehashとかプロパティってのはすごく気持ち悪い
919デフォルトの名無しさん:2007/07/10(火) 21:32:50
>>918に同意
int[] v = [3,2,1], w;
w = v.sort; // 最初間違ってこんな感じで書いてたぞ
920デフォルトの名無しさん:2007/07/10(火) 21:45:56
Ruby だとカッコ省略できるし、
それで慣れてると、カッコなしでもありかなとは思う。
921デフォルトの名無しさん:2007/07/10(火) 21:51:39
かっこなしだとVBみたいで恥ずかしい
922デフォルトの名無しさん:2007/07/10(火) 23:03:27
あーでも元から()省略できれば
writefln("Hello,world.".toupper.tolower)
こういう風にスマートに書けるんだけどなぁ・・・
923デフォルトの名無しさん:2007/07/10(火) 23:47:19
2バイト削るよりも可読性を向上させてくれ
924デフォルトの名無しさん:2007/07/11(水) 00:23:23
Ruby の()の省略がキモイと感じてる俺としては、
>writefln("Hello,world.".toupper.tolower)
は嫌過ぎる
925デフォルトの名無しさん:2007/07/11(水) 04:28:37
要は趣味の問題ってことだね
926デフォルトの名無しさん:2007/07/11(水) 06:10:40
趣味の言語ですから
927デフォルトの名無しさん:2007/07/11(水) 11:29:11
>>924
関数呼び出しとデータアクセスが同じ記法なのは俺もキモイと思うけど、
名前次第で我慢出来なくもない気もする。プロパティっぽい名前なら
ギリギリセーフ。array.sort は嫌だけど、array.sorted なら許せる。
あー、でもやっぱキモイな。
928デフォルトの名無しさん:2007/07/11(水) 12:37:46
>>919の書きかたって間違ってるんだ^^ 知らなかった
ソートしたものを返すんじゃねーの?
929デフォルトの名無しさん:2007/07/11(水) 12:49:21
"sort in place"
930デフォルトの名無しさん:2007/07/11(水) 12:53:05
void main() {
const(int)[] v = [3,2,1], w;
w = v.idup.sort;
writefln(w);
}

invariant型の配列をソートできるんだが、いいのか?
931デフォルトの名無しさん:2007/07/11(水) 16:01:19
vそのものを変えるわけじゃないからいいんじゃないの?
むしろそれができないとなるとおかしいように思うんだが・・・
932デフォルトの名無しさん:2007/07/11(水) 16:12:48
idupのことだろ。
933デフォルトの名無しさん:2007/07/11(水) 16:39:42
>>928 >>930
int[] v = [3,1,2];
v.sort;
writefln(v); // [1,2,3]
934デフォルトの名無しさん:2007/07/11(水) 16:41:16
>>931,933

w = v.idup.sort;
    ^^^^

これをソートできるのがおかしいって言いたかったんだけど。
w は表示するために代入してるだけで深い意味はない。
935デフォルトの名無しさん:2007/07/11(水) 16:45:13
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]
937デフォルトの名無しさん:2007/07/11(水) 17:00:25
なるほど
invariant型がin placeでソートできるっていうのは仕様なのかな?
そうは思えないが・・・
938デフォルトの名無しさん:2007/07/11(水) 17:21:18
>>937
さすがにバグだろ…。報告よろ。
939デフォルトの名無しさん:2007/07/11(水) 17:23:59
D2はバグだらけで報告する気になれん。
どれがバグでどれが仕様でどれが未実装なのかもよくわからんし。
940デフォルトの名無しさん:2007/07/11(水) 17:25:33
>>938
sortの引数がinoutだと考えれば変ではないのが難しいところ。
941デフォルトの名無しさん:2007/07/11(水) 17:29:43
参照が取り替えられてるわけではないだろ。
942デフォルトの名無しさん:2007/07/11(水) 17:31:19
D2のバグを議論するのは時期尚早と出ました
943デフォルトの名無しさん:2007/07/11(水) 17:45:55
ところで今たまたま手元にあったdmd1.015に戻してみても
やっぱりbindが動かないみたいなんだが
どの時点で動かなくなったのかな
944デフォルトの名無しさん:2007/07/11(水) 17:46:27
>>941
試してみたけど参照は変わってないね。こりゃどう考えてもバグ。
945デフォルトの名無しさん:2007/07/11(水) 18:22:43
ちょっと寝てくるから、2.010出たら起こしてくれ。
946デフォルトの名無しさん:2007/07/11(水) 19:20:57
947デフォルトの名無しさん:2007/07/12(木) 11:32:35
いつの間にかDFLをGTKベースにする動きが始まってたようだ
ttp://wiki.dprogramming.com/DflGtk/HomePage
948デフォルトの名無しさん:2007/07/13(金) 12:55:26
2.004マダー?(・∀・)っ/凵チンチン
949デフォルトの名無しさん:2007/07/13(金) 17:27:46
2007ならもうきてるよ
950デフォルトの名無しさん:2007/07/13(金) 21:20:26
どうしてプライベート仮想関数が禁止されているんでしょうか
NVIパターンで使おうと思ったらエラーが出たのですが
951デフォルトの名無しさん:2007/07/13(金) 21:22:08
ちなみにこんな感じです
class A {
public void foo(){ doFoo(); }
private abstract void doFoo();
}
class B : A {
private void doFoo(){ ... }
}
952デフォルトの名無しさん:2007/07/13(金) 21:35:36
privateメンバは子クラスが認知できない関数。
したがってオーバーライドすることはできない。
そういう場合はprotectedを使うべし。
953デフォルトの名無しさん:2007/07/13(金) 21:46:12
返信どうも
そうなるとC++では可能な理由はなんなんでしょうね
954デフォルトの名無しさん:2007/07/13(金) 21:53:02
C++ではプロテクションに関わらずvirtualをつけると仮想関数にできるけど、
Dではデフォルトで仮想関数で、private関数は仮想関数にならない。
ってところか。単に設計思想の違いだと思うが。
955デフォルトの名無しさん:2007/07/13(金) 22:02:10
ああデフォルトで仮想関数・・・
実際>>951でprotectedにしてもなんら違いはなさそうですもんね
956デフォルトの名無しさん:2007/07/16(月) 15:28:32
そろそろ更新こないかなぁ・・・
957デフォルトの名無しさん:2007/07/16(月) 16:29:20
とにかくphobosを全部動くようにして欲しいぞ
958デフォルトの名無しさん:2007/07/16(月) 22:51:30
とうとうTango 0.99RC3のロードマップが100%になった
959デフォルトの名無しさん:2007/07/17(火) 00:00:32
Tango2.0マダー
960デフォルトの名無しさん:2007/07/17(火) 00:10:31
普及もしてないのに2.0って・・・
961デフォルトの名無しさん:2007/07/17(火) 00:24:32
きっと3.1から普及しはじめるよ。
962デフォルトの名無しさん:2007/07/17(火) 00:33:50
Tango95は爆発的に普及するが、88年後の話を今からしてもしょうがないんだ。
963デフォルトの名無しさん:2007/07/17(火) 02:19:19
Tango 1.0と2.0の違いってD1.0向けか2.0向けかっていう理解でおk?
964959:2007/07/17(火) 09:53:01
>>963
本当にあるかどうかはおいといて、俺はそんなつもりでいいました

次スレの季節ですね
965デフォルトの名無しさん:2007/07/17(火) 11:24:01
const(char)[]がキモいと思ってるのは俺だけ?
当分2.0にはしたくない・・
966デフォルトの名無しさん:2007/07/17(火) 13:02:14
わかりやすいとおもうなぁ
967デフォルトの名無しさん:2007/07/17(火) 13:23:00
const char[] foo = "foo"; // 1.0

const(char)[] bar = "bar"; // 2.0
と書くと億劫だけど
string boo = "boo"; // 2.0
と書けばいいんだよ
968デフォルトの名無しさん:2007/07/17(火) 15:26:38
Tango 0.99RC3リリース
969デフォルトの名無しさん:2007/07/17(火) 15:42:21
>>965
もうv1は時代遅れですよ。
970デフォルトの名無しさん:2007/07/17(火) 16:04:11
ウォルターは日本語をハックしてこのスレを見るべきだな
971デフォルトの名無しさん:2007/07/17(火) 16:33:58
気持ちはわかるが
むしろ俺らがアナウンス見に行くべきだろ常考
972デフォルトの名無しさん:2007/07/17(火) 16:47:08
constめんどくさー
readLineの返り値がconst付きって・・・
そりゃねーよ
973デフォルトの名無しさん:2007/07/17(火) 19:31:52
どこから来たかわからない書き換えられる配列を受け取るのは不安じゃないか
かといってconst(char)[]を返されても不便だから
配列を返すときはクラスのメソッド側が.dupして返すべきだと思うんだ
場合によってはクラスのカプセル化を破壊わけだし
974デフォルトの名無しさん:2007/07/17(火) 22:01:46
ちなみにconstとinvariantの違いって何だ?
把握してないんだが
975デフォルトの名無しさん:2007/07/17(火) 22:20:43
invariantはそこにあるデータは絶対に変わらない。
constはそこにあるデータを変えることができない。
976デフォルトの名無しさん:2007/07/17(火) 22:26:35
invariantは誰も変えることができない。
constは俺が変えることができない。
977デフォルトの名無しさん:2007/07/17(火) 23:40:47
>>972
確かに、readLineは新たに配列をnewして返すような実装になってるから、
constはいらないかもしれん。

978デフォルトの名無しさん:2007/07/18(水) 00:12:39
>>975,976
把握した・・・が
invariantに既に入っているデータは誰(?)が入れたんだ?
語弊ありそうな予感
979デフォルトの名無しさん:2007/07/18(水) 00:14:46
プログラム内ではってことか
constは関数内とかの狭い領域で書き換え不可ってことか?
あれ?
980デフォルトの名無しさん:2007/07/18(水) 06:09:09
リテラルか、invariant なデータで初期化された変数が invariant じゃないかな。
981デフォルトの名無しさん:2007/07/18(水) 06:36:52
>>978
    ____
   /__.))ノヽ
   .|ミ.l _  ._ i.)  
  (^'ミ/.コンパイラ  
  .しi   r、_) |  invariantはわしが育てた
    |  `ニニ' /  
   ノ `ー―i

constは、C++でも仮引数がconstとか、const関数とかよく使うだろ。
そのスコープにおいて副作用を起こす操作が出来ない。
982デフォルトの名無しさん:2007/07/18(水) 10:04:30
>>980
しかし、配列リテラルはinvariantではない。
983デフォルトの名無しさん:2007/07/18(水) 11:06:55
あれ
_d_assert、オリジナルがつくれないぞ?

D2.002っす
984デフォルトの名無しさん:2007/07/18(水) 19:49:13
D2.0のバグの話は無益だぜ
バグだらけだから
仕様検討がいいよ
985デフォルトの名無しさん:2007/07/18(水) 20:25:56
更新こないなぁ・・・
986デフォルトの名無しさん:2007/07/18(水) 20:43:21
実務で使用されること無く2.0へ・・・
JCPみたいなコミュニティ作って預けちゃえばいいのに
987デフォルトの名無しさん:2007/07/19(木) 00:04:35
把握した
988デフォルトの名無しさん:2007/07/19(木) 06:57:12
もっと言語仕様をシンプルにできないものか。
989デフォルトの名無しさん:2007/07/19(木) 07:09:24
>>988
っ Brainfuck

言語をシンプルにしすぎても書きにくくなるんで、
コードを書いたり読んだりするときの負担が最小になるよう、
うまくバランスの取れた設計が求められるかな、と。
トリック頼みになるところは言語使用で策定して欲しいというところはある。
複素数リテラルとかは、言語使用は複雑になるが、
クラスで実装とかやりたくないし。
990デフォルトの名無しさん:2007/07/19(木) 10:09:28
次スレ
991デフォルトの名無しさん