リアルタイムシステムのプログラミング言語に関する有用な情報は見つかりませんでした。私が見つけたのは リアルタイムシステムとプログラミング言語:Ada 95、リアルタイムJavaおよびリアルタイムC/POSIX ( ここにいくつかのpdf )、これはリアルタイムシステム用のJavaとCの拡張について話しているようです(私は読む本がありません)。また、この本は2001年に発行され、情報は現在廃止されている可能性があります。
したがって、これらの言語が実世界のアプリケーションで使用されているのか、それとも実世界のリアルタイムシステムがDSLなどの他の言語で作成されているのかは疑問です。
2番目のオプションが当てはまる場合、使用する言語の優れた特徴は何ですか?
Javaのリアルタイム仕様には、いくつかの商用グレードの実装があります。
これらの製品は、コンパイルからネイティブコード(Aonix)、J2ME(aicas、apogee)、完全なJ2SE(Sun、IBM)までの連続したものに及びます。すべてではないにしても、ほとんどのシステムが少数の安全またはミッションクリティカルなシステムに導入されていますが、勢いは増しています。例としては、 エグリンAFBの宇宙監視レーダーの近代化 や米海軍による DDG-1000 /ズムウォルト駆逐艦 でのRTSJの使用などがあります。 Sunはまた、金融取引処理ドメインでの展開を主張しています。
RTSJに興味がある場合は、Peter Dibbleの リアルタイムプラットフォームプログラミング 、またはWellings教授の Javaでの並行およびリアルタイムプログラミング をお勧めします。
関連する注記として、RTSJのサブセットとして構築されたJavaプログラミング言語のセーフティクリティカルプロファイルを提供するための作業も進行中です。また、分散型を調査するために専門家グループが結成されました。 RTSJ DRTSJですが、作業が停滞しています。
私はアビオニクスソフトウェアエンジニアです。私はいくつかの開発プロジェクトに参加することができました。これらのプロジェクトで使用した言語は、C、C++、およびReal-timeJavaです。
Cは素晴らしいです。 C++はそれほど悪くはありませんが、C/C++では、DO-178Bなどの安全性を考慮して厳格なコーディング標準が必要です。
リアルタイムJavaが進むべき道だと思いますが、まだ多くのアビオニクスアプリケーションは見ていません。
韓国のジェットトレーナーT-50は、ミッションコンピュータを実行しますRT Java HUDを提供するアプリケーションとMFDディスプレイ、およびすべてミッションクリティカルな機能の。
この本では、Ada 95、Java Real-Time System、およびリアルタイムPOSIX拡張機能(Cでプログラム))の使用について説明しています。これらはいずれも、ドメイン固有の言語ではありません。
Ada 95は、90年代後半に一般的に使用されていたプログラミング言語であり、(AFAIK)は、防衛および航空宇宙産業のリアルタイムプログラミングに今でも広く使用されています。 Adaの上に構築されたDSLが少なくとも1つあります- SparkAda -これは、プログラム検証ツールにシステム特性を記述する注釈のシステムです。
このインタビュー 2006年4月6日は、Javaリアルタイムシステムを構成するクラスと仮想マシンの変更の一部を示しています。ドメイン固有については言及していません。言語拡張。リアルタイムシステムでのJavaの使用に出くわしたことはありませんが、それを見つけることが期待される種類のシステムを調べていません(私は働いています)航空宇宙シミュレーションでは、C++、Fortran、場合によってはリアルタイムインザループシステムのAda)。
Realtime POSIX は、POSIXオペレーティングシステム機能の拡張機能のセットです。 OS拡張機能として、言語に固有のものは必要ありません。とはいえ、組み込みシステムを記述するための1つのCベースのDSLを考えることができます SystemC -しかし、それが組み込みシステムの生成にも使用されているかどうかはわかりません。
この本で言及されていないのは Matlab で、ここ数年でシミュレーションツールからリアルタイムシステムのモデル駆動型開発システムに移行しました。 Matlab/Simulinkは、事実上、線形計画法、ステートマシン、およびアルゴリズム用のDSLです。 Matlabは、リアルタイムおよび組み込みシステムの場合、 [〜#〜] c [〜#〜] または [〜#〜] hdl [〜#〜] を生成できます。 Matlabの経験を必要としない、アビオニクス、EW、またはその他の防衛産業のリアルタイムの仕事が宣伝されることは非常にまれです。 (私はMatlabで働いていませんが、業界で実際にどれほどユビキタスであるかを強調しすぎるのは難しいです)
リアルタイムの申請は、ほぼすべての言語で行うことができます。ただし、環境(オペレーティングシステム、ランタイム、およびランタイムライブラリ)は、リアルタイムの制約に準拠している必要があります。ほとんどの場合、リアルタイムとは、何かが発生する決定論的な時間が常に存在することを意味します。決定論的時間は、通常、マイクロ秒/ミリ秒の範囲の非常に低い時間値です。
仕様は通常「すべてのx(期間)(何かをする|何かをチェックする)」のように言うので、リアルタイムシステムはこの基準のみに依存します。通常、これは、システムが外部センサーとインターフェースし、人命救助または人命を脅かすシステムを制御する場合に発生します。
私は、主にC/C++で開発された車載ナビゲーションおよびインフォテインメントシステムに取り組んでおり、オペレーティングシステムは、リアルタイムのナビゲーションとメディア再生を提供するためにリアルタイムの制約を満たすように特別に構成されています。
しかし、これはリアルタイムシステムのすべてではありません。通常、システム全体でのアルゴリズムの選択は、Big-O表記に従って、主に線形時間または一定時間を使用して、決定論的なランタイムを持つように行われます。他のすべては非決定論的であると見なされるため、リアルタイムシステムには使用できません。
私が使用したすべてのリアルタイムシステムは、主にアセンブラのビットを使用してCで記述されているか、Cのビットを使用してアセンブラで記述されています(90年代以降、または80年代のどちらを話しているかによって異なります。ただし、私が使用したリアルタイムシステムの中には、DSLではなく特別な自家製のコードジェネレーターを使用しているものがあります。
まず、リアルタイムの意味を定義する必要があります。
もちろん、ツールが物理環境に対してどのように機能するかによっては、純粋なリアルタイムを効果的に実行できませんでした。これは主に、サードパーティの依存関係が多数存在するためです。
arduino のようなマイクロコントローラーを使用して埋め込みのものを構築している場合、使用する言語はハードウェアによって制限されますが、 Raspberry Pi のようなより複雑なものでは、言語の選択は次のようになります。非常に広い。
これは、以下を使用している場合、測定対象によって異なります。
データを収集するための正しい(より良い)方法は、デバイスが許可する場合は常に値変更イベント ...に基づいています。
ツールはデバイスからの値をpollする必要はありませんが、値が変更された場合、デバイスはツールに値を送信する必要があります。
これは、ハードウェア割り込みトリガーを使用するか、サンプルとしてRS-232シリアルポートでリッスンし続けるなどのポートプロトコルを使用して実行できます。
最後に警告するのは正当なユーザーがどのように対話するかです。
robotのように、組み込みのスタンドアロンデバイスを構築している場合は、グラフィックライブラリを使用してタッチスクリーンを操作できます。
Webベースのモニターを構築している場合、クライアントが古い800x6モノクロ画面であり、インターネット接続が不十分でプロセッサが小さい可能性があることに注意する必要があります...ただし、最終的な目標に応じてクライアントとやり取りすることができ、強力なハードウェアと強力なインターネット接続を確保できます。とにかく、サーバーとクライアント間の通信遅延の接続の喪失とイベントを監視する必要があります。ほとんどの場合、サードパーティの依存関係があります。
そこから、言語の選択は広く、明らかに依存しています
bash および sql のみを使用して、リアルタイム監視エンジンを構築できます。 postgresql のみで構築された高度なエンジンを見てきました。 。 Perl 、 mysql 、 javascript を使用して、Webベースの太陽エネルギーモニターを個人的に作成しました。
リアルタイムのセーフティクリティカルシステムに広く使用されているLabVIEWプログラミング言語について誰も言及していないとは信じられません。 RTシステム用に設計および実装するための、広範なライブラリとよく知られたデザインパターンがあります。
また、ナショナルインスツルメンツは、リアルタイムアプリケーション用に設計されたさまざまなハードウェア(cRIO、PXIなど)を製造しています。
安全が重要な環境で使用されるフラッキング(水圧破砕)にはLabVIEWを使用します。
ちなみに、LabVIEWはRT以外のアプリケーションにも使用されています。
PLCはラダーとfbdコードを実行します。これは、オプションが非常に限られているため、予測できないランタイムパフォーマンスが発生するような方法でプログラミングすることが難しいという意味で、実際にはリアルタイムのDSLです。
リアルタイムプログラミングへのC言語の本当に目的のあるアプリケーション(および関連するすべての問題(並列プログラミングなど))は、私のKickstarterによって提供されています http://www.kickstarter.com/projects/767046121/crawl- space-computing-with-connel これは「ワイドプログラミング」と呼ばれ、私は人生のほとんどをやっています。報酬には、ソフトウェアライブラリと本が含まれます-便利になるように設計されています。
私が2003年から働いている会社は、Scada/Mesプラットフォームの開発と展開を行っています。元の実装は1993年に開始され、OS/2でModula2を使用していました。その後(1998年)、Ada95とWindowsに移植されました。現在(2019)、AdaCoreのAdaコンパイラを使用しています。私たちのシステムは移植され、32/64 Windows、HPUX、OpenVMS(そして最近ではRaspberryにも)に展開されています。中央ヨーロッパ(ガス産業、製油所、工場、発電所)に複数の施設があります。 Adaの機能により、システムの信頼性が高くなり、Cなどの言語を使用した場合に発生しやすい多くのエラーが防止されると感じています。私のブログも参照してください https://www.ipesoft.com/en/blog/what-language-is-the-d2000-written