【C?】最初の言語に何を選ぶか【Haskell?】

■ このスレッドは過去ログ倉庫に格納されています
1Mb
垢版 |
2021/09/09(木) 17:13:45.64ID:yI7BAQ6X
前スレ
ぶっちゃけ始めるのにいい言語て何?
http://mevius.5ch.net/test/read.cgi/tech/1583223433/
ぶっちゃけ始めるのにいい言語て何 part2
http://mevius.5ch.net/test/read.cgi/tech/1594883518/
ぶっちゃけ始めるのにいい言語て何 part3
https://mevius.5ch.net/test/read.cgi/tech/1599110613/
ぶっちゃけ始めるのにいい言語て何 part4
https://mevius.5ch.net/test/read.cgi/tech/1615612545/
ぶっちゃけ始めるのにいい言語て何 part5
https://mevius.5ch.net/test/read.cgi/tech/1622766330/

Haskell には賛否両論あるけど、そこは次の世代に判断してもらおう。
2021/09/09(木) 17:18:56.65
初期学習コストが高い言語を最初に学ぶというのは如何なものか
2021/09/09(木) 17:37:28.72ID:hvR+3cwr
すべての機能を一気に学ぶのではなく
段階的に学べば大丈夫?
2021/09/09(木) 17:43:04.64ID:42HI0dLk
Haskellとか誰がどこで使ったんだよ
2021/09/09(木) 18:06:49.41ID:18O2MBOf
>>1
それならベストな選択はRustです
RustはHaskellの型システムやモナドを取り入れたプログラミング言語です
そしてRustはメモリ安全性が保証されてGCも無くモダンな書き方で便利にプログラミングできるC言語の超越進化版でもあります
6デフォルトの名無しさん
垢版 |
2021/09/09(木) 18:43:00.78ID:VcdPV4nP
1.機械語
2.FORTH
3.LISP
4.C
この順がベスト
2021/09/09(木) 19:11:55.92ID:FKVpwywQ
1000 名前:デフォルトの名無しさん [sage] :2021/09/09(木) 18:41:37.72 ID:wE7qph1K
ぶっちゃけ始めるのにいい言語って言ってんのに、CだのRustだのHaskellだのってバッカじゃねぇのおっさんども
お前らの好みなんか聞いてない。
こんなクソスレはもういらん
初学者はPython、Javascript、Ruby、PHPの中から選べばいい。
2021/09/09(木) 19:36:32.37ID:18O2MBOf
>>7
その中から一つ選ぶならばJavaScriptかな
ウェブがらみは当然JavaScript必須であるし
スマホアプリやデスクトップアプリもJavaScriptだけでプログラミング可能
9Mb
垢版 |
2021/09/09(木) 20:58:27.88ID:yI7BAQ6X
>>4
Tarai 関数を Haskell で書いた例が、
前スレで紹介されている。
10Mb
垢版 |
2021/09/09(木) 21:02:02.94ID:yI7BAQ6X
>>3
それは、前の世代である我々に訊かれても返答に困る。
「いま」の世間に生きているあなたがたとは、
生きていた時代が違うのだから。
11Mb
垢版 |
2021/09/09(木) 21:10:04.32ID:yI7BAQ6X
>>6
言いたいことはよくわかるような気はするのだが、
> 1.機械語
の部分はニモニックなのかアセンブラなのかという
話はある。
Z80 とか M6809 とかのエミュレータがあったら
ちょっとお奨めな気はするんだが、
C 言語の「コンパイラ言語→アセンブラ→バイナリ」という
コンセプトに立ち戻ってみるのもよさそうに思う。
12Mb
垢版 |
2021/09/09(木) 21:22:34.52ID:yI7BAQ6X
まず仮想機械を実装して、
それ用のアセンブラを開発して、
コンパイラを書くというのはどうだろうか。
その仮想機械には、少なくとも
・フラグ
・アキュムレータ
・B レジスタ
・プログラムカウンタ
・スタックポインタ
があるとして、フラグには
・キャリー
・ボロー
・オーバーフロー
・エラー
があって、
メモリ空間は 64Kb。
で、それぞれの(フラグ以外の)レジスタのサイズは
16 ビットで、戻り値は 16 ビット固定でアキュムレータに
入っている、みたいな(ANSI-C になる前の)C 言語みたいな
教育用言語があったら面白そうな気がする。
13Mb
垢版 |
2021/09/09(木) 21:31:09.58ID:yI7BAQ6X
>>7
Rust は Forth の焼き直しだし、
Haskell は LISP の焼き直し。
C や C++ はアセンブラの焼き直し。

「温故知新」という言葉を思いだしてほしい。
2021/09/09(木) 21:46:07.20ID:18O2MBOf
>>13
RustにForth言語の要素は一切ない
その分類ならばRustのベースはC言語
そこへHaskellの型システムなどを持ち込み強力な静的型付けとするとともに
静的リソース管理によりメモリ安全性を保証したのがRust言語
15Mb
垢版 |
2021/09/09(木) 22:00:53.49ID:yI7BAQ6X
>>14
> RustにForth言語の要素は一切ない
「とりあえずスタックに積んどけばスタックポインタを
書きかえれば面倒臭くない」という思想が
FORTH っぽいように思うのだけれど気のせいか?
2021/09/09(木) 22:39:44.53ID:q0TKbS94
>「とりあえずスタックに積んどけばスタックポインタを
>書きかえれば面倒臭くない」という思想が

どこがRustと関係あると?
2021/09/09(木) 22:45:18.86ID:18O2MBOf
>>15
その点はCもC++もRustも全て同じ
いずれもスタック上に確保される変数(領域)は関数呼び出しが終わってスタックが解放される時に消えて使えなくなる
18デフォルトの名無しさん
垢版 |
2021/09/09(木) 23:30:31.90ID:f/JM052X
スタックを解放するのか
胸熱
2021/09/09(木) 23:53:35.58ID:18O2MBOf
>>18
すまん日本語略しすぎてたw
以下へ訂正

関数呼び出しが終わって
スタックポインタを元に戻す時すなわち
スタック上の領域が解放される時までに
消えて自動的に使えなくなる
20デフォルトの名無しさん
垢版 |
2021/09/10(金) 00:06:49.30ID:M/ht9nan
いや解放なんてしないだろ
2021/09/10(金) 00:30:17.75ID:59f2QwjZ
>>20
日本語難しいな
スタックポインタを戻すことを「スタック上で領域を解放」と呼んでよいと思う
なぜなら最初にスタックポインタ変更することで「スタック上で領域を確保」と呼ぶのだからその対義語
2021/09/10(金) 00:46:22.91ID:88EXXIi7
積み上げる、取り除く?
2021/09/10(金) 02:51:11.39ID:Arq1o4EZ
クレート?ていうかライブラリのコード規約で選ぶのはどうだろう。
最初なんだから、あんまスペルを省略されると判りにくい。
慣れると冗長で面倒になるかも知れないけど。
2021/09/10(金) 11:36:37.35ID:/+WUhMy8
最初はCじゃないか?
メモリの扱いが見えるようになってると、メモリの扱いが隠されてる言語でも良いプログラムが書けるようになる
2021/09/10(金) 19:58:00.69ID:me4B51C9
>>21
それってpopっていうのでは・・・
2021/09/10(金) 20:44:16.27ID:iOAXb/4V
>>25
スタックポインタの復帰にpopを使う方法もありだが
例えばメジャーな86系でメジャーなやり方なら別レジスタに退避させるのがメジャーな方法なのでmovになる
他にも完全にコントロールできるならスタックポインタの数値加算(スタックが0方向に伸びる場合)で復帰もあり

いずれにせよスタック上にローカル変数などの領域確保はスタックポインタの数値減算(同上)で行うのがメジャー
そしてスタック上のその領域の解放はスタックポインタの復帰(上述)で終わる
2021/09/10(金) 21:34:50.59ID:bDO2hW37
説明に必要な抽象度を調節できない人ってプログラマーに向いてないよね
2021/09/10(金) 21:45:28.86ID:ae9TKcqK
スタック上で関数ローカル変数の領域は
・スタックを伸ばして領域を確保
・スタックを戻して領域を解放
極めてシンプル
29デフォルトの名無しさん
垢版 |
2021/09/10(金) 21:58:24.62ID:kfFI0CKc
つまりまず最初にC言語をやるべきだな。
次にアセンブリ言語というよりCPUの共通的な概要仕組み。
そのあとHaskellかRustなどの強力な静的型付けプログラミング言語へ進むのが良いだろう。
2021/09/10(金) 22:42:43.39ID:kwXNo1Gk
こ・・・ここはお前の日記帳じゃねえ。
31デフォルトの名無しさん
垢版 |
2021/09/10(金) 23:28:58.62ID:EyQ85oMr
じじぃが最期の言語に何を選ぶか
にしたら
どうしようもない耄碌ばかりだ
2021/09/11(土) 00:01:30.12ID:N54U5q1q
>>26
SP復帰はLEAVE命令だろ
と思った俺は古過ぎるのか
2021/09/11(土) 00:20:02.53ID:6SR7xJAU
1.Python
2.Haskell or Go
3.Rust or やりたいことに応じてjsとか

これやろ
34デフォルトの名無しさん
垢版 |
2021/09/11(土) 01:03:41.75ID:w5S7rLqj
>>33
Pythonみたいなクソ言語はありえない
残りの4つはアリ
35デフォルトの名無しさん
垢版 |
2021/09/11(土) 06:33:42.19ID:BJyOlAhQ
関数型が全然わからない
ocamlやhaskell触ってみたけど手も足もでなかった
あれってすべて適用した引数ベータ展開しながら簡約していった結果をコーディング中に頭の中でシミュレーションしていかないと書けない代物なのか?
それじゃあワイできないよ
後型システムの振る舞いがなんにもわからないわ
あれってocamlは型推論あるけど型が明示的に表記されない代わりは自分自身で頭の中に型付け規則を当てはめながら追っていくしかないんか?
それじゃあワイできないよ
以上のような理由からワイは例えばfixという不動点コンビネータの高階関数とかわからなかった
とにかく自分にはお手上げやわ
36デフォルトの名無しさん
垢版 |
2021/09/11(土) 07:29:26.31ID:w5S7rLqj
>>35
Haskellの型クラスやモナドを採り入れつつCと同じ手続き型言語のRustからまずは入ってみたらどうでしょうか?
Rustのコンパイラは賢くフレンドリーなので型のミスも細かく教えてくれます
37デフォルトの名無しさん
垢版 |
2021/09/11(土) 09:09:22.33ID:BJyOlAhQ
>>36
rustは式指向って言ってもラムダ計算ではないのでそっちはかろうじて理解できます
理解できないのはラムダ計算ベースの関数型です
2021/09/11(土) 09:39:15.97ID:3yMDZ0jk
>>26
pop というのは機械語(ニモニック)レベルではなかったような。
sp(スタックポインタ)から sub するか(できるのか?)、
sp の値をアキュムレータに持ってきて sub して書き戻すか
(フラグの中身が変わったり、アキュムレータの中身を堆肥させたり
ちょっと面倒臭そうだ)、
小さい言語処理系を開発するときは、FORTH のインタプリタを実装して
その上にコンパイラを被せるとかいうのは二度ほどやったことがある。
「Make 10」パズルの全数解を求める、とかいった場合だと、
けっきょくそれをやるのが素朴だと思う。
39Mb
垢版 |
2021/09/11(土) 13:08:24.97ID:3yMDZ0jk
関数型とかラムダ計算とかいっても、
遅延評価がないと実行効率がそんなに上がらないんだよね。
「これ、前にやったことがある」「だから、前にやった結果を
そのまんま使おう」というのが遅延評価なのだけれど、うーんと
末端のほうだと、「前にやったことがあるんだっけ?」という
探索に時間がかかっちゃうので、探索効率と組合せ論的な爆発の間の
トレードオフになっちゃうので、手続き型と関数型のどっちを
選ぶかというのは、ある程度実効機序が解ってないと難しいんだよね。
そういう意味では C 言語とか FORTH とかいった、コンピュータ・
アーキテクチャべったりの言語から始めたり、古いタイプの高級言語から
入るのもひとつのやりかただと思う。
そういう意味では Java とか C♯とかは、プロ用には向いてるけど
基礎を知らないと難しいかも。
昨今は F1 のトランスミッションもオートマチックだそうだしなぁ。
昔のマニュアル車やゴーカートから始めてみるのもいいんじゃない?
2021/09/11(土) 14:07:43.10ID:ivXsMFHP
マニュアル車は、
少し低めのスピードで高速ギアにしたり、エンジンブレーキかけたりできるからね。
渋滞時だけは、面倒。
少し加速して、すぐニュートラル。
ようするに、燃費をいかに少なくするか?なのだけど。
2021/09/11(土) 14:17:00.36ID:ivXsMFHP
スポットから始める、練習から始める、ってことかな?
2021/09/11(土) 14:30:47.28ID:PRM8i6LA
>>38
嶋正利さんが設計したインテル8080からスタック操作のpush/pop命令はずっとあるよ
もちろんZ80でも86系でも同様
実はアセンブラ使ったことないの?
2021/09/11(土) 14:31:31.97
このスレ、自転車置き場の議論スレでは?
44デフォルトの名無しさん
垢版 |
2021/09/11(土) 15:30:55.17ID:3yMDZ0jk
>>42
昔、『I/O』の附録だった、Z80 とか 6809 のお経本
(インストラクション・セット・サマリ)とか久しく
見てないからなぁ。
push とか pop とかの引数をどこから取ってくるのか、
といったところまでは思い出せない。
45デフォルトの名無しさん
垢版 |
2021/09/11(土) 15:35:48.26ID:3yMDZ0jk
>>40
神岡ターンか(笑)
2021/09/11(土) 18:01:03.01ID:mCM1/tic
学習用アセンブリ
2021/09/11(土) 18:03:51.43ID:PRM8i6LA
>>44
引数ってなんだ??
当時のpush/pop (6809だとpush/pull)は
レジスタをスタックへ退避と復帰のみだぞ
2021/09/11(土) 19:58:33.84ID:5Y9cAMyV
>>42
68000からアセンブラやり始めたとかかもw
2021/09/11(土) 20:28:05.62ID:N54U5q1q
>>47
オペランドのことじゃね
2021/09/11(土) 20:32:33.35ID:3yMDZ0jk
sp をインクリメント/デクリメントするだけで1命令なのか …
それは大変だな。
2021/09/11(土) 20:38:06.19ID:mopEDxb+
>>45
どこから神岡ターンが出てきたんだ?
https://cdn.snsimg.carview.co.jp/carlife/images/UserCarPhoto/876204/p4.jpg
2021/09/11(土) 21:48:40.82ID:6SR7xJAU
>>34
じゃあ
1.Go
2.Haskell
3.Rust or やりたいことに応じてPython, js, C#
2021/09/12(日) 07:42:12.79ID:Xese6WRq
>>44
I/Oとかクソ懐かしいな30年以上ぶりに聞いたわ
高校の時にZ80やった

ちなみにオススメはプロでやりたいならJavaかJSかC#
言語マニアの話とか聞いてもマニアになりたいんじゃない限り意味ないぞw
2021/09/12(日) 09:43:52.24ID:x3+6FKDq
Javaでプロωとかωω
土方まっしぐらωωω
55Mb
垢版 |
2021/09/12(日) 12:49:02.54ID:eZoXy3gP
>>51
オートマだとドライブ一直線だが、
神岡ターンではクリッピングポイントをクリアしてから
「一瞬、ギアをリアに入れる」というとかいったコトをやっている。
C 言語でも、C のコンパイラが吐いたアセンブラのコードを見て、
「ここはステート数が縮められる」みたいなマッドな野郎どもが
昔はいたんだよ。
そういう言語マニアにとっては C 言語なノスタルジックな言語では
あるんだけれども、C++ というのは、マネージャーとかいった
そのあたりの美学を理解しない連中が権勢を揮っているので、
「いい言語」と言っていいとは思わない。
56Mb
垢版 |
2021/09/12(日) 12:54:28.00ID:eZoXy3gP
>>54
> Javaでプロωとかωω
> 土方まっしぐらωωω
あんた病んでるよ。
だけど反社会性パーソナリティ障害障害って、
治療法がないんだよね。
最近の精神科のクリニックは薬物療法が主なので、
カウンセリングはあんまり主流じゃないから期待しないほうがいい。
松沢病院とか受診してみれば?
57デフォルトの名無しさん
垢版 |
2021/09/12(日) 13:23:42.93ID:UuDugmCL
オマエガナー
58Mb
垢版 |
2021/09/12(日) 13:24:37.28ID:eZoXy3gP
>>53
「I/O」は今でも書店に並んでるぞ?
「らんだむ・あくせす・でぃくしょなりぃ」とか懐かしいな。
宮永さんが、ナショナル・セミコンダクタ(通称ナショセミ。
以下 NS)の「SC/MP」(通称「スキャンプ」)の2が出たときに、
煙草の箱サイズの自作パソコンを作って製作記事で紹介していたのだけれど、
「入力はスイッチ一つでいいんだけれど、タイミングを取るのが
大変だからスイッチを二つに増やした」「出力は、ラインを触って
ビリッときたら 1 で、こなかったら 0 だと思ったけど、涙を呑んで
電球をつけた」(当時は LED は一般的ではなく、出力は 5.5 ボルト
だったので電球もついた)とかいう生々しいレポートがあった。
あのころは楽しかったなぁ。

> ちなみにオススメはプロでやりたいならJavaかJSかC#
> 言語マニアの話とか聞いてもマニアになりたいんじゃない限り意味ないぞw
なるほど。マニアになりたい奴には意味があるし、開発の現場では
言語マニアにも居場所があったりする可能性は認めてもらえるんだよな?
59Mb
垢版 |
2021/09/12(日) 13:31:28.12ID:eZoXy3gP
>>49
そういえば、オペコード(オペレーション・コード)って言葉を
久しく聞いていないな。
いまどきアセンブラとかやってる奴がいないせいだろうか。
2021/09/12(日) 13:54:11.81ID:ZMOxDx6c
ネイテイブコードでかかれたゲームクライアントが少なくなったせい?
ゲーム解析でアセンブラとかOSの動作を覚えたw
61Mb
垢版 |
2021/09/12(日) 15:12:01.27ID:eZoXy3gP
>>60
それはフロッピーディスクのコピープロテクトが
一般的でなくなったからだと思う。
あの頃の激戦区は、(参戦はしなかったけど)
楽しかった記憶がある。
2021/09/13(月) 02:10:50.03ID:Hg35TRQG
>>58
まだ売ってるのか良くもったな

例えばJavaの現場でHaskellとかできてもどうにもならないが趣味でマニアな分には
その場合Javaさえできるなら当然問題はない

ただそういう人は変な事する場合があるから言語以外の普通の開発手法とかデザインパターンとかはちゃんとしてね
2021/09/13(月) 12:56:42.13ID:+ZZ666OR
このスレで書き込みしている人達ってやっぱ平均年齢50超えてる?
64デフォルトの名無しさん
垢版 |
2021/09/13(月) 13:20:10.80ID:swd+vclW
あわしろ氏のHaskell推しは一理あるんだよな
2021/09/13(月) 14:28:39.70ID:+ZZ666OR
やっぱなんだかんだ言ってもCが1番
ダイテル本みっちりやればよろし
66Mb
垢版 |
2021/09/13(月) 14:47:08.19ID:C4HWp6ZW
>>63
> このスレで書き込みしている人達ってやっぱ平均年齢50超えてる?
よくわからんが三十代か六十代の、いわゆるスキマ世代が多いんじゃないかな?
読んでるひとは十代とかだったりしそうだけど、
おっさん世代の愚痴やら説教やらを聞いてくれるヒトがいるというのは、
喜ばしいことだと思う。
2021/09/13(月) 18:38:33.54ID:Q8RkP9iF
高級言語から始めてもいずれ「ポインタって何に使うの?」って絶対に聞くんだから最初からアセンブリやっとけよ
つまんない意地はんなや
68デフォルトの名無しさん
垢版 |
2021/09/14(火) 10:25:16.87ID:46IWFnzO
>>67
「C プログラミング初心者あるある」だな。
「値呼び」とか「番地呼び」とか「名前呼び」とか
文字列を含む可変長データの管理とかで悩んだときに
アセンブラにまで立ち戻って考えると確かに理解しやすい。
クヌスの「コンピュータ・プログラミングの技法」とかは
手がかりになりそうだ。
2021/09/14(火) 15:55:48.93ID:ZQjuD2Oo
習得順序がBASIC→アセンブリ→Cであった頃は何の問題もなかった
最初の言語はコンピュータの仕組みや計算機科学べったりでない方がよい
そんなのは2つ目以降で考えればよいこと
70Mb
垢版 |
2021/09/14(火) 17:28:01.01ID:46IWFnzO
>>69
> 習得順序がBASIC→アセンブリ→Cであった頃は何の問題もなかった
> 最初の言語はコンピュータの仕組みや計算機科学べったりでない方がよい
> そんなのは2つ目以降で考えればよいこと
その点については全面的に同意する。
たぶん三十代の遣える方だと思う。
ただ、Pascal の P-System とか、
BCPL とかいった「仮想マシンのアセンブラ」とかいった
いったコンパイラ言語を経験している若者が少ないんだよね。
「コンパイラ → マクロアセンブラ → アセンブラ → 機械語」
とかいった経験を積まないと、システム屋としては未熟だと思う。
そういった経験を積んだ人にとっては、「イマドキの若者」っていうのは
腹立たしいとは思うんだけど、そこは生温かく見守ってあげようよ。
2021/09/14(火) 18:49:56.34ID:vcNuTaNe
>>69
多分高級言語こそ全てのプログラミングの基本であり真髄みたいに考えてるんだろうけど逆だよ
そもそもプログラミングってコンピューター使わなくてもできるからな?
■ このスレッドは過去ログ倉庫に格納されています