パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

コンピューターサイエンスのカリキュラムに不足しているものは?」記事へのコメント

  • 計算機がどのように動いているのか、データと命令とか、値としての 20h と スペース文字の区別がつかないとか、そういう事をまずは一旦理解してから高級言語へと移行するべきだと思うんだ。別に長大なプログラムをアセンブラで組めるようになれ、という意味じゃなく。

    最初から高級言語だと、その高級言語が何に依存しているのか判らないんで、「床を踏み抜く」的な間違いをしでかしてしまう。

    --
    fjの教祖様
    • by Anonymous Coward

      ほぼ同意だが、順番はどうなんだろう?高級言語やってからハードに降りていくのは無理なのだろうか

      • 自分が問題だと思っている点としては、
        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

        --
        新人。プログラマレベルをポケモンで言うと、コラッタぐらい
        親コメント

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

処理中...