アカウント名:
パスワード:
計算機がどのように動いているのか、データと命令とか、値としての 20h と スペース文字の区別がつかないとか、そういう事をまずは一旦理解してから高級言語へと移行するべきだと思うんだ。別に長大なプログラムをアセンブラで組めるようになれ、という意味じゃなく。
最初から高級言語だと、その高級言語が何に依存しているのか判らないんで、「床を踏み抜く」的な間違いをしでかしてしまう。
ほぼ同意だが、順番はどうなんだろう?高級言語やってからハードに降りていくのは無理なのだろうか
1回で覚えるようなものではないので、繰り替えして欲しいと思います。最初に、1つの講義でハード・機械語から高級言語まで実習を交えて教えて、そのあとでパラレルで良いのでそれぞれを実習を交えて教えて行って欲しいと思います。
自分が問題だと思っている点としては、C以外になかなか素直にハードまで降りていける高級言語が無いところです。
まず、インタプリタ言語は総てNG。なぜなら、できたプログラムをCPUが実際にどう実行するか、つまりCPUに投げられる命令列を見ることができないから。次に、コンパイルされる言語でも、Javaなどバイトコードベースのものは同様の理由でNG.第三に、haskellなどネイディブコードコンパイラ付き言語でも、出来上がったコードが読みにくければNG.これに関しては自信がありませんが、遅延評価のためのコードや型判定ロジックなど(コンパイル時に消える)によってCやアセンブリコードの背景とは相容れない意味不明な命令列が出来上がると予想しています。噂では、コンパイラの時点でフォンノイマン型とはべつの計算機モデルを使っているとか?聞きました。
よってCommon Lisp を推します。
CL-USER> (defun factorial (n) (if (zerop n) 1 (* n (factorial (1- n)))))FACTORIALCL-USER> (disassemble #'factorial); disassembly for FACTORIAL; Size: 101 bytes. Origin: #x1007E081D9; 1D9: 488B55F8 MOV RDX, [RBP-8] ; no-arg-parsing entry point; 1DD: 31FF XOR EDI, EDI; 1DF: B929040020 MOV ECX, 536871977 ; GENERIC-=; 1E4: FFD1 CALL RCX; 1E6: 744A JEQ L1; 1E8: 488B55F8 MOV RDX, [RBP-8]; 1EC: BF02000000 MOV EDI, 2; 1F1: 41BB05020020 MOV R11D, 536871429 ; GENERIC--; 1F7: 41FFD3 CALL R11; 1FA: 488D5C24F0 LEA RBX, [RSP-16]; 1FF: 4883EC18 SUB RSP, 24; 203: 488B0576FFFFFF MOV RAX, [RIP-138] ; #; 20A: B902000000 MOV ECX, 2; 20F: 48892B MOV [RBX], RBP; 212: 488BEB MOV RBP, RBX; 215: FF5009 CALL QWORD PTR [RAX+9]; 218: 480F42E3 CMOVB RSP, RBX; 21C: 488BFA MOV RDI, RDX; 21F: 488B55F8 MOV RDX, [RBP-8]; 223: 41BB6B020020 MOV R11D, 536871531 ; GENERIC-*; 229: 41FFD3 CALL R11; 22C: L0: 488BE5 MOV RSP, RBP; 22F: F8 CLC; 230: 5D POP RBP; 231: C3 RET; 232: L1: BA02000000 MOV EDX, 2; 237: EBF3 JMP L0; 239: CC0A BREAK 10 ; error trap; 23B: 02 BYTE #X02; 23C: 19 BYTE #X19 ; INVALID-ARG-COUNT-ERROR; 23D: 9A BYTE #X9A ; RCXNIL
おっさん登場
N88-BASIC、peekにpokeでマシン語沼にドボンしてMS-DOSでc、これが定番の順番大事もくそもこの順番しかなかたwww
学生時代は同じく。そして趣味でTurbo Pascal → Delphi仕事でFortran
実行しててなんだか、感覚的な安心感があるな、Delphi。(今はLazarusか?)この安心感が、Javaにはない。
そうかN88の時代はそうなんだ。当時も「TK-85」って奴があったけど、「何を今更」といわれていたからなあ。
自分はMS-DOSじゃなくCP/Mだった……。
昔はやりたいことやるためにハードに降りて行ったけど、今はそうしなくても何とかなっちゃうからな。
でも数回あったスラドでまず学習すべき言語は?の問いではたいてい高級言語だったりしたんだよな
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
開いた括弧は必ず閉じる -- あるプログラマー
そもそも計算機の基礎中の基礎は機械語 (スコア:5, 興味深い)
計算機がどのように動いているのか、データと命令とか、値としての 20h と スペース文字の区別がつかないとか、そういう事をまずは一旦理解してから高級言語へと移行するべきだと思うんだ。別に長大なプログラムをアセンブラで組めるようになれ、という意味じゃなく。
最初から高級言語だと、その高級言語が何に依存しているのか判らないんで、「床を踏み抜く」的な間違いをしでかしてしまう。
fjの教祖様
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:0)
ほぼ同意だが、順番はどうなんだろう?高級言語やってからハードに降りていくのは無理なのだろうか
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:3)
1回で覚えるようなものではないので、繰り替えして欲しいと思います。
最初に、1つの講義でハード・機械語から高級言語まで実習を交えて教えて、
そのあとでパラレルで良いのでそれぞれを実習を交えて教えて行って欲しいと思います。
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:3)
自分が問題だと思っている点としては、
C以外になかなか素直にハードまで降りていける高級言語が無いところです。
まず、インタプリタ言語は総てNG。
なぜなら、できたプログラムをCPUが実際にどう実行するか、つまり
CPUに投げられる命令列を見ることができないから。
次に、コンパイルされる言語でも、Javaなどバイトコードベースのものは同様の理由でNG.
第三に、haskellなどネイディブコードコンパイラ付き言語でも、出来上がったコードが読みにくければNG.
これに関しては自信がありませんが、遅延評価のためのコードや型判定ロジックなど(コンパイル時に消える)によって
Cやアセンブリコードの背景とは相容れない意味不明な命令列が出来上がると予想しています。
噂では、コンパイラの時点でフォンノイマン型とはべつの計算機モデルを使っているとか?聞きました。
よってCommon Lisp を推します。
CL-USER> (defun factorial (n) (if (zerop n) 1 (* n (factorial (1- n)))))
FACTORIAL
CL-USER> (disassemble #'factorial)
; disassembly for FACTORIAL
; Size: 101 bytes. Origin: #x1007E081D9
; 1D9: 488B55F8 MOV RDX, [RBP-8] ; no-arg-parsing entry point
; 1DD: 31FF XOR EDI, EDI
; 1DF: B929040020 MOV ECX, 536871977 ; GENERIC-=
; 1E4: FFD1 CALL RCX
; 1E6: 744A JEQ L1
; 1E8: 488B55F8 MOV RDX, [RBP-8]
; 1EC: BF02000000 MOV EDI, 2
; 1F1: 41BB05020020 MOV R11D, 536871429 ; GENERIC--
; 1F7: 41FFD3 CALL R11
; 1FA: 488D5C24F0 LEA RBX, [RSP-16]
; 1FF: 4883EC18 SUB RSP, 24
; 203: 488B0576FFFFFF MOV RAX, [RIP-138] ; #
; 20A: B902000000 MOV ECX, 2
; 20F: 48892B MOV [RBX], RBP
; 212: 488BEB MOV RBP, RBX
; 215: FF5009 CALL QWORD PTR [RAX+9]
; 218: 480F42E3 CMOVB RSP, RBX
; 21C: 488BFA MOV RDI, RDX
; 21F: 488B55F8 MOV RDX, [RBP-8]
; 223: 41BB6B020020 MOV R11D, 536871531 ; GENERIC-*
; 229: 41FFD3 CALL R11
; 22C: L0: 488BE5 MOV RSP, RBP
; 22F: F8 CLC
; 230: 5D POP RBP
; 231: C3 RET
; 232: L1: BA02000000 MOV EDX, 2
; 237: EBF3 JMP L0
; 239: CC0A BREAK 10 ; error trap
; 23B: 02 BYTE #X02
; 23C: 19 BYTE #X19 ; INVALID-ARG-COUNT-ERROR
; 23D: 9A BYTE #X9A ; RCX
NIL
新人。プログラマレベルをポケモンで言うと、コラッタぐらい
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:1)
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:2, おもしろおかしい)
おっさん登場
N88-BASIC、peekにpokeでマシン語沼にドボンしてMS-DOSでc、これが定番の順番
大事もくそもこの順番しかなかたwww
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:1)
学生時代は同じく。
そして趣味でTurbo Pascal → Delphi
仕事でFortran
Re: (スコア:0)
実行しててなんだか、感覚的な安心感があるな、Delphi。
(今はLazarusか?)
この安心感が、Javaにはない。
Re: (スコア:0)
そうかN88の時代はそうなんだ。
当時も「TK-85」って奴があったけど、「何を今更」といわれていたからなあ。
Re: (スコア:0)
自分はMS-DOSじゃなくCP/Mだった……。
Re: (スコア:0)
昔はやりたいことやるためにハードに降りて行ったけど、今はそうしなくても何とかなっちゃうからな。
Re: (スコア:0)
でも数回あったスラドでまず学習すべき言語は?
の問いではたいてい高級言語だったりしたんだよな