約有用性についてお尋ねします。これは、コンパイルされた実行可能ファイル/ライブラリのサイズへの影響に関するものです。コードのメンテナンス性や可読性に関するものではありません。特定のモジュールを 明示的なインポートは、コンパイルされたファイルサイズを減らすことができますか?
インポート
代わりに(それ自体がサブモジュールをインポート)メインモジュールのインポートパッケージからのみ使用されるモジュールをインポートすることが有用です。
import Foreign.Storable
代わりに:(のみインポートリストが含ま)Foreign
モジュールと例えば
、
import Foreign
明示的にインポート機能/タイプ
はにそれが有用ですモジュール全体をインポートするのではなく、使用された関数/タイプをインポートするだけですか?例えば
:
import Foreign.ForeignPtr (ForeignPtr, mallocForeignPtr, withForeignPtr)
代わりに:
import Foreign.ForeignPtr
2つの異なる方法で簡単なアプリケーションをコンパイルしてみましたか、違いがあるかどうかを確認しましたか?私の疑問は、最適化なしでコンパイルし、最適化で同じサイズをコンパイルすると、ファイルが大きくなることです。しかし、あなたがLTOを必要とするかもしれません。私は、一度にモジュールに対して明示的に関数をインポートすることで差が出るとは思わないでしょう。 –
これはHaskellコードの特徴ではありません。それはリンクの特徴です。まず、あなたが動的にリンクする場合、これは違いはありませんので、私は静的リンクについて話していると仮定します。最初のケースでは、['split-objs'](https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/phases.html#ghc-flag--split -objs)が有効になっている。それ以外の場合は、ライブラリ全体がリンクされます。後者の場合、それは決して違いはありません。モジュールから名前(!)をインポートしても、モジュール全体(または 'split-objs'を有効にしないでパッケージ全体)をリンクする必要があります。 – user2407038
@ user2407038あなたの答えをありがとう!本当の答えにして、私はそれを検証するでしょう。 –