バグの出にくい言語仕様を考える2
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2006/01/16(月) 20:16:10メモリ管理にまつわるバグを出にくくした。
そのような考えを推し進めてバグの出にくい言語仕様を考えよう。
前スレ
http://pc8.2ch.net/test/read.cgi/tech/1111747980/
0002デフォルトの名無しさん
2006/01/16(月) 20:17:29プログラムが無ければバグも出ない。
つまり、言語仕様を考える前に、
如何にしてプログラムの存在しない世界を作るか、
を考えるべきだ。
0003デフォルトの名無しさん
2006/01/16(月) 20:26:42腹を出さない方法を編み出すのと同様に、
何故腹が出るのかを考えなければならない。
バグは人が生み出す知的な情報であるのだろうか?
0004デフォルトの名無しさん
2006/01/16(月) 21:56:180005デフォルトの名無しさん
2006/01/16(月) 23:23:28>>>1は
> ロ
> り
>
> だ。
なるほど、そーなのか。
0006デフォルトの名無しさん
2006/01/16(月) 23:32:280007デフォルトの名無しさん
2006/01/16(月) 23:59:49> >>1は
> グ
>
> ロ い
> 。
なるほど、そーなのか。
0008デフォルトの名無しさん
2006/01/17(火) 00:18:380009デフォルトの名無しさん
2006/01/17(火) 00:21:23958 名前:デフォルトの名無しさん[] 投稿日:2006/01/15(日) 14:07:19
リッチな型情報を容易に使えること、というのが結論ということでよろしいか。
※リッチな型情報
nullになり得る・なり得ない、役割、次元解析できる単位、などなど
0010デフォルトの名無しさん
2006/01/17(火) 00:22:05992 :デフォルトの名無しさん :2006/01/16(月) 17:36:58
強力な型付けがバグを減らすために重要って事が一つの結論なら
どういう文法であれば、型付けの煩雑さと、バグ削減の有用さを上手にまとめられるかとかの議論も欲しい
0011デフォルトの名無しさん
2006/01/17(火) 00:22:55996 :デフォルトの名無しさん :2006/01/16(月) 19:54:11
暗黙のキャストが邪悪なのは常識
しかし,利便性と天秤にかけた結果敢えて残されている
利便性を捨てて避けたければTypedefで見かけ上別の型にしてしまえば良いだけの話
0012デフォルトの名無しさん
2006/01/17(火) 00:24:17-generic- 総称的プログラミング -programming-
http://pc5.2ch.net/test/read.cgi/tech/1079460996/
型なし言語逝ってよし
http://piza.2ch.net/tech/kako/986/986355498.html
0013デフォルトの名無しさん
2006/01/17(火) 00:45:280014デフォルトの名無しさん
2006/01/17(火) 05:21:550015前スレ975
2006/01/17(火) 05:43:18結局978さんの言っているように、コンパイラが警告を発してくれるのが
最も簡単な解決法のような気がしました。
ちなみに、C++Builderでも警告を発してくれなかったです。
0016デフォルトの名無しさん
2006/01/17(火) 08:45:39俺はスレッド絡みのバグをなくす方向で検討してみる。
0017デフォルトの名無しさん
2006/01/17(火) 08:46:47E=| 1 0 |
| 0 1 |;
みたいな表現をする言語があったら面白いと思うんだが
0018デフォルトの名無しさん
2006/01/17(火) 10:11:56話はそれからだ。
0019デフォルトの名無しさん
2006/01/17(火) 11:27:370020デフォルトの名無しさん
2006/01/17(火) 11:40:27PASCALとか?
0021デフォルトの名無しさん
2006/01/17(火) 12:26:340022デフォルトの名無しさん
2006/01/17(火) 12:40:39つ http://pc8.2ch.net/test/read.cgi/tech/1110031339/
つ http://pc8.2ch.net/test/read.cgi/tech/1047230229/
0023デフォルトの名無しさん
2006/01/17(火) 21:49:27l |'〆-‐/' ‐-ゞ l
| |' _ l| |
| l ,r7〒 〒=、/ l
l∧.,∧|',弋ノ‐、 ,弋ノ、/l
l:;、;:::;:lヘ_ _.ノ ̄、_ _ノ:;l
. || ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
.__ || |
ヽヽ|| トイレ |
t==、 ,=、
l '=', 行ってくるね `=3
ヽ'||' |`′
. || |
. || |
. ||______________|
0024デフォルトの名無しさん
2006/01/17(火) 21:53:40s/|\s*(\d*)\s*(\d*)\s*|/{ $1, $2 },/e
0025デフォルトの名無しさん
2006/01/17(火) 22:04:24データベース言語ってのは全体的に良くできてる言語だと思うんだが
気のせいか
0026デフォルトの名無しさん
2006/01/17(火) 23:00:10今のところ「いい」プログラミング言語は、
Pascalに代表されるように、少なくとも自己記述能力がある。
と考えられている(かも)
その点どうよ?
0027デフォルトの名無しさん
2006/01/17(火) 23:12:05> 型が違う変数への代入を出来なくすれば良いだけのような
一理ある。
変数に入るデータの型が変わるときには、それを明示するのはありかもしれない。
具体的には
// コードはJavaScript
var tag = ["a","em","strong"];
tag = "</?("+tag.join("|")+").*?>"; //指定したタグを消し去る正規表現
var tag_reg = new RegExp( tag, "g" );
で、2行目を
<String>tag = "</?("+tag.join("|")+").*?>";
で書くことを推奨するとか。(サンプルソースとしてはびみょいな
実際の所、動的言語でも、宣言時の型と違う型を再代入する場面って少ないから、最初の代入時に何の型が入ったかをIDEが知っていれば、あとは「多分、型は変わっていない」と類推してあげられるんだよね。
0028デフォルトの名無しさん
2006/01/17(火) 23:20:02int a = 1;
int b = 3;
float c = a / b;
についてだけれど、コンパイラがfloat c= まで読んだ時点で
=の右辺をfloatの文脈とする言語があっても良い気がする。
つまり、型を決めるのはデータの供給側でなくて需要が決めるという言語。
0029デフォルトの名無しさん
2006/01/17(火) 23:56:29懐古に戻る
0030デフォルトの名無しさん
2006/01/18(水) 00:39:00君言語だと、
int i = 0.9 + 0.2;
が、i == 0 になるけど、それでもいい?
0031デフォルトの名無しさん
2006/01/18(水) 00:41:21俺は28とは別人だが、縮小方向への型変換になるときにはエラーを出すというはどうだろう?
その場合、それが必要なら当然キャストすれば良い。
0033デフォルトの名無しさん
2006/01/18(水) 01:11:02aをfloatにしろっていうのなら無茶だ
c = a/b;
はつまり
c = divide(a,b);
なのであってaは代入から直接は見えない
関数に対し需要形を透過するか否かを毎回決めるなんてしちめんどくさい言語は御免被る
しかもメリットが邪悪なキャストだけだってんだから激しくイラネ
0034デフォルトの名無しさん
2006/01/18(水) 01:17:31> c = a/b;
> はつまり
> c = divide(a,b);
> なのであってaは代入から直接は見えない
バカなのか釣りなのかはっきりしろよ。
0035デフォルトの名無しさん
2006/01/18(水) 01:18:30そして誰もがキャストしはじめる
0036デフォルトの名無しさん
2006/01/18(水) 01:49:55俺も同じ事考えたことがある。
ただ、俺なりの回答では、それは「No」だね。
理由は単純
「それは美しく、またハッキーではない」
実際、代入はあまりに頻繁に使うから、1タイプ多いだけでも割に合わないんだよね。利点の部分も認めるけど。
0037デフォルトの名無しさん
2006/01/18(水) 01:58:180038デフォルトの名無しさん
2006/01/18(水) 09:03:310039デフォルトの名無しさん
2006/01/18(水) 09:13:52int b = 0;
float c = a.0 / b.0;
004028
2006/01/18(水) 11:00:51それでもかまわない。その例だと誤差が極端に見えるが、
int i =100.9+100.2;
なら201の代わりに200になるだけ。
精度が欲しければ明示的に宣言すればよい
double a;
double b;
int c = float(a+b);
みたいに計算資源を節約することもできる。最近のCPUならありがたみはないが。
こういうこともできる。
string s="12"+"34"; //s="1234"
int i="12"+"34"; //i=46
そもそも、計算というのは何かに利用するために計算するのであって、
元のデータから押し売りする訳じゃない。
そう考えると需要が型を決めるというのも不自然ではないと思うが。
0041デフォルトの名無しさん
2006/01/18(水) 11:39:05姉は設計に任せても計算精度が高いソフトが出来上がる
0042デフォルトの名無しさん
2006/01/18(水) 12:47:16あとは、仕様からコード生成する仕組みを作ればおしまい。
0043デフォルトの名無しさん
2006/01/18(水) 12:58:27「自動プログラミング」と言っていたのを
思い出した。
0044デフォルトの名無しさん
2006/01/18(水) 13:12:28言語仕様というより、
論理プログラミングを理解できない者には
一切の資格を与えないようにすればよい。
0045デフォルトの名無しさん
2006/01/18(水) 13:16:20MDAとかxUMLか?
http://ja.wikipedia.org/wiki/仕様記述言語
しかし、>>43の言うように、ホントにそれから最終的に必要な実行可能なモノが生成されるのなら
それはずばりプログラム言語だと思うんだが、どうか。
0046デフォルトの名無しさん
2006/01/18(水) 14:55:59APLとかその辺じゃだめ?
0047デフォルトの名無しさん
2006/01/18(水) 14:59:55なんだ?
結局型無し言語マンセーなだけか
0048デフォルトの名無しさん
2006/01/18(水) 15:01:390049デフォルトの名無しさん
2006/01/18(水) 16:34:35扱えるはずの数の範囲は64*log10(2)だから19桁程度になるんだよね。
結局の所、とても大きな数や、とても精度の高い計算の場合、欲しい桁数の範囲までメモリを取れないといけないんだけど
これってLispやRubyの積んでいるNumber型の事…orz。
問題はNumber型って、それなりに計算資源を喰うんだよね
C言語が長さ固定の型をたくさん持っているのって
「パフォーマンスに応じて使い分けてね」
という所なのだから、型の長さと誤差は不可分の問題と理解して、必要に応じて使い分けるものというだけなんだよね…
うん、なんかそんなかんじ。板汚しゴメンナサイ。
0050デフォルトの名無しさん
2006/01/18(水) 16:50:34カッコ良い。
rubyの場合、引数の型が変わるときって
s = 12.to_s + 34.to_s #s="1234"
i = "12".to_i + "34".to_i #i=46
と書かないといけないんだけど、常々これって「気持ち悪い」
と思っていたので。
>>47
> 結局型無し言語マンセーなだけか
型にこだわらない、つまりはどんな型でも入れても良いということはそんなに悪いものでもないよ。
型がめまぐるしく変わる場合なんかは、記述を大幅に簡略化できる場合が多々ある。
逆に、型に小うるさい分、もっと簡潔に書けるはずのものが、無駄に複雑になるときもある事を考えれば、型のチェックというのは毎度行うものではなくって、必要な箇所を見抜いて、関所のように配置するのが適当だと思う。
そういう意味では、良い言語というのは「基本は型無し言語+簡潔な型チェック文法」が一つの正解に見えるんだけどなぁ…。
0052デフォルトの名無しさん
2006/01/18(水) 22:44:39小数なんて使わないから。
0053デフォルトの名無しさん
2006/01/18(水) 22:50:460054デフォルトの名無しさん
2006/01/18(水) 22:54:18005528
2006/01/18(水) 22:58:33型無し言語かどうかはあまり関係ないよ。それは型を決めるのが実行時かコンパイル時かという違いでしかないし。
今考えているのは演算結果の型を決める方法について、普通と違うアプローチ。
Cの文法の発想法との違いを図式化すると
c=a+b;という代入文を
a→+→c
↑
b→↑
ボトムアップ・できること指向で考えるのがC流で
c←+←a
↑
↑←b
トップダウン・欲しいもの指向で考えるのが今考えている言語流。
更に思いついた例
float c=1/2; // 割り算はfloat(float,float)型関数じゃなくてfloat(int,int)型
もう一つ
string s = "12" * 3; // s="121212";
int i = "12" * 3; // i=36;
こーゆー使い分けははC++みたいな演算子オーバーライドでは共存できない。
これはやりすぎっぽいけどね。
演算子オーバーライドが誤読の元だというのは承知しているけど、
そもそも整数演算と実数演算に同じ演算子を使うという時点で入っちゃってるんだよね。
それがそもそもの前スレ975の原因の一つなわけで。
そして、人間の発想は欲しいもの指向とできること指向の両方があって、
代入なんかは欲しいもの指向だったりするわけだ。
(できること指向なら左辺が値で右辺が書き換えられる変数という方が自然だと思う)
その辺りが975みたいなことをしたくなる心理じゃないかと思うけど、どうよ?
0057デフォルトの名無しさん
2006/01/18(水) 23:17:16> int a = 1;
> int b = 3;
> float c = a / b;
> で計算すると c=0 になってしまいます。
> float c = 1.0 * a / b;
> だとちゃんと c = 0.3333 になります。
> これって結構バグの温床になっているような気がするけど、
なってません。
0058デフォルトの名無しさん
2006/01/18(水) 23:27:12int i =100.9+100.2;
float f = 100.9 + 100.2;
printf("i = %d, f = %f\n");
で、結果が 'i = 200, f = 201.1' になるの?
ちょっと嫌だな。
string s = "123" + "456";
int i = s + "789";
「おっ、s ってここしか使ってないじゃん。」
int i = ("123" + "456") + "789";
バグが増えそうな予感...。
0059デフォルトの名無しさん
2006/01/18(水) 23:34:19イメージとしては、例えば Java の拡張forループみたいな感じに。
自分が思いついたのは、例えばシングルトンパターンの場合、本来なら
- コンストラクタを private で宣言する
- private な クラス変数を用意する
- インスタンス化メソッドを用意する
っていう手順を踏まなくちゃいけないところを、クラス宣言で
singleton みたいなキーワードをプラスするだけで
(コード例: public singleton class Test{} )
自動的に上で書いたような実装を作ってくれる、とか。
そうすると、コードも簡単になるし、可視性の設定ミスみたいな単純なバグが
防止できていいかなーなんて。(例えばコンストラクタを private にし忘れて
インスタンスの複数生成を可能にしてしまうなど)
0060デフォルトの名無しさん
2006/01/19(木) 00:02:35あと、コードを変えたとき影響を受ける部分を可視化できる言語。
(非常に強く影響を受ける部分は赤で、たぶん影響を受ける部分は黄色で表示するとか)
0061デフォルトの名無しさん
2006/01/19(木) 00:09:040062デフォルトの名無しさん
2006/01/19(木) 00:11:330063デフォルトの名無しさん
2006/01/19(木) 00:12:280064デフォルトの名無しさん
2006/01/19(木) 00:16:48foreach i of enum型名
みたいな感じ?
0065デフォルトの名無しさん
2006/01/19(木) 00:17:44>>59
完璧ではないけれど、C++のテンプレートではこれくらいまでは何とかなる。
template<typename T, typename AccessT = T>
class Singleton : boost::noncopyable
{
public:
static AccessT& Instance() {return obj;}
protected:
Singleton() {}
~Singleton() {}
private:
static T obj;
};
template<typename T, typename InstT>
T Singleton<T, InstT>::obj;
//例
class Hoge : public Singleton<Hoge>
{
private:
friend class Singleton<Hoge>;
Hoge() : i(1) {}
public:
int i; //例なので簡略化のためGetter/Setterは勘弁
};
int main()
{
cout << Hoge::Instance().i << endl;
// Hoge h; //エラー
}
0066デフォルトの名無しさん
2006/01/19(木) 00:20:47というか、そもそも、enumが型ってのがおかしいだろ。
型の属性だろ。このスレの上に出てたリッチな型情報に入るべき。
0067デフォルトの名無しさん
2006/01/19(木) 00:21:39C++からJavaに移ったけど、全然バグは減ってない。
0068デフォルトの名無しさん
2006/01/19(木) 00:27:210069デフォルトの名無しさん
2006/01/19(木) 00:27:45+ :: string -> string -> number とかがあれば良いだけかと。
0070デフォルトの名無しさん
2006/01/19(木) 00:29:170071デフォルトの名無しさん
2006/01/19(木) 00:34:050072デフォルトの名無しさん
2006/01/19(木) 00:37:56しかしそれをどう言語でサポートできるかというと、>>45の言うように
検証可能な言語で仕様を書く、というのは、プログラミングそのものに思えるんだが、
仕様記述言語というのを使ったことある奴に意見が聞きたい。
>>67
アセンブラで仕事してください。
>>68
プログラムを書くから。で、前スレ>>2に戻る。
0073デフォルトの名無しさん
2006/01/19(木) 00:43:04慎重になるからか、バグの件数そのものはそんなに多くない。
0074デフォルトの名無しさん
2006/01/19(木) 01:09:14配列をメソッドに渡したときにメソッド内での変更が元の配列に反映されることを知らない人を
何人か見たことがある。
0075デフォルトの名無しさん
2006/01/19(木) 02:22:26配列の問題じゃないし。
0076デフォルトの名無しさん
2006/01/19(木) 02:31:370077デフォルトの名無しさん
2006/01/19(木) 03:00:53C++よく知らないけど、普通に使ってる?
Javaのfinalも、いわゆる定数以外あんま使わないしな。
ああでも、後からプログラムを変更しずらそうではあるな。
あと、これも上にあったリッチな型情報ってことか。
0078デフォルトの名無しさん
2006/01/19(木) 03:39:24http://pc5.2ch.net/test/read.cgi/tech/1078193971/
こんなスレがあったくらいだからなぁ
0079デフォルトの名無しさん
2006/01/19(木) 06:57:580080デフォルトの名無しさん
2006/01/19(木) 11:09:510081デフォルトの名無しさん
2006/01/19(木) 12:53:32おめぇら、形式的仕様記述について知ってる事を書け
http://pc2.2ch.net/test/read.cgi/tech/1013507313/
0082デフォルトの名無しさん
2006/01/19(木) 13:40:460083デフォルトの名無しさん
2006/01/19(木) 14:20:470084デフォルトの名無しさん
2006/01/19(木) 14:36:130085デフォルトの名無しさん
2006/01/19(木) 22:10:34つまりメモリいっぱい積んであれば型なんか気にしなくていいよ
っていうことか。メモリいっぱい欲しいな。
0086デフォルトの名無しさん
2006/01/19(木) 22:15:23CPUの速さも欲しい。
0087デフォルトの名無しさん
2006/01/19(木) 23:50:50資源は無限にあると考えてよかろうて。
0088デフォルトの名無しさん
2006/01/20(金) 00:44:040089デフォルトの名無しさん
2006/01/20(金) 00:45:57量子コンピュータなら可能だろう。
0090デフォルトの名無しさん
2006/01/20(金) 10:47:340091デフォルトの名無しさん
2006/01/20(金) 14:40:150092デフォルトの名無しさん
2006/01/20(金) 14:43:270093デフォルトの名無しさん
2006/01/20(金) 15:58:450094デフォルトの名無しさん
2006/01/20(金) 16:02:520095デフォルトの名無しさん
2006/01/20(金) 16:03:44場当たり的にクオートじゃ成り立たないんだよ文型は
全角なら通るけど半角なら通らないとかなるとまたまどろっこしくなってくるし
スペースの大きさ測るのに専念することになっていらいらする
0096デフォルトの名無しさん
2006/01/20(金) 16:22:14変数名や関数名は一意の記号でも良いと思う
それと簡単に意味や内容とが一致できるようなIDEとセットじゃないと意味が無いが
0097デフォルトの名無しさん
2006/01/20(金) 16:29:10Program Files ですか
0098デフォルトの名無しさん
2006/01/20(金) 16:29:41-とーと一を間違えそうな予感。
0099デフォルトの名無しさん
2006/01/20(金) 16:35:09できない言語ってどんなものがあるのですか。
0100デフォルトの名無しさん
2006/01/20(金) 17:05:28あくまで気がするだけだ
日本語の名寄せを甘く見るなよ
0101デフォルトの名無しさん
2006/01/20(金) 17:07:080102デフォルトの名無しさん
2006/01/20(金) 17:20:160103デフォルトの名無しさん
2006/01/20(金) 17:22:25LISPもいいのかな多分
Smalltalkは発作的に日本語コードを覚えられる
あんまり重要な分野じゃないから省かれた
0104デフォルトの名無しさん
2006/01/20(金) 17:30:49つか、日本語の識別子が使えること、って需要あるの?
習得度の差はあれど、日本人なら英語は必修で学ぶし
言語のポータビリティが低下してしまう
0105デフォルトの名無しさん
2006/01/20(金) 17:33:530106デフォルトの名無しさん
2006/01/20(金) 17:44:19激しく否定。character数を1:2と考えても、
一単位あたりの漢字の表意力はAlphabetより上。
0107デフォルトの名無しさん
2006/01/20(金) 17:45:400108デフォルトの名無しさん
2006/01/20(金) 17:49:16100年後ぐらいまでに
0109106
2006/01/20(金) 17:50:180110デフォルトの名無しさん
2006/01/20(金) 17:54:56白い(雪).
は、どう表現すればよいのだろう。
0111デフォルトの名無しさん
2006/01/20(金) 18:02:12#define 白 Shiro
#define 雪 Yuki
0112デフォルトの名無しさん
2006/01/20(金) 18:03:53まあ
shiroi(yuki);
でいいよ
もっとわかりやすい名前つけろ、といいたいが
0113デフォルトの名無しさん
2006/01/20(金) 18:08:060114デフォルトの名無しさん
2006/01/20(金) 18:10:19Javaも可能
C#をふくむ.NETはだいたいできる
0115デフォルトの名無しさん
2006/01/20(金) 18:23:18この場合は?
電子計算機を使用して源泉徴収税額を計算する方法を定める財務省告示(_給与等,_社会保険料,_配偶者扶養親族等合計,_税額) :-
_社会保険料控除後の給与等の金額 は _給与等 - _社会保険料,
別表第1(_社会保険料控除後の給与等の金額,_給与所得控除の額),
別表第2(_配偶者扶養親族等合計,_配偶者控除額),
_その月の課税給与所得金額 は _社会保険料控除後の給与等の金額 - _給与所得控除
の額 - _配偶者控除額,
別表第3(_その月の課税給与所得金額,_税額) .
0116デフォルトの名無しさん
2006/01/20(金) 18:30:04双方とも形容詞は論外
って考えてるのは俺だけかなぁ
0117デフォルトの名無しさん
2006/01/20(金) 18:41:29一字でも間違えたら大変な事になりそうだ。
0118デフォルトの名無しさん
2006/01/20(金) 18:46:370119デフォルトの名無しさん
2006/01/20(金) 19:42:310120デフォルトの名無しさん
2006/01/20(金) 19:52:27それを手繰っていけば宣言と使ってるところが分かるように。
0121デフォルトの名無しさん
2006/01/20(金) 21:55:37>>110の「雪は白い」という仕様の中に色という情報はない。
0122デフォルトの名無しさん
2006/01/20(金) 22:02:260123デフォルトの名無しさん
2006/01/20(金) 22:43:060124デフォルトの名無しさん
2006/01/20(金) 23:04:01今の言語だって一緒だろ?
0125デフォルトの名無しさん
2006/01/20(金) 23:12:16そんなプログラム作るほうが悪い。
0126デフォルトの名無しさん
2006/01/20(金) 23:47:10或意味、英語圏なんかの人より我々の方が、よりメタ化して考えられている気もする
0127デフォルトの名無しさん
2006/01/20(金) 23:53:01意味不明。
>>126
そうか、読む方としてはべたな英語もどき使われるより
わかりやすいと思うけど。
特に、メタ化なんて言う知ったか用語を使う必要のない
事務用途にはぴったりだと思う。
英語読める奴が COBOL のソースを読むとこういう感じ
なのかもな。
ただ、日本語は入力するのがちょっと辛い。インテリセ
ンスとかが利けはましになるかな。
0128デフォルトの名無しさん
2006/01/21(土) 00:02:020129デフォルトの名無しさん
2006/01/21(土) 00:40:25日本語(にほんご)は、狭義の日本民族(大和民族)の言語であり、主に日本で
使用される言語である。日本の「国語」とされている。使用者は世界で約1億3千万人。
日本以外では、台湾原住民の異なる部族同士の会話に用いられることがあり、
またパラオ共和国のアンガウル州が公用語の1つに採用している (CIA - The World
Factbook -- Field Listing - Languages)。挨拶や一人称などが多種多様に及ぶ。
また、海外の日系移民や日本研究家、ビジネスマンなどによって使用・学習されている。
言語学的な特徴として、語の格を示すため語尾変化ではなく、文法上の意味を
表す機能語(助詞・助動詞)を付加することから膠着語に分類される。他言語と
大きく異なる点として、表記上の文字体系が非常に複雑であることが挙げられる。
なお近縁の言語は琉球語しか専門家に認められていない。朝鮮語とは文法構造
が類似しているが、基本語彙で共通点は少ない。また(北海道の)アイヌ民族の
言葉であるアイヌ語は孤立言語とされ、日本語とは基本的な性格が異なる。
0130デフォルトの名無しさん
2006/01/21(土) 00:45:34諸外国の方なの?
0131デフォルトの名無しさん
2006/01/21(土) 00:46:430132デフォルトの名無しさん
2006/01/21(土) 00:53:12あなたを、犯人です。
0133デフォルトの名無しさん
2006/01/21(土) 00:54:58普通は、配偶者控除額とか給与所得控除の額とか給与等とか社会保険料控除後の給与等の金額とかは使わない。
たまにあるんだけどさ。
似たような用語が大量に定義されてて、いちいち使い分けないといけないような案件が。
0134デフォルトの名無しさん
2006/01/21(土) 01:32:22>>124 の言ってるのは日本語を使っていないプログラムでも1文字間違えたら
エラーになるだろう、という意味ではないかな。
それから、>>115で使われている語彙は、源泉徴収税額表の末尾付近に
付加されているも頁の中に出てくるもので、
30年以上前からある。以前は
「大蔵大臣告示による計算機による税額計算」といった。
どんな企業でも、総務畑にいる人なら知らない人はいない。
0135デフォルトの名無しさん
2006/01/21(土) 01:43:57仕様が「おんなは赤い」だったらどうだろう。
女.色=赤;
が正しいとはいえない。私は今村昌平の「赤い殺意」を思い出してしまう。
赤い(女).
だと、少なくとも間違っているとはいえない。
0136135
2006/01/21(土) 01:46:05ごめん。
0137デフォルトの名無しさん
2006/01/21(土) 02:12:55素直に述語といいなさい
0138デフォルトの名無しさん
2006/01/21(土) 02:23:35その分野ではよく使われている単語だからっていうのはわかるけど、
「バグの出にくい」という目的からは真逆の方向に突っ走ってるんだよね。
0139デフォルトの名無しさん
2006/01/21(土) 02:28:19is("雪","白"). かなぁ。
0140デフォルトの名無しさん
2006/01/21(土) 02:39:230141デフォルトの名無しさん
2006/01/21(土) 02:41:42語彙が仕様書そのままで、ロジックの表現もほぼ仕様書どおりの書けるのだから、
バグは出にくくなっていると思うよ。まじで。
わざわざ英語(というかローマ字)に直さなければならなかったり、
四則演算や配列などに置き換えなければならないほうが、バグはでやすい。
0142デフォルトの名無しさん
2006/01/21(土) 02:44:110143デフォルトの名無しさん
2006/01/21(土) 02:45:25だな。
0144デフォルトの名無しさん
2006/01/21(土) 03:10:25最初から曖昧な記述の可能な言語を発端にしてるから問題があるんだと気付きなさい。
0145デフォルトの名無しさん
2006/01/21(土) 03:14:490146デフォルトの名無しさん
2006/01/21(土) 03:27:100147デフォルトの名無しさん
2006/01/21(土) 03:33:02↓
頭の悪いプロジェクト体制で使われる
↓
頭の悪いバグのオンパレード
結論:頭の悪い上司には好かれるな
0148デフォルトの名無しさん
2006/01/21(土) 03:40:219割のBUGがモデリングに棲むなら、やっぱり重要じゃん
0149デフォルトの名無しさん
2006/01/21(土) 03:46:38nullable
role,unit,
range (これは静的にチェックできないよな。リテラル数代入以外)
demension
こんなとこか。roleがいまいちピンと来ないけど。
しかし、オブジェクト指向っぽい型(クラス)に適用できそうなのってnullable位だな。
0150デフォルトの名無しさん
2006/01/21(土) 07:51:59「ひまわり」とか「なでしこ」で書いたらこのスレでは
話が通りやすいと思う。
オブジェクトの属性付加問題(雪::色=白い)ではPrologだと
意味を考察することなく、ある程度形式的記述が可能なので
若干の優位性はあるかもしれない。
0151デフォルトの名無しさん
2006/01/21(土) 08:17:35スモールビジネスで総務畑にいる人が直接プログラミングすれば
バグなんて、でないw
Small is beuatiful!
0152デフォルトの名無しさん
2006/01/21(土) 08:25:52やはり、仕様記述言語ですか。この話題はそこから発した流れなのですね。
ただ、コストが問題だな。ほとんどが教育コストだが。
0153デフォルトの名無しさん
2006/01/21(土) 11:51:51やっぱりそこに落ち着くんだな
で、こんどは仕様記述言語の設計書が必要になって仕様記述言語記述言語ができると
0154デフォルトの名無しさん
2006/01/21(土) 12:40:27仕様記述言語自身で仕様記述言語を記述するから問題無いよ。
0155デフォルトの名無しさん
2006/01/21(土) 12:49:42条件に矛盾が発生したり、一意に動作が決定できないような場合は
エラーを返してくれるの。
0156デフォルトの名無しさん
2006/01/21(土) 13:22:37NP完全な問題だろそれ
0157デフォルトの名無しさん
2006/01/21(土) 15:14:25http://www.constraint.org/constraint_org.htm
0158デフォルトの名無しさん
2006/01/21(土) 20:39:33飛ばされた先で適切なルーチンを通らず、
Defaultで通過してしまうというケースから
起こったものが多かった。
一番単純なケースはエラーコードの誤り。
こういったケースでは強い型付け云々は
全く無力で、やはり仕様記述の問題だと
思う。
要求者が仕様記述言語で書いてくれる訳では
ないだろうから、やはり、日本語解釈の問題から
おんな::色=赤い 的な誤謬はさけられない。
この場合喩を含んでいるから、仕様記述としては
適切でないといえるが、多かれ少なかれこの
ような問題は発生する。>>118 -> >>115 のような
単純な写像が成立するためには、仕様記述以前の
要求段階でのモデリングはやはり重要と考えるが、
どんなものだろう。
0159デフォルトの名無しさん
2006/01/22(日) 09:38:59Javaのthrowsじゃダメなの? Java使ったこと無いから細かい事は知らんけど。
0160デフォルトの名無しさん
2006/01/22(日) 10:46:28> こういったケースでは強い型付け云々は
> 全く無力で、
そんなことはない。
エラーコードを Enum型にすれば、間違って不正なコード
を返すケースや、コードを受け取る側で返されるはずの
コード全ての処理が入っているかのチェックができるよう
になるので、バグは "0" にならないけどバグを出しにく
くすることができる。
ただデメリットとして、エラーコードを増やしたりすると
まじめにエラーチェックしているプログラムほど修正個所
が多くなるので全体として非常に大変なことになり勝ち。
0161デフォルトの名無しさん
2006/01/22(日) 13:15:20私の対象にしたのが、10年くらい前の小型汎用機での事務計算システムで
開発言語はCOBOLというケースだから、現在と事情が違うかも知れない。
エラーコードについては私の書き方が悪かった。正しいエラーコード
たとえば、404を返さず、304を複数のケースに返してしまう、くらいの意味。
COBOLの場合、構造体は例の明示的なREC定義だがら、構造体の型の不整合に
よるエラーというのは起こり難い。エラーが起こるのは引数として
情報(ほとんどが××区分)がそもそも不足している場合。
if文の中にエラーがあるというケースよりもこちらの方が多かった。
これはすなわち、仕様かそれ以前の問題で、プログラミングではどうにも
ならない、と言うような事です。
0162デフォルトの名無しさん
2006/01/22(日) 14:25:19もちろんプログラムでどうにもならないケースがあるの
は承知しているが、このスレは「バグを出しにくくする
ための言語仕様を考えるスレ」だから。
UML とかは、ちょっとスレ違いかと。
0163デフォルトの名無しさん
2006/01/22(日) 15:47:58・強い型付とそのチェック強化でバグを減らす
・仕様段階でのバグの除去がやはり重要
という二論に分化していて、私の書いたのは後の方の立場。
仕様記述言語で仕様を書かせ(書いてもらう)、それを
可能な段階まで直接コード化する。コードが生成できる
範囲を少しづつ下方に広げていく。こういう戦略になる。
0164デフォルトの名無しさん
2006/01/22(日) 17:59:160165デフォルトの名無しさん
2006/01/22(日) 20:37:140166デフォルトの名無しさん
2006/01/22(日) 22:46:09セットされている場合は新規にクラスをつくってセットするというのがある
しかも、それが期待したオブジェクトが入ってない場合は100%障害の場所に・・・
警告出すか、ありえないんだからそんな処理いれるなよって思ったよ
他にも変数の宣言はメソッドの入り口でまとめてしてしまうとか
スコープを意識しないロジックも満載
私は従順無能プログラマーで意図が読めないので
テスト通ったらせっせと直して再テストして出してますよ、えぇ
0167デフォルトの名無しさん
2006/01/23(月) 01:39:190168デフォルトの名無しさん
2006/01/23(月) 01:59:22ここはキミの愚痴を書くスレッドじゃないんだよ。
明らかにスレ違いだ。そんなことも分からないようでは、
キミの愚痴もどこまで信憑性があるか怪しいモノだね。
マ板にそういう愚痴スレは存在してるから
そこでグチグチ言ってろ。な。
0169デフォルトの名無しさん
2006/01/23(月) 06:34:20無責任で申し訳ないが、私は全然知らない。
15年くらい前にZの解説書の翻訳が出て、
見よう見まねで書いたことはある。元が
平らな文の記述なら、結構いける気がしたが、
やはり、Prologで直接書いた方が、たとえ
思いつきの部分が入り込んでしまったとしても、
生産性が高いので、採用しなかった。
題名を忘れたその本を探したのだが、昨日は
見つからなかった。見つかったら、サンプルを
書いて見る。
0170デフォルトの名無しさん
2006/01/23(月) 08:50:01全然知らないのに「仕様記述言語で仕様を書かせるとバグが減る」とか主張してんのか?
頭おかしーだろ。
0171デフォルトの名無しさん
2006/01/23(月) 09:22:09そこから抜本的に考えないとどうにも
ならないバグの方が多いといっているだけ。
トップダウンにシステムの開発言語を
含むシステムの再構築が必要なはずで
そのプログラムレベルのトップは
仕様記述言語と呼ばれる物がくるべき
だろうと思う。
私なら、全部Prologで済ますがね。
0172デフォルトの名無しさん
2006/01/23(月) 09:56:29呼ばれなくても良い。しかし、言語で組み立てられる仕様と
コードとの仲立ちをするのは、
述語論理と集合論以外に私は思いつかない。
現に、集合論と関係代数、関係論理を基礎とする
RDB+SQLの登場、普及によってバグは確実に減ったと思う。
この場合、仕様記述言語の部分を、データベースが吸収
したのだと思う。こういう転回は今後も起こるし、そんなに
大袈裟に考えるべき事ではない。
0173デフォルトの名無しさん
2006/01/23(月) 20:16:14ならばプログラムも…
0174デフォルトの名無しさん
2006/01/23(月) 20:39:37「バグの出にくいシステム構築を考える」スレではない
そういった精細さを欠いた人間には
仕様記述言語を与えたところで無駄であろう
0175デフォルトの名無しさん
2006/01/23(月) 20:58:55「バグの出にくい言語仕様を考える」ことに含まれないのかな?
0176デフォルトの名無しさん
2006/01/23(月) 21:20:03バグの出にくい言語を述語論理に基づく
言語と見てるわけだよ。
全部そういう言語に取っ替えようと
いうのは途方もない事だから、確実に
取り入れられて、かつ、現実にバグを
減らす事に寄与する仕様記述の部分を
強調しているだけ。
0177デフォルトの名無しさん
2006/01/23(月) 22:05:290178デフォルトの名無しさん
2006/01/23(月) 22:09:23仕様記述言語仕様記述言語言ってる奴、お前が思う仕様記述言語風に
○×ゲームの仕様きってみれ。
0179デフォルトの名無しさん
2006/01/23(月) 22:25:420180デフォルトの名無しさん
2006/01/23(月) 22:29:390181デフォルトの名無しさん
2006/01/23(月) 23:19:060182デフォルトの名無しさん
2006/01/23(月) 23:49:15いいなそれ。誰か「バグの出にくいシステム構築を考える」スレを立ててください。
>>178
仕様記述言語について語っていた人とは別人ですが、○×ゲームってどんなゲームですか?
0183デフォルトの名無しさん
2006/01/24(火) 00:15:02三目並べならわかるか?
0184デフォルトの名無しさん
2006/01/24(火) 19:57:19バグかどうかは仕様書に沿ってるかどうか
だからバグかどうかなんていうのは 言語仕様 に左右されないわけ
言語云々よりもっと高次の段階でバグが発見されて、
低次の言語云々の部分に完全に翻訳できれば何でもかまわないわけなのでね
というかそれは言語仕様でどうにかなるもんじゃない
夢見すぎ
もっと能力無いのを自覚しろよ
0185デフォルトの名無しさん
2006/01/24(火) 20:10:36だから意味無いじゃんって事で書いたんだが
その辺も仕様記述言語で書いてあった方が良いのか?
0186デフォルトの名無しさん
2006/01/24(火) 22:16:170187デフォルトの名無しさん
2006/01/24(火) 22:17:10良い。グダグタ言ってないで具体的にやれ。
0188デフォルトの名無しさん
2006/01/24(火) 22:18:41お前の能力では完璧な仕様書なんか出来ないだろ。
というかそれは人間にどうにかできるものではない。
夢見すぎ
もっと能力無いの自覚しろよ
0189デフォルトの名無しさん
2006/01/25(水) 12:41:53コンパイラ分野の長い研究の成果で、文法などの「形式」に関しては、ある程度体系化がなされているんだけど
「意味」を表すための研究というのは、「それをやるのは非常に難しい」という一定の結論が出ているんだよね…
(完全に不可能、とは言わないけど解決できていない問題があまりにも多い)
そのために、何処かで曖昧な記述しかできない自然言語で、現在でも仕様の記述が行われているんだけど
> 仕様段階でのバグの除去がやはり重要
自分なりにこの意図を汲み出してみると、これは「コンセプトの完全性」の問題を話している様に見える
コンセプトが正しくなかった>アルゴリズムが無駄に複雑になった>結果バグが増えた
なら相関関係がないわけじゃないけど、基本的にはバグの話とはズレている様に見えるかなぁ
0190デフォルトの名無しさん
2006/01/25(水) 23:29:27当然その「バグ」は「実装段階のバグ」であることが暗示されているわけで
それ以外のバグに関する論は基本的にスレ違いであると思われ
0191デフォルトの名無しさん
2006/01/26(木) 00:17:09バグが「出にくい」言語仕様と言った場合、
「不幸にも埋め込まれてしまったバグが顕在化しないための方策」
でもあるのだろうかという話にならなければならない。
0192デフォルトの名無しさん
2006/01/26(木) 00:18:120193デフォルトの名無しさん
2006/01/26(木) 00:45:19エラー表示の無いコンパイラとエラー表示のない製品を作ってしまえ!
0194デフォルトの名無しさん
2006/01/26(木) 00:47:19Microsoft
富士通
三菱
0195デフォルトの名無しさん
2006/01/26(木) 03:20:15ほとんどのバグは仕様→プログラミング言語への翻訳過程によって起こる。
この翻訳過程を自動化しようという試みもあるが、技術的に困難。
そこでだな、逆転の発想でプログラムから仕様を自動生成すれば
0196デフォルトの名無しさん
2006/01/26(木) 15:16:38実はこういう場合がありました、というところでバグが出る。
この辺をどうにかしる。
0197デフォルトの名無しさん
2006/01/26(木) 23:02:22実はこういう場合がありました、というところでバグが出る。
という勝手な思いこみ・決め付けをなんとかしる。
0198デフォルトの名無しさん
2006/01/26(木) 23:31:16実際にプログラムを動かしてみることかもしれない。
0199デフォルトの名無しさん
2006/01/26(木) 23:37:18んだけど、残念なことにそれでは納期に間に合わないわ
けで…。orz
0200デフォルトの名無しさん
2006/01/27(金) 00:11:37マ向け
0201デフォルトの名無しさん
2006/01/27(金) 00:21:31問題がありゃお客が怒ってくるでしょ。使いもんにならん!って。
そうすりゃしようを考えた奴のケツにも火がつくわけで、効果的だと思うけどね。
0202デフォルトの名無しさん
2006/01/27(金) 10:21:140203デフォルトの名無しさん
2006/01/27(金) 11:42:29言語にすればいいんじゃないだろうか。メモリ開放忘れとか。
但し忘れ過ぎたら意味ないのでまずプログラマーの脳の働きを向上させる
必要がある。ということでまずは任天堂DSの(以下略)
0204デフォルトの名無しさん
2006/01/27(金) 12:30:48そんなことはない。
例えば例外機構は、例外処理を強要することで、
「この関数は必ず成功する」という決めつけを排除している。
言語で出来ることは色々ありそうだ。
0205デフォルトの名無しさん
2006/01/27(金) 12:34:04それがアジャイルとかプロトタイピングでしょ。
でも、
このスレで言っている仕様上の不備って言うのは、使い勝手とかじゃなくて、
微妙に曖昧なところがあったり、微妙な考慮不足があって、
実際にコードに落すと端っこと端っこで矛盾>バグ発生、っていうモノでしょ。
0206デフォルトの名無しさん
2006/01/27(金) 13:25:09ヤヴァイのは「ごく稀にしか起こらない重大なエラー」
0207デフォルトの名無しさん
2006/01/27(金) 20:30:43C言語で自動変数初期化忘れとか。ありますねえ。
コンパイラもそのままだと何の警告も出さなかったりして。
0208デフォルトの名無しさん
2006/01/27(金) 23:20:110209デフォルトの名無しさん
2006/01/28(土) 00:47:05エラーだけ出すなんて、怠慢だな。
0210デフォルトの名無しさん
2006/01/28(土) 01:20:14*1 仕様から考えてちょっとおかしい動作をすること
*2 システムから考えてちょっとこれは違うんじゃない?って感じ
*3 書いたとおりに動かない環境
正直、*1 *2は言語じゃどうしようもないと思う。
かといって*3について述べているわけじゃなさそうだし…
0211デフォルトの名無しさん
2006/01/28(土) 01:30:12仕様そのものがおかしいのや
実装していないものが仕様どおりに動かないのは
ここでいう「言語」には関係ないだろし
0212デフォルトの名無しさん
2006/01/28(土) 01:37:01「使いもんにならん!」ってのは「使い勝手」のことには限らんがな。
帳票と画面の矛盾とか、サブシステムをまたいだ矛盾とか、そういうのさ。
0213デフォルトの名無しさん
2006/01/28(土) 08:50:18リバースエンジニアリングということになるが、
双方向性の言語仕様ってのは無理なのかな。
0214デフォルトの名無しさん
2006/01/28(土) 09:00:47初期値が0とかとは限らないから、勝手に初期化されるよりはエラーの方がいいだろ。
0215デフォルトの名無しさん
2006/01/28(土) 10:10:070で動いちゃう方がバグになりそう。
0216デフォルトの名無しさん
2006/01/28(土) 10:25:290217デフォルトの名無しさん
2006/01/28(土) 11:16:560218デフォルトの名無しさん
2006/01/28(土) 11:55:15暗黙に初期値はゼロって事でワーニングで済ませてもらいたいもんだ。
0219デフォルトの名無しさん
2006/01/28(土) 15:05:28「変数の初期値は0で警告は無視する」というやつに対しては、
確かにバグが減っている。
決め付けの排除ではなく、決め付けの通りに動いているわけだな。
0220デフォルトの名無しさん
2006/01/29(日) 04:28:58やはり型情報にいろいろ追加する機能があると良いのでは?
C++のtemplateは裏技チックだからもうちょっと素直な奴。
0221デフォルトの名無しさん
2006/01/29(日) 12:54:360222デフォルトの名無しさん
2006/01/29(日) 14:10:24「プログラマの意図しない動作」をするのがバグなら、出来るだけ人間の思考にすり寄った形でプログラム言語を作成してしまうのが、バグ排除の究極の形の一つと言えるんじゃないかな。
型情報の強化というのは俺も賛成、色々理由はあるけど
「何より、現行技術でやりやすい」
というのが一番かな
0223デフォルトの名無しさん
2006/01/29(日) 15:56:44型情報に何かを付加する方法の一つに、インタフェイスを作ってしまうという方法があるかと
インタフェイスはデータの見方を変える手段として使えるわけで・・・
0224デフォルトの名無しさん
2006/01/29(日) 16:18:140225デフォルトの名無しさん
2006/01/29(日) 22:29:49組んでみて、動かしてみて、初めて、あ・・・ってな感じ。
0226デフォルトの名無しさん
2006/01/29(日) 22:37:53JDK5.0 にそれっぽい仕様があったような・・・?
>>224
そうそう。設計自体がそもそもバグだったりっていうのはたまにある。
0227デフォルトの名無しさん
2006/01/30(月) 00:21:230228デフォルトの名無しさん
2006/01/30(月) 00:22:550229デフォルトの名無しさん
2006/01/30(月) 00:39:56良い仕様を考えるのに必要なのは、経験と内省力。
0230デフォルトの名無しさん
2006/01/30(月) 00:42:01まぁCOBOLでもまだ重いと思うけどね。
0231デフォルトの名無しさん
2006/01/30(月) 01:26:12良いコンセプトを作る前から理解している、というのはソフトウェア以外でも、全工学分野で難しい問題で、実際の所それは作ってみないと分からないんだよね…。
プログラムの場合、プロトタイプを行うことでその正しさをかなり検証することが出来る。
実際の所、センスなんていう個々人の才能に強く依存するモノを当てにしないためには、これまでの設計を収集、分析して経験的事実を取り出していかないといけないんだけど、まだまだ時代がそれをまとめ終えるところまで進んでいないんだよね…。
0232デフォルトの名無しさん
2006/01/30(月) 01:48:230233デフォルトの名無しさん
2006/01/30(月) 03:22:32http://d.hatena.ne.jp/tanakh/20051001
0234デフォルトの名無しさん
2006/01/30(月) 03:30:00インタフェイスって?Javaのinterfaceみたいの?
それじゃあ、上の方に出てきた
null代入禁止とか、次元解析とか、そういう制約は書けなそうだけど。
0235デフォルトの名無しさん
2006/01/30(月) 09:34:50収納名人だろ
0236デフォルトの名無しさん
2006/01/30(月) 12:51:26インターフェースじゃなくてアノテーションの事言いたいんだろ
クラスというかバイナリに付加できるメタデータの事だな
たとえば、EJB3.0じゃセッションビーンになる為にはPOJOで作って
"@Session"をクラス定義に付加すればよいって感じ
アノテーションは宣言だけじゃなくて何処にでも掛けるから
後でコード挿入したい場所に書いておけば簡単にDIが実現できるとか
特定のデバッガ上で意味を持つアノテーションを実現したりも出来る
0237デフォルトの名無しさん
2006/01/30(月) 13:16:56しかしそれは動的なチェックだろ。バグが出てから調べやすいだけだなぁ。
それを静的にチェック出来てコンパイル時に排除できるというのが>>220。
0238デフォルトの名無しさん
2006/01/30(月) 13:22:47ソースに記述できるんだからやろうと思えば静的にチェックできるよ
Javaに関しちゃ静的・動的で2分しちゃう意味は無い
0239237
2006/01/30(月) 13:32:040240デフォルトの名無しさん
2006/01/30(月) 13:45:23やはり、破壊代入を排除する所まで行かないと。
0241デフォルトの名無しさん
2006/01/30(月) 15:42:57それとオブジェクト指向と相性が悪そう。
0242デフォルトの名無しさん
2006/01/30(月) 15:59:431. 文字列型は欲しい。
2. ポインタは極力隠れていた方がいい。core dump とか OS の機能をそのまま
使わずに自分でエラー出してどこが悪いかある程度出して欲しい。
3. 再帰は楽に書ける方がいい。しかしすぐなくなるスタックを使わんでくれ。
4. ていうか自動変数にスタックを使わないで欲しい。使う必要ないよね?
5. バッファオーバーフローの検知。Cのように放置して破壊や乗っ取りが
できてしまうのは嫌。
6. メモリは参照なくなったら勝手に開放されて欲しい。開放後にアクセス
しようとしたらエラー出て欲しい。
0243デフォルトの名無しさん
2006/01/30(月) 16:13:51C/C++以外の言語使ったこと無いのか?
JavaでもPHPでもいいからとりあえず使ってみろ。
バッファオーバーフローなんて文字列型がちゃんとある言語ならまず起きないだろ。
参照無くなって開放されたものに、後からどうやってアクセスするんだ?
0244デフォルトの名無しさん
2006/01/30(月) 18:00:38つうか3が意味不明。末尾再帰の最適化を言ってるのか?
0245デフォルトの名無しさん
2006/01/30(月) 18:42:24Lispなんかじゃあって当たり前の位の物だな
末尾再起をループに展開するぐらいは最新のCコンパイラでもやってくれそうだが
其処の所どう?
0246デフォルトの名無しさん
2006/01/30(月) 18:58:130247デフォルトの名無しさん
2006/01/30(月) 19:37:40http://d.hatena.ne.jp/yaneurao/20051008
http://d.hatena.ne.jp/yaneurao/20051025
0248デフォルトの名無しさん
2006/01/30(月) 19:59:02末尾再帰じゃない再帰をループ展開する必要なし。
0249デフォルトの名無しさん
2006/01/30(月) 20:15:07問題の次元を落とし込むことができるから、
メモリをふんだんに使えて再帰以外の実装があまりにも複雑なら再帰にすべき
・・といっても、再帰なんて気持悪くてあんまりしないんだけどな。
そんな複雑な問題、汎用PCでやらんし
0250デフォルトの名無しさん
2006/01/30(月) 20:20:03そういう言語仕様が望みだというならよくわかるけど、
バグの発生とは関係ない項目が多いのはなぜ。
0251デフォルトの名無しさん
2006/01/30(月) 20:37:16248では「再帰を使うな」とは主張していないんだが。
なぜそんなレスを?
0252デフォルトの名無しさん
2006/01/30(月) 22:29:57再帰は、末尾再帰しか許さない
って仕様でイインジャネ?
0253デフォルトの名無しさん
2006/01/31(火) 00:18:59明らかに無駄な文法を刈り取るのは有効に見えるんだが…
(個人的にはperlのlocal宣言とシンタックスシュガーの多くかな)
やっぱり、バグ削減のためにはどのような文法を継ぎ足すかを考えた方が全体的に近道に見えるなぁ
0254デフォルトの名無しさん
2006/01/31(火) 01:34:26スタックオーバーフローの懸念の問題は
バグとは関係ないと思う。それこそ、
仕様の問題。
0255デフォルトの名無しさん
2006/01/31(火) 03:15:13嘘つき。
コンパイル時制約なんて書けない。と思ったら、
静的とは書いてるけどコンパイル時とは書いてないな…。
たしかに、コンパイル後に使うチェックツールは作れるけど、
そんなんよっぽどのスキモンしかやらんだろ。
0256デフォルトの名無しさん
2006/01/31(火) 14:40:18情報がその場限りで、型情報と共に伝搬して型体系チェックができないじゃないか。
これは、チェックツールじゃ無理。コンパイラじゃないと。次元解析とかできない。
0257デフォルトの名無しさん
2006/01/31(火) 14:53:03ただし次元解析には、数値演算子を廃止してメソッドで作り直さんといかんが。
0258デフォルトの名無しさん
2006/01/31(火) 17:22:19例えば手続き型言語の代表例なC言語で、
double foo(double p,double q){ return p/q; }
等というCのコードがあっても、「0除算例外が発生しそうだから、これはバグの潜むコード」とみなしてはならない。
「foo()の呼び出し元で、fooの第二実引数が0に成りうるなら、これはバグの潜むコード」とみなさなければならないのだ。
つまり、呼び出し元(=親)と呼び出し先(=子)に見れる関係の時、
実行される順序に従って、例外が適切に処理されていればそれは「バグではない」といえる。
--------
さーて、ここまで書いたけど、メチャクチャなこと書いてるよな。
C++で例外機構を取り入れて
int main(){
try{
MainHogeClass p;
p.Run();
}catch(...){ std::cout << "例外発生したよー"; }
}
なんて書くと、「(標準例外に関しては)バグの無いプログラムの出来上がり」ってほざかれるわけだ。
かといって、
int main{
double p,q;
try{
p=10;
cout << "実数を入力してください:";
cin >> q;
cout << p/q;
}catch(...){ cout << "0除算か、他の例外が発生しました"; }
}
とかかれて、「バグの無いプログラムの出来上がり」て言われても。
そうだね、っていえると思う…さーて、バグって何でしょーねぇ
0259デフォルトの名無しさん
2006/01/31(火) 17:51:19そうでなければ潜在的に0割除算で例外の発生する可能性のある不安定なコードになる
0260デフォルトの名無しさん
2006/01/31(火) 18:17:48それだとしても意味はデカい。
例外がなければ0を渡せないという仕様がどこにもなく、ソース見ても問題を見付けづらいが、
馬鹿な例外処理は一目で分かり、書いた奴を減給なり懲戒にすることが出来る。
0261デフォルトの名無しさん
2006/01/31(火) 19:45:55gets() は決して使ってはならない、と書いてある。w
まあ、思想の問題でもあるが、C言語の標準ライブラリの仕様も
なんか間抜けな感じはする。
0262デフォルトの名無しさん
2006/01/31(火) 20:40:29過去の互換性
0263デフォルトの名無しさん
2006/01/31(火) 22:37:390264デフォルトの名無しさん
2006/02/01(水) 00:06:45この場合の事実、つまりバグについて私の考えを述べる
・バグとは
・エンドユーザ側から見れば
・バグとは「使い勝手の悪さや、実現できるはずなのに実現できないこと」がバグとして受け止められる
・プログラマ側から見れば
・バグとは「思ったとおりに動かない」がバグとして受け止められる(…orz)
・また、エンドユーザ側とプログラマ側の隔たりを見れば
・バグとは「要求が実現されていないこと」である
・これ以外のバグの種類は存在しない。
↑このあたりが不十分かな…まるで悪魔の証明を、証明してしまったかのような傲慢な言葉ですな ('A`)
//ここまで同意? <Yes・No>
・ここで次の用語を定義する
<エンドユーザの使い勝手> ⇔ Spec(EU)、
<プログラマの思った通り> ⇔ Spec(Pgr)
<要求が実現されていないこと> ⇔ Gap(Spec(EU),Spec(Pgr))≠φ
とする(意味を定義しているのではなく、書くのが面倒なので記号に書き換えているだけ、に注意)
・バグの取り除き方について
type1. Spec(EU)が悪い
→使い勝手を向上させることでこの種の「バグ」は取り除くことが出来るか?
type2. Spec(Pgr)に動かない
→プログラマに「プログラムは思ったとおりに動かない」ことを認知させることでこの種の「バグ」は取り除くことが(ry?
type3. Gap(Spec(EU),Spec(Pgr))≠φがある
→エンドユーザとプログラマ間で「要求と実現の差」を認知することでこの種の「バグ」は取り除(ry?
--------
でもね、「記号で議論できるほど、バグは浅い問題じゃない」って言われると思うんだ ( ´Д`)・・・
というか書きすぎです、目が疲れると思うので、スル(ry
0265デフォルトの名無しさん
2006/02/01(水) 00:11:38> →プログラマに「プログラムは思ったとおりに動かない」ことを認知させることでこの種の「バグ」は取り除くことが(ry?
これはいったい、何がどう解決してますか?
0266デフォルトの名無しさん
2006/02/01(水) 00:49:32まず「思ったとおりに動かないこと」=「バグ」という認知がある。
そこで、認知を摩り替えて
「思ったとおりに動かないこと」≠「バグ」という認知にするわけだ。
ほら、土台が崩れて、バグじゃなくな(ry
0267デフォルトの名無しさん
2006/02/01(水) 01:24:14ちょっと目が覚めた。いいこと言ってくれた。
0268デフォルトの名無しさん
2006/02/01(水) 01:32:35それ例はちょっと気をつけろ。
俺はWindowsには詳しいけどLinuxには詳しくなくて、
俺とは逆にLinuxには詳しいけどWindowsには詳しくないってヤツと例外処理について話してて
全然話が噛み合わねぇなぁと思ってたら、どうもWindowsでは 0 除算やろうがぬるぽをやろうが
catch(...)でまとめて拾えるけど、Linuxではどうも自分で投げた例外じゃないと拾えんらしい。
0269デフォルトの名無しさん
2006/02/01(水) 01:40:04そして、初心者が簡単に手がでるし、実験環境も実機である場合が多い。
バグを語るなら、ロジックバグをどうにかしないといけないと思うんだけど。
そっちはあんま重要ではないのかねぇ??
0270デフォルトの名無しさん
2006/02/01(水) 01:40:450271デフォルトの名無しさん
2006/02/01(水) 10:57:47ココで話しているユーザーにとってのバグは
「使い勝手の悪さや、実現できるはずなのに実現できないこと」
だけど、これは「ユーザビリティが低い」であって、バグとして扱うのは異論があるなぁ
バグっていうのは、特に何もしていないのにアプリケーションが強制終了したり、Exelのセルに入れた計算で、あらぬ結果が返ってきたりだから
「プログラムが意図したとおりに動かない事」
で扱っていきたいな
0272デフォルトの名無しさん
2006/02/01(水) 11:24:41所謂ある・無しで分かる障害とは違うんだとな
バグと障害は重なる所はあるがバグ=障害だって事は何処にも定められてないな
0273デフォルトの名無しさん
2006/02/01(水) 12:18:50そりゃ言語やツールによって違うのでは?
0274デフォルトの名無しさん
2006/02/01(水) 14:48:21コードを沢山書かなきゃいけない言語だと
バグが入り込みやすいし、
0275デフォルトの名無しさん
2006/02/01(水) 14:53:05そんなことあるか?もう少し具体的な話というか例を
0276デフォルトの名無しさん
2006/02/01(水) 19:13:57>>28はAdaでできる。(戻り値だけが異なるオーバーロードが可能)
0277デフォルトの名無しさん
2006/02/01(水) 23:36:10Adaって日本にも使っている人いるのかな
ひょっとしてアメリカ国防総省の中の人ですか?
0278デフォルトの名無しさん
2006/02/01(水) 23:39:27Adaスレにおいで、おいで
0279デフォルトの名無しさん
2006/02/01(水) 23:48:480280デフォルトの名無しさん
2006/02/02(木) 02:09:41めんどくさいんじゃ
0281デフォルトの名無しさん
2006/02/02(木) 16:09:24だったらなんでこんなに普及してないんだ?
0282デフォルトの名無しさん
2006/02/02(木) 16:33:220283デフォルトの名無しさん
2006/02/02(木) 19:46:510284デフォルトの名無しさん
2006/02/02(木) 19:49:280285デフォルトの名無しさん
2006/02/02(木) 22:11:25バグを減らすそうと考えて、割に合わないくらい座業効率下がったら意味無いぜぇ、ってカンジで
>>周辺環境
個人的には周辺環境無しでは言語の評価を行えない時代なんだから
なんらかのIDEとの親和機能を、言語の文法自体に仕込んでも良いんじゃないかと常々思っている。
コンパイラにおもねるだけじゃなくって、IDEとも仲良く
0286デフォルトの名無しさん
2006/02/03(金) 00:24:000287デフォルトの名無しさん
2006/02/03(金) 06:55:58普及すれば開発者が増えて良いライブラリが出てくる、というこのジレンマ
基本的には、正しいコンセプトとそれを良く表した基幹部分の実装があれば、次第に人は集まる、時間はかかるけど…orz
それを加速するためには、その技術の良さを理解する先見性のあるリーダーと、それを実行できるだけの組織力のサポートが必要かと
D言語の場合アーリーアダプター層には浸透したと言えるから、ここからサポートしてくれる組織としては、IBMあたりが「○百万ドル相当のライブラリ」とかを作って投下してくれれば、一般レベルのプログラマへの切り口になると思う。
スレ違いスマソ
0288デフォルトの名無しさん
2006/02/03(金) 12:36:44仕様書作成→プログラム構成、分担決定→コード作成(メイン)→宣言などを整理→デバッグ(コード作成者)
として、宣言とか面倒なところは低賃金者にやらせる。
0289デフォルトの名無しさん
2006/02/03(金) 12:51:460290デフォルトの名無しさん
2006/02/03(金) 14:26:34を書いたら知らせたり、グローバル変数に書き込もうとしたら警告したりとかはエディタで出来ますか?
0291デフォルトの名無しさん
2006/02/03(金) 23:35:01ターゲット言語決まってないのに「グローバル変数」とか「外側のスコープ」とか言うなや ('A`)ノシ
0292デフォルトの名無しさん
2006/02/03(金) 23:37:221人が気をつけるだけでその他大勢はバグから解放される…ってのも
バグの出にくい言語に入らないかにゃ
0293デフォルトの名無しさん
2006/02/03(金) 23:42:37そんな中途半端なこと言わないで、
再現なくデバッグすれば最終的にバグの無いプログラムできる、
でいいじゃん
…どっちにしろ、実現不可能だけどな。
0294デフォルトの名無しさん
2006/02/04(土) 00:24:35>初めて書く変数が出たら知らせたり
これはうざい。変な使い回しをして余計にバグが出そう。
>外側のスコープと同じ変数名を書いたら知らせたり
これはまぁよし。
>グローバル変数に書き込もうとしたら警告したり
これもうざい。その上グローバル変数を定義できない言語や環境もかなりある。
0295デフォルトの名無しさん
2006/02/04(土) 01:56:47可能不可能の問題で言うなら「可能」ですね。そりゃあコンパイラが翻訳可能なのですから。
最近はCPUパワーでゴリゴリが許される時代ですから、解析に時間かかかるもないでしょー。
で、回答なんだけど、実際それを行うエディタの実装は知らない
可能性があるとしたらemacsくらいかね
0296デフォルトの名無しさん
2006/02/04(土) 01:59:42グローバル変数とローカル変数を別の色で色分けしたらいいんじゃね?
0297デフォルトの名無しさん
2006/02/04(土) 01:59:49複雑なルールを徹底できているかのチェックツールは作成可能と見える。
実際の場合は、ルールが徹底されているかのチェッカを書くのは、そこまで苦労しないでも可能なハズ。
0298デフォルトの名無しさん
2006/02/04(土) 02:01:52大前提の「バグとは何か?」をないがしろにして何を賛同する気なのかと(ry
0299デフォルトの名無しさん
2006/02/04(土) 02:03:47まさにMozillaですな
コーディングスタイルガイド
http://www.mozilla-japan.org/hacking/mozilla-style-guide.html
規則と TIPS
http://www.mozilla-japan.org/hacking/reviewers.html#rules-and-tips
C++ 移植性ガイド
http://www.mozilla-japan.org/hacking/portable-cpp.html
0300デフォルトの名無しさん
2006/02/06(月) 11:29:30じゃあ、Mozillaはバグが無くなったかというとそういうわけではないよな
規模の割には少ないとは思うが
0301デフォルトの名無しさん
2006/02/06(月) 15:14:080302デフォルトの名無しさん
2006/02/06(月) 18:16:030303デフォルトの名無しさん
2006/02/06(月) 18:25:33コミュニケーションの問題に起因するバグが減るだけでバグの総数が減るかどうかは定かではない
0304デフォルトの名無しさん
2006/02/06(月) 18:30:01そりゃ、減ってるって事だよ。
0305デフォルトの名無しさん
2006/02/06(月) 19:08:49その分ほかのバグが増えるわけではないからねぇ
減ってるとみなしていいと思うよ
0306デフォルトの名無しさん
2006/02/06(月) 20:04:40小説を書くのと一緒
一人だとバグは少ないが
複数の人が勝手にエピソードを書いていくと
矛盾点が出てくるだろ
0307デフォルトの名無しさん
2006/02/06(月) 20:08:13とりあえず表現としてはだいじょうぶ
どんな風に動くかはチーフが・・・
普通の開発だな
0308デフォルトの名無しさん
2006/02/06(月) 20:12:34編集者(バグ発見)、アシスタント(言われたとおり作るプログラマ)
ならうまくいくんだよな・・・
問題は作家のレベルのものしか作れないから
こまめに話し合いが出来るなら複数作家もありなんだけどね・・・
0309デフォルトの名無しさん
2006/02/06(月) 20:15:10MSと比べてるんだろうけど
仕事としてやってるんだし
作業時間x人数とバグを比べたら
同じくらいだと思われ
0310デフォルトの名無しさん
2006/02/06(月) 20:18:28MSと比べちゃ可哀想だよ。
相手は、どんなバグでもある時期を超えたら全部仕様になるんだぜ?
0311デフォルトの名無しさん
2006/02/06(月) 20:47:24・同じ時間でも仕事中は手抜きをして趣味は一生懸命やるのが人間だから
モジラ>M$
・人は趣味でやってる人のレベルは幅広いが仕事人なら一定レベル以上
一定レベル以下
書いてて結論分からなくなったw
0312デフォルトの名無しさん
2006/02/06(月) 22:09:270313デフォルトの名無しさん
2006/02/07(火) 00:44:53提案者の意図は、ツールで検知しやすくする事で、コストを下げて頻繁にチェック出来る要にすることじゃないかな
機械で容易に出来ることを人間様が手法や努力でカバーするなんて、正直格好悪いし
0314デフォルトの名無しさん
2006/02/07(火) 01:23:40その意見自体は正しいけど
具体的な例とかあるといいんだけど・・・
0315デフォルトの名無しさん
2006/02/07(火) 07:23:140316デフォルトの名無しさん
2006/02/07(火) 12:50:21無能な人には勝手に亜種を作らせておけ
0317デフォルトの名無しさん
2006/02/07(火) 12:53:54で、一般人には使いにくいアレな物が出来て商用のBuggyな物で良いやという事になる
0318デフォルトの名無しさん
2006/02/07(火) 12:54:48それは選民して、そいつらを隔離するということでつね
0319デフォルトの名無しさん
2006/02/07(火) 14:19:21命が関わる病院や保険ですら
よく調べず適当に選ぶし・・・
0320デフォルトの名無しさん
2006/02/07(火) 15:31:21普通の静的言語ならインタフェースは明示化されている。名前も引数の型も返値の型も。
あとは、いろんな条件や単位のような情報をそこに埋め込めば…。
>>315
そういう人はコミッターになれないから無問題。
0321デフォルトの名無しさん
2006/02/07(火) 15:38:52> いろんな条件や単位のような情報をそこに埋め込めば…。
C#やVB.NETのattribute節みたいだな
0322デフォルトの名無しさん
2006/02/07(火) 16:41:02Javaのはダメみたいだけど。
0323デフォルトの名無しさん
2006/02/07(火) 18:31:34一部の属性なら考慮してくれる。ConditionalAttribute なんかは正にそれ。#if 〜 #endif の高級版みたいな。
ただ、C# でも Java でも、オリジナルの属性なり注釈なりは、自作のツール類での処理になっちゃうかな〜と。
0324デフォルトの名無しさん
2006/02/08(水) 03:49:30//型に付くメタデータその1
annotation NonNull applies Object; //nullはObjectじゃないからこれだけでOK。
//メソッド(関数)定義
String@[NonNull] fuga(String hoge@[NonNull]) {
処理。
}
String@[NonNull] foo; //コンパイルエラー(暗黙の=null挿入の検知)
String@[NonNull] bar= "All your base are ";
String baz= "belong to us.";
String qux= null;
String quux = fuga(foo);
fuga(baz); //コンパイルエラー
String@[NonNull] corge = fuga(([NonNull])baz);
fuga(([NonNull])qux); //実行時エラー
//メタデータなしのメソッド(関数)定義
String piyo() {
処理。
}
String grault = piyo();
String@[NonNull] garply = piyo(); //コンパイルエラー
0325矛盾が残ってる気がするが、まあいいや。
2006/02/08(水) 03:51:05annotation Unit(Enum) applies Number;
public enum Time { MILLISEC, SEC, MINUTE, HOUR }
//メソッド(関数)定義
int@[Unit(Time.SEC)] fuga(long@[Unit(Time.MILLISEC)] hoge) {
処理。
}
long a = ([Unit(Time.SEC)])12345678L;
long@[Unit(Time.SEC)] b = 12345678L; //コンパイルエラー
int c = fuga( 12345678L ); //コンパイルエラー
int d = fuga( ([Unit(Time.MILLISEC)])12345678L );
int@[Unit(Time.SEC)] e = fuga( ([Unit(Time.MILLISEC)])12345678L );
int@[Unit(Time.HOUR)] f = fuga( ([Unit(Time.MILLISEC)])12345678L ); //コンパイルエラー
//型に付くメタデータその3(コンパイル時計算チェック)
annotation Dim(int) applies Number;
//メソッド(関数)定義
double@[Dim(n-1)] fuga(double@[Dim(n)] hoge) {
処理。
}
double@[Dim(1)] a = fuga( ([Dim(2)])123.45678 );
double@[Dim(1)] b = fuga( ([Dim(1)])123.45678 ); //コンパイルエラー
double@[Dim(1)] c = fuga( a ); //コンパイルエラー
double@[Dim(1)] d = fuga( ([Dim(2)])a ); //コンパイルエラー
0326デフォルトの名無しさん
2006/02/08(水) 04:35:32annotation HasNameAndLargerThan(int i) applies Map {
null != this.get("name");
i < (int)this.get("length");
}
これはconstなメソッドという概念(この例だとMap#get())の存在が前提で、
実チェックはほとんど実行時。だけど宣言性はある。
//メソッド(関数)定義
void configure(Map@[HasNameAndLargerThanTen] conf) {
処理。
}
Map@[HasNameAndLargerThan(0)] m = new HashMap();//実行時エラー(コンパイル通っちゃう…)
List@[HasNameAndLargerThan(0)] l = new LinkedList();//コンパイルエラー
Map n = new HashMap();
configure(n); //コンパイルエラー
Map o = new HashMap();
o.put("name", "puge");
o.put("length", 1);
configure(([HasNameAndLargerThan(0)])o);
Map p = new HashMap();
o.put("name", "puge");
o.put("length", 1);
Map@[HasNameAndLargerThan(0)] q = ([HasNameAndLargerThan(0)])o;
configure(q);
Map@[HasNameAndLargerThan(123)] r = ([HasNameAndLargerThan(123)])o;//実行時エラー
…キャスト可否の定義も要りそうだな…。
0327デフォルトの名無しさん
2006/02/08(水) 18:37:18annotation HasNameAndLargerThan(int len) about Map
{
boolean be()
{//適用可否。コンパイル時と実行時両方走る。
return null != about.get("name") && len < (int)about.get("length");
}
boolean implies(HasNameAndLargerThan other)
{//暗黙のキャスト可否。コンパイル時に走る。
return this.len <= other.len;
}
boolean canbe(HasNameAndLargerThan other)
{//明示キャスト可否。コンパイル時に走る。
return true;
}
}
0328デフォルトの名無しさん
2006/02/08(水) 18:41:16boolean be()
{//適用可否。実行時に走る。
return null != about.get("name") && len < (int)about.get("length");
}
0329デフォルトの名無しさん
2006/02/08(水) 18:56:39boolean canbe(Map other)
{//明示キャスト可否。コンパイル時に走る。
return true;
}
0330デフォルトの名無しさん
2006/02/08(水) 23:44:25PythonやCLOSみたいだと引数と同列なんだが。
0331デフォルトの名無しさん
2006/02/08(水) 23:58:180332デフォルトの名無しさん
2006/02/09(木) 00:00:470333デフォルトの名無しさん
2006/02/09(木) 00:06:15知る限り、Adaの文法にはメタプログラミング系はすっぱり無いよ。
良くてコンパイル時評価のassertぐらい。
組込み用途をカバーしないといけないしね。
ただ、代用になるかは知らんけどソース上やらなんやらの構文木やら型情報やらを扱うASISってライブラリが規格で既定されてる。
0334デフォルトの名無しさん
2006/02/09(木) 04:31:12pythonみたいに必須だとうざいから、第一引数に予約語引数thisを明示してもよい、って文法にすればいいじゃん。
0335デフォルトの名無しさん
2006/02/09(木) 15:37:290336デフォルトの名無しさん
2006/02/10(金) 01:08:53annotation DayOfWeek() about String { //言語機能enumに相当する定義
boolean be() {
return "SUN".equals(about) || "MON".equals(about) || "TUE".equals(以下略;
}
}
これで、静的に安全なEnumの出来上がり(定数定義もないと使い勝手がイマイチだけど)。
しかもただのenumに比べて、String[DayOfWeek] hoge(); ←こんなのがあったとき、print(hoge()); みたいにいきなり表示するとか、(この場合)Stringとして色々扱える。
//言語機能Genericsに相当する定義
annotation ElementType(Class t) about Container;//単に型パラメタの定義。
annotation Type(Class t) about Object { //オブジェクトが特定の型である事の定義
boolean be() { return t.isAssignableFrom(about.getClass()); }
}
interface List extends Container {//"Generics"の利用
Object@[Type(t)] get(List@[ElementType(t)] this, int index);
void set(List@[ElementType(t)] this, int index, Object@[Type(t)] newVar);
}
List@[ElementType(String.class)] strList = ([ElementType(String.class)]) new LinkedList();
String s = "aaaaa";
Object o = new Object();
Object os = "bbbbb";
strList.set(0, ([Type(String.class)])s);
strList.set(1, ([Type(String.class)])o); //←コンパイルエラー
strList.set(2, ([Type(String.class)])so);
こんな普通なら言語仕様に相当するものすら自分で作れるって事は、なんか相当いろいろスゴいことができる気がする。
>>335 opCastってキャストのオーバーロード? それって静的なルールを定義できるの?実行時の処理だけじゃなくて。
0337デフォルトの名無しさん
2006/02/10(金) 01:16:020338デフォルトの名無しさん
2006/02/10(金) 01:46:140339デフォルトの名無しさん
2006/02/10(金) 12:45:47なんでもできるってのはそれだけバグの入り込む余地が増えるって事だぞ分かってるか?
”何もしなけりゃバグも出ない”これが一番重要
0340デフォルトの名無しさん
2006/02/10(金) 18:15:370341デフォルトの名無しさん
2006/02/10(金) 18:20:34おまえらなんだかpascal風になってきましたね
0342デフォルトの名無しさん
2006/02/10(金) 18:23:22できることを多くしすぎると、使いこなせなくて
バグが出やすくなる罠
0343デフォルトの名無しさん
2006/02/10(金) 18:34:460344デフォルトの名無しさん
2006/02/10(金) 19:29:51これがバグを増やすなんてある訳がないんだが。
全然わかってねぇんじゃねぇのか?
0345デフォルトの名無しさん
2006/02/10(金) 19:30:56バカ確定しました (・∀・)
0346デフォルトの名無しさん
2006/02/10(金) 19:35:260347デフォルトの名無しさん
2006/02/10(金) 19:38:41お前まじで理解してないだろ
0348デフォルトの名無しさん
2006/02/10(金) 19:39:29バーカ
0349デフォルトの名無しさん
2006/02/10(金) 19:40:19バーカ
0350デフォルトの名無しさん
2006/02/10(金) 19:42:04バーカ
0351デフォルトの名無しさん
2006/02/10(金) 19:42:51バーカ
0352デフォルトの名無しさん
2006/02/10(金) 19:45:14バーカ
0353デフォルトの名無しさん
2006/02/10(金) 19:49:00バーカ
0354デフォルトの名無しさん
2006/02/10(金) 19:49:49天才
0355デフォルトの名無しさん
2006/02/10(金) 19:50:53必死だなwwww
さっさと死ねよクズ(プ
0356デフォルトの名無しさん
2006/02/10(金) 20:01:53これでできる事はコンパイルを厳しくするだけだよ。プログラム側処理にはなんら影響は及ぼさない。
アノテーション側のコーディングを間違えても、コンパイルできるできないがおかしくなるだけ。で、これがない場合より緩くなることはないんだからそれによるバグも有り得ない。
0357デフォルトの名無しさん
2006/02/10(金) 20:06:110358デフォルトの名無しさん
2006/02/10(金) 20:07:420359デフォルトの名無しさん
2006/02/10(金) 20:15:580360デフォルトの名無しさん
2006/02/10(金) 20:19:15お前が言ってるのはインライン展開しまくってassertを評価するだけで十分なんだよ
っといってもコンパイラ毎に差異がでる(VCのインライン化は凄いけどbccはしょぼいみたいな〜)し、そんな処理系も無いけどな
0361デフォルトの名無しさん
2006/02/10(金) 20:28:55バカでも分かるように具体的に頼む。
ただ適当な事言ってるだけならいいけど
0362デフォルトの名無しさん
2006/02/10(金) 21:11:430363デフォルトの名無しさん
2006/02/10(金) 21:14:15どうせ適当に知ってるふりしてただけなんだろう?
0364デフォルトの名無しさん
2006/02/10(金) 22:16:20>インライン展開しまくってassertを評価する
情報の付加も情報へのアクセス性の変更も出来ないインライン展開を、
表明の表現可能性向上と結びつけるという、プログラム言語への完全無理解を見せ付ける。
>といってもコンパイラ毎に差異がでる
言語で定義したものが、コンパイラごとに解釈が違うという恐怖の世界を見せ付ける。
>そんな処理系も無いけどな
ここまで大胆な妄想を吐いておいて、最後にすべてを無に帰す虚無の境地へと落とし込む。
そろそろ春か
0365デフォルトの名無しさん
2006/02/11(土) 01:21:26Javaならjavacは良いけど、gjcは脂肪じゃね?
0366デフォルトの名無しさん
2006/02/11(土) 01:24:110367デフォルトの名無しさん
2006/02/11(土) 01:55:58バグが出やすいと言うか馬鹿にはプログラムを作れなくなる
0368デフォルトの名無しさん
2006/02/11(土) 22:19:360369デフォルトの名無しさん
2006/02/12(日) 05:44:11Haskellよう知らんけど、それって普通の型安全なマクロと違うの?
コンパイラと直に会話する口がないと、
C++みたいな裏技チックなやり方が必要になりそうな気がするけど。
0370デフォルトの名無しさん
2006/02/12(日) 06:27:310371デフォルトの名無しさん
2006/02/12(日) 06:34:40そもそも値をdoubleでやるのが間違いだな。次元パラメタを持ったクラスを作るべき。
その上で、演算メソッドに>>324-329,334のアノテーションを被せる。
0372デフォルトの名無しさん
2006/02/12(日) 06:43:10TemplateHaskellは、コンパイル時に実行されるコードを書いて構文木を直接弄れるらしい。使ったことないけど。
例えばprintf形式の文字列とか自力でばらして書式化関数にしてしまえるらしい。
0373デフォルトの名無しさん
2006/02/12(日) 07:40:09ttp://www.cs.iastate.edu/~leavens/JML/index.shtml
0374デフォルトの名無しさん
2006/02/12(日) 14:47:58ということは、コンパイラと、エラーにする・しないの会話が出来ないとしたら、
それってやっぱり高級なマクロでは…。
>>373
ちゃんと読んでないけど、これってただのDbCの記法とは違うの?
機能としては実行時評価のassertionが出来るまでじゃない?
これはこれで悪くなさそうだけど、コンパイル時チェックによる静的な保証が得られる訳じゃ無いのでは?
0375自己レス
2006/02/12(日) 14:57:02>コンパイラと、エラーにする・しないの会話が出来ないとしたら、
これはちょっと違うな。
型が吐けて、その適用についてOK/NGをコンパイラに言えないと、が正しいかな。
でもHaskellってデフォで多相型(だっけ?)とか、型の扱いがよくわからん。
0376デフォルトの名無しさん
2006/02/12(日) 14:59:47マクロ展開でエラー検出
これ最強
0377デフォルトの名無しさん
2006/02/12(日) 15:09:25ある意味、素のHaskellに似てる?
ただし、値の実型じゃなくて、値空間のsubsetを作ってるわけだけどHaskellで出来たりするのかな。
0378デフォルトの名無しさん
2006/02/12(日) 15:13:43LISP最強伝説ここに爆誕
0379デフォルトの名無しさん
2006/02/12(日) 15:13:57Lispに静的型って普通なの?
0380デフォルトの名無しさん
2006/02/12(日) 15:15:12アセンブラ最強伝説ここに(ry
0381デフォルトの名無しさん
2006/02/12(日) 15:18:03・・いや、実はそうでもないんだが。
0382補足
2006/02/12(日) 15:18:54ここの味噌は、極めて恣意的にadhocなsubsetを作れるところ。
複素数-実数-有理数-整数-自然数とかそういうんじゃなくて。
0383デフォルトの名無しさん
2006/02/12(日) 15:18:56LISP最強伝説に揺ぎ無し
0384デフォルトの名無しさん
2006/02/12(日) 15:20:25それって、
>Haskellで出来ることはLISPで(ry
・・いや、実はそうでもないんだが。
ってことじゃないのかい?
0385デフォルトの名無しさん
2006/02/12(日) 15:22:11田原「チューリングマシンって知ってる?」
0386デフォルトの名無しさん
2006/02/12(日) 15:25:33このネタでチュ(略を出してくるなんてナンセンスだな
メタレベルを1つ以上跨げばそんなのいくらでも可能だけど
そんなのその言語で出来ることにはならんでしょ
0387デフォルトの名無しさん
2006/02/12(日) 15:26:39噂には聞いてたけど。
0388デフォルトの名無しさん
2006/02/12(日) 15:26:540389デフォルトの名無しさん
2006/02/12(日) 15:28:30「どれだけバグが出ない文法か?」が問題じゃないのか?
シンタックスを抜きにしちまうと、「最終的には機械語になるんだから」となって話が進まないぞ?
まぁ、バグが表記法程度で減るとは思えんがな
0390デフォルトの名無しさん
2006/02/12(日) 15:29:200391デフォルトの名無しさん
2006/02/12(日) 15:30:20その意味では最強っぽいんだけど、
型がデータにくっつくのが嫌、って人はいるかと。
0392デフォルトの名無しさん
2006/02/12(日) 15:30:33人間にはバグがあるからだ。バクの木にはバクの実しかならない。どんなに
頑張っても人間とはバグを作ってしまうものなのだ。
ならばどうするか? 答えは簡単だ。バクを発見しやすい言語仕様を考えるのだ。
0393デフォルトの名無しさん
2006/02/12(日) 15:30:46ならば、forもwhileもブロックスコープも廃止して、ifとgotoだけにしてみるかい?
0394デフォルトの名無しさん
2006/02/12(日) 15:32:52>バクを発見しやすい言語仕様を考えるのだ。
だから、>>324-329,334 は人間に頼らずコンパイラが発見してくれる仕様を書いてるんでしょ。
0395デフォルトの名無しさん
2006/02/12(日) 15:36:440396デフォルトの名無しさん
2006/02/12(日) 15:39:23すげーなリスプって。
吐き出すネイティブコードがアセンブリと対応しないってことだろ?
0398デフォルトの名無しさん
2006/02/12(日) 15:42:57じゃぁ構造化されたプログラムをコンパイラがアセンブラに落としたらバグが増えるか?
0399デフォルトの名無しさん
2006/02/12(日) 15:46:37何を言っているんだ?
最初からアセンブラでjump系を生で使いまくりでゴリゴリ書いたプログラムと、
構造化言語からコンパイルしたプログラムで、どっちがバグが少ないと思う?
0400デフォルトの名無しさん
2006/02/12(日) 15:52:11知るか
じゃあ聞くが、どれくらい少ないんだ?
どれほど増減してるんだ?
データ示せクソ
0401デフォルトの名無しさん
2006/02/12(日) 15:53:310403デフォルトの名無しさん
2006/02/12(日) 15:58:23それが増えるわけがないから、
ifとgotoだけの言語じゃなくて、構造化言語を使ってバグを減らすわけだが。
0404デフォルトの名無しさん
2006/02/12(日) 16:10:050405デフォルトの名無しさん
2006/02/12(日) 22:04:12開発者の技量とか開発期間の方がバグの多寡に関しては大きなファクターだな
ぶっちゃけ時間がたっぷりあればどちらでも変わらない
アセンブリ言語でもきちんとリファレンスなどを作ったりすればそれなりの規模でもちゃんと開発はできる
0406デフォルトの名無しさん
2006/02/12(日) 22:26:39関数型言語と手続型言語とオブジェクト指向言語とは使う人間が違うから
関数型言語内でバグが減ってもその他のところでは減らん
0407デフォルトの名無しさん
2006/02/12(日) 22:49:09他の言語で出来ることはすべてアセンブラで可能。まさに究極言語。
というわけで、おまえはアセンブラ以外使用禁止な。
0408デフォルトの名無しさん
2006/02/12(日) 22:51:440409デフォルトの名無しさん
2006/02/12(日) 23:22:59> ぶっちゃけ時間がたっぷりあればどちらでも変わらない
はぁ?
自由度が高い ≡ バグが検出しにくい
ステップ数が多い ≡ (全体の) バグ件数が多い
デバッグ続けたら、バグが最終的に "0" になると思って
る人なの?
0410デフォルトの名無しさん
2006/02/12(日) 23:33:53>
> はぁ?
>
> 自由度が高い ≡ バグが検出しにくい
> ステップ数が多い ≡ (全体の) バグ件数が多い
//ここまで
//−−−−−−−−−−
//ここからしたバグです
> デバッグ続けたら、バグが最終的に "0" になると思って
> る人なの?
0411デフォルトの名無しさん
2006/02/13(月) 01:03:271. 事実に対して仮定を持ち出す
0412デフォルトの名無しさん
2006/02/13(月) 01:04:380413デフォルトの名無しさん
2006/02/13(月) 01:21:11言い出しっぺからどうぞ。
というかそういう話は当然出てはいるんだけどね。
>>347-364が解決(支援)してるのは、インターフェースの考慮漏れとかになるのかな。
0414デフォルトの名無しさん
2006/02/13(月) 01:28:22ただし0になったことを確かめる術はないが
0416デフォルトの名無しさん
2006/02/13(月) 01:41:33> デバッグ続けたらバグは最終的に0になるぞ
証明してみな。
0417デフォルトの名無しさん
2006/02/13(月) 01:41:570418デフォルトの名無しさん
2006/02/13(月) 01:45:051 検査する
2 バグが見つかる
3 バグを処理して1に戻る
この仮定をデバッグとする
視点を変えれば、運用段階も一種の検査。
バグが見つかればそれを処理し、(無限の時間内に)また運用を始める。
つまり永遠とバグをつぶ(ry
0419デフォルトの名無しさん
2006/02/13(月) 01:46:41> 3 バグを処理して1に戻る
この時に、新規のバグが増えないことを証明せよ。
0420デフォルトの名無しさん
2006/02/13(月) 01:47:230421デフォルトの名無しさん
2006/02/13(月) 01:48:48関係ないのであなたがやってください
0422デフォルトの名無しさん
2006/02/13(月) 01:58:46システムの寿命は有限なんだからよ
0423デフォルトの名無しさん
2006/02/13(月) 02:02:14ん?
>>419 が証明できないと、>>418 は、>>416 の証明
にはならないよ。仮に無限の時間があって、>>420 の
問題がなかったとしてもね。
それともそんなことも理解できないのか?
て言うか、実務やってる奴なら肌で知ってると思うが。
0424デフォルトの名無しさん
2006/02/13(月) 02:04:43あらあら、デバッグの時間は無限なのに寿命は有限なんだな。
なかなか、勝手な仮定だな。(w
て言うか、その理論なら動かさないプログラムはバグ "0"
だよな。
0425デフォルトの名無しさん
2006/02/13(月) 02:39:340426デフォルトの名無しさん
2006/02/13(月) 03:18:18例えば>>326なんか、
Map@[HasNameAndLargerThan(0)] someMethod();
void otherMethod(Map@[HasNameAndLargerThan(0)] m);
なんてのがあったとき、
Map@[HasNameAndLargerThan(0)] m = someMethod();
m.put("length", -1);
otherMethod(m)
これがコンパイル通っちゃうのでは?
それとも、非constなメソッドは呼び出し禁止?それは厳しくないか?
それにそうしたらキャストしまくりになって、型にアノテーションを付けてる意味が半減する希ガス
0427デフォルトの名無しさん
2006/02/13(月) 04:22:09単純なプロパティ取得メソッドならともかく、込み入ったメソッドで、
後から、フィールド書き換えが必要になる・必要だったことが判明する、
なんてことはざらにある。
0428デフォルトの名無しさん
2006/02/13(月) 07:10:36>て言うか、その理論なら動かさないプログラムはバグ "0"
そんなの当然だろ?
システムはあるインプットに適切なアウトプットを出すもの
インプットは有限なのは自明であり
最後に全てのインプットに適切なアウトプットを出してから
システムが破棄されるまでの間はバグ0であることは自明
バグ0であることは証明できんぞ
しかしバグ0であったことは単なる観測事実だ
>デバッグの時間は無限
そんなクソの意見はおれはしらん
0429デフォルトの名無しさん
2006/02/13(月) 07:55:50一箇所で集中管理して使用方法や目的も明確に付加して
みんなで使う、新しいの作ったらくだらないものでもアップ
して再利用するようにする
これ完璧な言語
0430デフォルトの名無しさん
2006/02/13(月) 07:57:030431デフォルトの名無しさん
2006/02/13(月) 08:06:46信頼度が低いヤツは自然消滅するようにしとけばいいさw
いけると思うんだが
0432デフォルトの名無しさん
2006/02/13(月) 08:08:570433デフォルトの名無しさん
2006/02/13(月) 11:44:11CPANにバグがないと?
0434デフォルトの名無しさん
2006/02/13(月) 16:06:25あるあるwwwwww
整合性が保てるように関数にバージョン管理とか
0435デフォルトの名無しさん
2006/02/13(月) 18:11:42Delphiとかオブジェクト指向のPascalなんかが気になる。
0436デフォルトの名無しさん
2006/02/13(月) 22:28:11複数開発してる人もいるしな
モジュール別に見ても重複コードが散在してる状態だからだろ
XMLなんかでW3Cの標準コードをリモートリンクする機能があるけどあんな感じで
組む時はリンクはプリコンパイラが自動でリモートからとってくる
参照登録修正はIDE上で簡単に行えるようにすればいい
0437デフォルトの名無しさん
2006/02/13(月) 23:55:44まあ、そういう定義ならそうでもいいけど、とにかくさっさ
と >>419 を証明してくれよ。
それとも、バグを処理して「廃棄」するのか?
そうすれば、あんたの定義なら「バグは "0"」になったこと
にできるぞ。(w
> そんなクソの意見はおれはしらん
⇒ >>418
> バグが見つかればそれを処理し、(無限の時間内に)また
> 運用を始める。つまり永遠とバグをつぶ(ry
0438デフォルトの名無しさん
2006/02/14(火) 00:07:12>>419バグが増えたら何かあるの?
増えたバグごと潰していけばいいんですよ
単純増加しているように見えたとしても、です
0439デフォルトの名無しさん
2006/02/14(火) 00:39:540440デフォルトの名無しさん
2006/02/14(火) 00:43:52いやさっぱり
0441デフォルトの名無しさん
2006/02/14(火) 00:53:480442デフォルトの名無しさん
2006/02/14(火) 01:22:34部分範囲型は、booleanとか整数型とかだけで、クラスを含めた構造体みたいのにはない。
範囲を外れる代入は、静的に解る部分はコンパイルエラー、ほかは実行時例外。
0443デフォルトの名無しさん
2006/02/14(火) 10:58:02その系列のOOな言語の中にはOrdinaryのサブクラスになっていれば部分範囲型も実現できるのがあるんじゃない?
0444デフォルトの名無しさん
2006/02/14(火) 11:51:32Pythonにあるrange()はあるのは…違うなぁ、大体型じゃないし。
0445デフォルトの名無しさん
2006/02/14(火) 11:53:250446デフォルトの名無しさん
2006/02/14(火) 14:49:10オブジェクトだとメソッド呼んだだけで"値"が変わり得るし、さらに知らんうちに他のスレッドがやっちまうかも知れん。
0447デフォルトの名無しさん
2006/02/14(火) 16:28:51DbCのinvariantととしてメソッド前後毎回チェックすればええ。
0448デフォルトの名無しさん
2006/02/14(火) 17:35:26JavaのComparatorは明示的には書いてないが、
compareメソッドの呼び出しだけではその値が変わらないことが要求にある
スレッドセーフかどうかは関係無い
0449デフォルトの名無しさん
2006/02/14(火) 19:02:52アノテーションの定義間違いバグ
アノテーションの更新し忘れバグ
まだまだいっぱいありそうですにゃ
0450デフォルトの名無しさん
2006/02/14(火) 21:37:18参照型だとコードの特定部分では変更されてないようでも、他のスレッドが参照を持ってて変更しちまうかも、って事。
0451デフォルトの名無しさん
2006/02/14(火) 21:38:33それは言語の問題ではないのでスルーよろです
0452デフォルトの名無しさん
2006/02/14(火) 22:50:52簡単につくる機能を言語がサポートしたら
その手のバグは減るんじゃなかろうか。
0453デフォルトの名無しさん
2006/02/14(火) 22:55:110454デフォルトの名無しさん
2006/02/14(火) 23:04:500455デフォルトの名無しさん
2006/02/14(火) 23:53:29ますます話が難しくなってきた感がある。
SQLだけで書いたらずっとバグは少ないように
思うが。
0456デフォルトの名無しさん
2006/02/15(水) 00:01:140457デフォルトの名無しさん
2006/02/15(水) 00:07:30SQL で書く ⇒ 変更に弱くなる
kwsk plz.
0458デフォルトの名無しさん
2006/02/15(水) 01:39:35アノテーションのミスでプログラム本体がバグるのか。
もっと勉強汁、少年。
0459デフォルトの名無しさん
2006/02/15(水) 01:42:00だいたいコンパイル時や実行時において注釈を持たせるなんて普通の言語でできるじゃん
これだからオナヌーばっかりやってる(ry
0460デフォルトの名無しさん
2006/02/15(水) 01:48:40>>446の「メソッド」は、compareメソッドに限定してないぞ。
単に、オブジェクトいじってるうちにいつの間にか範囲を超えちゃう可能性があると言うこと。
だから、代入時のチェックだけではだめと。
それに、オブジェクトも序数相当(Comparable)ならcompareメソッドで範囲チェックするだろうが、
もとは、>>327-329のbeメソッド(?)で範囲チェックするという話。
0461デフォルトの名無しさん
2006/02/15(水) 01:50:48>実行時において注釈を持たせるなんて普通の言語でできる
kwsk
ついでに、それと>>449との関連についてもkwsk
0462デフォルトの名無しさん
2006/02/15(水) 01:59:09オブジェクトのメンバ自体が他から参照されてて勝手に変更される可能性もある。
まあでも、それはそれで良いのか。メソッド呼んだときにおかしいって解れば十分?
メンバに直接アクセスしなければ。
0463デフォルトの名無しさん
2006/02/15(水) 01:59:18型有り言語で一々型調べたり実際のモノを調べたりするんじゃね?
>>449とは関連性あるのかわからんのでkwsk
0464デフォルトの名無しさん
2006/02/15(水) 02:05:15OOPではカプセル化された内部のものはアクセス不能という烙印を押すわけだから・・・
この点で、一枚板な言語から移行してきた人間は一種の不便さを感じるわけだ。
たとえば代入や参照というアクセスに関して、
公開メンバが呼ばれるように設計すれば良いのでいかなるときも自力で判断可能となる(デッドロックとか同時アクセス制御も可能だし)
というわけで、言語にアノテーション(アクセス限定子?)を実装するのはちょっとセンスが悪い感じがする
それらは既に実装されてる様な気がするから。
0465デフォルトの名無しさん
2006/02/15(水) 02:18:54>OOPではカプセル化された内部のものはアクセス不能という烙印を押すわけだから・・・
現実には、例えばsetterに渡したオブジェクトは(コピーされず)そのまま保持される、
というのが普通だと思うけど、渡した側がそのオブジェクトを直ぐ捨ててくれるとは限らないわけで。
>たとえば代入や参照というアクセスに関して、公開メンバが呼ばれるように設計すれば良いのでいかなるときも自力で判断可能となる
よくわからんです…。ちなみに、
ここでアノテーションといってるのは、publicとかprivateとかじゃなくて、
>>324-329,334 の事。アクセス限定子というより値範囲限定子といったところかな。
0466デフォルトの名無しさん
2006/02/15(水) 02:21:57動的に値チェックする方向になってるが、重大な問題があるのでは?
ある場所でオブジェクトに特定の条件を課す(コード上はキャスト。以降値チェックがされるようになる)。
これはオブジェクトになんらかの属性を追加するってことだな。
ってことは、条件を課すこと自体が、オブジェクトを勝手にいじって変更してるって事だ。
条件を課したコードと何ら関係ないところで、条件外の内容に変更できなくなってしまう。
その属性がある種の型情報である以上、そのオブジェクトが生まれてから消えるまで
勝手に途中で変わることなく一貫してないとまずいのではないか。
条件を課したコードのその字句的スコープの中のみでチェックするのなら、
属性は要らないかも知れないが、それでいいのか?
0467デフォルトの名無しさん
2006/02/15(水) 02:25:25>というのが普通だと思うけど、渡した側がそのオブジェクトを直ぐ捨ててくれるとは限らない
現実には、その当たりの原因でのバグってあんまり見ないけど、何でだろう。
0468デフォルトの名無しさん
2006/02/15(水) 02:55:30基本的にプロパティとして受け渡しするような情報はシリアライズ可能なデータであることが多いからだろ
0469デフォルトの名無しさん
2006/02/15(水) 03:06:58型情報が動的に変わるのはアレだな。
実行時にpublicがprivateになったりメソッドが減ったりするのと同じだな。
そう言う言語もあるけど、このスレ的にはお勧めじゃないだろ。
字句的スコープで良いんじゃない?
キャスト時と受け渡し時のチェックだけで十分じゃね?
>>468
シリアライズ可能?イミュータブルの事?
その割合は確かに多いけど、それでも半分以上はミュータブルだろ、実際。
0470デフォルトの名無しさん
2006/02/15(水) 08:38:11いや、お前がアホ
0471デフォルトの名無しさん
2006/02/15(水) 08:47:39>その割合は確かに多いけど、それでも半分以上はミュータブルだろ、実際。
はいはい嘘言うなや。90%以上が整数や浮動小数点数などの値型だろうが。実際。
0472デフォルトの名無しさん
2006/02/15(水) 09:40:23その辺のデータを参照わたしすることは
あんまりないと思う。
0473デフォルトの名無しさん
2006/02/15(水) 22:16:43参照渡しであることも理解せずに
作る→値設定→格納 とか 取得→値設定→格納 とか
冗長なコードはよくみるよ。
Container con
Object obj = con.get(3)
obj.A = 'A'
con.set(3, obj)
みたいな
0474デフォルトの名無しさん
2006/02/15(水) 22:18:21アノテーションとプログラム本体の乖離はバグじゃねぇか?
0475デフォルトの名無しさん
2006/02/15(水) 23:24:00だから何?
その辺のデータを参照わたしすることが多い、なんて一言も言ってないんですけど。
0476デフォルトの名無しさん
2006/02/16(木) 02:04:38キャストと受け渡しがなかったら、アノテーション通りである事が保証されないってのは気持ち悪くないか?
キャストと受け渡しをアサーションと割り切ればいいのかも知らんが、そうなると型情報とは言えないな。
0477デフォルトの名無しさん
2006/02/16(木) 09:16:33ああ、まさか流れを読まずに発言していたとは思わなかったよ。
0478デフォルトの名無しさん
2006/02/16(木) 19:22:45シミュレートしながらデバッグできる言語なんてあるといいな
0479デフォルトの名無しさん
2006/02/16(木) 19:26:19具体的な作業書いてないからどうでもいいが、
とりあえずOOPの目指すところそのものだな
0480デフォルトの名無しさん
2006/02/16(木) 21:15:39はぁ?それはテメーだボケ。
>467の
>現実には、その当たりの原因でのバグってあんまり見ないけど、何でだろう。
というレスの流れを受けて、
setterに渡すようなオブジェクトは、
90%くらいが整数や浮動少数点数のような値型のようなオブジェクトだからだろうが
という俺のレスに、お前が>472のようなアホレスしてきたんだろうが。死ね。
0481デフォルトの名無しさん
2006/02/16(木) 21:27:18良く使わなかったら実装されない
というのなら、統計情報出さないとな。
てか、使われている/使われていない、が判断基準になるなんて何て実践向きの言語なんだろう・・・
0482デフォルトの名無しさん
2006/02/17(金) 00:37:21どの言語でも使われている/使われていないが大抵判断基準としてあるだろ。
使われているから特別なシンタックスシュガーが用意されたりよ。
0483| |
2006/02/17(金) 00:42:24∧_∧
( ´・ω・`) ∧_∧
/ \ (´∀` ) ハハハ
.__| | .| |_ / ヽ
||\  ̄ ̄ ̄ ̄ / .| | |
||\..∧_∧ (⌒\|__./ ./
||. ( ) ~\_____ノ| ∧_∧
/ ヽアホか \| ( ´_ゝ`) 何言ってんだコイツ?
| ヽ \/ ヽ.
| |ヽ、二⌒) / .| | |
.| ヽ \∧_∧ (⌒\|_∩./ /
0484| |[
2006/02/17(金) 08:43:56∧_∧
( ´・ω・`) ∧_∧
/ \ (´∀` ) ハハハ
.__| | .| |_ / ヽ
||\  ̄ ̄ ̄ ̄ / .| | |
||\..∧_∧ (⌒\|__./ ./
||. ( ) ~\_____ノ| ∧_∧
/ ヽアホか \| ( ´_ゝ`) 何言ってんだコイツ?
| ヽ \/ ヽ.
| |ヽ、二⌒) / .| | |
.| ヽ \∧_∧ (⌒\|_∩./ /
0485デフォルトの名無しさん
2006/02/17(金) 12:50:40バグが出にくくなる理由を問いたい。
いや、お前は喜ぶかもしれんが。
0486デフォルトの名無しさん
2006/02/17(金) 13:02:46コンパイル時にエラーが出てコンパイル不能になるならば、
それが出荷されて世に出ることもなくなるだろう。
0487デフォルトの名無しさん
2006/02/17(金) 13:05:01いかなるプログラムも世に出ることはなくその損失が未然に防げるではないか。
よし。これで行こう。
#!/bin/sh
echo "$1:1: Syntax error."
0488デフォルトの名無しさん
2006/02/17(金) 13:07:38そんなことするより
プログラム作る→禁固300年
でいいんじゃないか?
0489デフォルトの名無しさん
2006/02/28(火) 23:59:410490デフォルトの名無しさん
2006/03/01(水) 14:00:27プログラミング免許を各言語毎に作って違反したら罰金でいいんじゃないか?
その他細かい違反も作る。たとえば無駄なアルゴリズムを使ったら1点原点とか。
負荷が高くなるアルゴリズムを使ったら2点原点とか。
0491デフォルトの名無しさん
2006/03/01(水) 14:48:271級 C++の全てを完全に使用できる。
2級 中程度にテンプレートを使用できる。
3級 クラスと仮想関数による多態性(ポリモーフィズム)を使用できる。
4級 ベターCとして使用できる。
0492デフォルトの名無しさん
2006/03/01(水) 15:33:460493デフォルトの名無しさん
2006/03/01(水) 15:48:24free() を忘れたら10点原点、罰金50万円で免許取消。
0494デフォルトの名無しさん
2006/03/01(水) 15:56:02壊れた時の社会的影響が大きいものでも民間人が何の資格も
なく作って納品できるというのは、何か恐い感じはする。
使う人は資格が要るが、作る人には要らないという状態で
いいのか?
0495デフォルトの名無しさん
2006/03/01(水) 19:42:21作るのに資格が要らなくても、製品そのものが規格をパスしないとあかんから大丈夫
・・・っていいたいところだけど、そうじゃない製品もあるんだろうねぇ。
0496デフォルトの名無しさん
2006/03/01(水) 20:35:31バケツで運ぶのにも免許が必要だよな
0497デフォルトの名無しさん
2006/03/17(金) 00:04:08char foo[][N]=
{
"hoge",
"hage"
"moge"
...
}
警告くらい出してよ、コンパイラ。
0498デフォルトの名無しさん
2006/03/17(金) 00:35:20">>497\n"
"そんな警告出したら、長い文字列改行して記述できなくなるじゃん?\n"
"それでもいいのなら、俺様仕様のローカルルールでコンパイラをチューンすれば良いよ。\n"
);
0499デフォルトの名無しさん
2006/03/17(金) 00:39:12俺lintで充分ジャマイカ?
0500デフォルトの名無しさん
2006/03/17(金) 11:10:27C言語とは、そういうものだ。
0501デフォルトの名無しさん
2006/03/17(金) 11:54:57言語の仕様なんだからコンパイラに文句言うなよ
0502デフォルトの名無しさん
2006/03/18(土) 11:37:38カンマが無いと文字列がつながるのは言語仕様だけど、どんな警告だすか(ださないか)まで言語仕様なんだっけ?
文字列配列の初期化の部分だけでも判定してくれたらよいのに。
警告だからカンマなしのコードでもコンパイルは通るしね。
0503502
2006/03/18(土) 11:42:03もしかしてみんなは警告=エラー=オブジェクトできない。という認識?
0504デフォルトの名無しさん
2006/03/18(土) 12:08:19警告が無くなるまで己の書いたコードは許せないという人も世の中には多い。
0505デフォルトの名無しさん
2006/03/18(土) 12:35:34だが、もともと設計が腐ってて仕方がない場合も。
0506デフォルトの名無しさん
2006/03/18(土) 12:40:47警告と別に、ヒントを出してくれるのならそれはそれでOK。
使いたくなければ使わないだけだから。
でもそれは、恐らくコンパイラではなくlntの仕事。
0507502
2006/03/18(土) 12:59:36コード診断のソフトっていろいろあるが、みんな仕事でどの程度使ってる?
0508デフォルトの名無しさん
2006/03/21(火) 12:16:05自分の書くコードはlintクリーンだけど何か?
0509デフォルトの名無しさん
2006/03/21(火) 14:01:29lintのおかげでバグを摘出できたって事ある?
0510デフォルトの名無しさん
2006/03/23(木) 21:50:26メンドクセ
0511デフォルトの名無しさん
2006/03/24(金) 23:59:50バグが現象として見える前に排除するものだと思うが。
0512デフォルトの名無しさん
2006/03/25(土) 10:30:08lint最強じゃん
0513デフォルトの名無しさん
2006/04/04(火) 22:46:07いかにテストしやすい言語にするか、そこだろう。
0514デフォルトの名無しさん
2006/04/04(火) 23:29:56なに言ってんだ、おまえ?
テストなんかしたらバグが出るじゃないか。
テストしなけりゃバグはゼロだぞ。
君はスレタイを10回音読しときなさい。
0515デフォルトの名無しさん
2006/04/05(水) 01:10:240516デフォルトの名無しさん
2006/04/05(水) 13:58:110517デフォルトの名無しさん
2006/04/05(水) 23:20:230518デフォルトの名無しさん
2006/04/06(木) 00:40:320519デフォルトの名無しさん
2006/04/06(木) 08:14:270520デフォルトの名無しさん
2006/04/06(木) 09:01:23flag = false;
if (flag) {
.....
}
とかそもそもダメじゃん。意図せずバグでこうなってるときも。
0521デフォルトの名無しさん
2006/04/06(木) 10:29:07絶対通らないパスの検出が原理的に可能かどうか知らんけど。
0522デフォルトの名無しさん
2006/04/06(木) 14:49:40Javaのコンパイラって内部的にそれを検出していると思うぞ。
何にも警告出ないと思うが。JavaはCみたいなプリプロセッサを
通さないからデバッグコードを埋め込みたい場合にデバッグ時は
true にしておいて終わったらfalse にするという用途で使う。
で、false になっていた場合はその内部がコンパイルされない。
class xxx {
public final boolean DEBUG = false; // デバッグ終わったら false にする。
public void method() {
if (DEBUG) {
// ここは DEBUG が false だとコンパイルされない。
}
}
}
0523デフォルトの名無しさん
2006/04/06(木) 19:19:46そういう単純な場合は検出できるだろうけど条件式が複雑になった場合も検出できるかが問題。
0524デフォルトの名無しさん
2006/04/07(金) 01:33:59完全にすべて検出するってのは無理そうだな。
0525デフォルトの名無しさん
2006/04/07(金) 20:05:23複雑でも解析していけばそのうち分かるんじゃないか?
但し動的にリンクするライブラリとかがあるとその部分ではできない。
0526デフォルトの名無しさん
2006/04/08(土) 23:55:43確か無理なことが数学的に証明されてたと思います。
0527デフォルトの名無しさん
2006/04/09(日) 00:08:56何がすごいって、予報的中率が100%なんだ。
でも一つ欠点があってね、1週間後の天気を計算するのに2週間かかることなんだ!
0528デフォルトの名無しさん
2006/04/09(日) 00:21:040529デフォルトの名無しさん
2006/04/09(日) 12:22:590530デフォルトの名無しさん
2006/04/09(日) 13:59:020531デフォルトの名無しさん
2006/04/09(日) 18:50:22http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%97%E3%83%A9%E3%82%B9%E3%81%AE%E6%82%AA%E9%AD%94
0532デフォルトの名無しさん
2006/04/09(日) 20:14:540533デフォルトの名無しさん
2006/04/09(日) 20:52:59株でそれを思ったことがある。
常に負けているヤツの反対の買い方をすればいいと。
0534デフォルトの名無しさん
2006/04/09(日) 22:31:380535デフォルトの名無しさん
2006/04/09(日) 23:40:190536デフォルトの名無しさん
2006/04/10(月) 14:46:48逆張り? 株じゃないけど逆のことやって大きくなった会社が北陸になかったか?
ホテル業か不動産か忘れたが。
0537デフォルトの名無しさん
2006/04/11(火) 00:38:08現在のコンピューターというのは、数学的にはチューリングマシンと言われるモノを、機械的に再現したモノです
これは言語が何であれ、そこからは逃げられないモノです
そして、チューリングマシンでその問題が計算できるかどうかは、チューリングマシンの停止問題から、完全予測は不可能なことが証明されている。
で、最後なんだけど
チューリングマシンの項に関しては「知っておいた方が良い」ではなくて「知っておくべき」の次元だから
うん、なんていうか…もうちっとガンガレ
0538デフォルトの名無しさん
2006/04/11(火) 00:53:220539デフォルトの名無しさん
2006/04/11(火) 02:12:150540デフォルトの名無しさん
2006/04/11(火) 19:19:470541デフォルトの名無しさん
2006/04/11(火) 21:28:46だから、量子コンピュータの実物が普及してもPCは相変わらずノイマン型だろうと思う。
0542デフォルトの名無しさん
2006/04/11(火) 21:47:170543デフォルトの名無しさん
2006/04/11(火) 22:46:110544デフォルトの名無しさん
2006/04/12(水) 02:21:150545デフォルトの名無しさん
2006/04/23(日) 14:51:230546デフォルトの名無しさん
2006/04/24(月) 03:14:34バカの出にくい「なにか」が欲しい。
0547デフォルトの名無しさん
2006/04/25(火) 22:36:43たとえば?
0548デフォルトの名無しさん
2006/04/26(水) 22:47:390549デフォルトの名無しさん
2006/04/27(木) 21:03:40テストの自動化
次は
コーディングの自動化
リファクタリングの自動化
入力値チェックの自動化
あたりかねぇ
0550デフォルトの名無しさん
2006/04/27(木) 21:24:52素人だな。
0551デフォルトの名無しさん
2006/04/27(木) 21:43:380552デフォルトの名無しさん
2006/04/27(木) 23:54:300553デフォルトの名無しさん
2006/04/28(金) 09:05:190554デフォルトの名無しさん
2006/04/28(金) 09:24:23図が巨大になりすぎてやっぱりわからないなんてことも起こりかねない。
まあ、それでもソースだけよりはましなんだろうが。
0555デフォルトの名無しさん
2006/04/28(金) 18:05:20どうこうなるとは思わないぞ
0556デフォルトの名無しさん
2006/04/28(金) 18:19:310557デフォルトの名無しさん
2006/04/28(金) 21:57:322chだもの。
0558デフォルトの名無しさん
2006/04/29(土) 01:17:35入力値チェックの自動化というか、
値チェックの自動化なら>>324当たり以降にあるぞ。
0559デフォルトの名無しさん
2006/04/30(日) 08:07:31doxygenでいいんじゃね?
結構使える。
0560デフォルトの名無しさん
2006/04/30(日) 10:58:040561デフォルトの名無しさん
2006/05/09(火) 21:23:37>>560
ネタもないようなのでdoxygenとGNU GLOBALについて語ってくれんか?
0562デフォルトの名無しさん
2006/05/09(火) 21:49:150563デフォルトの名無しさん
2006/05/18(木) 20:40:48結論はなんだったけ?
0564デフォルトの名無しさん
2006/06/06(火) 22:37:300565デフォルトの名無しさん
2006/06/10(土) 23:46:13必ず有限の回数を実行すれば止まることにすれば 停止問題も解決するし 理論上全組み合わせを調べればバグの有無が証明可能
0566デフォルトの名無しさん
2006/06/11(日) 02:11:28俺も大学で勉強する以前には、そう思ったことあるよ。
ttp://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E5%AE%8C%E5%85%A8
0567デフォルトの名無しさん
2006/06/11(日) 08:43:27構造化言語でループは必ず上限値をつけるとどうなるか想像してみた
……確かに無限ループがないとプログラム書くのは不可能だ
0568デフォルトの名無しさん
2006/06/11(日) 08:48:080569デフォルトの名無しさん
2006/06/11(日) 11:34:20ゲームも作れないし、
イベントドリブンのアプリも作れないじゃん。
ゲームは無限ループのパラパラ漫画だし、
イベントドリブンはイベントをキャッチする仕組みが無限ループのチェックしてるだろ。
0570デフォルトの名無しさん
2006/06/11(日) 11:42:27停止条件の検証……が一番効果ありそうだけどな。
0571デフォルトの名無しさん
2006/06/11(日) 12:55:22→ 静的(実行せずに)停止性を判定可能
何でも書けるプログラミング言語
→ 静的に停止性を検証するのは不可能。
動的にやるななら、invariant、precondition, postconditionを使ってくれ。
(CやJavaならassertでがんがれ)
でFA?
0572デフォルトの名無しさん
2006/06/11(日) 13:17:31おまいの定義ではWindowsのメッセージループはどうなるの?
0573デフォルトの名無しさん
2006/06/11(日) 14:38:35一定回数起動するとアクティベーションが切れれば問題ないじゃん!
これでまた新しいビジネスモデルが出来たね
0574デフォルトの名無しさん
2006/06/11(日) 21:04:510575デフォルトの名無しさん
2006/06/11(日) 21:43:45今の言語は上位の図式モデルや設計情報との結合が弱すぎ。
言語に対して強制的に
設計情報・図式モデル←→高水準言語モデル
の変換プロトコルを定義させる。
図式モデルでプログラミングできたり、
デザインパターン名が
予約語になってたりする言語。
0576デフォルトの名無しさん
2006/06/11(日) 21:45:420577デフォルトの名無しさん
2006/06/11(日) 22:12:20もの知らずもほどほどにな
0578576
2006/06/11(日) 22:21:13>設計情報・図式モデル←→高水準言語モデル
>図式モデルでプログラミングできたり
この程度ならほんのりできてるでしょ
0579デフォルトの名無しさん
2006/06/11(日) 22:32:05それなんてMDA?
0580デフォルトの名無しさん
2006/06/11(日) 23:29:590581デフォルトの名無しさん
2006/06/12(月) 00:22:380582デフォルトの名無しさん
2006/06/12(月) 00:31:27あなたが例外だったのかもしれない。
0583デフォルトの名無しさん
2006/06/12(月) 00:52:07お前よっぽど馬鹿だったんだなw
こんなところでバグってたらプログラム完成しないだろ?w
0584デフォルトの名無しさん
2006/06/12(月) 01:05:10まだプログラミングの日も浅いやつに言われたくないな。
0585デフォルトの名無しさん
2006/06/12(月) 01:36:03いわれてよく考えてみたら、始めてから8年近くも経ってるなw
0586デフォルトの名無しさん
2006/06/12(月) 01:38:22予想通りの返答です。
0587デフォルトの名無しさん
2006/06/12(月) 01:42:020588デフォルトの名無しさん
2006/06/12(月) 01:43:00せいぜい1000行のプログラムしか書いたことなさそう。
0589デフォルトの名無しさん
2006/06/12(月) 21:10:46while(1){}
とか書いてたんじゃないか。八年
0590デフォルトの名無しさん
2006/06/13(火) 23:48:42foreachとかでグルグル回すだけにしとくのはどう?
0591デフォルトの名無しさん
2006/06/15(木) 00:27:460592デフォルトの名無しさん
2006/06/15(木) 20:41:300593デフォルトの名無しさん
2006/07/06(木) 17:40:190594デフォルトの名無しさん
2006/07/09(日) 02:30:420595デフォルトの名無しさん
2006/07/09(日) 12:28:250596デフォルトの名無しさん
2006/07/09(日) 12:42:35型付ラムダ計算についてもっと勉強しなさい
0597デフォルトの名無しさん
2006/07/09(日) 12:47:34×型安全じゃなくても
○型付けの弱い(もしくは型が無い)
0598デフォルトの名無しさん
2006/07/09(日) 19:03:01静的型・動的型って区分ならば、型推論というアプローチもある。
ちなみに俺は tRuby ってのに注目していたりするが。
0599デフォルトの名無しさん
2006/07/13(木) 16:40:32たとえば
リレーショナルデータベース。SQLPLUSだけでプログラミングする
イメージで言語を作ったら。
0600デフォルトの名無しさん
2006/08/15(火) 21:35:47はげどう。
UMLとソースとの同期を取りますとか、UMLからソースを自動生成しますとか、
そんな考え自体が間違いじゃないか。
0601デフォルトの名無しさん
2006/08/22(火) 20:13:43つまりどうすれば良いわけ?
0602デフォルトの名無しさん
2006/08/23(水) 09:54:23>575 図式モデルでプログラミングできたり
UML→ソース じゃなくて UML(等の図)=ソース と言いたいんじゃなかろうか
UMLを直接コンパイルするような
0603デフォルトの名無しさん
2006/08/23(水) 18:24:210604デフォルトの名無しさん
2006/08/23(水) 23:54:38emacsの拡張で、AAでUML書くのがあった気がする。
0605デフォルトの名無しさん
2006/08/25(金) 03:45:18そういう問題でもない。
と、釣られてみる。
0606デフォルトの名無しさん
2006/08/26(土) 18:44:16やっぱ「バグ」の範囲を考えて、それを実現できない言語 NULLPO を作ればいいんじゃまいか?
0607デフォルトの名無しさん
2006/08/26(土) 18:48:35・致命的
・どうでもいい
とか
・言語仕様で防げる
・マが気をつけるしかない
とかそういうのをハッキリしないと
ぬるぽ言語だろうがガッ言語だろうが無理
0608デフォルトの名無しさん
2006/09/15(金) 23:34:220609デフォルトの名無しさん
2006/09/16(土) 02:19:31古すぎる。
Haskellなどはすでに仕様記述言語と同等レベルの抽象化ができるから。
0610デフォルトの名無しさん
2006/09/16(土) 10:06:13もれはHaskell使ったことないが。
0611デフォルトの名無しさん
2006/09/21(木) 00:36:23Haskellに事前、事後、不変条件をつけて評価してみたいです。
0612デフォルトの名無しさん
2006/09/21(木) 01:16:07設計情報・図式モデルはある程度までしか複雑化できないのです。
今の図式モデルは肝のところしか表現されていません。
実際はプログラム時に仕様書から類推して要求されているであろう機能を
実装しているのです。
0613デフォルトの名無しさん
2006/10/08(日) 11:31:29馬鹿な俺でもわかるように解説してくれ
コンパイル時の処理?をソースに埋め込めるということなのか?
テンプレートのさらに、メタな感じ?
0614デフォルトの名無しさん
2006/10/08(日) 12:06:02今の型付言語だと構文チェック以外には型以外のオブジェクトの属性はチェックしないのが多いから配列の次元数やNull代入不可とかのチェックをしようって事
すでにそういう言語は無い事はない
0615デフォルトの名無しさん
2006/10/08(日) 13:56:51次元解析ってどういうこと?
配列の次元って、コンパイル時に普通にチェックしてくれるような?
Null代入不可は、コンパイル時にチェックできるの?
定数でnullは大丈夫だと思うけど、実行時にnull代入は、実行時にチェックするしかなくね?
可能性?をチェックするの?
0616デフォルトの名無しさん
2006/10/08(日) 14:12:23最大10個と決めてるところに最大15個の配列を入れるとオーバーするとか必ず3つと決めてるところに1つしか入れないと数が足りないとかそんな感じ
Null値は確実にNullにならない項目にNullを入れれる項目から値を代入するとNullが入れられる可能性が出てくるからエラーにするって感じ
そういう場合はNullを入れられる項目がNullかどうか判断して、Nullが入れられない項目は必ず別の値を入れるロジックを作る必要が出てくる。
そこまで来ると今度は、「暗黙の初期値とかを決めて〜」とか言い出す奴がきっと出てくると思う
0617デフォルトの名無しさん
2006/10/08(日) 14:38:11お、Nullは大体わかた
次元の方は、
配列のインデックスの範囲チェックのことか?
いや、違うな?
配列のサイズが異なる配列の相互代入に制限つけるということ?
配列のサイズがことなるも何も、もともとできないような・・・って、俺が使ってるDelphiだけかもしれんが
0618デフォルトの名無しさん
2006/10/08(日) 18:51:09MATLAB みたい
0619デフォルトの名無しさん
2006/10/08(日) 21:26:11次元て言ってるのは、配列とは関係ない。物理単位の指数のこと。
速度の次元は、例えばm/sec、つまり距離が1次元、時間が−1次元、という事。
例えば、速度を引数に取る関数があったとすると、
引数が単なるdoubleだと間違って距離を渡してもコンパイルが通ってバグになる。
でも、>>324-329なら、単なるdoubleじゃなくて型に次元情報を組み込む事で、
速度の引数に間違って距離を渡すと、コンパイルエラーにできる。
…だと思う。
0620デフォルトの名無しさん
2006/10/08(日) 21:39:05距離、質量、時間の3パラメタにすれば、
//型に付くメタデータその3(コンパイル時チェック)
annotation Dim(int m, int k, int s) applies Number;
//メソッド(関数)定義
double@[Dim(1, 0, -1)] speed(double@[Dim(1,0,0)] distance, double@[Dim(0,0,1)] time) {
return distance/time;
}
double@[Dim(1,0,-1)] a = speed( ([Dim(1,0,0)])123.45678, ([Dim(0,0,1)])123.45678 ); //OK
double@[Dim(1,0,1)] b = speed( ([Dim(1,0,0)])123.45678, ([Dim(0,0,1)])123.45678 ); //コンパイルエラー
double@[Dim(1,0,-1)] c = speed( 123.45678, 123.45678 ); //コンパイルエラー
0621デフォルトの名無しさん
2006/10/08(日) 22:31:10>次元て言ってるのは、配列とは関係ない。
配列と関係はないが、配列の長さにも使えるな。
annotation Length(int) applies Array;//これの書き方があれだけど
//メソッド(関数)定義
long[]@[Length(n)] zipWithMax(long[]@[Length(n)] a, long[]@[Length(n)] b) {
long[]@[Length(n)] ret = long[]@[Length(n)] ret[a.length];
for (int i=0; i<a.length; i++) {
ret[i] = Math.max(a,b);
}
return ret;
}
long[]@[Length(10)] a = zipWithMax(long[]@[Length(10)] l, long[]@[Length(10)] r);//OK
long[]@[Length(10)] b = zipWithMax(l, long[]@[Length(10)] r); //コンパイルエラー
long c = zipWithMax(long[]@[Length(10)] l, long[]@[Length(10)] r); //OK (自動キャスト)
long[]@[Length(10)] a = zipWithMax(long[]@[Length(10)] l, long[]@[Length(5)] r);//コンパイルエラー
0622デフォルトの名無しさん
2006/10/09(月) 02:00:260623デフォルトの名無しさん
2006/10/09(月) 02:33:280624デフォルトの名無しさん
2006/10/09(月) 02:41:20間違いを抑制するという効果しか生まないんじゃ、そのコストはあまり払われない。
間違いを抑制しつつ、求められる機能の実現手段にもならないと。
0625デフォルトの名無しさん
2006/10/09(月) 03:33:08なるほど。単位のことか。
物理的な話で、速度がx^2、距離がx^1って話かな。
んーでも、それだけのことなら、単位を型(クラスでもいいけど)で扱ったら、駄目なんか?
次元にしちゃうと、応用性があるのか?
type TVelocity < double;
type TDistance < double;
type TTime < doble;
function Velocity(distance TDistance; time: TTime): TVelocity;
begin
Result := TVeloicty(distance / time)
end
ついでに、
Velocity velocity = 1234km
Time time = 100min
みたいなリテラル記述もできると面白そうだが
0626デフォルトの名無しさん
2006/10/09(月) 04:37:44それだと、加速度も運動量も運動エネルギーもいちいち型定義が必要になるじゃん。
0627デフォルトの名無しさん
2006/10/09(月) 04:44:18それのどこに不都合が?
0628デフォルトの名無しさん
2006/10/09(月) 04:46:25double@[Dim(m, k, t-1)] divByTime(double@[Dim(m, k, t)] quantity, double@[Dim(0,0,1)] time)
0629デフォルトの名無しさん
2006/10/09(月) 04:50:02その程度の数、と思ってるかもしれんが、
定数や計算途中で、特に名前の付いてない単位がいろいろ有り得る。
その組み合わせ数分の演算をいちいち別個に定義するのは無駄すぎる。
それを勝手にチェックしてくれてこそ、次元解析ってもんだろ。
0630デフォルトの名無しさん
2006/10/09(月) 04:51:58オペレータオーバーロードじゃだめなの?
0631デフォルトの名無しさん
2006/10/09(月) 04:54:29色んな次元と色んな次元の単位の組み合わせ分の演算を定義しなくてはならんのは、なんら変わらん。
0632デフォルトの名無しさん
2006/10/09(月) 04:58:16そんなことないと思うよ?
継承と組み合わせれば、そのほとんどが省略できるんじゃない?
0633デフォルトの名無しさん
2006/10/09(月) 04:59:59次元が違う型をどうやってオーバーライド(継承)するんだ?
言っとくが、処理内容の問題じゃないぞ。
演算の型定義の話だからな?
0634デフォルトの名無しさん
2006/10/09(月) 05:02:220635デフォルトの名無しさん
2006/10/09(月) 05:02:49処理内容が継承できれば十分なんじゃないの?
0636デフォルトの名無しさん
2006/10/09(月) 05:05:29引数・返値の型をなんでも良いことにするのか?
それじゃそもそも型の意味がねぇw
0637デフォルトの名無しさん
2006/10/09(月) 05:06:54暗黙の型変換。
0638デフォルトの名無しさん
2006/10/09(月) 05:11:57すくなくとも>>625のコードにはそんな判断が出来る情報はない。
できるとすれば、単に型がdoubleであれば何でもよい、という無意味な結論になる。
0639デフォルトの名無しさん
2006/10/09(月) 05:18:59単位すべてについて型定義する。
これで解決。
0640デフォルトの名無しさん
2006/10/09(月) 05:35:24その、「すべてについて」定義するのが無駄じゃん、て話だよ。
無駄というか、色んな次元の単位は無限にあるわけで、そもそもムリ。
>>628みたいのを演算×次元要素(上の例ではm,k,sの3つ)分用意すれば全てまかなえる。
さらに、定数も、例えばdouble@[Dim(2,1,-1,-1)](最後は温度。ボルツマン定数)みたいに、
わざわざそのためだけの型を定義しなくても、さっくり書けて、使われてる所の型チェックも出来るわけよ。
0641デフォルトの名無しさん
2006/10/09(月) 05:38:28に、「式の間違いをチェックする場合にも使える。」てあるじゃん。
まさにこれをコンパイル時に自動的に出来るようにするって事だよ。
0642デフォルトの名無しさん
2006/10/09(月) 05:46:28利点がわからん。
型で定義すりゃいいやん。
しかも、すんごい限定的すぎない?
速度とか時間くらいのために、こんなの実装すんの?
無限にある次元の単位を使う機会ってあるのかな?物理屋さんなのかな?
0643デフォルトの名無しさん
2006/10/09(月) 05:48:51http://ja.wikipedia.org/wiki/%E6%AC%A1%E5%85%83
そんなの普通のプログラミングに使わんw
0644デフォルトの名無しさん
2006/10/09(月) 05:50:44だよね。
0645物理屋じゃないよ
2006/10/09(月) 06:03:57オンラインのトランザクション毎の処理ではほとんどないだろうけど、
バッチとかで統計を出すとか、計算系処理では、
MKSの物理量じゃなくても、単位の次元が存在するのは普通。
まあ、それ間違ってたらとんでもない結果になるから、普通はテストで判るはずだけど。
でも、テストまで行かずにコンパイル時にチェックされた方が速いし、
まれにしか走らないロジックではテスト漏れの危険があるが、
コンパイルでチェックされれれば必ず発見される。
0646デフォルトの名無しさん
2006/10/09(月) 06:19:47…気がするだけかも
0647デフォルトの名無しさん
2006/10/09(月) 11:43:02template <int M, int L, int T>
struct dvalue {
// いろいろ略
};
namespace phys {
typedef dvalue<1,0,0> weight;
typedef dvalue<0,1,0> length;
typedef dvalue<0,0,1> time;
typedef dvalue<1,2,2> energy;
typedef dvalue<1,1,1> moment;
}
int main() {
phys::weight m(1.0);
phys::length x(1.0);
phys::time t(1.0);
phys::energy E(1.0);
phys::moment p(1.0);
if (m*x*x*t*t == E) std::cout << "ok" << std::endl;
if (m*x*x*t*t == p) std::cout << "ng" << std::endl;
}
0648デフォルトの名無しさん
2006/10/09(月) 11:49:11ちなみに発生するコンパイルエラーはこんなかんじ.
main.cc:43: error: no match for 'operator==' in 'operator* [with int M1 = 1, int
L1 = 2, int T1 = 1, int M2 = 0, int L2 = 0, int T2 = 1](((const dvalue<1, 2, 1>
&)((const dvalue<1, 2, 1>*)(&operator* [with int M1 = 1, int L1 = 2, int T1 = 0,
int M2 = 0, int L2 = 0, int T2 = 1](((const dvalue<1, 2, 0>&)((const dvalue<1,
2, 0>*)(&operator* [with int M1 = 1, int L1 = 1, int T1 = 0, int M2 = 0, int L2
= 1, int T2 = 0](((const dvalue<1, 1, 0>&)((const dvalue<1, 1, 0>*)(&operator* [
with int M1 = 1, int L1 = 0, int T1 = 0, int M2 = 0, int L2 = 1, int T2 = 0](((c
onst dvalue<1, 0, 0>&)((const dvalue<1, 0, 0>*)(&m))), ((const dvalue<0, 1, 0>&)
((const dvalue<0, 1, 0>*)(&x))))))), ((const dvalue<0, 1, 0>&)((const dvalue<0,
1, 0>*)(&x))))))), ((const dvalue<0, 0, 1>&)((const dvalue<0, 0, 1>*)(&t))))))),
((const dvalue<0, 0, 1>&)((const dvalue<0, 0, 1>*)(&t)))) == p'
0649デフォルトの名無しさん
2006/10/09(月) 13:46:48エラーメッセージは全然わかんないけど。
*の定義はどんなん?
0650デフォルトの名無しさん
2006/10/09(月) 18:47:09template <int M1, int L1, int T1, int M2, int L2, int T2>
dvalue<M1+M2,L1+L2,T1+T2> operator * (const dvalue<M1,L1,T1> &a, const dvalue<M2,L2,T2> &b) {
return dvalue<M1+M2,L1+L2,T1+T2>(a.value * b.value);
}
template <int M, int L, int T>
bool operator == (const dvalue<M,L,T> &a, const dvalue<M,L,T> &b) {
return a.value == b.value;
}
0651デフォルトの名無しさん
2006/10/09(月) 21:25:450652デフォルトの名無しさん
2006/10/09(月) 22:00:330653デフォルトの名無しさん
2006/10/09(月) 22:21:42http://www.cs.bu.edu/~hwxi/DML/DML.html
0654デフォルトの名無しさん
2006/10/10(火) 06:49:59見てみぬフリをすれば…
いや、スマソ
0655デフォルトの名無しさん
2006/10/10(火) 11:30:00いや、普通じゃないと思うw
0656デフォルトの名無しさん
2006/10/10(火) 12:29:25MKSの物理量だけが次元を持つ単位じゃないんだよ?
例えば、「1人当たりの金額」なら、 単位は、円/人。
つまり 円が+1次元で、人数が−1次元だ。
こういうのは自然に誰でも判ると思ったんだけど、現実は厳しいのかなぁ…。
0657デフォルトの名無しさん
2006/10/10(火) 12:44:19物理学の世界をかじらないと難しいと思うよ
0658デフォルトの名無しさん
2006/10/10(火) 12:58:21X/Y = X^1 × Y^(-1)。 さすがに、これなら誰でも高校か中学でやってるだろ。
0659デフォルトの名無しさん
2006/10/10(火) 13:20:200660デフォルトの名無しさん
2006/10/10(火) 15:34:260661デフォルトの名無しさん
2006/10/10(火) 16:05:400662デフォルトの名無しさん
2006/10/10(火) 16:29:48今じゃもう因数分解すら出来ないぜ…
0663デフォルトの名無しさん
2006/10/10(火) 23:55:01>>324-329,334 は、
単に変数(定数)名だけじゃなくて値も使えるType SafeなEnumとか、
Genericsの仕組み自体とか、いろいろ作れる、みたい。
しかし、問題はバグを減らす事には役立つが、
機能を実現することに役立たないと言うことではないだろうか。
0664デフォルトの名無しさん
2006/10/11(水) 09:46:04大学で、MKSが次元ということはならったが、
それが一般に当てはまるところまではいかなかったなー。
まあ、応用利かない、俺も俺だがw
0665デフォルトの名無しさん
2006/10/11(水) 13:37:41大学まで来て数学をならったなら
その応用で金利計算とか人口統計とかの次元はなんだろな?と思ってくれよ
0666デフォルトの名無しさん
2006/10/12(木) 20:36:23typedef unit<double> metre;
typedef unit<double> second;
typedef unit<double> kilogram;
typedef metere/second speed;
typedef speed/second acceleration;
typedef acceleration*klogram newton;
metre L = 1000;
second T = 10;
kilogram W = 10;
speed V = 100 + L / T; //OK
newton N1 = W * V; //NG コンパイルエラー
newton N2 = W * (V / T); //OK
まあ、妄想なんだけどね
0667デフォルトの名無しさん
2006/10/12(木) 20:41:040668デフォルトの名無しさん
2006/10/12(木) 20:46:230669デフォルトの名無しさん
2006/10/12(木) 22:43:54typedef unit<double> second;
を異なる型として認識させるのは厳しいなあ.それ以外ならまあなんとか.
template <int M, int L, int T>
template <int M, int L, int T>
struct unit {
double value;
unit(double value) : value(value) { }
};
template <int M, int L, int T>
unit<M,L,T> operator + (const unit<M,L,T> &a, const unit<M,L,T> &b) {
return unit<M,L,T>(a.value + b.value);
}
template <int M1, int L1, int T1, int M2, int L2, int T2>
unit<M1+M2,L1+L2,T1+T2> operator * (const unit<M1,L1,T1> &a, const unit<M2,L2,T2> &b) {
return unit<M1+M2,L1+L2,T1+T2>(a.value * b.value);
}
template <int M1, int L1, int T1, int M2, int L2, int T2>
unit<M1-M2,L1-L2,T1-T2> operator / (const unit<M1,L1,T1> &a, const unit<M2,L2,T2> &b) {
return unit<M1-M2,L1-L2,T1-T2>(a.value / b.value);
}
0670669
2006/10/12(木) 22:45:15template <class Type1, class Type2>
struct unitMul;
template <int M1, int L1, int T1, int M2, int L2, int T2>
struct unitMul< unit<M1,L1,T1>, unit<M2,L2,T2> > {
typedef unit<M1+M2,L1+L2,T1+T2> result;
};
template <class Type1, class Type2>
struct unitDiv;
template <int M1, int L1, int T1, int M2, int L2, int T2>
struct unitDiv< unit<M1,L1,T1>, unit<M2,L2,T2> > {
typedef unit<M1-M2,L1-L2,T1-T2> result;
};
typedef unit<1,0,0> metre;
typedef unit<0,1,0> kilogram;
typedef unit<0,0,1> second;
typedef unitDiv<metre,second>::result speed;
typedef unitDiv<speed,second>::result acceleration;
typedef unitMul<acceleration,kilogram>::result newton;
int main() {
metre L = metre(1000);
second T = second(10);
kilogram W = kilogram(10);
speed V = speed(100) + L / T;
// newton N1 = W * V; // compile error
newton N2 = W * V / T;
}
0671デフォルトの名無しさん
2006/10/13(金) 09:11:12物理計算だけとか一分野限定ならそれで充分いけそうやね
SI基本単位は7つだけだし
規格がない場合もそうそう増えないだろうし
だけど、他分野も考慮しようとすると辛そうだ
まあ、滅多に無さそうだけど
D言語の強いtypedefならもう一歩いけるのかな
0672デフォルトの名無しさん
2006/10/13(金) 13:32:540673デフォルトの名無しさん
2006/10/13(金) 20:18:19天体計算していたらふと人が住めそうな星が見つかったので
何人住めるか計算するために新次元 [人] を追加したくなった
とかいうケースを考慮してるんだと思うよ。
669 の実装では次元が増えたときの対処が結構めどい。
0674デフォルトの名無しさん
2006/10/14(土) 21:27:290675デフォルトの名無しさん
2006/10/14(土) 23:47:21それは、今更ポインタ&メモリ管理絡みの話をしろと言う事かい?
0676デフォルトの名無しさん
2006/10/14(土) 23:50:130677デフォルトの名無しさん
2006/10/15(日) 00:07:320678デフォルトの名無しさん
2006/10/15(日) 01:43:54検証の一部は肩代わりできるが、検証にはならない
0679デフォルトの名無しさん
2006/10/15(日) 04:00:160680デフォルトの名無しさん
2006/10/15(日) 12:18:20何年後になるやら
0681デフォルトの名無しさん
2006/10/15(日) 14:13:210682デフォルトの名無しさん
2006/11/02(木) 01:24:18これって、>>324-329,334 のパクリ?
http://jcp.org/en/jsr/detail?id=308
0683デフォルトの名無しさん
2006/11/02(木) 13:37:34そこまで行くとさすがにJavaの小汚さが際立つな・・・。
C#みたいに[]にしとけば良いのに。
0684デフォルトの名無しさん
2006/11/03(金) 13:15:41言語仕様を変えずにアノテで実現がこの場合の肝だから
0685デフォルトの名無しさん
2006/11/04(土) 22:12:15{let height:any = 16px} || heightは16ピクセルである事を表す
とか
{let width:any = 12cm} || widthは12cmである事を表す
とか
{let area:any = height * width} || 16px * 12cm
とか出来たよね。
0686デフォルトの名無しさん
2006/11/07(火) 00:04:29http://www.popjisyo.com/WebHint/AddHint.aspx?d=1&r=j&u=http://jcp.org/en/jsr/detail?id=305
0687デフォルトの名無しさん
2006/11/07(火) 12:35:23>>324-329,334 みたいに、やりたいアノテーションを自分で作ることは出来ないのでは?
0688デフォルトの名無しさん
2006/11/07(火) 19:27:030689デフォルトの名無しさん
2006/11/07(火) 23:02:560690デフォルトの名無しさん
2006/11/07(火) 23:55:21↓み
0691デフォルトの名無しさん
2006/11/08(水) 00:12:100692こんな感じ?
2006/11/08(水) 02:26:23→ <>>324-329,334の拡張> の形式で。
・修飾子が付くモノにしか付けられない
→ 変数の型宣言すべてに付けれる。メソッドのレシーバにも。
・コンパイル時、単発の「印」でしかない
→ アノテーションが付いた型は、付けた型の子型になる。さらに属性の値毎に別の子型になる。
→ キャストの可否(明示、暗黙)、実行時キャストチェックを定義できる。
・「どこ(メソッド、フィールド、パッケージ等)に付けられるか」しか指定できない
→ 「どの型に付けられるか」を指定できる
・アノテーションの属性には定数しか指定できない
→ 変数OK。演算もOK。演算はコンパイル時に行える。
これで、
型に保障された単位付き計算や、Generics機能そのもの、型安全Enumなど、
型機能によってコンパイル時に安全性を保障できる様々なバグ防止機能が作れる。
さらに、実行時キャストチェック定義によって、
Pascalの範囲型みたいの+強制DbCが、任意のクラスについて行える。
0693デフォルトの名無しさん
2006/11/08(水) 14:12:18ところでマルチスレッド関係のバグを減らす仕様ってあるのかな
デッドロックとか
同期機構の扱いになるんだろうけど
0694デフォルトの名無しさん
2006/11/08(水) 14:20:190695デフォルトの名無しさん
2006/11/08(水) 16:18:560696デフォルトの名無しさん
2006/11/08(水) 22:10:12実体とポインタの代入間違いぐらいじゃない?
どっちかっていうと
実体がどっから参照されているかわからない場合の
方がバグりやすいんだけど・・・
これってロジック的にはスパゲッティと同じだから
言語で乗り越えていくべきものかと思うけど
なんかいい方法ないかね?
0697デフォルトの名無しさん
2006/11/08(水) 22:18:080698デフォルトの名無しさん
2006/11/08(水) 22:38:06不勉強で悪いのだけど、
それって初期化されたら変更できないってことだっけ?
0699デフォルトの名無しさん
2006/11/08(水) 23:04:51大雑把に言うとそう。
0700デフォルトの名無しさん
2006/11/08(水) 23:52:25根本的に勘違いしてるみたいだけど、
「型に起因するバグ」ってのは、そもそもありえない。
例えば、キャスト誤りは型がなくても元々バグ。
型は、バグを「検出」するだけだよ。型のせいでバグるってのはない。
それはそれとして、
実体がどっから参照されているかわからない場合のバグってのはどんなのを言ってる?
0701デフォルトの名無しさん
2006/11/09(木) 00:11:25連結リストで先頭をいじっても
他からの参照が変化しないから
ひとつ変化しない先頭をかませておくみたいなこと。
このあたりの整合性をソースのどっかでいじられると探すのが大変だったりしない?
0702デフォルトの名無しさん
2006/11/09(木) 02:00:31そもそも、そんな事しないだろw
オブジェクトの値を更新したら、実は更新されては困る奴がそれを参照していた、
なんて事はまれにあるけど、それはそのオブジェクト(インスタンス)の位置づけが
曖昧だった、というのが問題。
まあ、安全なのは>>694だな。
0703デフォルトの名無しさん
2006/11/09(木) 02:57:13「□□である場合は」の□□の具体的な条件が決まってないとか。
「返値は○○」という事になっていても、△△という条件の場合は○○じゃない、とか。
つまり、条件も含めた仕様が強制的に明確になる言語仕様が必要。
0704デフォルトの名無しさん
2006/11/09(木) 06:26:19え?しない?
設計間違えたかな・・・
0705デフォルトの名無しさん
2006/11/09(木) 20:08:18なんで入れモンごと取り替えるんだよ。
0706デフォルトの名無しさん
2006/11/10(金) 09:03:31順序を変えたかったからなんだが・・・
0707デフォルトの名無しさん
2006/11/12(日) 14:04:37キャストミス誘発しやすいな
0708デフォルトの名無しさん
2006/11/12(日) 14:34:270709デフォルトの名無しさん
2006/11/12(日) 14:46:320710デフォルトの名無しさん
2006/11/12(日) 15:37:54まだ去ってないw
0711デフォルトの名無しさん
2006/11/12(日) 16:21:38「○○の時代」と呼ぶ事が出来るようになるためには。
○○が少なくとも過半数の人間に容易に理解出来るようでなくてはならない。
○○が「関数型言語」であっても「オブジェクト指向」であっても同様だね。
0712デフォルトの名無しさん
2006/11/12(日) 16:27:43> 過半数の人間
> 過半数の人間
> 過半数の人間
> 過半数の人間
> 過半数の人間
> 過半数の人間
0713デフォルトの名無しさん
2006/11/12(日) 16:33:35「理解」って、それが便利だと認めるってことだよね??
0714デフォルトの名無しさん
2006/11/12(日) 19:52:34俺って彼女にそう理解されているんだろうか・・・
0715デフォルトの名無しさん
2006/11/12(日) 23:47:520716デフォルトの名無しさん
2006/11/13(月) 18:12:28プログラマは全て人間である。
しかし人間は全てプログラマではない。
0717デフォルトの名無しさん
2006/11/13(月) 18:13:100718デフォルトの名無しさん
2006/11/13(月) 22:31:140719デフォルトの名無しさん
2006/11/14(火) 08:59:370720デフォルトの名無しさん
2006/11/14(火) 15:49:52ハングルは文字であって言語ではないぞ
0721デフォルトの名無しさん
2006/11/14(火) 15:57:310722デフォルトの名無しさん
2006/11/17(金) 17:08:31で欲しいなあ。(他プロセスへOSがタスクスイッチするのは構わない)
0723デフォルトの名無しさん
2006/11/17(金) 22:48:26そういう言語は既に在る
0724デフォルトの名無しさん
2006/11/18(土) 16:38:350725デフォルトの名無しさん
2006/11/18(土) 19:58:560726デフォルトの名無しさん
2006/11/18(土) 21:08:29それを書けない人間が居るんだよなぁ…
0727デフォルトの名無しさん
2006/11/19(日) 18:22:430728デフォルトの名無しさん
2006/11/19(日) 18:44:34教えて
0729デフォルトの名無しさん
2006/11/23(木) 03:29:300730デフォルトの名無しさん
2006/11/25(土) 01:39:000731デフォルトの名無しさん
2006/11/25(土) 02:25:29http://jcp.org/en/jsr/all
0732デフォルトの名無しさん
2006/11/25(土) 11:47:53↓
(2)バクの出にくいバグだらけの言語
↓
(3)バクの出にくい言語処理系をバクの出にくい言語で書き直す
↓(バグが混入)
(4)(1)に戻る
0733デフォルトの名無しさん
2006/11/25(土) 12:28:130734デフォルトの名無しさん
2006/11/25(土) 20:49:15073523歳高卒ニート
2006/11/26(日) 01:45:461 名前:23歳高卒ニート 2006/11/26(日) 00:58:53
http://d.hatena.ne.jp/nonomachon2nd/
23歳高卒ニート童貞がプログラマーになりたい一心で旅をします。
現在、神奈川を移動中。
もし見かけたら、
雇ってください、本をください、技術を教えてください、飯をおごってください。
0736デフォルトの名無しさん
2006/12/14(木) 23:13:44言語仕様は変わると思うけど。今は 型名[@annotation] とかできんでしょ。
0737デフォルトの名無しさん
2006/12/15(金) 19:14:32型アノテーションを型システムに取り込むところまでやるのか?
そうでないと、>>324-329,334 並の機能は無理だろ。
0738デフォルトの名無しさん
2006/12/20(水) 01:02:21実用性がちょっと想像できない。。。
絶対にnullを許せないっつー場面って、そんなにあるかなあ?
0739デフォルトの名無しさん
2006/12/22(金) 18:31:06おまえは、すべてのメソッド呼び出しで必ずnullチェックをしてるのか?
そうでなければ、そのすべてが「絶対にnullを許せないっつー場面」だろうが。
0740デフォルトの名無しさん
2006/12/22(金) 18:57:020741デフォルトの名無しさん
2006/12/22(金) 20:31:290742デフォルトの名無しさん
2006/12/22(金) 22:55:330743デフォルトの名無しさん
2006/12/23(土) 00:43:06うーん、分かる気もするし、分からない気もするなあ。
そもそも、コンパイル時にnull可否がチェックできるようなアイデアなら
既になんかの言語に実装されててもよさそうなんだけど
そんな機能を搭載してる言語って、無いよね?
(有るんだっけ?有ったら恥ずかしいなあ。。。)
C丼のnullableも、なんかニュアンス違うっぽいし。
このスレで発明されたアイデアなの?
それとも、実装できない理由があるっつー可能性とかは?
0744デフォルトの名無しさん
2006/12/23(土) 01:20:46あとHaskellとかはデフォルトでnull不可だろ。
基本的に型パラメタだから型パラメタがない言語では難しいだろう。
null禁止自体については前スレにあったはず。
というか、>>324-334は、null禁止は一番単純な応用にすぎなくて、
そういうのやもっと高度なのを作れる強力な型パラメタ機能が主題なんだが。
0745デフォルトの名無しさん
2006/12/23(土) 02:44:01プログラム的には実行時エラーにしかならんだろう。
0746デフォルトの名無しさん
2006/12/23(土) 08:56:060747デフォルトの名無しさん
2006/12/23(土) 11:27:13もう1年以上だ。
そろそろなんか実際に触ってみたいな。
Haskellやってみようか・・・
0748デフォルトの名無しさん
2006/12/23(土) 12:43:11まあMayBeをnull可能としてそれ以外をnull不可と言うことはできるかもしれんが。
0749デフォルトの名無しさん
2006/12/23(土) 15:02:30正確には、前スレの407からな。
既にCurlにはその機能が備わってるらしい。
Curlは最近、個人用のライセンスがゆるくなったはずだから
遊んでみるかな。
0750デフォルトの名無しさん
2006/12/23(土) 20:18:160751デフォルトの名無しさん
2006/12/24(日) 01:34:50日本語でおk
0752デフォルトの名無しさん
2006/12/26(火) 12:35:540753デフォルトの名無しさん
2006/12/27(水) 00:30:21null不可型は、
・null直接代入禁止
Object@NonNull obj = null;×
・null不可でない型からの代入禁止
Object maybeNull = someMethod();
Object@NonNull obj = maybeNull;×
というだけの話だと思うが。
それより、>>336みたいにEnumやGenerics機構とかを自由に作れる
っつー話の方がそそられるな。
0754デフォルトの名無しさん
2006/12/27(水) 00:52:45型Aがヌル許容型ならどこかでnullにして初期化を止められるけど、
ヌル非許容型なら延々と型Aのインスタンスを初期化し続けなければならないから、
コンパイラはフィールドの定義を辿っていってヌル非許容型の循環を検知したら
エラーを吐かなければならない、ということじゃなかろうか。
0755デフォルトの名無しさん
2006/12/27(水) 00:56:02いい加減バカばっか
0756デフォルトの名無しさん
2006/12/27(水) 01:10:53「代入時に実体参照しているものしか参照を代入できない」みたいな制限の話してるのかとおもた
0757デフォルトの名無しさん
2006/12/27(水) 01:20:43@NonNullは型定義
例class A@NonNull {}
ではなく型適用(その型の変数やその型を使う関数)
例 A@NonNull var; A@NonNull func();
に現れるのでは?
っていうか、NonNull関係なく
class A {
A membr;
}
みたいな型って、null以外にどういう値があり得るんだ?
>>755=>>348-353?
0758デフォルトの名無しさん
2006/12/27(水) 01:26:01ほかにメンバがあれば普通にリスト。つーかconsセル。
0759デフォルトの名無しさん
2006/12/27(水) 01:32:17>javaはC/C++からポインタをなくしたりGCを導入することで
>メモリ管理にまつわるバグを出にくくした
メモリ管理を意識しなくていいアプリ分野ならありがたいが
メモリ管理をやる必要がある組み込みではいい迷惑でしかなかったり。
0760デフォルトの名無しさん
2006/12/27(水) 01:55:14class A {
A@NonNull membr = init(); // <- コンパイルエラー
}
ってことじゃないか
0761デフォルトの名無しさん
2006/12/27(水) 03:02:49A@NonNull membr = init(); // <- コンパイルエラー
A@NonNull init(){return this;}
}
じゃだめなの?
0762デフォルトの名無しさん
2006/12/27(水) 13:56:00Javaを使わなきゃいいじゃん
0763デフォルトの名無しさん
2006/12/27(水) 15:43:14そもそも、メモリを意識しなくちゃいけないのは、代入型言語ゆえの宿命だよ。
0764デフォルトの名無しさん
2006/12/28(木) 18:13:54じゃ、どうすれば良い訳?
0765デフォルトの名無しさん
2006/12/28(木) 18:19:160766デフォルトの名無しさん
2007/01/01(月) 22:23:28----------------------------------------------------------------------
A something;
if (isTrue()) { // 場合によって、生成方法が異なる
something = new A(foo);
} else {
something = new A(bar);
}
// この間に something をいっぱい使う
doSomething(something); // コンパイルエラー
----------------------------------------------------------------------
こんな感じで、どうしても null かもしれないオブジェクトを
NonNull の変数に入れたくなる事があるはず。
→ コーディング規約で、@NonNull の使用禁止令が出る
→ ('A`)なんだただの java じゃん
0767デフォルトの名無しさん
2007/01/02(火) 01:31:43A something = isTrue() ? new A(foo) : new A(bar);
条件演算子の山になるな
0768デフォルトの名無しさん
2007/01/02(火) 01:42:29if (isTrue()) { // 場合によって、生成方法が異なる
return new A(foo);
} else {
return new A(bar);
}
}();
0769デフォルトの名無しさん
2007/01/02(火) 01:43:37if (isTrue()) { // 場合によって、生成方法が異なる
return new A(foo);
} else {
return new A(bar);
}
}();
いや、こうか。
0770デフォルトの名無しさん
2007/01/02(火) 01:51:41例外含めてすべての経路でヌル以外が代入されてるなら@NonNullへのキャストを許せばいいんじゃね
0771デフォルトの名無しさん
2007/01/02(火) 16:22:19>749でも書いてるけど、実際にCurlではヌル可/ヌル不可の機構が搭載されてるから
この機構 (ていうか、型annot.全般) が実用たり得るかどうか心配な人は
Curlを触ってみるといいよ。
|| letは宣言を行う。
{let something1: A = {A}} || something1はヌル不可の変数。明示的にインスタンスを生成しないとコンパイルエラー。
{let something2: #A} || something2はヌル可の変数。nullで初期化される。
|| setは代入を行う。でもこれはコンパイルエラー。
{set something1 = something2}
|| これはおk。キャストみたいなもんだよね。
|| もしsomething2がnullならば、この場でNullReferenceExceptionが発生してくれる。
|| 後でsomething1を使おうとした時に例外が出るよりは、かなりデバッグしやすい。
{set something1 = {non-null something2}}
|| ちなみに、こんな構文糖も用意されてる。
{if-non-null something2 then
|| これは {if something2 != null then 〜 } と同じ。
}
0772デフォルトの名無しさん
2007/01/10(水) 06:28:03C++の
include
include
include
include
:
D言語の
import
import
import
import
import
:
とかみててすげー腹立つんだけど、俺だけ?
なんで、近代言語なのに、
uses hoge, mage moge;
みたいにしないんだ?
0773デフォルトの名無しさん
2007/01/10(水) 10:05:52C/C++の癖が抜けてないんだろう
0774デフォルトの名無しさん
2007/01/10(水) 14:22:01もうね、横スクロールバー出るくらいまで長く伸びたり、無駄に改行するんだったら最初から縦に並べろよ、って。
0775デフォルトの名無しさん
2007/01/10(水) 14:44:090776デフォルトの名無しさん
2007/01/10(水) 17:23:220777デフォルトの名無しさん
2007/01/10(水) 22:32:17横スクロールバーでるまで、長くのばさねーよ、普通w
縦に並べるのは、無駄に改行じゃないのかよwww
あおるなら、もう少し、頭つかえ
0778デフォルトの名無しさん
2007/01/10(水) 22:38:56マウスのホイールは大抵縦向きにしか使えないから。
ちなみにWindowsでは垂直方向のスクロールバーが無ければ、ホイールの回転を水平方向のスクロールに使える。
0779デフォルトの名無しさん
2007/01/10(水) 22:40:07列指向なら横だな
10個のsymbolを横に書いておくのと縦に書いておくのでは、行指向エディタでは雲泥の差がある
0780デフォルトの名無しさん
2007/01/10(水) 22:46:51include
include
include
なんかは、もう目もあてらんねえ
0781デフォルトの名無しさん
2007/01/10(水) 23:13:12uses HogeHoge01, HogeHoge02, HogeHoge03, HogeHoge04,
HogeHoge05, HogeHoge06, HogeHoge07, HogeHoge08;
こういうのが嫌い。
0782デフォルトの名無しさん
2007/01/10(水) 23:45:30”いつからインクルードファイルを省略できるようになった?”
0783デフォルトの名無しさん
2007/01/11(木) 03:32:11俺は、
#include "HogeHoge01"
#include "HogeHoge02"
#include "HogeHoge03"
#include "HogeHoge04"
#include "HogeHoge05"
#include "HogeHoge06"
#include "HogeHoge07"
#include "HogeHoge08"
こういうのが嫌い
いちいちスクロールするのが面倒だし、
第一なんで、#includeをいくつもかかなくちゃならんのだ?
0784デフォルトの名無しさん
2007/01/11(木) 03:34:36uses {
HogeHoge01;
HogeHoge02;
HogeHoge03;
HogeHoge04;
HogeHoge05;
HogeHoge06;
HogeHoge07;
HogeHoge08;
}
これなら俺は許せる
0785デフォルトの名無しさん
2007/01/11(木) 03:37:40も前は、配列リテラルも、縦長で書くんか?
a = [
"hoge",
"mage",
"moge",
"sage"]
と思ったけど、enumとかは、縦長で書くこともあることに気づいた・・・。
ケースバイケースか・・・
0786デフォルトの名無しさん
2007/01/11(木) 03:37:44#include "HogeHoge01"
#include "HogeHoge02"
#include "HogeHoge03"
#include "HogeHoge04"
#include "HogeHoge05"
#include "HogeHoge06"
#include "HogeHoge07"
#include "HogeHoge08"
んでメインの方では
#include "all.h"
これ基本アルネ
0787デフォルトの名無しさん
2007/01/11(木) 03:40:13(;^ω^)
0788デフォルトの名無しさん
2007/01/14(日) 16:58:300789デフォルトの名無しさん
2007/01/19(金) 17:01:00なんかluaのデータ定義っぽい
0790デフォルトの名無しさん
2007/01/20(土) 00:55:39class A{
private int
countor,
index;
private String
...
}
見たいに掻いたコード見たんだが
行数増えすぎだろ、これ・・・
0791デフォルトの名無しさん
2007/01/22(月) 21:39:36Visual C++だとstdafx.hが正にその役。
0792デフォルトの名無しさん
2007/01/23(火) 09:44:48みんな折りたたみ機能持った近代のIDEとかエディタ使ってるから、
そんなに腹立たないんだよ。
0793デフォルトの名無しさん
2007/01/23(火) 12:09:45最近のfolding機能は、includeまで面倒見てくるんですかそーですか
0794デフォルトの名無しさん
2007/01/23(火) 15:53:23includeは知らん
0795デフォルトの名無しさん
2007/01/26(金) 04:31:240796デフォルトの名無しさん
2007/01/26(金) 08:45:47そんなのバグの元だ。
0797デフォルトの名無しさん
2007/01/26(金) 15:28:030798デフォルトの名無しさん
2007/02/10(土) 23:17:27C++厨乙
0799デフォルトの名無しさん
2007/03/14(水) 02:28:37問題は、仕様の解釈ズレによるバグと、仕様の想定漏れによるバグだな。
0800デフォルトの名無しさん
2007/03/14(水) 05:50:280801デフォルトの名無しさん
2007/03/14(水) 10:51:35NULLじゃなくて変な値を使うようにしたら見かけ上は動いてるけど中身はおかしいって言う
余計にややこしい状態が起こると思うんだけどどうかな?
0802デフォルトの名無しさん
2007/03/14(水) 13:00:38いくら言語仕様で頑張っても、底辺はその斜め上をいくって事か…。
0803デフォルトの名無しさん
2007/03/14(水) 13:21:550804デフォルトの名無しさん
2007/03/14(水) 17:36:38> 全ての変数をimutableに
構造が複雑になって余計にミスが入り込みそうなんだが。
0805デフォルトの名無しさん
2007/03/14(水) 20:04:380806デフォルトの名無しさん
2007/04/11(水) 13:54:43複雑にはならんよ。ただ、考え方の転換が矯正されるだけで。
nullとか型とかも良いが、まずどんなバグがあるのかサーベイしたがよいネタが生まれるのではないだろうか。
http://issues.apache.org/bugzilla/buglist.cgi?query_format=specific&order=relevance+desc&bug_status=__closed__&product=Tomcat+6&content=
この辺りを分析してみるとか。
0807デフォルトの名無しさん
2007/04/11(水) 15:58:1939355 オブジェクトプーリングでプールに戻すときのフィールドクリア漏れ
39409 設定ファイルのフォーマット誤り
39803 仕様実装漏れ(コミット漏れ)
40279 バージョンアップに伴う必要な定数更新のし忘れ
40820 設定依存の内部構成状態の考慮漏れ
修正内容が分かる奴を上からいくつかまとめてみた。
こうしてみると、言語で救えそうなのは少なそうだなぁ。
ただし、修正箇所不明の奴が2〜3割くらいあってそれは↑に含んでないので、
それらがどうか分からんけど。
0808デフォルトの名無しさん
2007/04/14(土) 07:28:580809デフォルトの名無しさん
2007/04/15(日) 12:15:28Delphiはバグが少ないのかと個一時間・・・
0810デフォルトの名無しさん
2007/05/12(土) 13:49:540811デフォルトの名無しさん
2007/05/12(土) 13:53:330812デフォルトの名無しさん
2007/07/07(土) 15:40:09Delphiはバグの出にくい言語だと思うが。
現在の平均的なプログラマの技量から言って、単なるプログラムエラーが
最も起こりやすい箇所は正規表現。
ただ、それがバグとして残るかは別問題。
というところか。
0813デフォルトの名無しさん
2007/07/08(日) 13:34:51ほぼ同義だから問題ないな
0816デフォルトの名無しさん
2007/12/01(土) 17:28:24タイトル読んだ時点で気付くべきだよな。
0817デフォルトの名無しさん
2007/12/14(金) 12:42:110818デフォルトの名無しさん
2007/12/17(月) 19:25:20もういいかげん数は数でいいだ、整数も少数も浮動少数もいらない。
理想の数値変数
変数の定義 SETSCOPEの意味(始まりの数、終わりの数、ステップ数)
NO a1 SETSCOPE(0 , 100 , 1); // 0から100まで1おきの数、それ以外はエラー
NO a1 SETSCOPE(0 , 100 , 1 , ステップ以下切り捨て); // 0から100まで1おきの数
//ステップ以下の数は自動で切り捨て
NO b1 SETSCOPE(0,0000000000 , 10000000000 , 0.0000000001);
変数の定義に外れたものを入れる場合総てエラーとなる。
変数の定義が違うものを代入する場合は、総て定義変換関数を通す。
a1 = b1.変換メソッド();
a1 = b1.変換メソッド(色々な変換パラメータ);
字も総て字でいい、ASCIIも日本語も中国語も 総て1文字、長さも自由。
ハードの呪縛から開放。
0819デフォルトの名無しさん
2007/12/31(月) 03:33:56例えば文字数とかそういう個数みたいのを扱うなら必要なのは符号無し整数だけ。
でも、そこはライブラリに任せても良いのかも知れないな。
小数や負数を代入しようとしたら例外…いや、切り捨てか?
0820デフォルトの名無しさん
2007/12/31(月) 13:02:40可能なら出来る仕組みがあった方が方がいい。
型推論や型の強制をするかどうかは用途によるだろうけど、
選択出来るようにするならあって困るものでもない。
実行時にエラー吐いて止まるより、ソース読ませた瞬間にエラーが見つかる方がいいだろう。
0821デフォルトの名無しさん
2007/12/31(月) 16:14:50Cのintとか限定の話?
0822デフォルトの名無しさん
2007/12/31(月) 19:36:18同意。
動的言語は便利なのだが、特にRuby(Pythonもか?)は、ちょっとした実行時エラーが多すぎる
できるだけ静的型で、かつダックタイピング的なのって可能?
関数型の型推論でできるとは思えんし
0823デフォルトの名無しさん
2007/12/31(月) 20:15:42それって、「+で、かつー」とか「北で、かつ南」とか「蕎麦で、かつうどん」とか言ってるのと同じじゃないの?
0824デフォルトの名無しさん
2007/12/31(月) 22:04:200825デフォルトの名無しさん
2007/12/31(月) 23:35:49静的型で、動的型と言っているようなものか
いや、確かにそうなのだがw
なんていうか、いいところどり?できないものかな、と。
なるたけ、コンパイル時に解決できるところは、コンパイル時に解決して、
バグ減らしたい。
って、それは型推論か
動的言語だと、メソッドのスペルミスひとつで、
コードがそこを通るまで、エラーがわからないなんてのは、どうよ?と思うんですよ
まあ、実践では、テスト主体で開発するだろうが・・・
ただ、ガチガチにすると、method missing的なことができないわけで、
メタプログラミングのうまみもかける
うまく解決する方法はないのだろうか?
>>824 Generic?
0826デフォルトの名無しさん
2008/01/01(火) 00:48:56コンパイル時のダックタイピングができる。
スクリプト言語の実行時のダックタイピングとは、ちと違うような気もするけど。
0827デフォルトの名無しさん
2008/01/01(火) 13:12:22大前提じゃないか?
0828デフォルトの名無しさん
2008/01/01(火) 16:10:13dukc typingでぐぐればC++とかDとかの例が出てくるだろ。
0829デフォルトの名無しさん
2008/01/01(火) 19:07:410830デフォルトの名無しさん
2008/01/01(火) 20:58:30ついでに、利用者に損害を与えても良いってのを加えておくと完璧
0831デフォルトの名無しさん
2008/01/05(土) 12:51:58現状、C++コンパイル時はある意味
型無し(typenameしかない)なので動的型。
例えばイテレータを引数に取るところにintを渡しても
実行(実体化)を開始してしまう。
結果として、例えばintに単項*演算子が使えないというようなエラーになるが、
これは言わば実行時エラー。
0832デフォルトの名無しさん
2008/01/14(月) 10:20:26実行環境が馬鹿すぎて意味不明のエラーが出るから。
フォームを薄くラップしてデフォ値に置き換えてくれるクラスがあればいいのに
フレームワークが提供するクラスはゴテゴテしたものばかり・・・。
0833デフォルトの名無しさん
2008/01/14(月) 10:52:40イテレーターにint渡すと、コンパイル時にエラーになるだろ。
0834デフォルトの名無しさん
2008/01/14(月) 10:56:360835デフォルトの名無しさん
2008/01/14(月) 11:06:07std::list<int>::iterator it = 10;
は、コンパイル時にエラー。
0836デフォルトの名無しさん
2008/01/14(月) 14:58:27その通りのことが>>831にも書いてあるわけだが。
0837デフォルトの名無しさん
2008/01/14(月) 15:10:19どうみてもエラー出てるのはコンパイル時だけど。
0838デフォルトの名無しさん
2008/01/14(月) 16:54:27バグが見付け辛くなって涙目
0839デフォルトの名無しさん
2008/01/14(月) 17:14:48コンパイル時にテンプレートのインスタンス化がされることを指して、
「言わば実行時エラー」っていってるんじゃなかろうか。
そんなに難解ではないと思うが
0840デフォルトの名無しさん
2008/01/14(月) 18:08:35テンプレート使っていてエラー出したことがあれば、そういう勘違いって、しようがないと思うけど。
0841デフォルトの名無しさん
2008/01/14(月) 18:17:220842デフォルトの名無しさん
2008/01/14(月) 18:39:060843デフォルトの名無しさん
2008/01/14(月) 18:45:17広い意味で実行時エラーと呼んでも差し支えないのではなかろうか。
0844デフォルトの名無しさん
2008/01/14(月) 18:54:58「実行時」という言葉を定義した意味がなくなるまで「実行時」の意味を広げてどーするんだ……
0845デフォルトの名無しさん
2008/01/14(月) 18:59:230846デフォルトの名無しさん
2008/01/14(月) 19:52:58普通、「実行時エラー」と言えばコンパイル後、バイナリの実行時のことだろ。
何が「いわば」だ
0847デフォルトの名無しさん
2008/01/14(月) 19:55:340848デフォルトの名無しさん
2008/01/15(火) 08:14:58コメント書いてもらわないとコードが読めないヤツも馬鹿です。
0849デフォルトの名無しさん
2008/01/15(火) 16:43:14>実行(実体化)を開始してしまう。
で意味がわからないほうがアフォ
0850デフォルトの名無しさん
2008/01/15(火) 20:06:22> 動的言語は便利なのだが、特にRuby(Pythonもか?)は、ちょっとした実行時エラーが多すぎる
動的言語を使う以上はpycheckerのようなlint系ツールは必須だと思うが。
0851デフォルトの名無しさん
2008/01/16(水) 01:46:24俺の言う事がわからない奴はアフォ、ってか?
0853デフォルトの名無しさん
2008/01/16(水) 11:33:50常識ではわからないだろう、と考えてるから「言わば」とか「実行(実体化)」なんて但し書きが必要になるんだよ。
0854デフォルトの名無しさん
2008/01/16(水) 16:08:22>831 なんざ、斜に構えて気取ったこと言ってるつもりになってるだけだし、こんなことを言い出したのは >831 が最初じゃないどころか飽きるほど見たし、言及する価値はない。
>831 が何を言いたいかを理解できない奴には、それこそ構う価値はない。
0855デフォルトの名無しさん
2008/01/16(水) 22:08:40その但し書きがあるからわかるだろって言ってんの、おバカさん。
0856デフォルトの名無しさん
2008/01/16(水) 22:13:09じゃあ別に>>826からの流れが読めたのが理由ではないんだな
0857デフォルトの名無しさん
2008/01/16(水) 22:16:46但し書きがあっても非常識だが。
0858デフォルトの名無しさん
2008/01/16(水) 22:28:27>831 が何を言いたいかを理解できない奴には、それこそ構う価値はない。
たぶん、テンプレートがコンパイル時に評価されることを最近知ったボクチャンなんだろうね。
0859デフォルトの名無しさん
2008/01/18(金) 21:17:170860デフォルトの名無しさん
2008/01/18(金) 21:38:07ぜんぶ int。
0861デフォルトの名無しさん
2008/01/18(金) 21:49:11ぜんぶbyte。
0862デフォルトの名無しさん
2008/01/18(金) 22:54:070863デフォルトの名無しさん
2008/01/18(金) 22:58:02これならGCも不要。
0864デフォルトの名無しさん
2008/01/19(土) 00:42:28ほかに必要なのはS式な。
0865デフォルトの名無しさん
2008/01/19(土) 00:48:15・プログラマが誤解する余地が入らないようにする。
例) 静的な型、コンパイル時の警告など
・誤解するようなプログラマには利用できないようにする。
例) S式を導入する。
FuzzBuzz問題を解かせる。
4桁の数字と四則演算と括弧で10を作らせる。
0866デフォルトの名無しさん
2008/01/19(土) 08:25:43ワロタ
0867デフォルトの名無しさん
2008/01/19(土) 09:03:54を習得するまでパソコンの前で正座。
0868デフォルトの名無しさん
2008/01/19(土) 09:05:200869デフォルトの名無しさん
2008/01/19(土) 09:20:080870デフォルトの名無しさん
2008/01/19(土) 10:56:510871デフォルトの名無しさん
2008/01/19(土) 11:10:42lintはプログラム本体を入力として、末尾に暗号を用いた電子署名をappendする。
コンパイラはlintの署名のないプログラムは拒否する。
これだけで世の中のバグのかなりは防げるヨ
0872デフォルトの名無しさん
2008/01/19(土) 12:31:04デバッグの不可能なプログラムも存在しない
って、アニメで言ってたよ
0873デフォルトの名無しさん
2008/01/19(土) 12:56:39代わりにバグの定義から漏れる不具合、が出てくるだけ。
それをバグと言えなくするだけなら単なる言葉狩り。
0874デフォルトの名無しさん
2008/01/19(土) 13:03:26なんでそんな回りくどいことを??
役所でででもプログラム組んでるの?
lintをコンパイラに内蔵して、通らないとエラーにしちまえばいい話。
warningsもエラーにしろ、とかそういう話。
0875デフォルトの名無しさん
2008/01/19(土) 13:05:38lintが出すwarningとコンパイラが出すerrorの違い、わかってる?
0876デフォルトの名無しさん
2008/01/19(土) 13:33:43プログラムを組むからバグが出るんじゃないか
どんな言語仕様でもタコは思いも付かないようなことをしでかす
個人的には現状で最もバグが出にくいシステムを作りたいなら
馬鹿をシステム開発に参画させないことだ
今のシステム開発はメスも握ったことの無い素人に
盲腸の手術をさせているようなもの
手術ミスが少なくなる道具は必要だが、
まずは素人に手術をさせるという愚挙を行わせないことから手をつけるべきだと思う
0877デフォルトの名無しさん
2008/01/19(土) 13:43:12ぜひ解説してくれ
俺は、コンパイラのwarning(最大出力)もエラーと見なす派
0878デフォルトの名無しさん
2008/01/19(土) 14:39:30コンパイラの警告とlintの警告は別物だ
例えばC言語でコンパイラの警告を最大にしても
#include <stdio.h>
int main(void) {
printf("hoge");
return 0; }
は正常にコンパイルできるが、lintでは
#include <stdio.h>
int main(void) {
(void)printf("hoge");
return 0; }
としないと...
# あれ?Linuxのsplintだと警告が出ると思ったんだが...オプションが必要か?
警告が出るlintもある
また、printf("hoge");はprintf("hoge\n");と書きたかったバグかもしれないが
この類のバグはどんな言語仕様やツールを使っても検出できない
0879デフォルトの名無しさん
2008/01/19(土) 14:57:14言語仕様に合致しているが、その意味がプログラマの意図と合致していない可能性が比較的高いものに対してい
警告をするのがlintが出すwarning。
どんな言語でもその仕様に関心を払わないバカにかかれば
バグを出さずにはいられない。
0880デフォルトの名無しさん
2008/01/19(土) 17:41:26逆に言えば上のコードに警告出すコンパイラがあったっていいよな。
見たことないけどさ。
0881デフォルトの名無しさん
2008/01/19(土) 17:52:24lintのwarningが出る基準は、その言語を使用した経験から得られたノウハウ。
0882デフォルトの名無しさん
2008/01/19(土) 18:34:41http://www.logilab.org/card/pylintfeatures
Python の文法チェックには何を使う? lint はないの? - 傀儡師の館.Python - 楽天ブログ(Blog)
http://plaza.rakuten.co.jp/kugutsushi/diary/200711240000/
なるほどなー。
コンパイル時にチェックできないエラーとなりそうなものや、
変数の名付け方まで見てくれるのか。
0883デフォルトの名無しさん
2008/01/19(土) 19:11:00return main(); }
0884デフォルトの名無しさん
2008/01/19(土) 20:19:55・馬鹿には開発できない
・代入が存在しない
言語を使えばいいと思うが、そもそも上の利点はそのままバグになるからな。
世の中天才だけじゃないんだよ。
0885デフォルトの名無しさん
2008/01/20(日) 00:22:140886デフォルトの名無しさん
2008/01/20(日) 01:46:380887デフォルトの名無しさん
2008/01/20(日) 03:12:58それは仕様であってバグではありません。
0888デフォルトの名無しさん
2008/01/20(日) 03:23:12腐敗=なんだかよくわかんない内になんだかよくわかんないものに腐っちゃうこと
0889デフォルトの名無しさん
2008/01/20(日) 22:48:06実は、俺はまだ >>874 に対して >>875 以降のようなレスがついた理由を理解していない。
>>871 みたいに開発を厳格にしたいなら、
コンパイラとlintを一つのソフトウェアにまとめちゃえば手っ取り早いよな、というのは
特におかしくない意見だと思った。
# まー俺なら、出来合いのコンパイラやlintをいじるスキルなんてないから
# バッチファイルやシェルスクリプトで解決するだろうけど
んで、俺考えたんだけど、>>875 以降のレスの要点はつまり
「その一つにまとめたソフトウェアは『コンパイラ』とは呼べないよな」って事?
つまり >>874 が用いた「lintをコンパイラに内蔵」という表現は、言葉の定義上あり得ない事だと。
ならば納得だけど。
0890デフォルトの名無しさん
2008/01/20(日) 23:20:47lintの警告は正しいプログラムでも起こりうる、
そして、lintのエラーはgccならほぼ網羅している為、
gccもlintがエラーだったらエラーにしている
# gcc以外のコンパイラは良く分からん
lintの警告が正しいのか正しくないかを判断できるのは人間だ
> 「その一つにまとめたソフトウェアは『コンパイラ』とは呼べないよな」って事?
違う、それはもう既に実装されているし、今だってプリプロセッサ〜リンカまでの
一連の操作を「コンパイル」と呼んでいる。
そして、>>874が叩かれているのは
lintの警告とlintのエラーの区別が付かない馬鹿だからだ
ま、>>871の署名をしたとしても、せっかくlintが診断してくれた警告を無視して
本来はバグなのに、コンパイラに通すことは起こりうる
が、それはプログラマのモラルの問題であり、
それは言語仕様ではどうすることもできない。
0891デフォルトの名無しさん
2008/01/21(月) 02:56:18そういう場合は、コンパイル結果に「このコードはXXX個の警告を無視してコンパイルされました。
自己責任で実行してください」というダイアログを出す機能を追加すればよい。
0892デフォルトの名無しさん
2008/01/21(月) 02:59:07exe配布したりrpmやyumで実行環境作ってる初心者向けには
そういうシステムは必要かもしれないが
インストール時に必ずソースからコンパイルさせる習慣があれば
そんな心配はしなくて済むな
0893デフォルトの名無しさん
2008/01/21(月) 07:52:58lintの警告の数を数えても無駄だよ。
問題は内容だから。
で、>>890の言う通り、警告の妥当性は人間にしか判断できない。
それがlintのlintたる所以。
0894デフォルトの名無しさん
2008/01/22(火) 21:15:130895デフォルトの名無しさん
2008/01/22(火) 22:37:130896デフォルトの名無しさん
2008/01/22(火) 23:11:02カウボーイビバップ(リント)
ttp://ja.wikipedia.org/wiki/%E5%B1%B1%E5%8F%A3%E5%8B%9D%E5%B9%B3
女を庇って金貸しを殺してしまい賞金首になってしまった哀れなキャラです
最後は賞金稼ぎである主人公らの活躍によって捕まり警察に引き渡されます
0897デフォルトの名無しさん
2008/02/04(月) 22:35:260898デフォルトの名無しさん
2008/02/05(火) 00:58:05Pugsとかそういう規模のは知らんけど
0899デフォルトの名無しさん
2008/02/05(火) 09:23:33デバッグというか型整合が取れるまでのデバッグが長い。
0900デフォルトの名無しさん
2008/02/06(水) 20:32:350901デフォルトの名無しさん
2008/02/08(金) 16:44:35好きなように書いたらいいんじゃね。
0902デフォルトの名無しさん
2008/03/12(水) 22:52:51どっちかっつーと、バグを見つけやすい言語仕様(ライブラリ?開発環境?デバッグ環境?)の方を望む。
ここ最近はログ追っかけでのデバッグしかしてねーorz
0903デフォルトの名無しさん
2008/03/12(水) 23:36:41バグを埋め込みにくい環境(変数型とか)
埋め込んだとしても発見しやすい環境(assertとか)
0904デフォルトの名無しさん
2008/03/13(木) 20:19:580905デフォルトの名無しさん
2008/03/13(木) 22:05:50そもそも、どうやったって動かないのだから、バグは出なくなる。
意味は無さそうだが。
0906デフォルトの名無しさん
2008/03/13(木) 23:50:28理想としては自分でトレース用コードを埋め込んだりする必要が全然無くて
それでいて、欲しい情報を的確に吐いてくれるやつ。
デバッガでもいいんだけど、あれはあれで結構面倒くさいしね。
0907デフォルトの名無しさん
2008/03/14(金) 15:07:510908デフォルトの名無しさん
2008/03/14(金) 15:12:340909デフォルトの名無しさん
2008/03/15(土) 08:44:00プログラマなんだから、もう少し具体的に仕様定義しようよw
0910デフォルトの名無しさん
2008/03/15(土) 11:33:51あなたはこの作業に向いていません
っつーメッセージ出しときゃいい罠
0911デフォルトの名無しさん
2008/03/18(火) 20:39:050912デフォルトの名無しさん
2008/03/18(火) 21:13:18つーのができると、もうちょっとこのスレも盛り上がると思うんだ。
0913デフォルトの名無しさん
2008/03/18(火) 21:27:38PASCALとか、整数の範囲指定あったような気がする。
Modula-2だったかもしれん。
0914デフォルトの名無しさん
2008/03/18(火) 22:01:57pascal / delphi
0915デフォルトの名無しさん
2008/03/19(水) 23:34:54範囲外れたら実行時例外、なんてのは、数値型をサブクラス化できれば済む話。
0916デフォルトの名無しさん
2008/03/20(木) 04:19:15こんなの実行時検査しかしようがないと思うが、
>>915は何を期待しているんだろう・・・
0917デフォルトの名無しさん
2008/03/20(木) 05:33:530918デフォルトの名無しさん
2008/03/20(木) 09:10:030919デフォルトの名無しさん
2008/03/20(木) 09:39:10どこのJVM
0920デフォルトの名無しさん
2008/03/20(木) 14:29:07char = -128...127
short = -32768...32767
int = -2147483648...2147483647
0921デフォルトの名無しさん
2008/03/20(木) 15:17:26残念ながら規格の範囲は-127〜127だ。
0922デフォルトの名無しさん
2008/03/20(木) 15:50:39おまいが挙げた範囲は特定の処理系での話な。
0923デフォルトの名無しさん
2008/03/20(木) 15:52:100924デフォルトの名無しさん
2008/03/20(木) 16:01:240925デフォルトの名無しさん
2008/03/20(木) 16:03:480926デフォルトの名無しさん
2008/03/21(金) 00:45:46>>916
静的保証がないならライブラリで実現できるから、言語仕様と言うほどのモノじゃないと言うことだろう。
0927デフォルトの名無しさん
2008/03/21(金) 00:48:010928デフォルトの名無しさん
2008/03/21(金) 01:24:540929デフォルトの名無しさん
2008/03/21(金) 01:40:020930デフォルトの名無しさん
2008/03/21(金) 04:19:43言語とライブラリが結びついてるなんてザラってかどっかにエンジンとのグルーコードかかないと何も出来ないだろ
0931デフォルトの名無しさん
2008/03/21(金) 08:01:440932デフォルトの名無しさん
2008/03/21(金) 08:05:570933デフォルトの名無しさん
2008/03/22(土) 03:30:21だから、実行時検査ならコンパイラなんていじらずにクラス定義で十分だって話だろ。
0934デフォルトの名無しさん
2008/03/22(土) 06:58:33そんなこといちいちオブジェクトでやってたら無駄以外の何者でもないがな。
0935デフォルトの名無しさん
2008/03/22(土) 13:38:530936デフォルトの名無しさん
2008/03/22(土) 13:45:24>>935
クラスだとオーバーヘッドが大きいけど、現在の組み込み型では不足するような機能を新たな組み込み型として定義できるということだよ。
例えばC++0xのenumクラスとか。
0937デフォルトの名無しさん
2008/03/22(土) 14:26:53コンパイラがやったところで変らんだろ。
組込みだろうがライブラリだろうが、実行時にチェックするんだから変らん。
0938デフォルトの名無しさん
2008/03/22(土) 16:35:16お前ら少しは他のパラダイムの言語を勉強しろよpgr
0939デフォルトの名無しさん
2008/03/22(土) 16:41:560940デフォルトの名無しさん
2008/03/22(土) 17:40:010941デフォルトの名無しさん
2008/03/22(土) 18:05:09へぇ。じゃあ、賢い君が説明してよ。
範囲チェックの仕組みをライブラリでやるのとコンパイラがやるのとで、
何がどんだけ違うのか。++限定の話は++限定と明示してお願いね。
0942デフォルトの名無しさん
2008/03/22(土) 18:21:47当然だが演算結果の範囲を指定することになる。
コンパイラが整数型の変数の値の範囲を限定する時には
演算結果ではなく、その変数への代入される値の範囲を指定することになる。
この違い、わかるよな?
0943デフォルトの名無しさん
2008/03/22(土) 18:34:290944デフォルトの名無しさん
2008/03/22(土) 18:59:58代入演算子のオーバーロードとの違いを教えてくれないか?
0945デフォルトの名無しさん
2008/03/22(土) 19:08:33具体的にどの言語の話だ?
0946デフォルトの名無しさん
2008/03/22(土) 19:37:31任せるよ。あんま突飛な例でなければ。
0947デフォルトの名無しさん
2008/03/22(土) 19:41:12マシン語レベルで差がでるって言ってるのか?
0948デフォルトの名無しさん
2008/03/22(土) 23:16:350949デフォルトの名無しさん
2008/03/22(土) 23:34:33a=b+c+d+e+f;
てな式があったときに+演算子オーバーロードなら4回、値の範囲の判定が必要だけど組み込み型なら1回ですむ。
という主張なのかなぁ
0950デフォルトの名無しさん
2008/03/22(土) 23:53:150951デフォルトの名無しさん
2008/03/23(日) 01:06:14ところで、XML Schemaには、型の拡張(extension)と、型の制限(restriction)がある。
プログラミング言語でもこれを取り入れるのはいい気がする。
0952デフォルトの名無しさん
2008/03/23(日) 01:06:570953デフォルトの名無しさん
2008/03/23(日) 01:14:11意味を成さないデタラメという意味の空想は対象外。
0954デフォルトの名無しさん
2008/03/23(日) 02:11:36D言語(MSのじゃなくて)
0955デフォルトの名無しさん
2008/03/24(月) 03:16:15型の属性やアノテーションに特別な種類を用意して、
元の型からはダウンキャスト必須にして、
キャストの演算子オーバーロードを用意させる、って方が良い気がする。
int@odd o = (odd)13;
int n = o;//OK
int@odd p = n;//コンパイルエラー
int@odd q = (odd)n;//OK
int@odd r = (odd)24;//実行時エラー
annotation odd restricts int {
operator int(n) {
if (n%2==0) {
throw TypeCastError("%d is not odd number.", n);
}
return n;
}
}
0956デフォルトの名無しさん
2008/03/24(月) 03:44:25書くエンジニアにとっては理解が分かれるけど,本質的には全く変わらない
0957デフォルトの名無しさん
2008/03/24(月) 03:55:22さらにパラメタに変数を使用可能。
double@MKS(0,0,1) time = (double@MKS(0,0,1)) 100.0;
double@MKS(1,0,-1) speed = (double@MKS(1,0,-1)) 10.0;
double@MKS(0,0,1) distanse = 100.0 * 10.0;//コンパイルエラー
double@MKS(0,0,1) distanse = time * speed;//コンパイルエラー
double@MKS(1,0,0) distanse = time * speed;//OK
double@MKS(1,0,-2) velocity = 眠いから略
annotation MKS(int m, int k, int s) restricts double {
operator *(double@(m, k, s) other) {
return (double@(this.m+m, this.k+k, this.s+s)) (this * other);
}
operator /(double@(m, k, s) other) {
return (double@(this.m-m, this.k-k, this.s-s)) (this / other);
}
}
0958デフォルトの名無しさん
2008/03/24(月) 04:01:39いや、代入演算子だと、関数に渡すパラメタのチェックができない。キャストならできる。
ついでに、パラメタまで儲けて、>>957みたいな事も出来る。
0959デフォルトの名無しさん
2008/03/24(月) 06:18:33そしてやっぱり違いがわからない
0960デフォルトの名無しさん
2008/03/24(月) 14:22:03Haskellで型パラメタに型じゃなくて値を取るなんてできたっけ?
違いがわからんというのは何と何の違い?
0961デフォルトの名無しさん
2008/03/24(月) 14:29:00本題は型の実体に対する制約だろ?
0962デフォルトの名無しさん
2008/03/24(月) 14:58:17Haskellの型パラメタに、型じゃなくて値を使える?例を示してみてよ。
0963デフォルトの名無しさん
2008/03/25(火) 00:14:35kwsk
0964デフォルトの名無しさん
2008/03/25(火) 07:48:440965デフォルトの名無しさん
2008/03/25(火) 23:22:080966デフォルトの名無しさん
2008/07/06(日) 01:23:21コンパイルでほとんどの単純バグは弾かれるし、
おまけに、アホにはコードが書けないので◎。
0967デフォルトの名無しさん
2008/07/06(日) 04:36:19と
何度言ったら分かるのかな?
おじちゃんわからないよ
0968デフォルトの名無しさん
2008/07/06(日) 09:26:260969デフォルトの名無しさん
2008/07/06(日) 10:21:58かなり単体テストがんばらないと使いものにならない。
0970デフォルトの名無しさん
2008/07/06(日) 11:30:02そうなのか…単体テストで頑張るのか…ちょっと興味があって調べて見たけど
Bug がどこに潜んでいるか検出するとして、
1. コンパイラが頑張る
http://d.hatena.ne.jp/nekora/20080405
2. テストカバレッジで頑張る
http://d.hatena.ne.jp/higayasuo/20080404/1207295959
静的型付け言語 と 動的型付け言語で
アプローチの仕方が変わってて、結局
rails テストカバレッジ
http://d.hatena.ne.jp/zariganitosh/20080306/1204791789
Ruby 型推論
http://rubykaigi.tdiary.net/20080626.html#p07
経験則の占める割合を見積もると、
http://d.hatena.ne.jp/ku-ma-me/20080623
http://blog.livedoor.jp/lisper/archives/cat_387238.html?p=2
文芸的プログラミングとか、凄く初等的な(古典的な?)方法に
行きつくとか、そんな落ちが待ってるような…むぅ。もうちょっと調べる
0971デフォルトの名無しさん
2008/07/06(日) 12:20:010972デフォルトの名無しさん
2008/09/06(土) 05:15:08注意すべき点がマジックナンバー7±2 を超えて、プログラマの脳内から
溢れるために、バグは起こるのだ。
それは脳の仕様なので、プログラマが注意することで避けることはできない。
対策は、コード行数を減らすことだ。
0973デフォルトの名無しさん
2008/09/06(土) 05:35:52そういう人はコーディングしないのが一番ってことだね♪
0974デフォルトの名無しさん
2008/09/06(土) 05:37:20ほらそんなに書くから頭バグっちゃってるじゃない・・・///
0975デフォルトの名無しさん
2008/09/06(土) 07:24:05根本的な問題点である。
0976デフォルトの名無しさん
2008/09/06(土) 09:11:270977デフォルトの名無しさん
2008/09/06(土) 17:48:40第一に、Perl のソースコードは他の言語より行数が少ない。
第二に、行数が少ないことの利点を理解しない大多数のプログラマは
Perl のソースコードを書けない。
0978デフォルトの名無しさん
2008/09/07(日) 16:07:090979デフォルトの名無しさん
2008/09/08(月) 04:35:510980デフォルトの名無しさん
2008/09/10(水) 23:32:22バグの出にくい言語仕様を考える上で避けて通れないような気もする。
0981デフォルトの名無しさん
2008/09/12(金) 06:59:53レス数が950を超えています。1000を超えると書き込みができなくなります。