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

Turboが復活」記事へのコメント

  • 昔、Turbo C にはお世話になりました。

    便利なグラフィックライブラリとMS-Cよりも早いコードを吐くので良く使ってましたが、その後お客さんから
    「MS-Cで開発してくれ」
    という注文が多くなり次第に使わなくなってしまいましたが、個人的には好きでしたね。
    • Re:懐かしい! (スコア:2, 参考になる)

      by Anonymous Coward
      そもそも、実行形式が最適化されていて速いというよりも、
      多少の無理を承知で、1Pass時に一気にコード生成をしてしまうため、
      コンパイルが驚速だったので「Turbo」という名前だったような。
      普通は最初の1Pass目で飛び先を調べて、次の2Pass時にコード生成なんですが、
      これを一発で終わらせてしまうのが早さの秘密だったのですよね。
      正直、名前だけのTurboだったらイヤだな。
      • by Anonymous Coward
        >1Pass時に一気にコード生成をしてしまうため、
        >コンパイルが驚速だったので「Turbo」という名前だったような。

        PASCAL はそうでしたね。C は違いますが。
        • 言語仕様としては、

          ・Pascal
           前方参照が許されない→1pass で構文解析を完了できる

          ・C言語
           前方参照が許されるため、1passでは構文解析を終わらせられるとは限らない

          という違いはありますね。

          で、うろ覚えなのですが 初期の Turbo C は1passでコード生成までやってたはず。
          不明なとこは、後でコード生成されるのを前提にラベルふってまる投げしてたんだっけ。

          pascal に比べればコンパイルは遅かったですが、それでも
          MS C など UNIX からの伝統通り、
          Preprocessor → parser → code generator → assembler
          というステップを踏むコンパイラに比べると、
          格段にコンパイル速度が速かったです。
          • by Anonymous Coward on 2006年08月10日 17時44分 (#994489)
            とりあえず分岐に関する最適化のみに言及するとして、x86の分岐命令は、
            1)より短いアドレス間の分岐を前提とした相対アドレス分岐
            2)セグメント範囲内で有効な絶対アドレス分岐
            3)セグメントを超えてまたがる遠距離分岐
            以上のような種類があり、それらによって命令バイト数が異なるのが特徴です。

            まだメモリが高価だった当時は、如何にしてコードサイズを縮小できるかが課題であり、
            それには1)の相対アドレス分岐が採択されることが望ましいわけです。
            しかし前方参照や他のオブジェクトファイルへの参照では、相対アドレスで表現可能な
            範囲に収まっているかどうかの判断が付きかねます。

            そこでとりあえず、2)の絶対アドレス分岐命令でもって仮コンパイルを済ませて、
            分岐元と先の距離を求め、相対アドレスの範囲内であると判断できれば、
            再度コンパイルパスを繰り返し、1)の相対アドレス分岐命令に置き換えようとします。
            それで更にまた距離が縮まって、相対アドレスに置換可能な分岐命令が増えるかもしれません。
            こうして全ての分岐が解決するまで繰り返せばいいのですが、当然それはパスを何回か
            繰り返すことであり、それだけ時間がかかります。

            確かTurboでは、ラージモデル未満のメモリモデルにおいて、2)の絶対アドレス分岐に
            固定してしまうことで、命令のバイト長を解決する手間を省き、1パスコンパイルという
            高速化を実現していたはずだったと思います。
            親コメント

一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy

処理中...