ロードマップ#

これはFortran-Langロードマップのスナップショットであり、生きたドキュメントです。これは、組織の方向性を大まかに示し、開発者が私たちのプロジェクトに貢献し、資金調達機会を探すことを奨励することを目的としています。特定の機能を提供すること、またはFortran-Langが他のことを行うことを妨げることを約束するものではありません。ロードマップは生きたドキュメントであり、必要に応じて更新されます。

Fortran標準ライブラリ#

OS統合: ファイルシステム#

現在、ディレクトリの内容のリスト表示、ディレクトリのトラバースなど、ファイルシステム操作は、プラットフォーム固有で移植性のないサードパーティライブラリとコンパイラ拡張に制限されています。このプロジェクトでは、ファイルシステム操作のクロスプラットフォームソリューションの設計と実装を行います。

関連する課題

  • stdlib#201: ファイルシステム操作

  • stdlib#220: ファイルシステム操作、ディレクトリ操作のためのAPI

開発中の実装

期待される成果: クロスプラットフォームのファイルシステムユーティリティを提供するstdlibモジュールの実装

OS統合: サブプロセス#

POSIXとWindows APIを抽象化するクロスプラットフォームソリューションをサブプロセスの作成のために実装します。

関連する課題

  • stdlib#22: POSIX I/O APIへのインターフェース

  • stdlib#308: サブプロセスとマルチプロセッシング

ディスカッションスレッド

疎行列#

(COOとCSR)疎行列を処理するプロシージャのための標準化されたAPIを実装します。非オブジェクト指向の低レベルAPIとオブジェクト指向APIの両方を実装する必要があります。

関連する課題:

開発中の実装:

期待される成果: stdlib_linalgモジュールに疎行列機能を実装

Fortranパッケージマネージャ(fpm)#

Fortranレジストリ#

fpmは現在、依存関係が中央レジストリなしで指定される分散型パッケージ依存関係をサポートしています。Fortran-Langの長期的な目標は、fpmパッケージのコミュニティサポートレジストリをホストし、fpmがこのレジストリや他のレジストリとのインターフェースをサポートして、依存関係管理を簡素化することです。

このプロジェクトのアイデアは、ローカルにホストされたパッケージレジストリに対するfpmのサポートを実装することで、中央パッケージレジストリへの大きな一歩を達成することを目指しています。具体的には、このプロジェクトには以下が含まれます。

  • レジストリから依存関係を使用するためのマニフェスト構文の定義

  • (ローカル)レジストリの検索とロードのサポートの実装

  • リモートレジストリからフェッチすることで、fpmがローカルレジストリを管理できるようにする

関連する課題

  • fpm#321: ローカルレジストリのサポートの実装

  • fpm#35: 完全なパッケージレジストリ

参照

  • fpm-registry: プロトタイプの中央レジストリ

  • fpm-search: fpmパッケージをレジストリで検索するためのfpmアプリ

期待される成果: fpmパッケージのリポジトリをサービスとして実装

バージョン制約解決#

fpmの現在の分散型パッケージシステムでは、依存関係をgitリポジトリURLを介して取得できます。これの一部として、依存関係の特定のバージョンを要求するためにgitタグまたはコミットを指定できます。ただし、バージョン互換性要件(例:>= 1.0.0, <2.0.0)を指定する方法がなく、依存関係ツリー全体でそのような要件を解決する方法もありません。

このプロジェクトには以下が含まれます。

  • バージョン互換性マッチングのためのマニフェスト構文の定義

  • 一連のバージョン互換性制約を解決するためのfpmでのサポートの実装

可能なアプローチとしては、次のような既存の充足可能性ソルバーとインターフェースを構築します。

  • libsolv: 別のfpmパッケージとしてiso_c_bindingを介したインターフェース

参照: バージョンマッチング構文の既存のオプション

期待される成果: fpmで動作するバージョン制約メカニズムを実装

Fortranエコシステムのfpm化#

Fortranライブラリとアプリケーションエコシステム(GitHubなど)を調査し、パッケージ管理者と協力して、パッケージをfpm互換にする。

期待される成果: 人気のあるFortran、C、C++パッケージをfpmエコシステムにもたらす。

拡張されたテストサポート#

このプロジェクトの目的は、fpmプロジェクトで実行可能ターゲットにデフォルトを提供するためのマニフェスト仕様を作成することです。情報は環境変数、コマンドライン引数、またはランナーとして渡すことができます。必要な機能には以下が含まれます。

  • プログラムは、プロジェクトソースディレクトリ内の相対位置がわかっているリソースを見つける方法が必要です。

  • プロジェクト内の他のターゲットにアクセスするための現在のバイナリディレクトリ。

  • mpirun/cafrunなどのデフォルトランナー、またはテストフレームワークのスクリプトを使用してプログラムを起動できる必要があります。

  • 環境変数とコマンドライン引数を定義するための一般的な構文を定義する必要があります。

一部の機能はfpmに直接実装する必要がありますが、より高度な機能は、公式のFortran-lang fpmパッケージとして、別々のfpmパッケージに実装できます。

関連する課題

  • fpm#179: fpm testを使用したテスト

関連するディスカッション

  • fpm#328: 外部データが必要な例

期待される成果: fpmはより広範で深いテスト機能を備えています。

外部ビルドシステムを使用したソースコード配布#

このプロジェクトの目的は、fpmがそれ自身のソースコード配布を作成できるようにし、fpmなしでブートストラップできるようにすることです。必要な機能には以下が含まれます。

  • fpmが非fpmビルドシステムを使用してソースコード配布を生成できるようにする。

  • 生成されたソースコード配布では、fpm、git、インターネットアクセスなしでfpmプロジェクトをビルドできます。

  • 潜在的なサードパーティビルドシステムはCMakeとMesonです。

  • さまざまなパッケージングエコシステムを介したfpmの配布とパッケージングを容易にする。

関連する課題

  • fpm#69: CMakeとMakeのバックエンドを持つ

  • fpm#70: Condaバックエンドを持つ

期待される成果: fpmは、CMakeおよび/またはMesonを使用してビルドできるパッケージのソースコード配布を生成できます。

Visual Studio CodeのためのモダンFortran#

FortranパッケージマネージャとCMakeとの統合#

このプロジェクトの目的は、FortranパッケージマネージャとCMakeをモダンFortran Visual Studio Code拡張機能に統合することです。この統合により、VS Codeを介してfpmまたはCMakeでプロジェクトをビルドできるだけでなく、リンターと言語サーバーを正確に構成することもできます。

関連する課題

関連するディスカッション

  • fpm#768: FPM統合に関するディスカッション

期待される成果

  • fpmとCMakeがモダンFortran Visual Studio Code拡張機能に統合されます。

  • ユーザーはfpmプロジェクトをビルド、実行、デバッグできます。

  • モダンFortran拡張機能は、fpmとCMakeの設定に基づいて、リンターと言語サーバーを自動的に構成できます。

  • pipによるfpmの簡単なインストール。

Sphinxドキュメント#

このプロジェクトの目的は、SphinxとMyST Markdownを使用してモダンFortranのドキュメントWebページを作成することです。ドキュメントには以下が含まれます。

  • インストール手順

  • 利用可能な設定とその設定方法

  • よくある質問とその回答

期待される成果: Visual Studio Code拡張機能のモダンFortranにはドキュメントWebページがあります。

関連する課題

拡張機能のローカリゼーション#

このプロジェクトの目的は、Visual Studio Code拡張機能のモダンFortranを他の言語にローカライズすることです。Visual Studio Code拡張機能をローカライズする方法に関する広範なドキュメントが既にあり、このプロセスを支援するためのツールも既にあります(例:fortran-lang.org)。

関連する課題

期待される成果: Visual Studio Code拡張機能のモダンFortranは他の言語にローカライズされます。