関数呼出しはgoto文である

0001デフォルトの名無しさん2009/01/24(土) 07:30:08
関数fがあったからfを読んでみたらfのなかに関数gがあった。
gを読んでみたら関数hがあった。
これはgoto文だと思った。

しかし、関数に切り出すのは構造化プログラミングだと言われている。
gotoがダメだから構造化プログラミングにパラダイムシフトしたのに
所詮はgotoなのである。
0002デフォルトの名無しさん2009/01/24(土) 08:12:47
余裕で2get!
0003デフォルトの名無しさん2009/01/24(土) 08:20:34
俺なんて歯磨きながら余裕の3get!
0004デフォルトの名無しさん2009/01/24(土) 08:24:58
仕方ないから4get
0005デフォルトの名無しさん2009/01/24(土) 08:47:36
2get
これはどう見てもおかしいだろ。 まず、主語が2。で動詞がget。
2が単数形だとしたら、getsにしないとおかしい上に、目的語がない。
直訳すると「2が得る」 何を得るんだよ!!!いいかげんにしろ。
それを言うなら
I get 2. だろ。しかも現在形だし。 過去形、いや現在完了形ぐらいまともに使ってくれよ。
I've got 2. 少しはましになって来たが、まだ気に入らない。その2だ。
いったいお前は何を手に入れたんだ?2という数字か? 違うだろ、手に入れたのは2番目のレスだろ。
どうも日本人は数詞と序数詞の区別がよく分かっていない節がある。
これらを踏まえて、正しくは
I've got the second responce of this thread.
ここでtheにも注目してもらいたい。このスレの2ってのは 特定の、このレスだけなんだから。だからaでも無冠詞でも なく、the second responceなんだ。
もう一度おさらいしてやる。

I've got the second responce of this thread.
0006デフォルトの名無しさん2009/01/24(土) 08:50:24
関数呼び出しは jmp じゃなくて call だぞ
0007デフォルトの名無しさん2009/01/24(土) 08:53:47
関数呼び出しは goto じゃなくて gosub だぞ
0008デフォルトの名無しさん2009/01/24(土) 09:04:41
関数呼び出しは jmp じゃなくて bsr だぞ
0009デフォルトの名無しさん2009/01/24(土) 09:08:56
>>5
responce じゃなくて post だろう。普通は。
0010デフォルトの名無しさん2009/01/24(土) 09:50:41
関数呼び出しは暗黙の引数として継続を渡すgotoである。

ところで、構造化プログラミングってのは、
選択(ifブロック)とか繰り返しとか、gotoで行う制御を抽象化することであって、
サブルーチンに切り出すってのは構造化と違うと思うんだが...
0011あぼーんあぼーん
あぼーん
0012デフォルトの名無しさん2009/01/24(土) 12:00:11
そもそも言語を特定せずに、goto文がどうこう言い出す>>1の無能さがあまりに悲しい。
0013デフォルトの名無しさん2009/01/24(土) 12:28:18
というか、gotoだったら戻ってこねえよ
0014デフォルトの名無しさん2009/01/24(土) 13:35:17
gotoに何があったんだ?
itoは大丈夫なんだろうな?
0015デフォルトの名無しさん2009/01/24(土) 13:43:57
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
0016デフォルトの名無しさん2009/01/24(土) 15:59:41
>>1 を翻訳してあげよう。

 goto文を使うと、スパゲッティ・プログラムになる。だから先人はgotoを禁止した。
 でも、goto文を 使わずに スパゲッティ・プログラムを書く方法はいくらでもあるぜ。
 構造化スパゲッティ、オブジョクト指向スパゲッティ!

そゆことだろ?
0017デフォルトの名無しさん2009/01/24(土) 18:25:15
>>1
その場合のプログラムの読み方としてはh,g,fの順番で読めばいいんじゃないでしょうか
0018デフォルトの名無しさん2009/01/24(土) 18:34:03
>>17
またお前だ
0019デフォルトの名無しさん2009/01/24(土) 18:42:23
N88BASIC
0020デフォルトの名無しさん2009/01/24(土) 22:27:16
ifとgotoさえあればあらゆる制御構造は書けるからな
それ以外の実行順序を制御する仕組みは全部ifgotoのシンタックスシュガーに過ぎない
0021デフォルトの名無しさん2009/01/24(土) 22:41:16
関数型言語にも触れてから言ってもらいたいものだな。

後藤さんはそのためにいるんじゃないんだけど、やってくれるからってやらせていいというわけではないんだよ。
ちょっとした例外処理にまわってもらうんだよ。
多重ネストから抜けるのは、邪道過ぎる。そもそもその構造をどうにかして使わずに済ませろ。
0022デフォルトの名無しさん2009/01/24(土) 23:37:45
関数化するのが面倒な処理もあるから仕方が無い
0023デフォルトの名無しさん2009/01/25(日) 00:35:41
おまえら何十年前の人間だよw
0024デフォルトの名無しさん2009/01/25(日) 01:27:36
0025デフォルトの名無しさん2009/01/25(日) 07:22:10
戻る箇所を隠された引数に指定するGOTOであることは真
0026デフォルトの名無しさん2009/01/25(日) 11:40:38
多重ネストから抜けるにはgoto使うのは当たり前じゃない?
for(;;)
{
for(;;)
{
〜〜〜
if(〜){break};
}
〜〜〜
if(〜){break);
}
のようにif文を2回も書かないとダメじゃん。

for(;;)
{
for(;;)
{
〜〜〜
if(〜){goto A};
}
〜〜〜
}

A:
のほうがきれいじゃん
0027デフォルトの名無しさん2009/01/25(日) 14:04:03
C言語の話をしてるという前提で言うけど、
>>26のような妥当なgotoの使い方じゃなくて、
普通は関数化するところもgotoでやろうって話だよな?
0028デフォルトの名無しさん2009/01/25(日) 14:45:23
>>1が抽象化をコードから読み取れないか、
>>1が読んだコードが、関数へのくくりだしがきれいな抽象化になっていなかったか、の
どちらかだと思われる。
0029デフォルトの名無しさん2009/01/25(日) 18:01:36
関数呼び出しの全てが goto で出来てたら、クラックしづらそうと思う
0030デフォルトの名無しさん2009/01/25(日) 18:18:38
#include <stdio.h>

int main(void)
{
 int add_caller;
 int add_ret;
 int add_a;
 int add_b;

 goto BEGIN;

ADD:
 add_ret = add_a + add_b;

 switch (add_caller) {
 case 0: goto ADD_COLLER0;
 default: goto ERROR;
 }

BEGIN:
 add_a = 1;
 add_b = 2;
 add_caller = 0;
 goto ADD;
ADD_COLLER0:
 printf("%d+%d=%d\n", add_a, add_b, add_ret);

 return 0;

ERROR:
 return 1;
}
0031デフォルトの名無しさん2009/01/25(日) 18:50:08
こらー?
0032デフォルトの名無しさん2009/01/25(日) 18:54:14
呼び出している人 = caller
呼び出されている人 = callee
0033デフォルトの名無しさん2009/01/25(日) 19:21:24
>>29
コンパイル後は関数呼び出しもgotoもほとんど同じようなもんだろバーローww
0034デフォルトの名無しさん2009/01/25(日) 19:22:54
call と jmp の違いは・・・小さいか。
0035デフォルトの名無しさん2009/01/25(日) 20:32:37
goto heaven
0036デフォルトの名無しさん2009/01/25(日) 21:13:41
わたしはメイド♪
あなたのメイド♪

あとわすれた
0037デフォルトの名無しさん2009/01/25(日) 21:32:53
まあ、関数にバラしてても全部グローバルスコープの変数使ってりゃgotoだわなw
今だにそんなソース見掛けるから怖いよ
0038デフォルトの名無しさん2009/01/25(日) 21:36:43
トイレキッチンオフロニベランダ〜 イェーイ
曲名なんだっけ
0039デフォルトの名無しさん2009/01/25(日) 21:43:21
>>34
そういう言う意味だと ret も同じだよね。ぶっちゃっけ jmp だけあればいいw
ということは「関数から戻ることはgoto文である」ということにもなり...

あれ、普通の言語のgotoって、関数の外に飛べるっけ?
さいきんアセンブラしかつかってないからわかんないやw
0040デフォルトの名無しさん2009/01/25(日) 21:55:08
>>39
Cは大域ジャンプしない限りは関数内だけだったと思う。
0041デフォルトの名無しさん2009/01/25(日) 21:57:10
>>38
メイドさんロックンロール
0042デフォルトの名無しさん2009/01/25(日) 21:58:15
intel CPU 的には call と jmp はセグメントを越えた際のメモリ保護の挙動が違う。
0043デフォルトの名無しさん2009/01/25(日) 22:06:30
ラベルを変数に入れられないのがCの甘い所だよなあ。
0044デフォルトの名無しさん2009/01/26(月) 00:15:30
for (int i = 0; i < 10; i++) {
switch (i) {
case 0:
  うんこ
  break;
case 1:
  しっこ
  break;
case 2:
  まんこ
  break;
case 3:
  ちんこ
  break;
以下省略
}
}

0045デフォルトの名無しさん2009/01/26(月) 01:00:51
そういえば某国立大学の三つ編み眼鏡っこの先生が継続だけで
関数コールとgotoの代りをさせるCの方言を作ってたな
0046,,・´∀`・,,)っ-●◎○ ◆NotanpeTw6 2009/01/26(月) 01:26:37
論文読んだことある。これだろ?
http://www.ie.u-ryukyu.ac.jp/~kono/papers/kono/2008/akira-vld.pdf
0047デフォルトの名無しさん2009/01/26(月) 03:19:37
琉球大レベル高いなあ…
0048自作自演 ◆Jz9y3GJYBc 2009/01/26(月) 09:52:32
自作自演がばれてるんですけど、何ででしょうか?
このスレを立てたのは僕で、>>17も僕なんですが。

あともうひとつの僕の立てたスレでも自作自演がばれてます。
http://pc11.2ch.net/test/read.cgi/tech/1232851820/l50
>>8-9です。

またお前だと2回も言われていることからあきらかです。
よろしくお願いいたします。
0049自作自演 ◆Jz9y3GJYBc 2009/01/26(月) 10:10:22
あと、僕はADSLですのでグローバルIPは毎回変わります。

ちなみに自作自演は表現の自由として憲法で認められた権利であると
解釈しております。
0050デフォルトの名無しさん2009/01/26(月) 11:14:06
>>39-40
Cは関数ごとにスタックフレームの構造が違うかもしれないから、
一般には飛べない。
GCCのlavel as valueという言語拡張を使ってラベルをポインタにすると飛べるけど、
何が起こるかわからないw
0051デフォルトの名無しさん2009/01/26(月) 15:07:47
スタックフレームの構造とgotoで飛ぶのと、どんな関係があるんだ?
0052デフォルトの名無しさん2009/01/26(月) 20:09:08
大域ジャンプはその時点のスナップショットを残しておいて後で引き出して戻ってくる。
っていう動作だから、スタックも保存するかもしれない。
0053デフォルトの名無しさん2009/01/26(月) 20:48:59
>>50
スタックフレームに関わらず飛ぶ仕様でいいんじゃないか?
goto, gosubしかない時代のbasicでもサブルーチンから別のサブルーチンにジャンプすると言うトリックは存在してたんだし。
# 勿論、ジャンプ先を間違えてメイン側からサブルーチンに飛び込むと大変なことになるわけで。
0054デフォルトの名無しさん2009/01/26(月) 21:00:18
むかしのコンピュータの話で恐縮だが
スタックが無いプロセッサも存在した。
サブルーチンなど行って戻ってくる必要のある場合
CALL unko,R1
みたいに、呼び出し元のアドレスをレジスタ(この例の場合は R1)
に保存してからジャンプする。
戻るときは単にレジスタR1をプログラムカウンタに代入するだけ。
スタックとサブルーチンコールは、カレーと福神漬けのように
相性が良いってだけで、カレー・イコール・福神漬け、では無いよ。
0055デフォルトの名無しさん2009/01/26(月) 22:28:37
>>54
>CALL unko,R1

ってゆうかこれってアセンブラレベルの話では。

>スタックとサブルーチンコールは、カレーと福神漬けのように
>相性が良いってだけで、カレー・イコール・福神漬け、では無いよ。

そのプラットフォームでは高級言語の呼び出し規約はどうなっていたんでしょうか。
その話によるとスタック的なデータ構造は使っていないということですね?
0056デフォルトの名無しさん2009/01/27(火) 02:18:25
つまり、その環境で高級言語が使ってた手法が一般的になったって事じゃねーの?
0057デフォルトの名無しさん2009/01/27(火) 06:45:18
>>55 このスレ、
ずーーと、アセンブラレベルの話のようだが。
0058デフォルトの名無しさん2009/01/27(火) 10:12:05
関数呼出しってgoto2回使用と同じ効果ですか?
行って戻ってくるみたいな。
0059デフォルトの名無しさん2009/01/27(火) 10:34:26
>>58
行きは、現在の場所を記憶しておく。
帰りは、行きに記憶しておいた場所に戻る。
それ以外は、只のジャンプと同等。
但し、関数にローカルなオブジェクトがある場合はスタックフレーム形成などの処理も入る。
0060デフォルトの名無しさん2009/01/27(火) 11:10:54
>>59
>行きは、現在の場所を記憶しておく。
>帰りは、行きに記憶しておいた場所に戻る。
>それ以外は、只のジャンプと同等。

どうやって「現在の場所」を記憶しておくかは気にしないのか?
0061デフォルトの名無しさん2009/01/27(火) 11:16:27
>>60
別にどうやって記憶してもいいよ。一般的にはスタックを使うだろうけどね。
世の中にはスタックを使わずにレジスタウィンドウだけで済ませる場合もあるし。
0062デフォルトの名無しさん2009/01/27(火) 13:11:41
世の中には(ハードウェア)スタックなんか無いと言うマシンも
昔、存在したしね。どこぞのシステム360とか言うマシンだが。
0063デフォルトの名無しさん2009/01/27(火) 13:33:46
ていうか、スタックポインタがあたりまえのように存在するのは、
マイクロコンピュータ以後のアーキテクチャ。

それ以前のマシンでは、リターンアドレスやレジスタの保存とか、
ローカル変数のワークエリアとかは、ソフトウェアで管理しなきゃ
いけなかった。
0064デフォルトの名無しさん2009/01/27(火) 16:00:31
>>63
DECやバロースのマシンも思い出してあげてください。
0065デフォルトの名無しさん2009/01/27(火) 18:18:56
どっちにしてもネイティブコードだとただその処理が続けて書かれてるだけじゃなかったっけ?
何の論議してるん?
0066デフォルトの名無しさん2009/01/27(火) 19:31:18
>>65
>何の論議してる
のか理解してから口を挟んだ方が
恥をかかなくて済みますよ。
0067デフォルトの名無しさん2009/01/27(火) 19:52:28
>>61
>別にどうやって記憶してもいいよ。

記憶方法はどうでもいいんだけど、要は関数呼び出しの場合は
呼び出しの履歴を記憶しておくのが重要なわけでしょう。
その点を考慮すると、関数呼び出しと只のジャンプをほとんど同じと言うのは
どうなのかと。
その他ローカル変数やら各種レジスタの処理やら...


と思ったけど、逆に関数呼び出しはgoto文であるという話を貫くのも悪くないかもw
その場合、次スレには「スレッドはgoto文である」とかが見えてきます。

さらに続編で「プロセスはgoto文である」「OSはgoto文である」などもよろしければ...
0068デフォルトの名無しさん2009/01/28(水) 09:05:28
・例外呼び出しは goto 文である
・ファイバーは goto 文である
0069デフォルトの名無しさん2009/01/28(水) 10:19:17
ノイマンマシンは、全ての命令に「goto次の命令」がついていると言える。
(パラレルアーキテクチャのゼミの先生は違うこと言ってたな)
0070デフォルトの名無しさん2009/01/28(水) 11:22:00
プログラムって全部gotoじゃん
int unko;
unko=3;

これだって一行目から二行目にgotoしてるじゃん
0071デフォルトの名無しさん2009/01/28(水) 11:32:56
  ↑
おまいは小学生か!
0072デフォルトの名無しさん2009/01/28(水) 16:25:18
プログラムが上から下に流れていくのは仕様だろ?
不満なら下から上に解釈していく言語でも作ってくれ。
0073デフォルトの名無しさん2009/01/28(水) 16:37:52
>>70 >>72
逐次処理系言語はポピュラーではありますが
それがすべてではないですよ。
0074デフォルトの名無しさん2009/01/28(水) 18:07:29
呼び出しつってんだから、関数の方に来て貰ってんじゃないの。呼んだおまえが行くなよって感じ。
0075デフォルトの名無しさん2009/01/29(木) 01:25:35
goto は pc の書き換えである。
フェッチすると pc が書き換わる。
故にフェッチはgotoである。
0076デフォルトの名無しさん2009/01/29(木) 03:06:23
ある物体AとBが近づいているとすると
Aから見ればBを呼び出しているのかもしれないが
第三者のCから見ればBはAにgotoしてるように見えるかもしれない。
Dから見ればAがBにgotoしているのかもしれない。
Bから見ればAがこっちに向かってきてるように見えるかもしれない。
世の中って相対的なんだよね。
絶対的なものは光速だけでしょ。
プログラミングの世界ではまだニュートン力学から抜け出せないの?(笑
0077デフォルトの名無しさん2009/01/29(木) 03:10:29
call文をgoto文で置き換えてどうやって再帰呼び出しを実現するのか教えてもらおうかw
0078デフォルトの名無しさん2009/01/29(木) 03:15:21
例えば2項間漸化式をリカーシブコールではなくリカーシブgotoでもとめるなら
初項までgotoで進んで、それからgotoで戻ってくればいいんじゃないのかな。
0079デフォルトの名無しさん2009/01/29(木) 08:33:10
fact(n) = if n < 1 then 0 else n * fact(n-1)
これをgotoにばらすと
main: rin = 5; goto fact; // routに結果
fact: n = rin; if n < 1 then goto L0 else goto L1;
L0: rout = 1; goto L2;
L1: rin = n - 1; goto fact; rout = rout * n;
L2: goto XXX;
それで(1)XXXをどうやって正しい行き先にするの?(2)変数nを
どうやって覚えておくの?自分で全部スタック管理する?
continuation passiong styleに書き直す?
0080デフォルトの名無しさん2009/01/29(木) 09:40:50
>>79
つ[末尾再帰]
0081デフォルトの名無しさん2009/01/29(木) 10:08:19
>>79
末尾再帰をしらなくて cps という言葉を知ってるというのは何かおかしい
0082デフォルトの名無しさん2009/01/29(木) 10:42:12
>65
大昔から大抵のCPUに機械語(マシン語)レベルで
CALL(サブルーチン呼び出し)命令があります。

しかしハードウェアでスタック・ポインターを持っているとは限らない、
異なる方法で実現している場合もある(有った)と言う事です。

サブルーチン・コールや関数呼び出しをハードウェアの支援なしに
全部ソフトウェア(goto命令等)で実現したとしたら効率悪い上に
アセンブリ語レベルでものすごく読み難くなるでしょう。
0083822009/01/29(木) 11:15:24
call命令に対応する機械語はjmp命令ですな。
機械語に(普通)goto命令なんて有りませんね。

失敬失敬!
0084デフォルトの名無しさん2009/01/29(木) 11:17:36
「呼ぶ」と「行く」は主観的な言葉だよね。
その人から見ればってことだから。
客観的に見れば、呼ぶも行くも「近づいていってくっつく」
という言葉に置き換えることが出来るよね。
0085デフォルトの名無しさん2009/01/29(木) 11:28:39
>80
「あらゆる再帰呼び出しはすべて末尾再帰に書き直せるんですか?」
と小一時間問いつめたいw。

多重再帰なんかはどうするの?
そんなもの使うなと言うのは無しねw。
0086デフォルトの名無しさん2009/01/29(木) 11:39:23
>>85
>「あらゆる再帰呼び出しはすべて末尾再帰に書き直せるんですか?」
末尾再帰の意味を知ってたら、そんな間抜けなことイワンの馬鹿。
0087デフォルトの名無しさん2009/01/29(木) 11:48:01
>86
それで、出来るの?出来ないの?
0088デフォルトの名無しさん2009/01/29(木) 12:27:22
>86
Shiro Kawaiさんの書いている
「なんでも継続」でも読んで良く考えてみてね。

再帰呼び出しをするのはScheme等の
関数型言語だけじゃないよ。

C言語でも普通に行われている。
0089デフォルトの名無しさん2009/01/29(木) 12:30:32
>>88
???
なんでそんな当たり前の話を得意げにしてんの???
0090デフォルトの名無しさん2009/01/29(木) 12:36:52
>89
人によっては当たり前の事じゃなさそうだから。
0091デフォルトの名無しさん2009/01/29(木) 13:12:36
>>79

>>1 を100回読め
0092デフォルトの名無しさん2009/01/29(木) 20:27:36
>>77
つ 継続渡し
0093デフォルトの名無しさん2009/01/31(土) 13:13:46
継続渡しに書き換える必要があるということは「関数とはgoto」
だけでは済まないということを意味していると思えるけどね。
0094デフォルトの名無しさん2009/02/01(日) 13:17:24
push offset hoge
jmp sub
hoge:
0095デフォルトの名無しさん2009/02/01(日) 17:19:04
 move pc+xxx, reg1
 jump unko
  :
  :
unko:
 move reg1,pc
0096デフォルトの名無しさん2009/02/01(日) 23:02:09
>>10くらいしかまともなのがいないけど
関数は順次を抽象化する意味だと思うのでgotoとは意味が違うとおもう。
0097デフォルトの名無しさん2009/02/02(月) 05:47:55
そんなことは承知の上でネタ話しているんじゃないの?
0098デフォルトの名無しさん2009/02/02(月) 13:28:58
>96
サブルーチンとして繰り返し呼び出される機能を切り出してまとめるのは
構造化プログラミングの重要な要素だと思うけどね。

>10やあなたの言う「関数」は純粋関数型で言う「関数」じゃなくて
むしろ副作用に主要な目的がある事が多いC言語などで言う「関数」
の事だよね? つまりはサブルーチン。

私には、むしろ >10がネタ振ってるように思える。
0099デフォルトの名無しさん2009/02/02(月) 13:56:08
>繰り返し呼び出される機能を切り出してまとめる
てのは構造化以前からあるイディオムだけどな。
0100デフォルトの名無しさん2009/02/02(月) 14:11:50
>99
構造化以前からあったとしても(実際あるけど)「構造化プログラミング」の
重要な要素としてダイクストラが唱導してるんだからそれで良いじゃん。
0101デフォルトの名無しさん2009/02/02(月) 20:16:14
>>100
> 「構造化プログラミング」の重要な要素としてダイクストラが唱導してる

ソース
0102デフォルトの名無しさん2009/02/03(火) 00:29:51
例のconsidered harmful論文にはそんなこと書いてなかったと思う
0103デフォルトの名無しさん2009/02/03(火) 12:26:20
論文てかletterね
0104デフォルトの名無しさん2009/05/13(水) 09:11:39
>>45
三つ編み眼鏡っ娘の先生というのが気になってしかたないのですが…
どこかに画像ありますか?
0105デフォルトの名無しさん2009/05/14(木) 12:49:53
そっちに興味もったのかw
0106デフォルトの名無しさん2009/09/09(水) 23:03:25
>関数fがあったからfを読んでみたらfのなかに関数gがあった。

関数の中に関数を定義できるのか?
少なくともCではないな。
0107デフォルトの名無しさん2009/09/10(木) 02:09:16
はぁ?
0108デフォルトの名無しさん2009/09/11(金) 15:50:33
>>106
頭の暖かい連中が gcc に実装してる。
0109,,・´∀`・,,)っ-○○○2009/09/11(金) 22:29:21
C++だったら余裕

int main(void) {
  class Hoge {
    void operator () (int n) { /* ほげほげ */}
  };
  ...
}


Cでも配列の中にマシンコード直打ちすればあるいは・・・
0110デフォルトの名無しさん2009/09/26(土) 21:26:23
余裕で110get!
01111112009/09/26(土) 23:25:22
このスレッドは110を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
0112デフォルトの名無しさん2009/09/26(土) 23:59:33
Pascalも関数内に関数定義できた気が。
そんな狭いスコープの関数で何がうれしいのか俺にはよくわからんが。
0113デフォルトの名無しさん2009/09/27(日) 09:48:38
↑↑↑↑↑↑
おかわいさうに
0114デフォルトの名無しさん2009/09/28(月) 09:13:06
局所変数が嬉しいのとほぼ同等の理由。
0115デフォルトの名無しさん2009/09/28(月) 15:04:42
使い捨てみたいなその場限りの用途なのに
いちいち関数の名前を考えるのがメンドウやろ
0116デフォルトの名無しさん2009/09/28(月) 15:25:06
lambdaですね、わかります
0117デフォルトの名無しさん2009/09/28(月) 20:24:15
使い捨てなら関数化するなよって気が。
俺にはよくわからんが。
0118デフォルトの名無しさん2009/09/28(月) 23:36:06
人間がいちいち入力するのでなくて、関数を自動生成して
それを使い捨てするという用途なら有り得るな。
0119デフォルトの名無しさん2009/09/29(火) 02:20:08
使い捨ての関数なんて、関数型プログラミングをやれば、いくらでも
使うものだということがわかる。
0120デフォルトの名無しさん2009/09/29(火) 11:40:42
>>119
喩えは悪いけど、関数を無名で作りたいってのはforループに一一名前をつけるのが面倒ってのと同じようなレベル?
0121デフォルトの名無しさん2009/09/29(火) 12:04:01
かなり的確なたとえだと思う。
0122デフォルトの名無しさん2009/09/29(火) 19:08:01
つ[コールバック関数]
0123デフォルトの名無しさん2009/09/29(火) 19:38:22
同じようなテンポラリ関数をたくさん作る必要があるときに命名が面倒くさいんだよね。
例えば長さを返す関数が複数あったとして

len1() {}
len2() {}
len3() {}
len4() {}

みたいな。
0124デフォルトの名無しさん2009/09/29(火) 20:49:53
ヘタに名前を付けちゃうとコードの再利用がしにくい。
もっとも、コピペコーディングの温床になる両刃の剣だが
0125デフォルトの名無しさん2010/12/05(日) 19:23:22
非同期プログラムはgotoと同じくらい読みにくいけど現代では使用を避けられない
0126デフォルトの名無しさん2010/12/05(日) 19:41:44
名前の無い関数は、いわゆる関数ではなく、1まとまりの手続きでなのであーる。
0127デフォルトの名無しさん2010/12/05(日) 21:59:53
>>1
その考え方だと関数呼び出しはgoto文かもしれないけど
関数呼び出しが終わった後に自動的にもとの場所まで戻ってくれるでしょ
これってgoto文でまたもとのところに戻ってるってことだよね

関数呼び出し1回書くだけでgoto文を2回自動的に呼び出してくれるということだから
親切だと思う
単なるgoto文とは違う

すげえ遅レスだしスレも読んでないけど
0128デフォルトの名無しさん2010/12/05(日) 22:02:31
>>126
名前のない関数というと局所関数?
ローカル変数のスコープを小さくできるとい面でメリットがあるんじゃないの
forループ中で変数を宣言できるのと同じメリットがあるのでは?
0129デフォルトの名無しさん2010/12/16(木) 23:44:39
親関数が所持しているデェタ
を参照した子関数を書きたいこ
とがあるでしょう。

例えば、qsortを使って、そえじ配列i
がx[i[1]]<=x[i[2]]<=...となるように整列
したいとき、比較関数をどう書けばよいか
を考えると、内部関数の必要性がわかるはず。
0130デフォルトの名無しさん2010/12/17(金) 01:14:09
どこを縦読み?
0131デフォルトの名無しさん2010/12/29(水) 18:21:33
goto文なんてもう古い
これからはcomefrom文を使うべき
0132デフォルトの名無しさん2010/12/29(水) 23:01:03
#include<setjmp.h>

ふぅ。
0133デフォルトの名無しさん2010/12/31(金) 01:56:28
>>131
> goto文なんてもう古い
> これからはcomefrom文を使うべき

恐ろしく古いネタだな
0134デフォルトの名無しさん2011/01/04(火) 17:48:42
LABEL1:
 for ( ; ; ) {
  for ( ; ; ) {
   for ( ; ; ) {
    for ( ; ; ) {
     for ( ; ; ) {
      何かの処理
      if (何かの条件) break LABEL1;
      何かの処理
     }
    }
   }
  }
 }
0135デフォルトの名無しさん2011/03/13(日) 20:15:08.26
まあ、調教されたgotoと、されてないgotoで良いんじゃ無いかな
0136デフォルトの名無しさん2011/03/27(日) 23:22:10.07
>>1
 お前が言っているのは、包丁も人を殺せるから作っちゃいかんと同程度。
goto以外の制御構文は、入り口と出口が決まっている。例えば、returnは、
必ず関数の呼び出し元に戻る。continueはループブロックの末尾に落ちる。
gotoはネストを完全に無視して出入り口の概念が無いジャンプを書けてしまう。

goto label1:
label2:
goto label3
label1:
goto: label2
label3:

こんなどっから入ってどこに出るか解らんコードが
散らばってたら読んでられるかっ。

>>126
pointLambda = Line(0,0,10,10);

point[0] = pointLambda(0);
point[1] = pointLambda(1);
point[2] = pointLambda(2);
point[3] = pointLambda(3);

はたしてこれがただの手続きと言えるか?
0137デフォルトの名無しさん2011/03/28(月) 09:02:52.78
>>136 は継続について勉強するといいと思うよ

ついてけないならプログラマに向いてないだけだから
0138デフォルトの名無しさん2011/04/29(金) 17:24:11.25
>>137
で、君は継続をバリバリ使ってるプログラムを日常的に書いてるのかな?
0139デフォルトの名無しさん2011/05/05(木) 01:13:40.10
>>137
別に継続だろうが、gotoだろうが、出口がはっきりしてりゃいいんだよ解る?
お前は継続で>>136のようなコードを意図的に書くのかよ。deleteしたポインタを
コンパイルエラーにならないからってさらにdeleteするぐらいアホだな。
0140デフォルトの名無しさん2011/05/05(木) 18:04:55.37
そもそも、ダイクストラの言った構造化の要点は、gotoを禁止しろじゃないからな。
入り口と出口をはっきりしろってのが要点。誰もがgotoを使って入り口と出口がはっきり
したコードを書くのなら別に、breakやreturnじゃなくgotoでもいい。
熟練したプログラマが書いたアセンブリコードだって構造化されてる。

問題とされるのは、入り口と出口がはっきりせず、あるルーチンの中に飛び込んで、
また別のルーチンにとんでいって返ってこない>>136のようなコード。
0141デフォルトの名無しさん2011/05/05(木) 18:32:58.53
良く言われるスパゲティコードというやつだな
プログラムを格納する領域にすら困る時代にはそういうのも実用になることがあったが
今はコードを削るほどメモリに困ることはあまり無いからね

…って、組み込み機器の分野ではどうなんだろう?
今もスパゲティが散見されたりするんだろうか
それともむしろ、止まったら困るから昔から意外ときちんと書いてた?
0142デフォルトの名無しさん2011/05/05(木) 19:19:49.74
普通にオブジェクト指向プログラミングしてるだけなのに、
「クラス使うな。スパゲッティコードになるだろ!」
っていうレベル低いプログラマに囲まれて欝。
自分が抽象化されたコードを読み解けないのを、「スパゲッティコード」だと
こちらに押し付けてきやがる。
ラムダとか継続以前に継承も多態もわかんねえ奴らはほんと消えて欲しい。
0143デフォルトの名無しさん2011/05/05(木) 19:24:43.06
スパゲティかどうかは別として、メソッドの呼び出し地点を探しづれぇってのはある。
メソッドの引数追加するはめになったときは特に悲惨。
0144デフォルトの名無しさん2011/05/05(木) 19:41:49.15
実際に走らせて試すことができるコードなら例外使ってスタックトレース取得とか
やったことありますねJavaで
0145デフォルトの名無しさん2011/05/06(金) 16:50:31.72
今時のIDEなら参照検索くらい普通
0146uy2011/05/17(火) 12:23:44.94
継承は個人個人が書くコードレベルで書くとスパゲティだと思うけどね
ライブラリの継承や、全体設計者の何らかの法則にしたがって継承していくのはあり
Aクラスでも使う、Bクラスでも使う、関数を、
「自分でかいたCクラス」に定義して、AとBに継承とかはスパゲティだと思ってる 読む気を無くす
0147uy2011/05/17(火) 12:27:25.87
そういう場合、殆どの場面において、AとBクラスは ちゃんとリファクタリングすれば統一できるか、あるいはCがライブラリになるか、設計そのものに組み込まれて
自分でかいたクラスを自分でかいたクラスに継承する。なんていう例外的な継承は必要なくなるはず
0148デフォルトの名無しさん2011/05/18(水) 22:15:25.98
継承を>>146みたいに使うのは根本的に誤解しているが、>>147程度の理解で
「スパゲッティだと思ってる(キリッ」
ってヤツが多いから欝なんだよ…
0149デフォルトの名無しさん2011/05/19(木) 15:11:14.47
しょせん、他人が書いた「俺ライブラリ・俺クラス」はすべてスパゲッティ。
書いた本人が自分にわかりやすいように書いただけであり
他人には理解不能。
0150デフォルトの名無しさん2011/05/23(月) 22:27:00.30
0151デフォルトの名無しさん2011/05/24(火) 22:11:40.94
>>146
 親クラスの増築版として子クラス書くなよバカ。
増築するくらいなら、親に当たるクラスのオブジェクトを内包させて、
Getter,Setterで操作できるようにした方が実装が固定されなくて遥かにまし。
親クラスを利用(参照)しているクラスを子で利用するために書くんだろうが。
0152天使 ◆uL5esZLBSE 2011/07/02(土) 22:02:44.61
これ ; デリミタっていうんだけどさ、これをつけなきゃエラーになるような
そんな言語使ってる奴ってどうみてもゴミだと思うんだけど

もしかして「;」これ打ち忘れてコンパイルエラー出すのが楽しいの?
そうか、二度と話かけんなよ


ほんっとに自覚のないゴミだな
0153デフォルトの名無しさん2011/07/02(土) 23:24:19.21
願うらくはトリップつけずにレスせざることを
0154デフォルトの名無しさん2011/09/15(木) 16:32:52.41
gotoを隠して使ってるからgotoじゃないだろ
0155デフォルトの名無しさん2011/09/15(木) 21:38:15.73
10 *MAIN
20 GOSUB *F
30 END
40 RETURN
100 *F
110 GOSUB *G
120 GOTO *R
200 *G
210 GOSUB *H
220 GOTO *R
300 *H
310 GOTO *R
0156デフォルトの名無しさん2011/09/30(金) 12:37:08.82
アセンブラとbasicしか使ってなかったころ、よくやってた事

# 関数定義部分
func_wrapper:
c = a + b #引数として指定されたa と b を足してcを構築
func:
# ここから関数の本体
# c を利用して複雑な演算を行う
c = ....
return

#関数利用部分その1
a = 1
b = 2
gosub func_wrapper

#関数利用部分その2
c = 10
gosub func

何を言いたいかと言うと、サブルーチンの入り口がfunc と func_wrapperの2つあり、
引数の加工前、加工後のどちらでも共通して同じ関数が利用できるという事。
上記の例の場合、aとbを初期化してfunc_wrapperを呼ぶことができるが、計算過程で
必要なcがすでに完成しているなら、funcを呼んでも良い。という事になる。

これで、出口どころか入口さえ決まっていない関数(サブルーチン)が出来上がるわけだ。
当時は便利だと思ってたんだけどね。
0157デフォルトの名無しさん2011/09/30(金) 22:24:05.76
えっと、そいうのはC++とかでも普通だったりしますが・・・
放射能にやられた?
0158デフォルトの名無しさん2011/10/01(土) 14:34:29.09
それは、オーバーロードだよね
0159デフォルトの名無しさん2011/11/22(火) 01:37:35.15
だよね
0160デフォルトの名無しさん2011/12/04(日) 13:06:07.62
goto使うなとか言い出したのどこのアホだよ
0161デフォルトの名無しさん2011/12/04(日) 19:02:43.08
最初にそれを言い出したのはwhileもまともなifも無かったFORTRANが主力だった時代。

それを勘違いして教条的に扱った奴がアホ
0162デフォルトの名無しさん2012/01/27(金) 06:05:39.59
放射能にやられたww
0163デフォルトの名無しさん2012/01/27(金) 07:37:02.66
Cだが、最近はgotoも使い方次第って風潮だな
多重ループ抜けに余分な変数作らなくていいし、便利
0164デフォルトの名無しさん2012/01/27(金) 07:39:50.85
最初からそうだよw
0165デフォルトの名無しさん2012/02/04(土) 13:42:16.07
近頃の若いもんはgotoの正しい使い方も知らんのか
いったい学校では何を教えてるんだか
0166デフォルトの名無しさん2012/02/04(土) 16:48:20.95
goto最高。
0167デフォルトの名無しさん2012/02/04(土) 20:25:25.44
後藤さん
0168デフォルトの名無しさん2012/08/12(日) 01:11:22.40
gotoって内部的にはどうやってんの?
コンパイルしたら行番号もなにもなくない?

小4の頃にWindowsのバッチで使った時あるだけだが
0169デフォルトの名無しさん2012/08/12(日) 01:31:05.41
>>168
basicのgotoもラベルにジャンプできる。
Cのgotoはラベルにジャンプする。
それはさて、それらのgotoに限らずforやwhileも
コンパイルされた実行オブジェクト内ではCPUの分岐命令になっている。
そのジャンプ先は大抵、前後に何バイト離れたところと言う風に指定される。
0170デフォルトの名無しさん2012/12/03(月) 04:35:47.71
goto文ってメタプログラミング?
0171デフォルトの名無しさん2013/05/06(月) 06:02:30.85
0172デフォルトの名無しさん2013/05/23(木) 22:34:29.99
test
0173デフォルトの名無しさん2013/07/26(金) NY:AN:NY.AN
    4個ぶん
0174デフォルトの名無しさん2013/08/08(木) NY:AN:NY.AN
No such file or directory
0175デフォルトの名無しさん2013/08/08(木) NY:AN:NY.AN
関数呼び出しは強盗分である。
0176デフォルトの名無しさん2013/08/09(金) NY:AN:NY.AN
我輩はgoto文である
名前はまだない
いやgotoだった名前ワリィ
0177デフォルトの名無しさん2013/08/14(水) NY:AN:NY.AN
関数呼び出しは後藤文(あや)である。
0178デフォルトの名無しさん2013/08/17(土) NY:AN:NY.AN
そんなことはない
0179デフォルトの名無しさん2013/08/17(土) NY:AN:NY.AN
かんすいおよびダシは五等分である。

(これをラーメン構文という)
0180デフォルトの名無しさん2013/08/17(土) NY:AN:NY.AN
goto有害論のマトモな説明が流通しないのはなぜなんだろう
0181デフォルトの名無しさん2013/08/17(土) NY:AN:NY.AN
「goto有害論のマトモな説明」が間違ってるから
0182デフォルトの名無しさん2013/08/18(日) NY:AN:NY.AN
>>179
ラーメンを4等分するドリフのコントを思い出した。
0183デフォルトの名無しさん2013/08/18(日) NY:AN:NY.AN
関数呼び出しはgotoであるって粒度が違うよね
人間は原子であるというくらいおかしい
0184デフォルトの名無しさん2013/08/18(日) NY:AN:NY.AN
粒度w
0185デフォルトの名無しさん2013/08/18(日) NY:AN:NY.AN
> goto有害論のマトモな説明

Knuthの"Structured Programming with go to Statements"がベストだと思うが、
あれ読んで理解できる奴はそもそも読まなくても分かってる、っていうw
0186デフォルトの名無しさん2013/08/18(日) NY:AN:NY.AN
構造化を学ばなくてもわかってるやつってみたことない
構造化を取り込んだ言語とgoto使うなという標語からそれっぽく書いてるだけで
0187デフォルトの名無しさん2013/08/18(日) NY:AN:NY.AN
箸は手で使っているので所詮は手であると言うようなもの。
この手のアホは結構多い。
一番多いのはツールは所詮人間が使っているのでツールのパワーは重要ではなく所詮は人力であるという奴。
0188デフォルトの名無しさん2013/08/18(日) NY:AN:NY.AN
>>187
言語の力をツールに含めないアホなら見たことある。
言語で差は無いとか言うアホ。
0189デフォルトの名無しさん2013/08/18(日) NY:AN:NY.AN
>>188
使える技術はなんでも使ったほうがいいよな。
なぜか標準関数だけで作ろうとするあのバカ。
ライブラリ使えよ。
0190デフォルトの名無しさん2013/08/23(金) NY:AN:NY.AN
信頼出来るかどうかの見極めがまず第一

車輪の再発明とか言ってよく批判されるが
水平方向じゃなくて垂直方向すなわち
ハシゴを登る時は自作したほうが良い
0191デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
どや

を忘れてるぞ、意味不明君
0192デフォルトの名無しさん2013/08/25(日) NY:AN:NY.AN
後藤君!!後藤!!
0193デフォルトの名無しさん2014/02/14(金) 09:16:12.57
AとBの値を入れ替える、このようなしょうもない手続きを一々関数に切り出してるからダメなんだよ
ブロック化は1つの手続きを別けるのではなく、完結したオブジェクトであるべきだろ
0194デフォルトの名無しさん2014/02/14(金) 11:34:52.55
手続きと関数の違いも分からないのか
0195デフォルトの名無しさん2014/05/09(金) 17:00:05.55 ID:PiBLeKFf
>>190
梯子の再発明……?
0196デフォルトの名無しさん2014/05/09(金) 17:13:54.64 ID:Mr0Sp7Ii
自分の命を預けるものを再発明してなにがわるい
おまいらはOpenSSLでも使ってろ
0197デフォルトの名無しさん2014/05/09(金) 22:23:26.08 ID:Ijv/Ccl+
>>1はgotoがなぜ悪いのかを理解してないんだろうな
0198デフォルトの名無しさん2014/05/10(土) 01:58:19.36 ID:qsRpUawS
>>196
お前の発明力と、それを支える技術力が確かなものであるなら、別にそれでもいいよ?

車輪にしたってあれ、かなり正確な円を作れないと、使う時にいろいろ余計な不具合が出るもんだけど。
荷重計算も当然やってなきゃいけない。
場合によってはタイヤやサスペンションやブレーキなどのアクセサリも必要になるかも知れない。
少なくともWikipediaの車輪のページに書かれてる程度の事は自力で思い付けるくらいじゃないと、再発明なんて危なっかしくてさせられないんだけど。
再発明して何が悪いと主張する人たちに、これができる人はほとんど居ないんだよねえ。

梯子もまた然りで、構造はすごく単純そうにだし、実際そうだけど、あれ自力で考えて作るのすごく大変だよ?
ただのオンボロに見える杉材製農業用梯子に、危険を回避するためにどれだけの対策が必要か、現に施されているか、分析できてる?
0199デフォルトの名無しさん2014/05/10(土) 10:13:35.23 ID:u2Nh4I6f
goto花屋さんのスイートピー
0200デフォルトの名無しさん2014/05/10(土) 19:50:06.65 ID:mKccpFdG
車輪の再発明って火縄銃を分解して国産で作りあげてしまう日本人にしてみれば
実はピンと来ない言葉なんだよな。
分解作りなおすとか当然だろみたいな所あるじゃん。

「少なくともWikipediaの車輪のページに書かれてる程度の事は自力で思い付ける」
のはまさに再発見でありこれは100%意味が無いね
発想しなくても分解して学べばいいわけよ
0201デフォルトの名無しさん2014/05/10(土) 22:23:26.21 ID:m9xHqVTZ
> 火縄銃を分解して国産で作りあげてしまう

そんなことを知っている日本人はごくわずか。

勝手にピンと来ないことにするなよ。

馬鹿じゃねーの?
0202デフォルトの名無しさん2014/05/10(土) 22:31:36.55 ID:704+mHMN
「日本人なら」とかいう論は、相手にするだけバカ
0203デフォルトの名無しさん2014/05/11(日) 00:19:24.41 ID:9G/k18dk
>>201
火縄銃の伝来は日本史上かなり有名な話だと思うが…
0204デフォルトの名無しさん2014/05/11(日) 01:17:18.50 ID:tWSwYisI
>>200
そういう事は、銃が伝来する前に日本人は火縄銃を作り上げたというような史実が確認できてから言え
歴史を見る限り日本人は発明がひどく苦手で、得意としているのは応用だ
0205デフォルトの名無しさん2014/05/11(日) 01:22:54.60 ID:tWSwYisI
発明という言葉を一体どう解釈しているのか……
プログラマは日本語できないという事実を再発明してしまった
0206デフォルトの名無しさん2014/05/11(日) 01:35:54.84 ID:9G/k18dk
既に発明されてるものを再び一から作ることよね再発明って
0207デフォルトの名無しさん2014/05/11(日) 02:05:07.02 ID:tWSwYisI
>>206
違う
ゼロから作る事
0208デフォルトの名無しさん2014/05/11(日) 02:08:28.34 ID:tWSwYisI
細かいようだけど、一から作るのとゼロから作るのはまったく違うからな
一から作る場合は車輪が出来る事は決まっているけど、ゼロから作る場合は出来上がるものが車輪と同等とは限らない
0209デフォルトの名無しさん2014/05/11(日) 02:21:50.77 ID:tWSwYisI
説明が足りないか

同等と限らないというのは、最終的に果たせる仕事が異なるという事ではなくて、実装方法なり使用方法なりが違うものが出来る余地があるという事
それだけなら、より優れたものが出来る可能性もあるから一概に否定できないんだが、問題は
「何が悪い」派の人間に、それが達成できそうだと思える要素が皆無であるという事だ

一から作るというのは本当にただの猿真似で、真似である限りは発明と呼べるものじゃない
>>200がそれに該当する
0210デフォルトの名無しさん2014/05/11(日) 13:38:23.16 ID:9G/k18dk
0オリジンでなく、1オリジンで言ったつもりだったんだが…
0211デフォルトの名無しさん2014/05/11(日) 13:43:39.90 ID:nu3zrPv1
>>210
オリジンなどどうでもいいが、一という言葉に無という意味はあるか?
0212デフォルトの名無しさん2014/05/11(日) 13:50:43.30 ID:9G/k18dk
>>211
作り始めたら、もうその時点で無ではないよ
始めた時点で1だろ?
0213デフォルトの名無しさん2014/05/11(日) 13:57:26.64 ID:aQK1h0uO
>>212
作り始める瞬間までが無ではないと主張するなら、それはお前が発明とはどういう事なのか理解していないという事だ
0214デフォルトの名無しさん2014/05/11(日) 17:24:34.33 ID:5bM6wK/T
これまで存在しないものを創ったと思っていたら
既にあるものだったと皮肉られてるのが"再発明"だろ
0215デフォルトの名無しさん2014/05/11(日) 20:05:11.72 ID:9G/k18dk
>>213
まあどっちでもいいや、最初からってことでいいじゃん
君は0オリジン、俺は1オリジンで言ったまで
何故そこにこだわる?
0216デフォルトの名無しさん2014/05/19(月) 01:36:32.79 ID:Ie7r34UX
まぁツリーとかグラフ関係は殆ど未開なんじゃないの
オブジェクト指向のほうは99%以上終わってる
0217デフォルトの名無しさん2014/08/17(日) 18:09:11.39 ID:oEmocuYk
0218デフォルトの名無しさん2014/12/02(火) 00:03:00.48 ID:WKMTkOZo
コンパイル後のニモニックでPush Pop jumpで構成する場合があるから
>>1は間違いとも言えないだろう
0219デフォルトの名無しさん2014/12/02(火) 01:06:51.32 ID:EC3soBe4
>>218
完成度高いアスペ
0220デフォルトの名無しさん2014/12/02(火) 01:19:58.73 ID:WKMTkOZo
賛同者が板なんて、頭大丈夫かw
0221デフォルトの名無しさん2014/12/02(火) 01:29:11.14 ID:EC3soBe4
しゃべるな
アスペがうつる
0222デフォルトの名無しさん2014/12/02(火) 01:32:38.39 ID:WKMTkOZo
俺と同じ考えなんだからあんたはアスペって奴だ
わざわざ俺を評価しに来たのがその証拠だ
0223デフォルトの名無しさん2014/12/02(火) 02:56:01.37 ID:hJb7UfC+
関数呼び出しはgoto文ではない、以上!
0224デフォルトの名無しさん2014/12/02(火) 08:20:20.08 ID:VNjwMjdE
関数にはブロックが付いてくるけど、ラベルにはついてこないから
そこをどうするかだな。
ラベルはエクスポートできないし。
0225デフォルトの名無しさん2014/12/02(火) 10:50:47.96 ID:3rM6YAIj
関数呼び出しは継続を引数としたgoto、って何年も前に結論が出てるんだが
0226デフォルトの名無しさん2015/04/09(木) 09:35:39.80 ID:3KIThUPC
>>76
加速運動してるときは違うよ低能
0227デフォルトの名無しさん2015/10/08(木) 10:00:07.60 ID:FOkDqOUk
関数の呼び出しはgoto文の一種だよ。
goto文はノイマン型コンピュータの必須条件の一つな。
従いgoto文がないとノイマン型は成立しない。

嘘だと思うならば、アセンブラ/機械語を見れば判る。goto文のない機械語は存在しない。
0228デフォルトの名無しさん2015/10/08(木) 10:08:39.91 ID:FOkDqOUk
ダイクストラが提唱した構造化プログラミングの延長線上にカーニハン&リッチーが提唱したgoto文追放がる。
これを理解しないと勘違いして、goto文のかわりにreturn文を書く馬鹿が出現する。

C言語はgoto文を{}というマクロで自動生成し、プログラマがgoto文を記述しなくてよいよう自動化した。
つまり、カーニハン&リッチーの本当の主張はC言語がかわりにgoto文を生成するから意図的に使う
必要がない。というのが本当の意味な。

それを馬鹿の一つ覚えみたいに、goto文を使わないと先に進まない。じゃあreturn文を関数の
ドンケツにjumpすればgoto文を使った事にならない。ってのが現在の惨状な。
0229デフォルトの名無しさん2015/10/08(木) 10:16:27.85 ID:FOkDqOUk
まずFORTRANの時代のプログラミングを見せよう。良くわかる。C言語にしたがい記述する。

--------------------------------
if( hoge==moge ) goto L1;
goto L2;
L1:
printf( "hoge==moge !!" );
func();
L2:
-------------------------------

これを{}を使って書くとこうなる。

if( hoge==moge ) {
printf( "hoge==moge !!" );
func();
}

 これがカーニハンとリッチーの言いたかったことさ。
goto文とラベルの関係を抽象化して大幅に整理した。

 構造化プログラミングをきっちり検討した香具師ならばこのあたりの事を理解している。
おきらくにCOBOL、フォートラン、当時のBASICを使っていた香具師は構造化が判らないから
漫然と都合が悪くなるとreturn文を書いている。
0230デフォルトの名無しさん2015/10/08(木) 13:42:18.03 ID:APM/wiII
分裂症かよ。
関数呼び出しをアセンブラ/機械語でgotoだのjmpだのbranchにしたところで、戻り先の管理とかは自前でやるのか。割り込みはどうすんだ。
それにgoto一般の話は別のスレでやれ。
0231デフォルトの名無しさん2015/10/18(日) 04:35:51.22 ID:f/g+ul6D
日本のコーダって質が低いんだな
まるで工場労働者みてえだ
0232デフォルトの名無しさん2016/01/29(金) 19:14:22.20 ID:HPxCNVuX
ってか、コーダーはプログラマじゃない。言われたとおり、書くだけな。
どっちかというとキーパンチャーに近い。

ってか、コーダーにgoto文もへったくれもないだろう。

>>230
をいをい、割り込みなんて高級言語に存在しない概念を言ってもしょうがないべさ。
厨坊のスキルを考慮して発言しな。
割り込みなんてのはアセンブラか組み込みでしか出てこない。組み込みだって、
高級言語で書くんだったらアドレステーブルを定義するだけで割り込みなんて言葉さえ
でてくるか怪しいもんだ。
0233デフォルトの名無しさん2016/01/29(金) 22:16:53.08 ID:Wq+rXzbO
自前で処理してretで戻るのはわりとよくやったが……
0234デフォルトの名無しさん2016/01/30(土) 04:20:38.60 ID:SrDxczVx
JavaScriptには、exit()がない。えらいことです
0235デフォルトの名無しさん2016/01/30(土) 10:02:50.56 ID:udvC9mYu
そういや割り込みハンドラからの復帰をretiでなくretで済ませようとしてたバカ元請けがいたな
あれで給料はこっちの3倍だってんだからw
0236デフォルトの名無しさん2016/01/30(土) 15:47:04.28 ID:4UFuP0cL
あっ(察し
理由分からなかったんだね
0237デフォルトの名無しさん2016/01/30(土) 16:10:47.59 ID:2cOFpkHf
直観主義は型付きλ計算に対応するわけだけど、排中律に対応するのがgotoなわけだよ。 古典論理から排中律を無くしたのが直観主義だからな。 型付きλ計算がわからない人は普通の関数言語だと思っておけばいい。
0238デフォルトの名無しさん2016/01/30(土) 19:44:40.29 ID:5HJuNHUS
やれやれ…
そのretを使った香具師はきっとスタックの概念を明確に理解していなかったんだろうな。
いや、CPUには割り込みレベルがあるかな?
うろ覚えだがretiは、戻りのアドレス+割り込みレベルじゃなかったっけな。
callが使用したスタックをret/retiで戻すという概念を把握していなかったんだろう。

正直、CPUの自作を最初にさせるべきだよ。アセンブラ/C言語の拾得者にはね。
いやCPUエミュレータで内部レジスタの動きを見せてやれば理解できるか。
新着レスの表示
レスを投稿する