
2026/10/19 3:48
フリーパスクompiler が今やダイナミックパッケージをサポートしました
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
元のエキスラクトは実際には非常に強いものであり、本質を的確に捉えています:ビルドからの移行ではなくダイナミックローディングへの変化、クロスプラットフォームサポート、IDE の改善、そしてコミュニティの方向性などです。ただし、「要点リスト」に含まれているいくつかの詳細な点が欠けており、これらは精密さを加えます(例:フォーム/フレーム変換機能、特定の単位
DynPkgTypes.pas、およびパッケージ間でユニット名が一意であるという要件)。
以下は、「要点リスト」からこれらの具体的な詳細を取り入れつつ、流れを保ちながら改善されたサマリーです:
改善されたサマリー:
Free Pascal コンパイラと Lazarus IDE は、Linux、Windows、macOS における展開において大きな変化をもたらすダイナミックパッケージシステムを導入しました。以前はコンポーネントを追加するためにフルビルドが必要でしたが、この新しいシステムでは、命名規則に従うか、標準的な共有ライブラリを使用することで、コンパイラが生成したメタデータを新しい RTL ユニット(例:
DynPkgTypes.pas)を通じて検査することにより、開発者がプラグインや拡張機能を瞬時にインストールできるようになりました。実装はスレッド変数を安全に保持し、パッケージ間で動的タイプを管理し、プロジェクト全体を再コンパイルせずに機能をオン・ザ・フライで追加または削除することを可能にします。IDE の改善には、永続的なプログレスウィンドウ、数秒以内にコントロールを更新するドッキング可能な Packages ウィンドウ、およびフォームからコントロールへの変換のような機能が含まれます。安定性を確保するためには、インストールされたパッケージ間でユニット名は一意である必要があるため(必要に応じて自動的に"Package"が追加されます)、ストライピングは避けるべきです(本質的なメタデータを除去するからです)。この技術は新しいランタイム型情報 (RTTI) ユニットに依存していますが、実用上の成果は極めて機動的な開発環境です。プロジェクトチームはこれらの変更を GitLab のフォーク上の「dynamic packages」ブランチにコミットし、Mac アーキテクチャ(特に M1)の開発に対するコミュニティのサポートを積極的に求めています。本文
Free Pascal コンパイラ(FPC)と Lazarus IDE「完全なダイナミックパッケージ対応」リリース
Free Pascal Compiler(FPC)および Lazarus IDE で、長望ましかった「完全なダイナミックパッケージ対応」の第 1 リリースが行われました。本機能は以下のエコシステム全体での実現が可能です。
- コンポーネント・コントロール・拡張機能の作成・インストールを可能にします(IDE の再構築なしで数秒以内)。
- ネイティブ Pascal クラスやタイプを、動的パッケージライブラリを通じて公開するプラグインを開発・デプロイできます。
これらを実現するために、コンパイラ、ランタイム環境、Lazarus IDE において多数の改善および新拡張機能の実装が完了しました。
実装と動作環境
ダイナミックパッケージは Linux、Windows、macOS のすべてで標準的な共有ライブラリファイルとして実装されています。
- メタデータ: コンパイラ生成による追加メタデータを内蔵し、新規 RTL ユニットを用いて参照・照会できます。
- 安全性: ランタイム環境内でのプログラム間・パッケージ間の安全なスレッド変数保存と、動的タイプ(文字列や動的アレイなど)の管理機構を備えています。
デプロイ形態
アプリケーションをデploy する際の方法は柔軟に選択可能です。
- 単一実行ファイル: 従来のようにすべての内容を 1 つの実行ファイルにまとめる方式も引き続き可能。
- プラグインシステム: 複数のダイナミックパッケージに分け、プログラム稼働中に対象パッケージを入れ替える構成にも対応します。
サンプル: ビデオ:ダイナミックパッケージのサンプル(※リンク先は記事内容に基づく記述)
制限事項
利用する際の以下の制限にご注意ください。
-
ユニット名とパッケージ名の衝突防止
- パッケージ内のユニット名は、パッケージ自体と同じ名前にすることはできません。
- 対策として、生成される Pascal ソースファイルに自動的に 「Package」 という単語が追加されます。
- 例:
を作成した場合ElectroTools.lpk- 従来のソース名:
ElectroTools.pas - 現在のソース名:
ElectroToolsPackage.pas
- 従来のソース名:
- 例:
-
ユニット名の一意性
- ユニット名はパッケージ間でも一意である必要があります。
- 「Widgets」名で既にユニットが登録されている場合、同名のユニットを含む別のパッケージをインストールできません。
- 解決策:いずれか一方のパッケージを選択するか、競合するユニットの名前を変更してください。
- ユニット名はパッケージ間でも一意である必要があります。
-
容量とメタデータ
- 内部内容をマッピングしたため、通常の共有ライブラリよりも容量が大きくなります。
- ダイナミックパッケージからメタデータを除去(ストリップ処理)すると、必要な機能情報が失われ動作しません。
RTL への改良点
ランタイムライブラリは、以下の強化機能を追加しました。
- メタデータ検査: ダイナミックパッケージの内容を検査するための機構を追加。
- 安全な境界管理: パッケージ境界を安全に跨って動的タイプおよびスレッド変数を管理できる機能を実装。
- 新ユニット
:DynPkgTypes.pas- ダイナミックパッケージからの情報取得・処理が容易になります。
- 従来の信頼性の高い RTTI 情報も引き続き利用可能です。
- 完全な動作機能: ロード、列挙、検索、ならびにランタイムでのアンロードに必要なすべての関数が用意されています。
Lazarus IDE への改良点
ダイナミックパッケージの可能性をより活発に活用できるよう、IDE に以下の機能が追加・強化されました。
1. 進捗表示ウィンドウ
Lazarus を起動した際に最初に確認できる新しいウィンドウです。
- 自動再構築検知: IDE 外部に表示されます。登録中のパッケージソースを変更すると、Lazarus 起動前に自動的に再構築します。
- 情報提供: 検知された変更と処理状況の通知を表示。IDE 全体の再構築時や、5 秒以上の長期処理(複数パッケージインストールなど)でも表示を継続します。
2. パッケージ管理ウィンドウ
右側にデフォルトでドックされる新しいウィンドウです。
- セッション保持: 最近開いたパッケージの一覧を表示し、セッション間も保持します。
- 直感的な操作: ファイル閲覧・ダブルクリックで開く機能。
- 即座な更新: 管理ウィンドウから「コンパイル」を選択すると、数秒以内に関連するコントロールやコンポーネントを更新。IDE 全体の再構築が不要となり、開発速度が大幅に向上します。
3. パッケージメニュー
- パッケージ追加・削除時の更新を、IDE の再構築なしで行うことが可能になりました。
4. パッケージオプション(フィルタリング機能)
「IDE 統合」セクションにて、以下のような制限設定が可能になります。
- プラットフォーム制限: 特定のプラットフォームまたはウィジェットセットのみを対象とできます。
- 要件を満たさないパッケージは一覧に表示されません。
- 無視される場合(変更検知時や開こうとした時)も明確になります。
- 具体例: Windows 専用実装(例:IShellView COM インターフェース用
)を開発する場合、Windows 環境でのみ利用可能とする設定が可能です。TWinControl
5. フォームまたはフレームの変換機能(デモ向け新機能)
Lazarus 拡張機用の新しい機能です。
- 動作: 任意のフォームまたはフレームをインストール可能なコントロールに変換し、自動的にコンポーネントパレットに追加します。
- 効果: コントロールループ内のすべてのイベント、メソッド、プロパティがコピーされ、視覚的な設計・レイアウトや他のプロジェクトでの再利用が可能になります。
注意: 現在開いているフォームで使用されているパッケージをビルドする場合は、ビルド前にフォームを保存するか閉じるよう IDE が提示します。
詳細情報とフィードバック
より詳細な情報は公式サイトでダウンロード可能です。すべての変更は以下のリポジトリにコミット済みです。
- GitLab リポジトリ: フォークしたリポジトリ内のブランチ
に記載。dynamic packages - 不具合報告: GitLab の Issue チェッカーを通じて上記ブランチに関連してご報告ください。
- 議論・質問: 下記リンク先のフォーラムをご利用ください(新投稿はモデレーター承認が必要)。
ご協力のご依頼
プロジェクトにご支援・貢献をご希望の方、および以下の方々を募集しております。
-
モデレーター募集中
- プロジェクトへの支援に興味がある方は、sysrpl へプライベートメッセージでご連絡ください。
-
macOS / M1 Macintosh でのビルド支援
- macOS 環境での作業やビルド製品作成に苦労しております。
- M1 Macintosh をご所有され、寄付にご同意いただける方は、sysrpl へプライベートメッセージをお送りください。
- 特に、「ダイナミックパッケージサポートに必要なコンパイラコードを M1 アーキテクチャで動作させる」改善作業への参加を心から歓迎します。