トップページ⇒tech
1001コメント301KB

Borland Developer Studio 2006 No.10

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/10/31(火) 11:44:29
Borland Developer Studio 2006 ユーザーによる
Borland Developer Studio 2006 ユーザーのための統一雑談スレッドです。
Borland Developer Studio 2006 についての技術的な質問、不具合のQC 報告依頼も歓迎します。

(注)本スレには被害担当艦としての機能はありません。
Borland Developer Studio 2006 についての、批判・怒りのバグ告発はアンチスレ↓へどうぞ。
http://pc8.2ch.net/test/read.cgi/tech/1153353434/
0084デフォルトの名無しさん2006/11/06(月) 21:56:05
ごめん。DMはオレのせいかも。
登録ユーザーなのにDMが来ないので、メールで請求した。
めずらしく漏れていたので、DMシステムかなんかの不具合あり、
ようやく気がついたかも。

0085デフォルトの名無しさん2006/11/07(火) 00:27:57
>>83
そろそろHotFix 出るかなー。
0086デフォルトの名無しさん2006/11/07(火) 04:13:42
うぬぼれるなよ >84
単に「優待価格でのバージョンアップの対象期間を延長した」というだけだ。

来年夏の Highlander まで、ずーっと延長するんだよ
0087デフォルトの名無しさん2006/11/07(火) 12:21:41
それってユーザーにとっては良いことだよね。
0088デフォルトの名無しさん2006/11/07(火) 14:38:54
あまりに非道い場合には,不当宣伝にあたる。

「この製品は8月までですよ。今買わないと値上がりするよー」
9月に入って
「ご好評のため,特売期間を一月延ばしました。10月までですよー」
10月に入って
「お客様が殺到しました。優待価格は年末まで延長。これが最後!」

どこかがチクれば,公正取引委員会から人が来る。強制力はないけど
いろんなところに名前が出る羽目になるわけだ。

Borland には限らないけど,原価があって無いようなソフトウェアの場合,
定価に対して期限を切らずにずーっと値引き価格で表記することが多い。
これは二重価格となって,監視の対象。
0089デフォルトの名無しさん2006/11/07(火) 15:27:33
> 今買わないと値上がりするよー

じゃなくて、バージョンアップできなくなるよーだから
ちょっと違うんじゃないか。

既存ユーザーに対して売るかどうかなんて、某の自由だろう。
0090デフォルトの名無しさん2006/11/07(火) 15:37:01
「数日過ぎちゃったけどもうダメですか?」「ダメです」って対応を受けたことが
ある身としては、いい傾向だと思うけど。
0091デフォルトの名無しさん2006/11/07(火) 16:23:20
>いろんなところに名前が出る羽目になるわけだ。
坊にとってはむしろ好都合
いい宣伝になるw
0092デフォルトの名無しさん2006/11/07(火) 18:06:39
>いい宣伝になるw
ソフトバンク商法か ww
0093デフォルトの名無しさん2006/11/07(火) 18:41:01
NET Framework 3.0ってWin2K未対応なんだな。イラネ。
0094デフォルトの名無しさん2006/11/07(火) 20:13:30
NET Framework 「3.0」の名前に踊らされている者がここに一人 > 93
0095デフォルトの名無しさん2006/11/07(火) 23:38:06
BDS ってVista未対応なんだな。イラネ。
0096デフォルトの名無しさん2006/11/07(火) 23:44:57
VBならVista対応なのにね
0097デフォルトの名無しさん2006/11/08(水) 03:28:21
VB6 って Vista で動いたんだ? >96
0098デフォルトの名無しさん2006/11/08(水) 10:31:13
>>97
実際動作するし、正式にOS上の動作がサポートされる。
0099デフォルトの名無しさん2006/11/08(水) 11:16:59
タスクダイアログとか新しいのは出そうも無いけど。
0100デフォルトの名無しさん2006/11/08(水) 11:34:24
VB6 のVista 対応サービスパックって出るの?
0101デフォルトの名無しさん2006/11/08(水) 12:46:39
>>99
まあ、膨大な過去の遺産が新しいOSでサポートされないことに大ブーイングが起きかけたので仕方なくサポートするようなもんだから。
新しいコントロールは出せないでしょう。
どうしてもやりたかったらWin32APIでやれないことはないけど・・・。
0102デフォルトの名無しさん2006/11/08(水) 13:00:55
>正式にOS上の動作がサポートされる。

くせには、ブビってWin32全部コールできるわけでもなし。
ブビドトネトはイラネし。



Windows Vistaへの対応状況
http://blogs.msdn.com/somasegar/archive/2006/09/26/772250.aspx

○ VB 6.0   - Supported
× VB.NET 2002 - Not supported
× VB.NET 2003 - Not supported
× VB 2005   - Not supported
△ VB 2005 SP1 - Supported (ただしUAC関連の問題あり)

VBワロスwwwwwwwwwwwwwwwww

0103デフォルトの名無しさん2006/11/08(水) 13:28:08
N 村先生遅すぎ。
0104デフォルトの名無しさん2006/11/08(水) 18:23:27
>>102
VB.NETは失敗しました
のでこれからがんばります。
て事かいな?
0105デフォルトの名無しさん2006/11/08(水) 18:24:41
VBなら速いのにね
0106デフォルトの名無しさん2006/11/08(水) 18:37:03
しかしこのIDEの重さはエディタでソース編集時代の再来を予感させるほどだな
0107デフォルトの名無しさん2006/11/08(水) 20:32:04

× Delphi 1.0 − Not Supported
× Delphi 2.0 − Not Supported
× Delphi 3.0 − Not Supported
× Delphi 3.1 − Not Supported
× Delphi 4.0 − Not Supported
× Delphi 5.0 − Not Supported
× Delphi 6.0 − Not Supported
× Delphi 7.0 − Not Supported
× Delphi 8.0 − Not Supported
× Delphi 2005 − Not Supported
× BDS 2006 − Not Supported
× Turbo all version − Not Supported

大丈夫かね、VB のことなんか気にしてて
0108デフォルトの名無しさん2006/11/08(水) 20:41:40
>>107
ひでえな
これじゃBDSを買い控えればいいのか、Vistaを買い控えればいいのか
わからん。
0109デフォルトの名無しさん2006/11/08(水) 22:54:55
買い控えっていうか、BDS はリリース後10ヶ月以上も経ってるし、Vista 発売直前
だし、これまでの経緯から察するに某は対応パッチをだすはずがないし、どうみても
正式対応するはずの Highlander 待ちが正解でしょ。

Turbo は、BDS のバラバラバージョンなんだから状況は同じ。
0110デフォルトの名無しさん2006/11/08(水) 23:04:29
キャンプ行く?
0111デフォルトの名無しさん2006/11/08(水) 23:18:49
最悪ー
0112デフォルトの名無しさん2006/11/08(水) 23:45:55
> これまでの経緯から察するに

BDS2006/Turbo でも非公式に対応TIPS が出てくるでしょ。

> 正式対応するはずの Highlander 待ち

4月あたりには出るだろうから、ちょうど良いね。
0113デフォルトの名無しさん2006/11/09(木) 02:01:58
そうそう Highlander 待ちだよね
0114デフォルトの名無しさん2006/11/09(木) 07:01:46
ところでその Not Supported の出所は? > 107
0115デフォルトの名無しさん2006/11/09(木) 08:16:56
連れた
0116デフォルトの名無しさん2006/11/09(木) 08:24:20
ドトネトのランタイムをインストールするのって大変なのね。
直後にWindows Updateもしなけりゃならないし
10分かかった。
0117デフォルトの名無しさん2006/11/09(木) 09:08:57
>Windows Vistaは2003年の時点ではこうなる予定だったというムービー
>ttp://gigazine.net/index.php?/news/comments/20061107_longhorn/

>ttp://itpro.nikkeibp.co.jp/article/COLUMN/20061107/252873/
>読む限りでは,MicrosoftはWindows VistaでVisual Studio 2005を動作させることを,
>それほど簡単とは思っていないことがうかがえる。
>Microsoftは数カ月後に,Visual Studio 2005 Service Pack 1をリリースする予定だが,
>このSPで問題が解決されるかどうか,注意深く追いかける必要があるだろう。

バロスwwwww

0118デフォルトの名無しさん2006/11/09(木) 09:15:51
Vista のUI ってやっぱりMac の真似なのだろか。
0119デフォルトの名無しさん2006/11/09(木) 09:59:39
考えられる限り最悪のシナリオ

つまり、VS 2005で動く完成版は出ないことが示唆されています。今後きちんとしたIDEサポートを得るには、Orcasを使うしかないのです。
仕事でいち早くWCF・WPFを取り入れてみたいと考えてた方はどうしますか?メンバー全員に開発途中のOrcasを入れさせますか?VS 2005で未完成のNovember 2006 CTPをずっと使い続けますか?
考えられる限り最悪のシナリオだと思います。これでは、(WF以外は)Orcasが完成するまでRTWしてないのと同然ではないでしょうか。
0120デフォルトの名無しさん2006/11/09(木) 10:06:42
ttp://nullpo.2log.net/home/nsharp/archives/blog/main/2006/11/07_130130.html

まぁしょうがない。
Office 組と Windows 組と開発ツール組が、互いに相手の胸の内を見ながら勝手に動いた
結果がこれだ。Vista の遅れで、Office 組に吸収された Windows 組は、これからどうするのか。

開発ツール組は、フレームワークと言語がヘジ、XAML/.NET 3.0 がチャック。それ以外にもコアメンバーの
ほとんどがボーランド出身だなぁ。
0121デフォルトの名無しさん2006/11/09(木) 10:10:35
ま、WPF なんて要らないけど。
当分の間はAero のないHOME しか売れないだろうし。
0122デフォルトの名無しさん2006/11/09(木) 10:22:25
ん?Aero は WPF 使うけど、WPF は Aero なくても動くぞ?
0123デフォルトの名無しさん2006/11/09(木) 10:24:43
しかし、ナカムラセンセの一言で、ML の連中が HotFix をインストールしているかと思うと...
David I とかも、Borland Japan 切り捨てて、ナカムラセンセ 雇ってあげりゃいいのに

-----
DelphiMLの方でもありましたが、
http://bdn.borland.com/article/33688
Hot Fix9でタブ切り替え時のメモリリークが解消された
らしいですが、使ってるうちにメモリがどんどん消費さ
れていくのはタブ切り替え時以外もメモリがリークして
るんだーろーな。仕事で2006使ってる人いますか?
自分は、2005も仕事で使ってました。ストレスをためな
がら。それに比べたら2006は天国ですが、delphi7以前
の安心感が戻ってくるのは何時でしょうか・・・。
0124デフォルトの名無しさん2006/11/09(木) 10:38:12
>>122
Aero のないWPF なんて・・・
0125デフォルトの名無しさん2006/11/09(木) 10:39:17
ML のおじ様達はBDS ユーザーなのだろか。
BDS ネタには、かなり食いつき悪いけど。
0126デフォルトの名無しさん2006/11/09(木) 16:00:00
今週のイベントじゃないか。
ttp://bdn.borland.com/article/33778

朝8時から1時間ってことなので,聞けないよ..
だれか聞いてる奴いるか?
0127デフォルトの名無しさん2006/11/09(木) 16:16:58
朝は辛いね。こっちでも見たら。
http://www.youtube.com/view_play_list?p=47CF5AAABFA0324D
0128デフォルトの名無しさん2006/11/09(木) 16:54:13
日本語のはないのか。
よその歴史問題を語る前に、Delphiの暗黒史を総括しろ。
0129デフォルトの名無しさん2006/11/09(木) 17:25:00
>日本語のはないのか。

これか?

2001年 中頃 「我々はWhistlerからBlackcombへは行かず、Longhornへ行く」と宣言。休暇の旅行のスケジュールと間違えられる。
2002年 10月 IRC・P2Pを駆使した斬新な手法で、初のLonghornお披露目。以後、このチャネルを通じて定期的に進捗報告が行われる。
2003年 春頃 順調な進捗報告が繰り返される。その一方で、偽Longhornでの一本釣りも忘れない。
2003年 5月 WinHEC 2003開催。ウィンドウがひらひら舞う姿に信者大興奮。
2003年 10月 史上最大のvaporwareの祭典、PDC 2003開幕。WinFXのあまりの壮大(な無謀)さに、開発者のテンションも最高潮。
0130デフォルトの名無しさん2006/11/09(木) 17:26:00
2004年 5月 WinHEC 2004で初のLonghorn Alphaリリース。「もはやpre-Alpha版ではない」と順調な進展ぶりをアピール。
2004年 8月 Longhornの2006年内のリリース、WinFSの延期、Avalon・IndigoのXPへの移植を約束。「現実的でよろしい」と好評を博す。
2004年 夏頃 なぜか、この頃からLonghornの話題が避けられるようになる。
2004年 11月 開発者向けにXP用のWinFXリリース開始。Longhornから目を逸らさせることに成功。
0131デフォルトの名無しさん2006/11/09(木) 17:27:30
2005年 2月 Richard Grimes氏、謎のブチ切れ&.NET絶縁宣言。以後、Longhornに関する研究発表を地道に続ける。
2005年 4月 WinHEC 2005で1年ぶりのLonghorn Previewリリース。WinFX・Sidebarが消え去ったことに騒然となるも、「ドライバ開発者向けなんだから別にいいだろ!」と逆切れで応戦。
2005年 7月 これまでのLonghornのイメージをこの世から抹殺すべく、改名発表。
2005年 7月 待望のVista Beta1リリース。「ロースペックマシンでもサクサク」と、大幅な機能削減の成果を強調。
2005年 夏頃? 「Longhornの計画は2004年にキャンセルされた」と怪情報が出回る。根拠がいろいろ思い当たるも、「そんなのアンチの妄言だ!」と思考停止で乗り切る。
2005年 9月 PDC 2005開幕。伝統の「PDCの法則」を死守する。
2005年 秋頃 Jim Allchin氏、「このミッションが終わったら、故郷に帰って家族と幸せに暮らすんだ」と言い始める。
2005年 10月 Ray Ozzie氏、「Vistaがコケても痛くも痒くもない今後の計画」をひそかに練り上げる。
0132デフォルトの名無しさん2006/11/09(木) 17:28:43
2006年 1月 Blackcombへの旅行計画が結局中止される。が、そんなことよりVistaの方が心配。
2006年 5月 WinHEC 2006に合わせてVista Beta2リリース。PDC 2005以降のCTP乱発のせいで、もはや反応も薄い。
2006年 6月 .NET Frameworkの襲名披露式。断髪式と間違える人も。
2006年 6月 一連の出来事に対し、親分自らが落とし前をつけることで合意。ただし2年間の猶予期間あり。
2006年 6月 WinFS開発中止が決定。開発中止の発表よりも、まだWinFSを信じてた者が大勢いたことの方に衝撃が走る。
2006年 9月 Vista RC1リリース。記念に、Brian Valentine氏の卒業パーティーで盛り上がる。
2006年 10月 日本のMS社員がVistaに関する正論を口走り、ネットで高い支持を集める。
2006年 10月 Vista RC2リリース。もういい加減覚悟を決める。
2006年 11月 一足先にWinFX .NET 3.0 RTM。開発者の燃え尽き防止に、翌年まで開発ツールのベータテストを継続する配慮を見せる。
2006年 11月 ついにLonghorn Vista RTM。SP1からの本格導入に向けて、待望の船出を飾る。
0133デフォルトの名無しさん2006/11/09(木) 17:30:23
日某のブログはガードが固すぎて面白くない。
少しは内輪の話も乗せろ。

伴奏ばかり大きくて、主旋律が詰まらないJPOPめ。
0134デフォルトの名無しさん2006/11/09(木) 18:59:02
>日某のブログ
藤井のあれは ITMedia で某製品を取り上げてもらうための対価。
ITMedia に誘導するためのものでしかないから,人さえ集まれば音楽の話し
でも何でも良いのだ。
0135デフォルトの名無しさん2006/11/09(木) 20:02:59
日某というか、藤井さんは実演パフォーマンスに拘り過ぎで
ネットの力を生かせてないよな。

YouTube すら嫌な訳でしょ。観客を集めて、あっと言わせたい訳だ。
いかにも音楽部の定期演奏会的発想だよな。
0136デフォルトの名無しさん2006/11/09(木) 20:52:40
>YouTube すら嫌
そんなこと,どこに書いてあるんだい?けど,内情はよくわかったよ。なるほどね

実演といっても第三回キャンプでは一コマだけじゃん。
0137デフォルトの名無しさん2006/11/09(木) 21:19:27
> そんなこと,どこに書いてあるんだい?

全部、俺の妄想。
でも次の工夫が出てこないと、そう見られても仕方ないんじゃね。
0138デフォルトの名無しさん2006/11/09(木) 21:59:02
あきらめちゃいけないよ >135
藤井を無視して,David I に話しを持って行っちゃいな
0139デフォルトの名無しさん2006/11/09(木) 22:14:27
ヲチはヲチスレでやってください
0140デフォルトの名無しさん2006/11/09(木) 22:22:58
>>138
諦めるというか
まだ第3回だけど、もう第3回でもあり
そろそろ批判も受け始めるということだ。
0141デフォルトの名無しさん2006/11/09(木) 22:34:25
ま、1人であれもこれもと出来ないのは分かるけど
もうちょっと試行錯誤すべき。

ブログは週1にしてもいいんだし、翻訳が少し進まなくなっても
全体として作業量が維持されていれば、文句は来ない。
0142デフォルトの名無しさん2006/11/09(木) 22:48:46
>>123
> ナカムラセンセ 雇ってあげりゃいいのに
センセも最近はそう頻繁にウォッチしてない感じがする。

ただDelphiが復活してきたので、営業活動の一環として、MLに出没している気が。
だんだん過去の人になってきているし、BDNに記事でも書いてアピール汁。
0143デフォルトの名無しさん2006/11/09(木) 23:05:56
> ただDelphiが復活してきたので

ぜんぜん復活してませんが。ユーザ激減。この板だって立ち枯れスレ多い。
BBSもMLもいたって低調。質問はなんだかあせってる初心者プロと
ウィンドウズの仕組みさえしらない超初心者が少し。
0144デフォルトの名無しさん2006/11/09(木) 23:13:08
> 藤井を無視して,David I に話しを持って行っちゃいな

あのヒゲおじさんだろ、D2005は某の最高傑作とか言ったのは。
セールストークにしてもひどすぎ。自分でも使ってないのが見え見え。
そもそものつまずきはD8のひどさだが、D2005が決定的にダメ。
以降は、なにやってもゾンビウォーク。駄目すぎ。
0145デフォルトの名無しさん2006/11/09(木) 23:20:56
.NETいれなきゃならんの?うそでしょ
0146デフォルトの名無しさん2006/11/09(木) 23:23:07
はいはい。アンチ君ご苦労さま。
でも、アンチって全然役に立ってないよね。

多少でも役に立っている人たちに文句を言う資格なし。
0147デフォルトの名無しさん2006/11/09(木) 23:29:52
?Win32なんだけど・・・
0148デフォルトの名無しさん2006/11/09(木) 23:32:14
確かに最近.NETを入れろというMS のアプリが増えてきた。
WGAPlugin なんてのも強制されるし。MS のアプリって使いづらい。
0149デフォルトの名無しさん2006/11/09(木) 23:38:34
>>143
全体としてはどうだか分からんが
ネットでうろうろしてる初心者は少し増えたかもね。
0150デフォルトの名無しさん2006/11/10(金) 01:06:28
>>146
おまえも役に立ってなさそうだから、アンチに対してでさえも文句を言う資格ないよね。
0151デフォルトの名無しさん2006/11/10(金) 02:52:08
141>翻訳が少し進まなくなっても
藤井が自分で翻訳している。って,心の底から信じてる?もう少し現実を見なさいよ。

彼は JBuilder を NTT に紹介したことだけで現在の地位にしがみついている人。
未だに二言目には「昔は良かった」しか言わない。そのときDelphi と BCB などの
残りの言語製品を人材ごと切り捨てた訳だ。
彼のブログからは Delphi に対する嫌悪しか伝わってこないだろ?
なにが「開発環境 2.0」だ。
0152デフォルトの名無しさん2006/11/10(金) 02:54:18
いちいちアンチがどうだこうだとか出てきて、おまえ目障りなんだよな >146
0153デフォルトの名無しさん2006/11/10(金) 04:29:20
>>152
Borland Developer Studio 2006 アンチスレ
http://pc8.2ch.net/test/read.cgi/tech/1153353434/
0154デフォルトの名無しさん2006/11/10(金) 04:43:25
いちいちアンチがどうだこうだとか出てきて、おまえ目障りなんだよな >153
0155デフォルトの名無しさん2006/11/10(金) 04:46:15
はいはい。まんせ君ご苦労さま。
でも、まんせって全然役に立ってないよね。

多少でも役に立っている人たちに文句を言う資格なし。
0156デフォルトの名無しさん2006/11/10(金) 06:13:32
(たまたま)役に立ったからといって,大きな顔する権利も無し
0157デフォルトの名無しさん2006/11/10(金) 08:25:55
>>151
つまりガンはあいつか
0158デフォルトの名無しさん2006/11/10(金) 10:18:24
いちいち釣られるな。
0159デフォルトの名無しさん2006/11/10(金) 11:10:13
1月の演奏会に向けて、練習を本格化していかなければならない時期になってきました。
Delphiのことなどほっときましょう
0160デフォルトの名無しさん2006/11/10(金) 12:06:34
JBuilder にも期待してるんだが、どうなったのだろう。

確か年末だよね。
http://www.atmarkit.co.jp/news/200605/26/borland.html

Ruby on rail 用IDE も出ないかな。
0161デフォルトの名無しさん2006/11/10(金) 12:28:34
>確か年末だよね。
日本語化の予定が無いから宣伝できないみたいだね。
0162デフォルトの名無しさん2006/11/10(金) 13:24:30
英語でもいいけど。
0163デフォルトの名無しさん2006/11/10(金) 13:26:38
つかBDN の英語 Java にも情報は載ってないし
ブログも書いてない。
0164デフォルトの名無しさん2006/11/10(金) 13:33:02
今まで JBuilder と言われていたものは無くなった。ってのは知ってるんだよね?

来週のデベロッパーキャンプに参加してデモを見たら?
一緒にロードマップの変更も発表するようだし
0165デフォルトの名無しさん2006/11/10(金) 13:35:49
情報統制しておいて、華々しく発表か。
なんか古いんだよね。
他所はリリース前から、ブログで盛り上げるのに。
0166デフォルトの名無しさん2006/11/10(金) 13:59:16
どこが”華々しく”なんだか・・・
0167デフォルトの名無しさん2006/11/10(金) 14:00:18
>華々しく発表か。
じゃないんだってば。
... デモと同時にロードマップ更新のお知らせから読み取れるのはなんだ?

延期だよ
0168デフォルトの名無しさん2006/11/10(金) 14:05:06
例年通りなら年末に Delphi の新版がでるはずなのだが,Highlander が来年夏に延びたため
急遽 Peloton を先に出すと決めた。がやってみたら Eclips 側の予定にうまく合わず翻訳版が
まず延期。そしてとうとう Peloton そのものが来年頭に行った。

0169デフォルトの名無しさん2006/11/10(金) 14:25:31
> 延期だよ

あらら。
嘘かホントか分からんが、Eclipse 上にIDE を作るリスクというのもゼロじゃないわけだ。

やっぱり自前路線しかないのかねー。
0170デフォルトの名無しさん2006/11/10(金) 14:27:26
小さな会社でも、VS2005やEclipseを利用して、上手くIDEを作ってるのにねー。
0171デフォルトの名無しさん2006/11/10(金) 15:00:54
>>168
> Highlander が来年夏に延びたため

えぇー!
0172デフォルトの名無しさん2006/11/10(金) 15:03:16
いや、待て。
前もこのパターンで騙されたぞ。
0173デフォルトの名無しさん2006/11/10(金) 17:16:27
とりあえず,はらたいらに全部
0174デフォルトの名無しさん2006/11/10(金) 17:28:57
はらたいらに?なんだそれ
0175デフォルトの名無しさん2006/11/10(金) 17:38:44
ニュースも見ろよな >174
http://www.asahi.com/obituaries/update/1110/003.html
0176デフォルトの名無しさん2006/11/10(金) 21:34:29
>>135
> ただいまスタジオ、音声収録中

文句ある?
0177デフォルトの名無しさん2006/11/10(金) 22:55:54
Allen Bauerのblogに興味深いアーティクルがあったので訳してみた。
翻訳の才能がないのに絶望しかかったけどとりあえずレベルのものができたので
勝手ながら公開する。気になる部分やもっといい訳があればご指摘願いたい。
とりあえず転載自由で。

ttp://blogs.borland.com/abauer/archive/2006/10/31.aspx
2006年10月31日
Assignedか、not Assignedか、それが問題だ...

news://forums.borland.com/borland.public.delphi.non-technical ニュース
グループに、Assignedが単なるnilとの検査よりもよいのかどうかに関するかな
り興味深い議論があります。おなじスレッドには私が他のポストでカバーして
もよいようなFreeAndNilについての取り留めのない議論もあります。Assigned
については、それが導入されたいくつかの理由を明らかにしたいと思いました。
これはまた(あなたが沼に出会ったときにそれをふさいでいる)覆いの下でDelphi
(BDS) IDEのVCLデザイナの内部がどのように動いているのかを覗き見るという
ことでもあります。

'if PointerVar <> nil then'はポインタ変数が意味のある値を保持しているか
どうかをチェックするために使用されてきました(もちろん以前にnilで初期化
されたと仮定すればですが)。このステートメントは適度によいコードを生成し、
明確で、意図した目的によくかないます。ではなぜ"Assigned"を追加したので
しょうか?Delphi 1において我々は"メソッドポインタ"あるいは"クロージャ"
とも呼ばれる概念を言語に導入しました(実際に純粋な意味で完全な"クロージャ"
ではありませんが)。メソッドポインタは単に実行時にメソッドの実体、そして
これは非常に重要ですが、オブジェクトの特定のインスタンスに、結び付けら
れます。実際のオブジェクトインスタンスの型が任意であるという点は興味深
い指摘です。実行時に要求される型のチェックはメソッドシグネチャがメソッ
ドの型に適合するかどうかだけです。これによりDelphiのデリゲーションモデ
ルはうまくいきました。
01781772006/11/10(金) 22:57:44
OK、Assignedに戻りましょう。ネイティブコード(Win16、Win32、そして来るべ
きWin64の実装で)のメソッドポインタの実装は2つのポインタで構成されます。
一つはメソッドのアドレスを、もう一つはオブジェクトインスタンスを指しま
す。簡単な"if methodpointer <> nil then"ステートメントは結局どちらのポ
インタもnilであることをチェックするということになり、論理的に見えます
(いいですか?)。そのとおり。しかしここにはちょっとした障害があります。
デザイン時にネイティブVCLフォームデザイナは帽子からいくつかのトリックを
取り出します。我々にはコンポーネントのメソッドポインタの実体に値を割り
当てる何らかの方法が必要でしたが、しかしコンポーネントは何が割り当てら
れたのかを実際には確認せず、すぐにメソッドを呼び出そうとします(ば〜ん!)。
Assignedの話に入ります。Assignedという標準関数を加えることによって、我々
は"<> nil"の動作を保護してひねりを加えることができるようになりました。
大胆にもあなたが検証できるとおり、Assignがメソッドポインタの2つのポイン
タのうち1つだけをチェックするだけであることがわかります。もう1つのポイン
タは全くテストされません。IDEのオブジェクトインスペクタ上でメソッドをメ
ソッドポインタに"割り当てる"ときには、デザイナは実際にはメソッドポイン
タ構造体の(割り当てられず、テストされない)もう一つのポインタに内部的に
生成したインデックスを詰め込む、ということが行われています。そこであな
たのコンポーネントがメソッドポインタを通して呼び出しを行う前に
"if Assigned(methodpointer) then"の判定を行うならば、コンポーネントのコー
ドはデザイン時におかしな振る舞いをすることはないでしょう。そこでDelphi 1
以降、我々は熱心に"Assignを使え...Assignを使え...Assignを使え..."とみん
なの頭に吹き込んできました。それは機能してきたと思います。コンポーネン
トの作者にとって、メソッドポインタを通して呼び出しを行う前にAssignedを
使用してその値をテストすることは重要です。それ以外のケースでは多少泥臭
01791772006/11/10(金) 22:58:33
く、あまり明確であるとはいえません。個人的には未だに"<> nil"パターンを
必ず使用しています。それはおそらく私が"古い"からかもしれませんが、わか
りません。しかし、上にあげたような理由から、メソッドポインタをテストす
るときには常にAssignedを使用しています。

なぜ通常のインスタンスの参照やポインタについても常にAssignedを使用べき
なのかについて、いくつかのかなり変わった根拠を見てきました。私が見かけ
た変わった理由の1つは、"将来、'nil'が全て0のポインタ値以外に定義される
かもしれない"というものでした。そのようなことになったらnilの"値"もまた
その状態を反映して変更されるとは思いませんか?別の要素としては、一体ど
うして非0の値をnilとして使用する必要があるというのでしょうか?PChar
(char *)が常に0で終端されるように、nilもまた常に0であるべきだということ
は、私にとっては、コンピューティングにおける不変の法則の一つです。さて、
Pascalでは必ずしも'nil'が0である必要はありませんが、0であることは便利で
一貫していて、新しいプラットフォームやアーキテクチャにおいて変更が要求
されるならば、非常に切実な再定義の理由が必要である、ということがわかり
ました。いくつかのポイントについて、その他の不明瞭な擬似事実を明らかに
し、Delphi、VCL、IDEに関係するいくつかの決定とデザインの背後にある論理
を掘り起こすために、タイムマシンで時間をさかのぼることにします。さしあ
たり、"Assigned(someinstance)"も"<> nil"もお咎めなしです...しかしメソッ
ドポインタでは常に"if Assigned(methodpointer) then"です!
01801772006/11/10(金) 22:59:38
ttp://blogs.borland.com/abauer/archive/2006/11/01.aspx
2006年11月01日
例外安全

1992年の終わりか1993年か、そのころに我々にはジレンマがありました。Turbo
Pascal(じきにDelphi言語のベースとなりました)に例外を追加しようとしてい
ました。Windows NTは本格的に開発が行われていました。この新しいOSには構
造化例外(Structured Exception Handling/SEH)と呼ばれる新式のものがありま
した。ここにおけるジレンマとはなんだったのでしょう?Delphiの最初のリリー
スがWin16としても知られるWindows 3.1がターゲットであったということを思
い出してください。ここにはOSレベルでサポートされたSEHはありませんでした。
またWindows NTはマスマーケット向けのコンシューマベースのOSとしてリリー
スされる予定ではありませんでした。さて、なにが問題なのでしょう?単に言
語にSEHを実装して先に進みましょう。問題は"安全"に関するものでした。もち
ろん、そこで我々は16bit版のDelphi言語にSEHの特定のインプリメンテーション
を追加しました。例外はあなたのコードをより安全にするのではないでしょう
か?OK、ここで鈍感で少々曖昧な態度をとることにしましょう。

我々が直面していた基本的な問題は部分的に生成されたオブジェクトという概
念でした。オブジェクトのコンストラクタの途中で例外がライズされたらどう
なるでしょうか?コンストラクタの実行から、例外ハンドラが実行され、デス
トラクタが呼び出される時点までどれだけ離れているのかわかりますか?コン
ストラクタは順調にフィールドを初期化し、他のオブジェクトを生成し、メモ
リバッファをアロケートし、などなど…。突然、ドーン!これらの操作のうち
の一つが失敗します(ファイルを開けない、コンストラクタのパラメータに不正
なポインタが渡される、など…)。コンパイラがコンストラクタの実行を囲んで
暗黙の例外ハンドラを挟み込んでいるため、例外を捕捉して即座に忠実にデス
トラクタを呼び出します。一旦それが完結し、部分的に生成されたオブジェク
トが破棄され、リソースが解放されたら、例外は継続、言い換えれば再生成さ
れます。このシナリオにおける問題は、デストラクタにはなぜ呼び出されたの
01811772006/11/10(金) 23:00:26
かの手がかりが本当に全くないということです(確かに例外が作動していること
はわかりますが、だからどうだというのでしょう?)。インスタンスが完全に生
成されたのか、そうでないのか、どれだけ生成が進行していたのか、デストラ
クタにはわかりません。

解決策は非常に簡単で、同時にいささか賢明であることがわかりました。Delphi
の全てのクラスには関連付けられた仮想メソッドテーブル(VMT)があるため、そ
れぞれのインスタンスはそのテーブルを指すように初期化される必要がありま
す。Delphiのクラスではコンストラクタ内から仮想メソッドを呼び出すことを
許しているため、コンストラクタが実行を許可する前にVMTへのポインタは初期
化されます。コンストラクタが実行される前にVMTポインタがセットされる必要
があるなら、なぜ完全なインスタンスを既知の状態に初期化しないのでしょう?
これがまさに行われることです。完全なインスタンスは0に初期化され、VMTポ
インタがセットされ、インタフェースを実装するのであればそれらのVMTポイン
タもまたセットされます。オブジェクトのコンストラクタのユーザコードが実
行開始される時点で、インスタンスのデータは既知の状態になっていることを
知っておいてください。このことを利用して、デストラクタは世界がめちゃめ
ちゃになる前に初期化のシーケンスでどれだけものが確保されたのかを容易に
見分けることができます。昨日の記事でFreeAndNilプロシージャについて触れ
たのを覚えていますか?注意すべき別の項目は非仮想のTObject.Freeメソッド
です。インスタンスのフィールドが非nilまたは非0の値を含むならば、初期化
が成功裏に行われたに違いなく、逆初期化を行っても構わないという想定をし
てもいいでしょう。これはコンストラクタ内でメモリの確保やオブジェクトの
生成を行う場合には(さらには他のいかなるオブジェクトのメソッドでも)さら
に重要になります。有効なポインタがいつそのフィールドにあるのかをデスト
ラクタは知っていなければなりません。つまり非nilの値は、メモリを解放しオ
ブジェクトを破棄することを意味します。
01821772006/11/10(金) 23:07:01
ユーザが常に"if FField <> nil then FField.Destroy;"とするのを覚えていな
ければならないというのは非常に面倒であり間違いの元でもある、ということ
もまた理解しました。TObject.Freeの話に進みましょう。System.pasを開いて
Freeの実装を見てみると、"if Self <> nil then Destroy;"と単純です。これ
でnilや確保していないインスタンスに対してFreeを安全に呼び出すことができ
ます。なぜならメソッド内でチェックが行われるからです。必要なのは
"FField.Free;"だけで、これであなたのデストラクタは"例外安全"となります。
GetMemで確保したメモリでも同じことです。FFieldがnilであっても
"FreeMem(FField)"を安全に呼び出すことができます。話を戻します。最後に、
string、interface、動的配列、バリアントのような一部の"管理型"ではコンパ
イラが生成するメタデータを使って自動的に処理される、ということに注意し
てください。オブジェクトのインスタンスのメモリが解放される直前に、イン
スタンスと、解放の方法がわかるようにフィールドの型とオフセットを含んだ
メタデータテーブルを受け取るようなRTL関数が呼び出されます。繰り返しにな
りますが、それぞれのfieldがnilであれば、何もする必要がなく単に通過する
だけです。

FreeAndNilについてはどうでしょう?鋭いあなたはこのプロシージャの実装が、
渡された参照にまずnilをセットし、それからインスタンスを破棄しているとい
うことに気が付いたかもしれません。実際にはNilAndFreeという名前であるべ
きではないでしょうか?ええ、そうかもしれません。しかし言いにくく、同様
に混乱を招きます。"じゃあ最初に参照にnilをセットして...どうやって破棄す
るんだ?"ではなぜこのような実装なのでしょう?例外安全が大きな理由です。
別のかなり不鮮明な理由は密接にリンクされたオブジェクトと関係しています。
他のオブジェクトを順番にリストに保持しているオブジェクトが"オーナ"オブ
ジェクトへの逆参照を持っていると思いますか?オブジェクトが破棄される順
番に依存していることで、他のオブジェクトに破滅が迫っていることを知らせ
01831772006/11/10(金) 23:08:47
る必要があるかもしれません。オーナと所有されているオブジェクトが密接に
リンクしているので、存続期間を通してお互いにメソッドを直接呼び合います。
しかし破棄中は、破棄を投げている間に有無を言わさず他のインスタンスのメ
ソッドを呼び出すのは非常に危険であるかもしれません。オブジェクトを破棄
する前にインスタンスポインタをnilにセットすることで、単にnilかどうかを
チェックすることでもう一方のインスタンスを破棄している間にメソッドが呼
び出されないことを確実にすることができます。

ということで、あなたのオブジェクトを"例外安全"にするいくつかの秘訣と、
FreeAndNilを使ったほうがよいという2つのヒントが得られました。覆いの下を
覗き込んでコードを試すことで、実装の理由と方法をより理解できるようにな
ります。したがっていつでも"if FField <> nil then FField.Destroy"パター
ンを使用することができますが、"FField.Free;"を呼び出せばなぜ全ての作業
が行われるのでしょうか?このパターンでは"if FField <> nil then
FField.Free;"や"if Assigned(FField) then FField.Free;"は冗長です。

以上

3本目のtry...finallyはまた週明けにでも。
■ このスレッドは過去ログ倉庫に格納されています