TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
CoffeeScript
Microsoft Silverlight その9
ねえ、これ僕間違ってる?
【コボル】COBOL不要論【ただのDSLだよね?】
[RPA]PC自動化技術総合スレ[効率化] Part.7
C# vs Java どっちが好き? その4
スレ立てるまでもない質問はここで 152匹目
MATLABプログラミング 質問箱 その4
C言語をやりたいんですが
Google App Engine for java

関数呼出しはgoto文である


1 :2009/01/24 〜 最終レス :2020/04/23
関数fがあったからfを読んでみたらfのなかに関数gがあった。
gを読んでみたら関数hがあった。
これはgoto文だと思った。
しかし、関数に切り出すのは構造化プログラミングだと言われている。
gotoがダメだから構造化プログラミングにパラダイムシフトしたのに
所詮はgotoなのである。

2 :
余裕で2get!

3 :
俺なんて歯磨きながら余裕の3get!

4 :
仕方ないから4get

5 :
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.

6 :
関数呼び出しは jmp じゃなくて call だぞ

7 :
関数呼び出しは goto じゃなくて gosub だぞ

8 :
関数呼び出しは jmp じゃなくて bsr だぞ

9 :
>>5
responce じゃなくて post だろう。普通は。

10 :
関数呼び出しは暗黙の引数として継続を渡すgotoである。
ところで、構造化プログラミングってのは、
選択(ifブロック)とか繰り返しとか、gotoで行う制御を抽象化することであって、
サブルーチンに切り出すってのは構造化と違うと思うんだが...

12 :
そもそも言語を特定せずに、goto文がどうこう言い出す>>1の無能さがあまりに悲しい。

13 :
というか、gotoだったら戻ってこねえよ

14 :
gotoに何があったんだ?
itoは大丈夫なんだろうな?

15 :
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。
アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。
                  京都大学霊長類研究所

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

17 :
>>1
その場合のプログラムの読み方としてはh,g,fの順番で読めばいいんじゃないでしょうか

18 :
>>17
またお前だ

19 :
N88BASIC

20 :
ifとgotoさえあればあらゆる制御構造は書けるからな
それ以外の実行順序を制御する仕組みは全部ifgotoのシンタックスシュガーに過ぎない

21 :
関数型言語にも触れてから言ってもらいたいものだな。
後藤さんはそのためにいるんじゃないんだけど、やってくれるからってやらせていいというわけではないんだよ。
ちょっとした例外処理にまわってもらうんだよ。
多重ネストから抜けるのは、邪道過ぎる。そもそもその構造をどうにかして使わずに済ませろ。

22 :
関数化するのが面倒な処理もあるから仕方が無い

23 :
おまえら何十年前の人間だよw

24 :
そこで come from ですよ
http://catb.org/jargon/html/C/COME-FROM.html
http://en.wikipedia.org/wiki/COMEFROM
http://www.fortran.com/come_from.html

25 :
戻る箇所を隠された引数に指定するGOTOであることは真

26 :
多重ネストから抜けるにはgoto使うのは当たり前じゃない?
for(;;)
{
for(;;)
{
〜〜〜
if(〜){break};
}
〜〜〜
if(〜){break);
}
のようにif文を2回も書かないとダメじゃん。
for(;;)
{
for(;;)
{
〜〜〜
if(〜){goto A};
}
〜〜〜
}
A:
のほうがきれいじゃん

27 :
C言語の話をしてるという前提で言うけど、
>>26のような妥当なgotoの使い方じゃなくて、
普通は関数化するところもgotoでやろうって話だよな?

28 :
>>1が抽象化をコードから読み取れないか、
>>1が読んだコードが、関数へのくくりだしがきれいな抽象化になっていなかったか、の
どちらかだと思われる。

29 :
関数呼び出しの全てが goto で出来てたら、クラックしづらそうと思う

30 :
#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;
}

31 :
こらー?

32 :
呼び出している人 = caller
呼び出されている人 = callee

33 :
>>29
コンパイル後は関数呼び出しもgotoもほとんど同じようなもんだろバーローww

34 :
call と jmp の違いは・・・小さいか。

35 :
goto heaven

36 :
わたしはメイド♪
あなたのメイド♪
あとわすれた

37 :
まあ、関数にバラしてても全部グローバルスコープの変数使ってりゃgotoだわなw
今だにそんなソース見掛けるから怖いよ

38 :
トイレキッチンオフロニベランダ〜 イェーイ
曲名なんだっけ

39 :
>>34
そういう言う意味だと ret も同じだよね。ぶっちゃっけ jmp だけあればいいw
ということは「関数から戻ることはgoto文である」ということにもなり...
あれ、普通の言語のgotoって、関数の外に飛べるっけ?
さいきんアセンブラしかつかってないからわかんないやw

40 :
>>39
Cは大域ジャンプしない限りは関数内だけだったと思う。

41 :
>>38
メイドさんロックンロール

42 :
intel CPU 的には call と jmp はセグメントを越えた際のメモリ保護の挙動が違う。

43 :
ラベルを変数に入れられないのがCの甘い所だよなあ。

44 :
for (int i = 0; i < 10; i++) {
switch (i) {
case 0:
  うんこ
  break;
case 1:
  しっこ
  break;
case 2:
  R
  break;
case 3:
  ちんこ
  break;
以下省略
}
}


45 :
そういえば某国立大学の三つ編み眼鏡っこの先生が継続だけで
関数コールとgotoの代りをさせるCの方言を作ってたな

46 :
論文読んだことある。これだろ?
http://www.ie.u-ryukyu.ac.jp/~kono/papers/kono/2008/akira-vld.pdf

47 :
琉球大レベル高いなあ…

48 :
自作自演がばれてるんですけど、何ででしょうか?
このスレを立てたのは僕で、>>17も僕なんですが。
あともうひとつの僕の立てたスレでも自作自演がばれてます。
http://pc11.2ch.sc/test/read.cgi/tech/1232851820/l50
>>8-9です。
またお前だと2回も言われていることからあきらかです。
よろしくお願いいたします。

49 :
あと、僕はADSLですのでグローバルIPは毎回変わります。
ちなみに自作自演は表現の自由として憲法で認められた権利であると
解釈しております。

50 :
>>39-40
Cは関数ごとにスタックフレームの構造が違うかもしれないから、
一般には飛べない。
GCCのlavel as valueという言語拡張を使ってラベルをポインタにすると飛べるけど、
何が起こるかわからないw

51 :
スタックフレームの構造とgotoで飛ぶのと、どんな関係があるんだ?

52 :
大域ジャンプはその時点のスナップショットを残しておいて後で引き出して戻ってくる。
っていう動作だから、スタックも保存するかもしれない。

53 :
>>50
スタックフレームに関わらず飛ぶ仕様でいいんじゃないか?
goto, gosubしかない時代のbasicでもサブルーチンから別のサブルーチンにジャンプすると言うトリックは存在してたんだし。
# 勿論、ジャンプ先を間違えてメイン側からサブルーチンに飛び込むと大変なことになるわけで。

54 :
むかしのコンピュータの話で恐縮だが
スタックが無いプロセッサも存在した。
サブルーチンなど行って戻ってくる必要のある場合
CALL unko,R1
みたいに、呼び出し元のアドレスをレジスタ(この例の場合は R1)
に保存してからジャンプする。
戻るときは単にレジスタR1をプログラムカウンタに代入するだけ。
スタックとサブルーチンコールは、カレーと福神漬けのように
相性が良いってだけで、カレー・イコール・福神漬け、では無いよ。

55 :
>>54
>CALL unko,R1
ってゆうかこれってアセンブラレベルの話では。
>スタックとサブルーチンコールは、カレーと福神漬けのように
>相性が良いってだけで、カレー・イコール・福神漬け、では無いよ。
そのプラットフォームでは高級言語の呼び出し規約はどうなっていたんでしょうか。
その話によるとスタック的なデータ構造は使っていないということですね?

56 :
つまり、その環境で高級言語が使ってた手法が一般的になったって事じゃねーの?

57 :
>>55 このスレ、
ずーーと、アセンブラレベルの話のようだが。

58 :
関数呼出しってgoto2回使用と同じ効果ですか?
行って戻ってくるみたいな。

59 :
>>58
行きは、現在の場所を記憶しておく。
帰りは、行きに記憶しておいた場所に戻る。
それ以外は、只のジャンプと同等。
但し、関数にローカルなオブジェクトがある場合はスタックフレーム形成などの処理も入る。

60 :
>>59
>行きは、現在の場所を記憶しておく。
>帰りは、行きに記憶しておいた場所に戻る。
>それ以外は、只のジャンプと同等。
どうやって「現在の場所」を記憶しておくかは気にしないのか?

61 :
>>60
別にどうやって記憶してもいいよ。一般的にはスタックを使うだろうけどね。
世の中にはスタックを使わずにレジスタウィンドウだけで済ませる場合もあるし。

62 :
世の中には(ハードウェア)スタックなんか無いと言うマシンも
昔、存在したしね。どこぞのシステム360とか言うマシンだが。

63 :
ていうか、スタックポインタがあたりまえのように存在するのは、
マイクロコンピュータ以後のアーキテクチャ。
それ以前のマシンでは、リターンアドレスやレジスタの保存とか、
ローカル変数のワークエリアとかは、ソフトウェアで管理しなきゃ
いけなかった。

64 :
>>63
DECやバロースのマシンも思い出してあげてください。

65 :
どっちにしてもネイティブコードだとただその処理が続けて書かれてるだけじゃなかったっけ?
何の論議してるん?

66 :
>>65
>何の論議してる
のか理解してから口を挟んだ方が
恥をかかなくて済みますよ。

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

と思ったけど、逆に関数呼び出しはgoto文であるという話を貫くのも悪くないかもw
その場合、次スレには「スレッドはgoto文である」とかが見えてきます。
さらに続編で「プロセスはgoto文である」「OSはgoto文である」などもよろしければ...

68 :
・例外呼び出しは goto 文である
・ファイバーは goto 文である

69 :
ノイマンマシンは、全ての命令に「goto次の命令」がついていると言える。
(パラレルアーキテクチャのゼミの先生は違うこと言ってたな)

70 :
プログラムって全部gotoじゃん
int unko;
unko=3;
これだって一行目から二行目にgotoしてるじゃん

71 :
  ↑
おまいは小学生か!

72 :
プログラムが上から下に流れていくのは仕様だろ?
不満なら下から上に解釈していく言語でも作ってくれ。

73 :
>>70 >>72
逐次処理系言語はポピュラーではありますが
それがすべてではないですよ。

74 :
呼び出しつってんだから、関数の方に来て貰ってんじゃないの。呼んだおまえが行くなよって感じ。

75 :
goto は pc の書き換えである。
フェッチすると pc が書き換わる。
故にフェッチはgotoである。

76 :
ある物体AとBが近づいているとすると
Aから見ればBを呼び出しているのかもしれないが
第三者のCから見ればBはAにgotoしてるように見えるかもしれない。
Dから見ればAがBにgotoしているのかもしれない。
Bから見ればAがこっちに向かってきてるように見えるかもしれない。
世の中って相対的なんだよね。
絶対的なものは光速だけでしょ。
プログラミングの世界ではまだニュートン力学から抜け出せないの?(笑

77 :
call文をgoto文で置き換えてどうやって再帰呼び出しを実現するのか教えてもらおうかw

78 :
例えば2項間漸化式をリカーシブコールではなくリカーシブgotoでもとめるなら
初項までgotoで進んで、それからgotoで戻ってくればいいんじゃないのかな。

79 :
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に書き直す?

80 :
>>79
つ[末尾再帰]

81 :
>>79
末尾再帰をしらなくて cps という言葉を知ってるというのは何かおかしい

82 :
>65
大昔から大抵のCPUに機械語(マシン語)レベルで
CALL(サブルーチン呼び出し)命令があります。
しかしハードウェアでスタック・ポインターを持っているとは限らない、
異なる方法で実現している場合もある(有った)と言う事です。
サブルーチン・コールや関数呼び出しをハードウェアの支援なしに
全部ソフトウェア(goto命令等)で実現したとしたら効率悪い上に
アセンブリ語レベルでものすごく読み難くなるでしょう。

83 :
call命令に対応する機械語はjmp命令ですな。
機械語に(普通)goto命令なんて有りませんね。
失敬失敬!

84 :
「呼ぶ」と「行く」は主観的な言葉だよね。
その人から見ればってことだから。
客観的に見れば、呼ぶも行くも「近づいていってくっつく」
という言葉に置き換えることが出来るよね。

85 :
>80
「あらゆる再帰呼び出しはすべて末尾再帰に書き直せるんですか?」
と小一時間問いつめたいw。
多重再帰なんかはどうするの?
そんなもの使うなと言うのは無しねw。

86 :
>>85
>「あらゆる再帰呼び出しはすべて末尾再帰に書き直せるんですか?」
末尾再帰の意味を知ってたら、そんな間抜けなことイワンの馬鹿。

87 :
>86
それで、出来るの?出来ないの?

88 :
>86
Shiro Kawaiさんの書いている
「なんでも継続」でも読んで良く考えてみてね。
再帰呼び出しをするのはScheme等の
関数型言語だけじゃないよ。
C言語でも普通に行われている。

89 :
>>88
???
なんでそんな当たり前の話を得意げにしてんの???

90 :
>89
人によっては当たり前の事じゃなさそうだから。

91 :
>>79
>>1 を100回読め

92 :
>>77
つ 継続渡し

93 :
継続渡しに書き換える必要があるということは「関数とはgoto」
だけでは済まないということを意味していると思えるけどね。

94 :
push offset hoge
jmp sub
hoge:

95 :
 move pc+xxx, reg1
 jump unko
  :
  :
unko:
 move reg1,pc

96 :
>>10くらいしかまともなのがいないけど
関数は順次を抽象化する意味だと思うのでgotoとは意味が違うとおもう。

97 :
そんなことは承知の上でネタ話しているんじゃないの?

98 :
>96
サブルーチンとして繰り返し呼び出される機能を切り出してまとめるのは
構造化プログラミングの重要な要素だと思うけどね。
>10やあなたの言う「関数」は純粋関数型で言う「関数」じゃなくて
むしろ副作用に主要な目的がある事が多いC言語などで言う「関数」
の事だよね? つまりはサブルーチン。
私には、むしろ >10がネタ振ってるように思える。

99 :
>繰り返し呼び出される機能を切り出してまとめる
てのは構造化以前からあるイディオムだけどな。

100 :
>99
構造化以前からあったとしても(実際あるけど)「構造化プログラミング」の
重要な要素としてダイクストラが唱導してるんだからそれで良いじゃん。

101 :
>>100
> 「構造化プログラミング」の重要な要素としてダイクストラが唱導してる
ソース


100〜のスレッドの続きを読む
[RPA]PC自動化技術総合スレ[効率化] Part.5
テスト
MVVMについて語ろう
Excel VBA 質問スレ Part53
集合論に基づいた言語を作りたい
結局プログラム作るのってWinとLinuxどっちがいい?
【Delphi】Embarcaderoオッチャ その34【C++ビルダ】
動的言語で大規模開発
今だからこそ2ch代替サービスの実装を考えるスレ
訃報: C 言語の開発者、デニス・リッチー氏が死去
--------------------
育児している奥様6550
コンパクトカー総合スレッド Part163
デザインがカコイイサイトを紹介しあうスレ
stylo a plume-仏蘭西-フランス-FRANCE筆記具スレッド
【竹野内豊】 With Love 【田中美里】 2
女が犯罪をして男が被害者になった場合
人工甘味料で善玉菌が減少…腸内環境を壊す食品添加物とは
【名無し奥も○○奥も】 気楽に井戸端会議 6924【みんな来い】
バレエレッスンに使う曲でどれがすき?
【恋活】pairs(ペアーズ) Part313【婚活】IDワッチョイなし
I'm Screaming LOVE
【ポプスト】ポップアップストーリー155頁目
能登麻美子156
キン肉マンマッスルショット Part362
安ウイスキーランキング99
【独立】ボトラーズモルトを語ろう 67本目【瓶詰】
史上最低の嘘つか八百長横綱の白鵬を国外追放にしたいすっね!
■■速報@ゲーハー板 ver.51635■■
【悲報】(^p^)あうあうあーな主人公をヒロイン達に介護させる『ガイジ系主人公』がブームに。 イキリ太郎はもう古い [856517811]
第113回 歯科医師国家試験 part5
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼