C言語なら俺に聞け 141 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/07/17(月) 21:06:47.63ID:J4JGo3XO
C言語の話題のみ取り扱います C++の話題はC++スレへ
質問には最低限の情報(ソース/コンパイラ/OS)を付ける
数行で収まらないソースは以下を適当に使ってURLを晒す
https://paiza.io/
https://ideone.com/
http://codepad.org/

C11
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf

C99
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf
http://kikakurui.com/x3/X3010-2003-01.html

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/

JPCERT C コーディングスタンダード
https://www.jpcert.or.jp/sc-rules/


http://mevius.2ch.net/test/read.cgi/tech/1494508803/
http://www.geocities.jp/c_cpp_cs/about_c/
2017/07/17(月) 23:55:41.84ID:81nqESXy
>>27
で、どんな問題があるの?
2017/07/17(月) 23:57:28.74ID:4pA3RK/K
>>27
まずCスレでPythonの話題持ち出したお前が何言ってんの?w
2017/07/18(火) 00:06:20.95ID:zmpO/wkd
>>27
うわー最初は
viod say_hello(count){
if (--count<0) return;
printf("hello");
say_world(count);
}
void say_world(count){
printf(" world!\n");
say_hello(count);
}
みたいな例を出してたのに、それが出来ると分かるないなやわざわざPythonで出来ない例持ち出して来てら
これアンチしたいだけじゃん
2017/07/18(火) 00:08:33.09ID:tZS7qvye
>>28
いや、ラベルって「そこから下」に対しては保証されてるが、
「そこから上」って保証されてるか?
まあこの言い方では通じないと思うから具体的に書くと、

(A)
label:
(B)

で(B)側にゴミがない=次の命令がすぐ詰まっていてそこにJUMPすれば動作する
ことは保障されていると思う。これは普通の使い方だから。
ただ、上から流れてきたときに、(A)側にパディングされてたりしないか?というのは微妙で、
x86だとイミディエートに十分な長さがあるから問題ないとして、
16bitとか8bitとかの場合、コード領域にイミディエートを積んでいることは普通にあって、
しかも結構適当な場所に吐かれていた記憶が。
だからコンパイラ側に「ここは明らかに通らない」という風に見える場所はかなり危険かと。

ただし既に言っているが、俺は仕様には詳しく無いから、なんともいえないのだが。
2017/07/18(火) 00:20:24.14ID:yhFxnttF
>>32
この場合実行時にジャンプ先のアドレスを代入するのでその手の問題は無いでしょう
https://docs.oracle.com/cd/E19205-01/821-0386/bjabt/index.html
2017/07/18(火) 00:21:58.12ID:tZS7qvye
>>29
子関数を下に書いた方が分かりやすいときに、それが出来ないのが問題。

>>31
それは俺の間違いだった。俺が思っていたほどは糞ではないのも事実だ。
ただしやっぱりJavaScriptやCと比べたら糞だよ。

しかしお前らも知っていると思うが、
Pythonの最大の糞ポイントはラムダに式しか書けない事だろ。
つか、糞ポイントがぽこぽこ出せる時点で糞言語なのは確定なんだよマジで。
そしてCやJavaScriptの思想とは対極にあるのがPythonだ。
それを使うのはお前らの自由だが、それをCスレで喚くのはキチガイだ。
C的価値観からするとPythonなんてキチガイ馬鹿用言語だよ。
逆にお前らがPythonスレで
「Cみたいなシートベルトもエアバッグもない車に今更乗れるか!」って
言ってりゃいいんだよ。

というわけでお帰りくださいマジで。
俺は思想的にPythonとは合わないから、自主的に使うことはないと思います。
2017/07/18(火) 00:25:56.65ID:tZS7qvye
>>28,33
ああすまん間違えた。確かに問題ない。普通の使い方だ。
俺が勘違いしてた。
2017/07/18(火) 00:30:29.84ID:NDJOFNKG
>>32
コード領域にイミディエイト積んでいるのは当たり前
イミディエイトは即値
アセンブリコードのニーモニックでオペコードに直接データ(値)を指定するのだから
コード領域にしかイミディエイト値は存在し得ない
2017/07/18(火) 00:31:52.64ID:zmpO/wkd
>>34
そもそも最初にCスレにPythonの話題を書き込んだのは君なのに何言ってんの?
こっちはそもそもPythonを擁護してるんじゃなくて君の言っていることの変な部分を指摘してるだけだぞ
38デフォルトの名無しさん
垢版 |
2017/07/18(火) 00:34:45.35ID:/ZeLwNbO
>>34
なんか知らんがHaskellみたいな順序に依存しない言語がおまいさんにあってる気がする。
2017/07/18(火) 00:44:21.05ID:tZS7qvye
>>36
いや、オペランドの長さが足りなかった場合、
中途半端なところにデータ領域を確保するCPUもあるって事。

>>38
Haskellは意識高すぎて無理だった。
てかあれ、遅延評価以外目新しくないよな?
そしてその遅延評価はC++にテンプレートでパクられてて笑ったが。
あれでC++のテンプレートの汎用性の高さに驚いたよ。

ちなみに、他言語のすごいコードって知ってるか?見てみたいとは思うから。
例えばCなら、LinuxのカーネルやGit(作者同じ)がそうだし、
C++ならchromeやV8が多分そう(といっても割とCらしいが)
PythonやHaskellって喚いているだけで現物がなくね?
所詮スクリプトで使い捨てコードが多いってことか?
2017/07/18(火) 00:47:51.04ID:gHxy0snY
>>39
PythonアンチカスPythonアンチスレに行け
二度とこのスレでPythonの名を出すな
2017/07/18(火) 00:55:04.83ID:tZS7qvye
そういやgotoで思い出したが、
マルチレベルbreakはあってもいいと思うけどね。
gotoがあればなあ、ってのは大体このケースだろうし。

オレオレパーサも組めない範囲でもないんだろうけど、
やっぱ誰かががっつりデバッグ済みにしてくれてるのを使いたいよ。
2017/07/18(火) 01:00:22.85ID:NDJOFNKG
>41
その用途に最も近いのは例外処理のtry-cattch構文だろうな
C言語では使えないけど
2017/07/18(火) 01:00:53.59ID:NDJOFNKG
try-catch
2017/07/18(火) 01:03:09.04ID:zmpO/wkd
try-catch遅くなかった?
2017/07/18(火) 01:03:12.76ID:r4nh1nKp

そのCスタイル22k行のコードはどういう書き方をしてたから読みやすかったんだ?
2017/07/18(火) 01:06:51.15ID:NDJOFNKG
>>44
遅いって一体…
try-catch使える独自拡張とかあったっけ?
2017/07/18(火) 01:09:17.66ID:zmpO/wkd
>>46
あー、遅かった気がするのはC++の話だわ
まあ例外処理が速い言語なんてないと思うけどさ
48デフォルトの名無しさん
垢版 |
2017/07/18(火) 01:10:26.49ID:sjXtAWuw
setjmp, longjmp はペア
2017/07/18(火) 01:11:57.66ID:tZS7qvye
>>42
いやtry-catchはだいぶ違うぞ。

てかあれはC的エラー処理とは逆を行っている。
ただ最近は非同期が流行りだしてtry-catchでは対応できなくて
値埋め込み≒C的にはなってきてる。
個人的にはtry-catchは要らないなあ。

マルチレベルブレークはまあ、フラグ使って書けはするが、
見た目汚いから何とかならんのか、といったところ。
どっちかというとショートカット論理に使う。
2017/07/18(火) 01:21:43.38ID:yLpc3eXF
>>34
Pythonがゴミだからなんなの? わざわざCスレでPythonアンチしていい理由にはならないよね
しかもあんな的外れで何も知らないこと丸わかりなアンチ書き込みしたら対象がどんな言語であっても荒れるに決まってるよね?
帰るのは君だよ
51デフォルトの名無しさん
垢版 |
2017/07/18(火) 01:32:30.51ID:/ZeLwNbO
>>39
すごいコードってのが分からんが、Haskellのprintfはコード見れるけど全く分からん。
(Hoogleでprintfで検索してソース覗く)

型推論出来れば普通のprintfにも、フォーマット済の文字列欲しい時はsprintf的にも使える関数なんだが。。。
2017/07/18(火) 02:23:27.20ID:tZS7qvye
>>51
おうサンクス。見てみたがなるほど分からん。
つっても俺はHaskellの文法も覚えてないレベルなんだが。

ただまあ、その仕様なら、確かに短いのかもね。
GNUのprintfって確か400行程度でgotoが20個くらいあるトンデモコードだったはずだが、
(探したけどすぐには出てこなかった)
それよりも仕様は大きいからねえ。
2017/07/18(火) 02:24:26.42ID:tZS7qvye
>>51
> すごいコード
これな。
俺が思うに問題はこういう「下位コード」ではなくて、
printfやオブジェクトを呼び出す「中位コード」の書きやすさだと思うんだよ。
関数型の連中と話していて違和感を感じるのはそこで、
奴らは10行のコードを5行にすることに精を出しているが、
10k行のコードを5k行にすることには興味が無いように見える。

実際のアプリを書いていて差が出るのはそこで、
Cはその点、最適なデータ構造を目指す、という方向に特化している。
だから構造体ポインタの塊になってしまうわけでさ。
それをもうちょっと自動的に取り扱おうとするとオブジェクト指向になり、C++になる。

で、そこらへんの「中位コード」のサンプルが無いんだよ。
具体的には10k-数万行を必要とするOSSアプリ。
Cの場合はこれはいくらでもあって、既に書いた通りlinuxやGit等。
C++ならFireFoxでもchromeでも、OSSで開発されているからいくらでも読める。
JavaScriptは最近atomエディタというのが出てきた。まあそれ以前から見放題ではあったが。
これに対して、「Haskell製の有名アプリ(OSS)」ってないよね?
(というか俺が知らないだけではあるが)

関数型の連中はCみたいな手続き型を悪く言うのだけど、それは全て下位コードなんだよ。
そして現実的には、下位コードなんて短く書けても大して意味無いんだよ。
どうせ読まないから。(名前がprintfな時点で読み飛ばし決定だし)
ただ、短く書けること自体はやはりすごくて、ポテンシャルがあるのは認めるが、
それが本当に使い物になるのか?については俺はちょっと疑問なんだ。
だから実際に動いているものを見て、どうなのか確認したいわけでさ。

というわけでHaskell製の有名OSSアプリあったら教えてください。
2017/07/18(火) 02:49:55.27ID:FK0nGZqt
>>27
LLで関数をオブジェクト扱いするような言語だと宣言前の関数を呼び出せるの相性悪いんだよね

一応確認して見た(シェルスクリプトみたいな特殊なものは無視)
Ruby→呼べない
perl→呼べない
lua→呼べない

PHP→呼べる(ただし、条件分岐内などの文脈で宣言されていない関数のみ)
JavaScriptl→呼べる(関数宣言「文」のみ)

JavaScriptの「巻き上げる」っていう仕様は結局わかりにくくて、ECMAScript以外で採用してる言語はないはず
2017/07/18(火) 03:10:01.00ID:FK0nGZqt
>>53
Pandocは現状かなり知名度あるんじゃないかな
https://github.com/jgm/pandoc

適当にググったらMoongiftのHaskellタグのやつそこそこあった
http://www.moongift.jp/tag/haskell

Pythonに関しては現物を見たことないの常識的にやばいと思うが・・・
機械学習とか数値処理とかの学術系はpython無双だし、Ansibleやyumみたいな管理系統、GUIソフトですらお前Python通って時がちらほら
Googleも社内標準言語にPython入ってて、Githubにもいくつか公開されてるな
2017/07/18(火) 05:04:08.81ID:a2LOcSSt
>>20
それ再起呼び出しに対応できないことぐらいは理解してるよね?
2017/07/18(火) 05:45:17.46ID:yhFxnttF
>>56
そもそも、Cでは大抵別の関数に切り出すからそんな心配いらんよ
2017/07/18(火) 08:27:43.78ID:qfl2Yypx
>>57
はあ?
ローカル関数でも再起は普通に使うし心配いらんって言われても困るわ
むしろお前の頭の方が心配だよ w
2017/07/18(火) 08:41:06.12ID:NDJOFNKG
別の関数として切り出しているから再起が出来るということだろ
無名関数の場合は再起には工夫が必要
>>20は無名関数とすら呼べない代物ではあるが…
https://ja.wikipedia.org/wiki/%E7%84%A1%E5%90%8D%E5%86%8D%E5%B8%B0
2017/07/18(火) 08:58:56.41ID:yhFxnttF
心配性だねえ
再帰な
61デフォルトの名無しさん
垢版 |
2017/07/18(火) 10:00:20.99ID:9AYHL0AJ
>> https://mevius.2ch.net/test/read.cgi/tech/1494508803/990

> しかしヘッダファイルを用意するなんて完全に二度手間だし、

失笑
仕様と実装に分けて管理することが何の二度手間なんだよボケ
APIだとかインターフェイスだとかみんなそうだろうが


> コンパイラが自動的にやれよマジで、と思ったことは無いのか?

あああるよ
内製でサクッと作れてしまうほど簡単なことだからなおまえには簡単じゃないかも知れんがw


> 面倒ならなしでよし、

そうなってるだろうが、まさか知らんのか?


> その場合はコンパイラが勝手に探してくる、

これがおまえの言う「自動化」か
ワードやエクセルが「自動で」いらんことしやがるようなのがコンパイラにもついていて欲しいのかw
俺は反対、ライブラリをバージョン管理してるときなど断りもなく最新だか旧版だかとやられたら殺意がわく


> お前みたいに疑問を持ってない奴

疑問は持つぜ
おまえみたいに間違った正義を説くアホは見逃してねえだろ
2017/07/18(火) 11:46:36.57ID:Oj2nYHmM
CL /Zg じゃあかんのけ?
2017/07/18(火) 12:41:25.17ID:gVG2yFi+
>>59
無名関数の話なんて誰もしてないから無駄に絡んでこないでくれ
64デフォルトの名無しさん
垢版 |
2017/07/18(火) 12:41:58.87ID:IlqGlOEF
まだ続いてたのか……
仕様に不満があるのは理解できた。同意できるかどうかはともかく。
そろそろ、「不満があるから何をしてるのか」という話を聞きたいな。
2017/07/18(火) 14:49:00.45ID:D0vI4DI2
そもそも個人的にPythonをプログラムと呼ぶのに違和感ある
Pythonはスクリプトだろ
66デフォルトの名無しさん
垢版 |
2017/07/18(火) 15:27:18.14ID:P4sGRRLT
お願いします。どうしても、課題ができません。どなたかわかる方いませんか?

text.txtというファイルに以下のような個人情報が保存されているとする。これを読み込み、実行例のように画面に出力するプログラムを作成しなさい。

ヒント: 氏名の読み込みでは"name: %s\n"のような変換仕様を用いると良い。

▼text.txtの内容
name: Ichiro
age: 20
weight: 65.5
e-mail: ichiro@foo.bar
▼実行例
氏名: Ichiro
年齢: 20
体重: 65.5
Eメール: ichiro@foo.bar
67デフォルトの名無しさん
垢版 |
2017/07/18(火) 15:27:59.32ID:P4sGRRLT
#include <stdio.h>

int main(void)
{
int x;
double b;
char str[100];

FILE*fp;
fp=fopen("test.txt","r");

if(fp==NULL){
printf("ファイルをオープンできませんでした。\n");
return 1;
}else{
printf("ファイルをオープンしました\n");

}
68デフォルトの名無しさん
垢版 |
2017/07/18(火) 15:28:25.02ID:P4sGRRLT
fscanf(fp,"name:%s",&str);
printf("氏名:%s\n",str);
fscanf(fp,"age:%d",&x);
printf("年齢:%d\n",x);
fscanf(fp,"weight:%d",&b);
printf("体重:%.1lf\n",b);
fscanf(fp,"e-mail:%s",&str);
printf("Eメール:ichiro@foo.bar\n",str);

printf ("ファイルを読み込みました\n");
fclose(fp);
printf("ファイルをクローズしました\n");
return 0;


}
69デフォルトの名無しさん
垢版 |
2017/07/18(火) 18:43:44.87ID:/pPGIQYg
Makefileの書き方で質問なんだけど

all: hoge piyo fuga

みたいな行があるとして、 依存ファイルを変数みたいに使いたいんだけど
どう書いたらいいの? いちいち

HOGE := hoge piyo fuga
all: $(HOGE)

みたいに書かないとだめなの?
70デフォルトの名無しさん
垢版 |
2017/07/18(火) 20:34:14.13ID:Cdvgr3b8
>>69
とりあえず俺は知らないんだけど、参考文献どうぞ。
https://www.oreilly.co.jp/library/4873112699/
無料でpdfダウンロードできる。
2017/07/18(火) 21:58:43.01ID:zbCywyZZ
>>66
課題なら、>>68で十分なのだろうけど実務で使うときは幅指定必須なので、先生に聞いとけ〜

%100s%*とかね。
2017/07/18(火) 22:05:43.42ID:zbCywyZZ
>>69
変数みたいにつかって何したいかわからんな。
makefileってそういうものだとしか、言えない。

依存関係は依存するファイルをコンパイラが出力してくれるから、それをincludeするなんてのも良くある。
73デフォルトの名無しさん
垢版 |
2017/07/18(火) 23:26:17.54ID:fPBWIN/L
>>68
惜しいな。

> fscanf(fp,"weight:%d",&b);

ヒント: % の後。
74デフォルトの名無しさん
垢版 |
2017/07/18(火) 23:30:58.21ID:fPBWIN/L
>>68
もう一箇所。

> fscanf(fp,"e-mail:%s",&str);
> printf("Eメール:ichiro@foo.bar\n",str);

惜しいな。strに読む所は良い。その後、それを出す所。これだと固定の文字列が出るだけだよね。
2017/07/18(火) 23:36:18.53ID:Th9l296P
専門学校一年です
プログラム言語っていくつも必要?応用性ある最強言語一つあればいいんでないの?
2017/07/18(火) 23:48:43.24ID:tZS7qvye
>>46,48
なんか実装している奴いるぞ。
http://www.nurs.or.jp/~sug/soft/super/longjmp.htm
http://www.nurs.or.jp/~sug/soft/java/java25.htm
2017/07/18(火) 23:49:23.68ID:tZS7qvye
>>54
Perlは出来るぞ。
Rubyは出来ないようだが。これは予想外だった。つかMatzはこっち側のはずだが。
luaは出来ないね。LiveDemoで確認した。
http://d.hatena.ne.jp/perlcodesample/20080615/1213501216
https://soudan1.biglobe.ne.jp/qa776599.html

JavaScriptが文だけなのは全く問題ない。以下コードは動く。
代入は他文と同様上から順に評価されるだけであって、シンボルは見えてる。

(function(){
say_hello();
var say_something = say_world;
say_something();
function say_hello(){console.log('hello');}
function say_world(){console.log('world');}
})()

> JavaScriptの「巻き上げる」っていう仕様は結局わかりにくくて
これは俺は「分かりにくい」というのが理解不能で、単に関数スコープなだけだ。
Cで言うANSI以前の「ド頭で全部宣言しとけ」でしかない。(C89と言うのか?)
ここで間違ったらCはSyntaxErrorだったはずだが、
JavaScriptの場合はそこらへんがユルくて、
「どこで宣言しても頭で宣言したことにして、エラー無しで動作」となるだけ。

Rubyが出来ないのはMatzが方針を間違えてるね。
「全部先に宣言した方が読みやすい」ってのはMatzの意見であって、
全員がそう思っているわけではない。だからRubyの思想なら制限しては駄目だ。一貫性がない。
逆にPythonはユーザーごとのばらつきこそが可読性を低下させるという思想だから、
制限するべきだし、実際にそうなっているから問題ない。こちらは一貫性がある。
結果、俺にとってはRubyも糞だと判明しだだけだな。
2017/07/18(火) 23:50:25.98ID:tZS7qvye
>>55
> 機械学習とか数値処理とかの学術系
あまり詳しくはないが、MLとかは当てにならん。
あれらはループがえぐいだけで中身は大した事はない。
大半が下位コード、1k行か精々3k行程度のはずで、俺なら使い捨てにする。
しかも自分の環境で動けばいいだけのイージーモードだ。
がっつり保守されてる奴を見ないと実用上の向き不向きは分からん。
ウォーターフォールで作ればアホでも綺麗に作れるのは当たり前であって、
問題はそこからの耐性だから。
本来のOOPもそこからのスタートだったろ。
最近のOOPは若干暴走気味で、設計の設計の設計みたいな感じになっている奴も多いが。

で、教えてもらって文句を言うのも悪いんだが、、、
> pandoc
マークアップコンバータは再帰で実装できるからHaskell向きかもしれん。
ただこれもかなり簡単で、しかもどの言語でも実装できる代物でしかない。
要するに再帰とストリング系が強ければいけるから、
LL言語ならどれを使っても問題ないし、苦労もしないだろう。
Haskellを使ったからこそ生きる、というものではないと思う。

Cが使われている現場は、Cでしか書けないから、だ。
それはお世辞にも生産性が高いとはいい難いことの裏返しではあるが、
linuxKernelについてはLinus自身がC++では無理だったと言っているし、
Gitについても同様だ。
> gitのような、効率を第一の目的としたのには、C++の「利点」とやらは大失敗なんだよ。
> 実際のところ、LinuxではC++を試したことがある。1992年のことだった。
> 結果はクソだった。マジで、カーネルコードをC++で書くのは、ド低脳の考えだ。
> https://cpplover.blogspot.jp/2013/05/linus-torvalsc.html
実際Git全盛だし、Linuxについても
「安全なOOPでカーネルを書き直そう!」という話が10年程前には在った筈だが、
今全く聞かないので、完全にポシャったのだろう。
結果的にLinusの意見の正しさを証明している。
2017/07/18(火) 23:51:25.94ID:tZS7qvye
Haskellの売りは遅延評価だろ?
ならば、遅延評価がビルトインで提供されているからこそこれだけ簡単に実装できる、
そうでない言語ではかなり辛いことになる、というところで戦わなければ意味が無い。
マークアップコンバータは違うし、そこに挙げられている他12種も同様だ。
Linusの言葉を借りるなら、
> (c) 授業でそういう課題を与えられた者
でしかない。他言語を既に十二分に使えるときに、それらアプリでHaskellを選択する理由がない。

遅延評価の利点は、俺が思うに、適当に書いても速いことだ。
具体的には、超大富豪プログラムを動的に貧民プログラムに変身させられる事だ。
だからチャキチャキ書けないと意味が無いのだが、Haskellはお世辞にもそういう感じではないだろ。
だからHaskell使いがあの程度のアプリしか作れない時点で将来性はないよ。
彼らもそれなりに優秀なはずで、仮に俺が学んだとしても、彼ら以上のものを作るのは容易ではない。
それで作れるものがあの程度?そそられねーな、って感じ。
あのラインナップなら今でも他言語で作れるし、多分そんなに苦労もしない。

とはいえこれはサンプルとしては素晴らしい。ありがとう。
保守されているし、俺が確認したい中位コードは大量に含まれているはずだ。
俺自身が他言語で実装できるだろうというのもいい。オレオレ実装と比較できる。
つまり、言語比較という意味ではかなりいい素材だ。
ただそれ以前に俺はHaskellをほぼ読めないので、読むのはずいぶん先になりそうだ。
これについては申し訳ないね。
2017/07/18(火) 23:52:11.26ID:tZS7qvye
> Ansibleやyum
お手軽スクリプトの域を出ないと思う。最悪、シェルスクリプトでも出来る範囲だろ。
C++の現場、たとえばブラウザでは、本当にエグイほど仕様変更が入って、
結果的にソースコードはぼろぼろになっていって、それでも保守している。
だからやっぱりLL言語はLL言語なんだと思うよ。
これだからスクリプターは、、、というのも当たってる。戦場の厳しさの次元が違う。

一通り動かすところまではどの言語を使っても出来る。
その過程で、例えばHaskellの遅延評価のような言語独自のフィーチャーがあり、
それを生かせれば素晴らしい。
しかしPythonにはそもそもそれがない。特に可もなく不可もなく、的な言語だ。
そして問題はそこから先で、
当初想定してなかった仕様変更が入ってきたときどこまで耐えられるかなのだが、
これに関してはPythonは不可も無いのだからそれなりではある。(悪くはない)
(なおJavaScriptはデタラメなパッチで一時しのぎする方法には事欠かないため、
俺はこの点も気に入っている)

エコシステムが云々、というのはおいておいて、
言語自体の能力で言えば、Pythonを積極的に選ぶ理由が一つもない。
とはいえ他言語は色々尖っていることも多いので、消極的にPythonってのもありだとは思うし、
実際そこにポジションしているとも思うが。Javaに近いというか。
両言語ともそれで繁栄しているのだから間違いでもないわけだが。
2017/07/19(水) 00:28:57.41ID:42DPUduf
>>75
金鎚だけで家が作れるかね?
2017/07/19(水) 00:53:51.97ID:PZqfvVeo
>>75
そーいう発想は大事
大きいプログラムも小さいプログラムも
スケーラブルに書けるほうが良い!
というのが動機で出来た言語があるにはある
2017/07/19(水) 01:09:15.68ID:Cm6fsZ7A
Cは大も小もなんでも書けるよ
ただ工数がかかるけど
84デフォルトの名無しさん
垢版 |
2017/07/19(水) 01:28:24.97ID:q7UYRLiM
確かにCはなんでも書ける。
きめ細かくハードウェアに密接するようなのも書ける。
OSやデバイスドライバも書ける。
OSなし環境向けの組み込み用マイコンボードのROMに書くプログラムなんかも書ける。

逆にいうと、きめ細かくしか書けない。それなりのライブラリが用意されてないと作るのが大変。
2017/07/19(水) 01:36:11.94ID:9e7c5i6Q
つ アセンブリ言語
2017/07/19(水) 03:29:33.92ID:YP+Z6klr
>77
perlのやつは勘違いだった、すまん

>「分かりにくい」というのが理解不能で、単に関数スコープなだけだ。
関数の巻き上げは、ブラウザの種類、バージョン、strict modeの有無の組み合わせで位置と動作が不安定になったりするのはかなりわかりにくいと思う
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions_and_function_scope

>Rubyの思想なら制限しては駄目だ。一貫性がない
Rubyは「その場にメソッドを定義する」という機能を持つ文が用意されているだけ
「すべてはオブジェクト」という思想的に一貫してる

その結果、javascriptではできない関数の中身や別ファイル、if文の中とかでもメソッド定義が比較的自然に行える
hoge = □

def hoge
 ■
end if true

みたいなこともできないと仕様上不自然。
javascriptみたいにifをつけると巻き上げが起こらないみたいにすると、この場合では
ifなし→□
ifあり→■
みたいに非直感的な挙動になって一貫性が失われる。そう考えると、言語全体の仕様の見直しが必要になって・・・
と考えてくと、評価時に定義されるというのはそれはそれで合理的。
87デフォルトの名無しさん
垢版 |
2017/07/19(水) 03:52:13.57ID:q7UYRLiM
>>85
それの場合CPU毎に覚える必要があって面倒。
C言語コンパイラはだいたいのCPU向けに素早く実装される傾向にあると思うのでアセンブリ言語よりは良いと思う。
2017/07/19(水) 04:35:20.40ID:YP+Z6klr
>>78-80
Haskellはちょうど具体例を知ってたから上げただけで全然わからないから詳しくはわからんので申し訳ない
人から数学系とHaskellを極めればいろんな界隈で需要があるらしいという噂だけ聞いたことはあるが


他の話は結局何が言いたいのかわからん
PythonはLL言語なんだから「お手軽スクリプト」として使うのは当たり前じゃん
機械学習とかの研究分野は、実装を素早く作って考えた手順を評価してを高速に繰り返すんだからC言語では無理。

それこそgitでも最初期の仕様を考えてるときはperlとか使ってたし
http://gihyo.jp/dev/serial/01/alpha-geek/0040


>消極的にPythonってのもありだとは思うし、実際そこにポジションしているとも思うが
大体の人はそれを理解してるのに突然「Pythonはクソ!使ったことないけどクソ!」ってやつがわいてきてみんな頭の中???
Haskellについてのやつを見ても思うけど、断片的な経験と情報、ネットで見た内容とかを元に理解したと思いこむ癖があるんだろう
個人のソフトはともかく、Googleとかパッケージマネージャとかで積極採用されるからにはそれなりの評価点があるはずなんだから、自分の考えは常に疑って更新したほうがいいぞ
2017/07/19(水) 04:42:21.33ID:I/2F8nLs
要するに「なんでも書ける」は言い過ぎだということ
C言語がハードウェア寄りの記述が得意な言語であることは確かだけれど
それでも大抵はわざわざインラインアセンブラという抜け道を用意している
その理由はどうやっても書けないこともあるから
2017/07/19(水) 04:43:24.78ID:I/2F8nLs
アンカ忘れた
>>89>>87へのレス
91デフォルトの名無しさん
垢版 |
2017/07/19(水) 05:21:02.93ID:2gF8BL9h
>>89
割り込み関係みたいに特権命令を使うところは
「きれいなC」だけじゃ絶対書けないな
2017/07/19(水) 08:01:13.73ID:/uBE13O5
使ったこともない言語をディスり、同意しない相手は無知だと思っているガイジに汚染されたスレはここですか?
93デフォルトの名無しさん
垢版 |
2017/07/19(水) 08:13:15.18ID:q7UYRLiM
>>89
ああ。書けないものもあるな。
そうなるとインラインアセンブラで無理矢理埋め込んだりする事になるとは思うが、そういうのは普通は全体からすればほんの少しだよな。
94デフォルトの名無しさん
垢版 |
2017/07/19(水) 08:23:52.23ID:4WYjcaP8
>>53
Haskell処理系のGHCがまさにHaskellで書かれてるし、モナディウスっていうゲームはHaskeller界隈じゃ有名。
そもそもHaskellが有名になったのはPerl本家より早くPerl6の実装したのがキッカケ。
それまで知る人はほとんど居なかった。
2017/07/19(水) 08:29:05.26ID:I/2F8nLs
>>93
その通り

>きめ細かくハードウェアに密接するようなのも書ける。
>OSやデバイスドライバも書ける。
>OSなし環境向けの組み込み用マイコンボードのROMに書くプログラムなんかも書ける。

こういうのは全体からすればほんの少しだよ
2017/07/19(水) 08:39:40.95ID:iAmsiybP
>>75
そうだよ、みんなわかってないんだよ

PL/1, Ada ...
2017/07/19(水) 08:42:04.13ID:PZqfvVeo
>>92
そうだよ
こいつにレス返すと終わりが見えないぞ?っていうタイプ
それを無邪気に触っちゃうのがこのスレだよ

みんなさすがに今回ので学習したと思うけどw
98デフォルトの名無しさん
垢版 |
2017/07/19(水) 09:21:43.24ID:NslmVuOC
>>72
変数を使いたくない ってことです
2017/07/19(水) 09:28:45.98ID:rMOwSLhX
>>98
例えばどう書きたいの
2017/07/19(水) 10:08:57.54ID:iAmsiybP
>>91
組み込み用コンパイラとかは拡張構文できれいに書けたりするけどね
2017/07/19(水) 10:35:07.29ID:Fe8jikVu
プラットフォーム依存のレジスタいじったりする必要があるから
綺麗なCってのは難しい
綺麗なCの定義にもよるけど
まぁ関数化するなどして隠蔽化はできるけど
102デフォルトの名無しさん
垢版 |
2017/07/19(水) 10:41:07.44ID:4WYjcaP8
>>75
誰かが自分には分かりやすく書いた言語が、他人には分かりやすいとは限らない。
で、書ける奴は他人の言語押し付けられるなら自分用言語作っちゃう。
今も増え続けてる。
103デフォルトの名無しさん
垢版 |
2017/07/19(水) 10:50:02.60ID:4WYjcaP8
>>100
組み込みはPICアセンブラで遊んだだけだけど、PC向けよりもハードがまだ完成してないと言うか、SoCでCPU(MPU)とメモリは用意するから後は自分で追加してねって感じだし、返って文法としては単純かもね。
結局CPUとしては計算以外じゃポートやメモリに読み書きするだけだし。

ハード作りながら入出力の関数も自作する感じですかね?
2017/07/19(水) 11:04:35.78ID:NslmVuOC
>>99
HOGE := hoge piyo fuga
all: $(HOGE)
clean:; rm *.o $(HOGE)

みたいなのをたとえば

all: hoge piyo fuga
clean:; rm *.o ★(all)

みたいにすっきり書きたい
105デフォルトの名無しさん
垢版 |
2017/07/19(水) 11:06:41.55ID:PmVzrrzS
コンパイルするときにmakeとかcmakeとかありますけど他にもあるのかもしれませんけど
今ならどういうのが定番ですか?
2017/07/19(水) 11:13:41.95ID:NslmVuOC
>>105
makeなんか捨ててninja使おうぜ
2017/07/19(水) 11:49:17.31ID:HHR/5Ry0
>>104
ターゲットの依存ファイルを再帰的に展開すると言う事になるが、途中で止めたいとかわがまま言いだすだろ .hとか
例えそれが可能になったとしても、依存ファイルは、そのアクションを実行するために必要なので
削除するために作成すると言う極めて頭の悪い状況が発生する
2017/07/19(水) 12:36:53.34ID:BDmDUIr4
>>104
うーん正直上の方がわかりやすいと思うけどなあ
とりあえず下みたいなことをする方法は知らんわ。力になれなくてすまんな
2017/07/19(水) 13:37:37.50ID:NslmVuOC
>>107-108
無理なら無理であきらめるぜー! センキュー!
2017/07/19(水) 21:27:36.88ID:WSo7MpMs
cleanは、固定的に削除したほうがいいよ。でないとその内ゴミが混ざる。

まぁ、無理矢理やるなら
allに含めるターゲットを処理するときに中間リストへもファイル名を追加しといて、xargsに食わせるのが無難かと。
2017/07/19(水) 23:08:55.17ID:Cm6fsZ7A
時代はRubyのrake
2017/07/19(水) 23:40:47.89ID:87ZFTsAE
>>86
JavaScriptについては、Webリソース(というか個人ブログが多いが)も間違いが多いから注意した方がいい。
> strict modeの有無の組み合わせ
これが要らん。実際見りゃわかるが、全員 strict mode 使っている。
MDNは準仕様書みたいなものだから、非strict modeについても言及する必要もあるだけ。

> javascriptではできない関数の中身や別ファイル、if文の中とかでもメソッド定義が比較的自然に行える
いや、できるぞ。ただしやる必要もないし、意味もないが。
(strict mode の場合はif文中では禁止)

動的にクラス構成を変える必要があるケースはまずないが、(手抜きパッチを除く)
やる場合はプロパティとして差し込むので、それはただの文だ。どこにでも書ける。
function定義そのものではなく、関数ポインタを差し替える。
というか、ここら辺の流儀は他言語と同じだ。
俺は特に疑問を持ったこともなく、分かりにくいとも思わないが。
2017/07/19(水) 23:41:35.90ID:87ZFTsAE
> javascriptみたいにifをつけると巻き上げが起こらないみたいにすると
これが違う。(内容自体ではなく、考え方が違う)
プログラミングを暗記で済ませようという馬鹿はJavaScript界隈に多いが、
そうとしか捉えられないのなら、向いて無いから止めた方がいい。(君が上達することはない)
それは「数学は暗記だ!」と言っているようなものだ。
或いはどうにも高校の物理に全く付いていけなかった奴とか。
あれは今にしたら分かるが、抽象思考が出来ない奴には無理だったということだ。
そしてプログラミングではその抽象思考こそが重要であり、逆に、それ以外は大して必要ない。

順に評価されるべきものは順に評価され、(巻き上げなし)、
そうでないものはC的に静的に評価されるだけ。(巻き上げあり)
俺は疑問を感じたことはない。
「巻上げという仕様ガー」とか言い出すから余計に意味不明になるのであって、
そもそも最初から直感的だ。後方参照できるだけでしかない。
JavaScriptはC(正確にはC++)以上に文法が抽象化されているから、暗記には向いてない。
結果的にC++並みのことがC並みの文法で出来るようになっている。俺はここも気に入っている。

それとは別に、君が「全部上から順に評価してくれなきゃヤダ」ならRubyの仕様をマンセーすればいいが、
JavaScriptの仕様はC等コンパイル言語を使ったことがあるやつにとっては非常に直感的だ。
俺にとってはRubyの仕様はウザいだけだね。
2017/07/19(水) 23:42:29.67ID:87ZFTsAE
>>88
要するにスクリプト言語はラピッドプロトタイピングには向いているんだよ。
そしてPCの能力が十二分に上がったので、
その遅いコードでも十分実用的だし、問題ないからそのまま使われてる。
俺も、もう低位コードだけCのDLLにして、
中上位コードは全面的にスクリプト言語で行った方がいいと思っている。楽だから。
NumPyはまさにこれでしょ。俺からみてもgoogleの動きは全然不思議じゃない。
ていうか多分、マトモなプログラマならgoogleの動きを不思議に思う奴はいない。
君がそんな言い方をする時点で君は色々分かってないと自白しているようなものなんだが。

> Googleとかパッケージマネージャとかで積極採用されるからにはそれなりの評価点があるはずなんだから
評価点はないね。ビジネス上の観点でしかない。
googleは社内言語を絞ってる。C++/Java/JavaScript/Pythonだ。この中ならPythonだろうさ。
だから、仮にRubyやHaskellがgoogle社内で評価されたとしても、
それらで書かれたツールが出てくることはない。
2017/07/19(水) 23:43:14.27ID:87ZFTsAE
>>94
> GHC
サンクス、そうであったか。これもサンプルとしてはいいね。
> モナディウス
Haskellってexeかよ!やってみた。グラディウスにしては速すぎる、、、左手が辛い、、、

> Perl6
つかそれってどういうことだ?
構文解釈等に関しては、実は圧倒的に単純に実装できたりするのか?
pandocもそっち系だ。俺には遅延評価とは無関係としか思えないのだが。
2017/07/19(水) 23:50:34.51ID:/uBE13O5
知識のない奴程語りたがる好例
2017/07/19(水) 23:51:34.81ID:b4rxwY3N
C始めるためにVS2017インストして苦C見ようとしてるんだけどどこをどうすればソースを書けるのかちんぷんかんぷん
そもそもCの内容をC++で書けるのか怪しい
スレチかもしれないけど助けて詳しい人
118デフォルトの名無しさん
垢版 |
2017/07/19(水) 23:52:22.89ID:D2iudQ65
な、長ぇ…
2017/07/19(水) 23:55:40.31ID:/uBE13O5
完全な初心者?
2017/07/20(木) 00:08:04.51ID:hVyvHmVu
ラピッドプロトタイピング用に作られたのがスクリプト言語なんだから向いてて当たり前
ハードではFPGAなんかがASIC前のラピッドプロトタイピング用だね
しかし中上位コードしかかけん奴らがプログラマ気取る風潮はいかがなものかと危惧する
Cでの低位コードもスクリプト言語での中上位コードも書けんとな
2017/07/20(木) 00:09:55.72ID:m6IHlIP+
>>117
適当な場所(フォルダ)にプロジェクトファイルを作成します。
プロジェクトにソースファイルを追加します。
ソースファイルにソースを書きます。
ビルドします。
デバッグ実行して、正しく動作するか確認します。
バグがあれば修正します。
リリースビルドして、EXEを作成。
exeを配布します。
2017/07/20(木) 00:15:44.40ID:X5om2hjt
任意のエディタでソースを書きます。CL.EXEでコンパイルします。以上
2017/07/20(木) 00:16:25.56ID:u2xEebDY
>>116
にわかなやつほど語りたがる、ってやつだな
何が動機なんか知らんけど
愚にもつかない長文いっぱい書いちゃう子おるよな
これはもう、定期的に出てくるとすら言っていい現象だけど

>>121みたいな簡潔なレスのほうがよっぽど好感度あるわ
2017/07/20(木) 00:32:04.78ID:13Lyjczi
https://ideone.com/
http://codepad.org/

こういうサイト利用して、色々試してみたら?
2017/07/20(木) 00:32:44.03ID:AEwXV/7G
>>120
上二行は後付。sed->awk->Perl->その他もろもろ、だろ。PLD->FPGAでもあるし。
下二行は時代の要請。
> MITがSICPを教えなくなった理由
> https://cpplover.blogspot.jp/2016/05/mitsicp.html

俺は中上位コードだけでもいいと思うけど、書き捨てばっかやってるのは駄目だと思う。
こういうことをすると保守ではまるのかーがないと、回避する能力が育たない。
126デフォルトの名無しさん
垢版 |
2017/07/20(木) 00:36:40.77ID:lc7WOVge
>>115
関数型全般に言えるけど、言語やテーブルゲームの問題解かせたりし易い。
遅延評価はwebアプリでHTMLの長さを気にしないで読み込める無限リスト便利って読んだことあるな。
んなのどの言語でもそんな変わらんとは思うが。
どっちかと言うとIO部分分離してるから自然とMVCとかMVVMな設計になるってのがメリットに感じる。
2017/07/20(木) 01:40:25.59ID:AEwXV/7G
>>126
なるほど言語向きなのは関数型の特性か。
確かにbisonが一体化しているようにも見える。

遅延評価で無限リストがーってのは多分Webライタのデタラメ。
実際、無限リストなんて使おうと思ったことないだろ。
HTMLは多分頭からパースしないと悲惨なことになるだろうし。
(一部曖昧なところがあるらしい)

遅延評価は後払い方式のため、
読み込んだものの、結果的に使わずに捨てたデータが多い場合に負荷が軽くなる。
もちろんオーバーヘッドはあるので、全部使うのなら正格評価の方が軽い。
だから理想的にはどれを使うかきっちり管理して正格評価することだが、
これが面倒な場合は遅延評価にしておけば勝手にそうなる。
ノリとしてはGCと似てる。(管理が面倒なら遅延評価にしとけ)

で、マークアップコンバータとかも、全文書を評価することが分かりきっているのだから、
管理も要らず、普通に考えて正格評価の方が適している。だからあのラインナップは謎だった。
関数型言語の特性だということなら納得だ。

> 自然とMVCとかMVVMな設計になる
これはなあ、、、Cでも苦労するわけでもないので、言語特性ではなく、意識付けの問題かと。
実際にHaskell使おうって奴らはここら辺についても意識高いだろうし、
いい方向に寄与しているとは思うよ。
2017/07/20(木) 03:16:53.07ID:X0EJcA/q
>>112-115
>全員 strict mode 使っている。
新しいソースはね。破壊的変更だから古いソースはstrictじゃない場合も多い。

>俺にとってはRubyの仕様はウザいだけだね。
俺もメインでやってるのは静的言語だけど、JavaScriptもPythonもRubyも関数に関してはうざいと思うことはないな
単純に慣れの問題でお前のRubyやPythonの経験が不足してるだけだと思う

Pythonやる前はインデントって不便だろうって思ってたけどすぐなれたし、使ったこともない言語を適当にディスるのはよくないぞ

>最初から直感的だ、後方参照できるだけでしかない
初心者なら直感の理解でいいかもしれんが、ちゃんと仕様を理解するに越したことはない
undefinedが予約語じゃない、typeofの結果が意味不明みたいにjavascriptも含めどの言語にも直感に反する仕様が存在するし、それを利用したライブラリとかのソース読むときにある程度理解してないと困る

>俺からみてもgoogleの動きは全然不思議じゃない。
ID:LYlgQVUQとかID:tZS7qvyeとは別の人?
「Pythonは馬鹿用言語」「Pythonなんてキチガイ馬鹿用言語」っていう人にそんならGoogleみたいなところも使ってるよって言っただけなんだが

>googleは社内言語を絞ってる。C++/Java/JavaScript/Pythonだ
知識が更新されてないな。現在はC/C++、Java、JavaScript、Python、Go、TypeScriptのはず

>評価点はないね。ビジネス上の観点でしかない。
ビジネス上の観点も大事な評価点でしょ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況