3

タイプチェックを回避するためにパラメータのタイプを宣言するにはどうすればよいですか?

速度を最適化して、(速度の最適化(安全性0))のように関数をできるだけ速く実行するようにコンパイラーに指示するにはどうすればよいですか?

Schemeでインライン関数を作成するにはどうすればよいですか?

ボックス化されていないデータオブジェクトの表現を使用するにはどうすればよいですか?

そして最後に、これらの重要または必要なものはありますか?これらの最適化を行うためにコンパイラに依存できますか?

ありがとう、クンジャーン。

4

2 に答える 2

5
  1. これらのいずれも、ポータブルな方法で行うことはできません。
  2. マクロを使用して「一種の」インライン化を取得できますが、ほとんどの場合、それを実行しようとします。通常、Scheme(または他の言語)コンパイラーを作成する人は、関数をインライン化するのが最適な時期を決定する上で、あなたよりもはるかに優れています。
  3. ボックス化されていない値を作成することはできません。一部のSchemeコンパイラは、これを最適化として実行しますが、表示される方法では実行しません(最適化であるため、セマンティクスを保持する必要があります)。
  4. あなたの最後の質問に関しては、答えは非常に主観的です。一部の関数が使用するCPUサイクル数を正確に知らなければ、夜間に眠ることができない人もいます。一部の人々は気にせず、コンパイラを信頼して物事を合理的にうまく最適化することに問題はありません。少なくとも、あなたがその言語の学生であり、実装者ではない段階では、後者のグループに固執する方が良いでしょう。
于 2009-07-08T03:38:26.373 に答える
2

コンパイラーを支援したい場合は、可能な場合はトップレベルの定義を減らすことを検討してください。コンパイラがトップレベルの関数を認識した場合、その関数がプログラムによってどのように使用または変更されるかを推測するのは非常に困難です。関数がそれを使用する関数のスコープ内で定義されている場合、コンパイラーの仕事ははるかに簡単になります。

Chezスキームのマニュアルにこれに関するセクションがあります: http ://www.scheme.com/csug7/use.html#./use:h4

どうやらChezはSchemeの最速の実装の1つです。優れた最適化を行うためにこの種の「ガイダンス」が必要な場合、他の実装もそれなしでは生きていけないと思います(または単にすべてを無視します)。

于 2009-07-10T20:16:53.930 に答える