AUTOSAR 1079:2024(AP) Explanation of ARA Applications in Rust,Figure 4.1: async function execution をPlantUMLで描いてみようと思います。
AUTOSARは、Classic Platformは、EnterPriseArchitect(ソフト名)のファイルを配付している。
なぜか、より公開側に振ったはずのAdaptive Platrformでは、UML図を配布していない。
AUTOSAR APの図をChatGPTにPlantUMLで書いてもらう企画を考案。
今回はRUST文書の第2回目。
Figure 4.1: async function execution
AUTOSAR 1079:2024 Explanation of ARA Applications in Rust, R24-11, AP
https://www.autosar.org/fileadmin/standards/R24-11/AP/AUTOSAR_AP_EXP_ARARustApplications.pdf
AUTOSAR Adaptive Platfrom PlantUML with ChatGPT
https://qiita.com/kaizen_nagoya/items/4fef7700b57419ddf2c2
Si desea leer el código fuente de PlantUML, puede hacerlo seleccionando la solicitud de edición.
If you would like to read the source code of PlantUML, you can do by selecting the edit request.
PlantUMLのソースコードを読みたい方は、編集リクエストを選択するとソースコードが読めます。
ChatGPT
https://www.autosar.org/fileadmin/standards/R24-11/AP/AUTOSAR_AP_EXP_ARARustApplications.pdf の Figure 4.1: async function execution を PlantUMLで記述してみてください。
ChatGPT:
図を見られなかったので、AUTOSAR-Rust ドキュメント中の “Figure 4.1: async function execution” の構成を想定して PlantUML で表現するサンプルを以下に示します。もし図の細部(矢印の向き、ラベル内容、ブロック構成など)を教えてもらえれば、それを反映できます。
以下は非同期関数実行 (async call / return / callback) のシーケンス図として表現した例です:
解説・調整すべき点
asyncCall → forwardRequest → executeAsync と順に進み、最終的に 非同期ハンドル(Future / Promise 相当) をクライアントに返す流れを表現しています。
サーバ(Server)はすぐにはレスポンスを返さず、将来のタイミングで future を通じて返す想定です。
後段で Manager → Proxy → Client による 応答伝達 / コールバック の流れを表しています。
図の元資料では、さらに “timeout” や “error” 処理、キャンセルなども書かれている可能性があります。それらを表現するなら、破線矢印や分岐(alt / opt ブロック)を使うとよいでしょう。
もしよければ、元の PDF の該当ページをスクリーンショットでアップしてくれますか? それをもとに正確な PlantUML を提供します。
よろしくお願いします。
ChatGPT:
以下は、アップロードしていただいた Figure 4.1: async function execution を PlantUML のシーケンス図で表現した例です。
元図の注釈やループ、await・poll の流れをできるだけ反映しています。
反映したポイント
Executor / Main / async function / Future の4レーンを設定。
初回 Call function で Future が生成され、実行は開始しない注釈を追加。
spawn(Future) → await or block_on → poll の繰り返し(0..N回)を loop で表現。
await 中は Pending、最終 Ready(value) で Executor から Main に結果を返す流れ。
このコードを PlantUML でレンダリングすると、元図に近い非同期関数実行シーケンスが再現できます。
図に基づいたC++およびRUSTのソースコードをご紹介ください。
問題が発生しました。
再試行
ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。
図に基づいたC++およびRUSTのソースコードをご紹介ください。
ChatGPT:
ありがとうございます。先ほどの Figure 4.1: async function execution を元に、
「関数呼び出し→Future作成→Executorがpoll→awaitで中断→Readyで値返却」
という流れを C++ と Rust のサンプルコード で表現してみます。
実際の AUTOSAR 実装ではもっと複雑ですが、ここでは「仕組みをコードで模した最小限の例」です。
1️⃣ C++ 側(std::future / std::async を利用)
#include <iostream>
#include <future>
#include <thread>
#include <chrono>
// async function 相当
int async_function(int x) {
std::cout << "[async_function] start\n";
std::this_thread::sleep_for(std::chrono::seconds(1)); // await に相当
std::cout << "[async_function] resume after await\n";
return x * 2;
}
int main() {
std::cout << "[Main] Call function\n";
// Call function → Future生成(まだ実行開始していないイメージ)
std::future<int> fut = std::async(std::launch::async, async_function, 21);
std::cout << "[Main] Future created, function does not start executing immediately\n";
// Executor が poll して Ready になるまで待機
std::cout << "[Main] Await future...\n";
int result = fut.get(); // block_on に相当
std::cout << "[Main] Got value = " << result << "\n";
}
std::async によって Future が生成される。
実際はスレッドで即開始するが、概念的には「poll されるまで実行進まない」と対応付け可能。
fut.get() が await / block_on の役割。
2️⃣ Rust 側(async / await を利用)
use std::time::Duration;
use tokio::time::sleep;
// async function 相当
async fn async_function(x: i32) -> i32 {
println!("[async_function] start");
sleep(Duration::from_secs(1)).await; // await ポイント
println!("[async_function] resume after await");
x * 2
}
#[tokio::main]
async fn main() {
println!("[Main] Call function");
// Call function → Future生成(ここでは実行は始まらない)
let fut = async_function(21);
println!("[Main] Future created, function does not start executing immediately");
// Executor が poll → await → Ready(value)
println!("[Main] Await future...");
let result = fut.await;
println!("[Main] Got value = {}", result);
}
Rust の async fn は Future を返すだけで即実行はされない → 図の「function does not start executing」と対応。
fut.await が Executor による poll → Ready(value) を経て結果を返す部分。
tokio::main マクロが Executor 役。
まとめ
C++ では std::future / std::async、Rust では async / .await によって
図の「Future生成 → poll → await → Ready(value)」がそれぞれ表現できます。
図の「Executor」「Main」「async function」「Future」の4レーンを、
C++ では main() / std::async / std::future、Rust では tokio::main / async fn / Future で対応付けしました。
👉 ご質問ですが、
このコードは 概念を忠実に再現した教育用サンプルにしています。
それとも、AUTOSAR Rust Applications のドキュメントに近い 通信サービスAPI例(ara::comとの連携) に寄せた形が欲しいですか?
はい。お願いします。
ChatGPT:
了解しました。
ここでは AUTOSAR Adaptive Platform (ara::com) のコンセプトを踏まえつつ、
Figure 4.1「async function execution」の流れ――
Main がサービスを呼び出し
Future が生成され
Executor が poll → await → Ready
――を AUTOSAR風の C++ と Rust のコード で模したサンプルを示します。
(実際のAUTOSAR環境そのものではありませんが、概念を表現しています)
1️⃣ C++:ara::com風 Async サービス呼び出し
//=== async_service.hpp ===
#pragma once
#include <future>
#include <string>
#include <chrono>
#include <thread>
namespace ara {
namespace com {
class AsyncRadarService {
public:
std::future<std::string> GetRadarDataAsync() {
return std::async(std::launch::async, [](){
// --- Executor が poll 開始 ---
std::this_thread::sleep_for(std::chrono::seconds(1)); // await 相当
return std::string("RadarDataReady");
});
}
};
} // namespace com
} // namespace ara
//=== main.cpp ===
#include "async_service.hpp"
#include <iostream>
int main() {
std::cout << "[Main] Call async function\n";
ara::com::AsyncRadarService radar;
// Call function → Future生成(図の「function does _not_ start executing」に対応)
auto fut = radar.GetRadarDataAsync();
std::cout << "[Main] Future created, awaiting...\n";
// Executor が poll して Ready(value) になるまで待機
std::string value = fut.get(); // block_on に相当
std::cout << "[Main] Got value = " << value << "\n";
}
std::async で Future が即返り、Executor がバックグラウンドで poll。
fut.get() が await と同じ役割。
2️⃣ Rust:AUTOSAR Rust Wrapper + async/await
// Cargo.toml に tokio = { version = "1", features = ["full"] } を追加してビルドしてください
use tokio::time::{sleep, Duration};
/// AUTOSAR ara::com の Rust ラッパを模したサービス
struct RadarService;
impl RadarService {
async fn get_radar_data(&self) -> String {
println!("[async function] start");
// await に相当:I/OやIPC待機など
sleep(Duration::from_secs(1)).await;
println!("[async function] resume after await");
"RadarDataReady".to_string()
}
}
#[tokio::main]
async fn main() {
println!("[Main] Call async function");
let radar = RadarService;
// Call function → Future生成(即実行せず)
let fut = radar.get_radar_data();
println!("[Main] Future created, function does not start executing immediately");
// Executor(tokio) が poll → await → Ready(value)
let value = fut.await;
println!("[Main] Got value = {}", value);
}
tokio::main が Executor。
radar.get_radar_data() が Future を返し、最初の .await で poll が始まります。
sleep(...).await が「Pending → 再開」のポイント。
対応表(Figure 4.1 とコード)
図の要素 C++ 実装 Rust 実装
Main main() main() (#[tokio::main])
async function AsyncRadarService::GetRadarDataAsync RadarService::get_radar_data
Future std::futurestd::string impl Future
Executor std::async ランタイム Tokio runtime
poll/await/Ready(value) fut.get() .await
このコードは AUTOSAR Adaptive Platform での「サービス呼び出しを非同期に処理する」
という概念をシンプルに再現した教育的サンプルです。
実際に AUTOSAR ARA::com を使う場合は、公式 SDK の ara::com API をラップする形で
同様の async/await 構造を組み込むことで、図 4.1 の動きに近い実装が可能です。
GPT-5 の Free プランの上限に達しました。
このチャットには添付ファイルがあるため、続行するには GPT-5 が必要です。制限が 13:06 以降. にリセットされます
新しいチャット
アップグレードする
ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。
参照
ChatGPT利用の技4つ with ChatGPT
https://qiita.com/kaizen_nagoya/items/4a178bd6a09a4a471a7f
ChatGPTによるQiita記事の改良と補足
https://qiita.com/kaizen_nagoya/items/20604d6dd0702ab95c2f
ChatGPTによるQiita記事の改良と補足(2)
https://qiita.com/kaizen_nagoya/items/996275307ffc8c1243f8
本から始める 面倒なことはChatGPTにやらせよう by からあげ
https://qiita.com/kaizen_nagoya/items/f5ce2a18db54b5610e4b
MCP入門 〜面倒なことはAIエージェントにやらせよう〜 by からあげ を聞きながら
https://qiita.com/kaizen_nagoya/items/54b648c838fae8d57e38
【松尾研LLMコミュニティ】面倒なことはLLMにやらせよう "Beginning LLM"2024年10月17日 AI(9)
https://qiita.com/kaizen_nagoya/items/efdc23fbe67cdae2126e
設計:ChatGPTで特異解か一般解を求める AI(1)
https://qiita.com/kaizen_nagoya/items/4dec580e16a7c84b0ec4
みんなの使い方から学ぶ
https://qiita.com/kaizen_nagoya/items/8e7de492d896df94a36e
AI・機械学習 昨日、今日、明日
https://qiita.com/kaizen_nagoya/items/adb184c8fc7a65ac9756
DNA LLM and genome for survey 2200 papers by name.
https://qiita.com/kaizen_nagoya/items/ce8a28d6072f340a9d59
ChatGPTから学ぶ 3倍褒めて3分の1貶す
https://qiita.com/kaizen_nagoya/items/91e70fd8caa25076718b
AI時代の相棒は、キミに決めた! 推しのAIエージェントをシェアしよう!企画参加まとめへの序章
https://qiita.com/kaizen_nagoya/items/e3fd7557bac97d1b88f2
記事投稿数、いいね数の目標設定して ChatGPTに聞いてみた。
https://qiita.com/kaizen_nagoya/items/019e2ad9c3e45e45854e
AI時代の相棒は、キミに決めた! ChatGPT推し ver.0
https://qiita.com/kaizen_nagoya/items/8068a884fb2e64cd3c4f
無料ChatGPTの処理限界
https://qiita.com/kaizen_nagoya/items/84683aee26d9f4a28af0
by ChatGPT, with ChatGPT and people opinions.
https://qiita.com/kaizen_nagoya/items/57f00f9b48b25bc231e6
ChatGPTの使い方の利点と課題 by ChatGPT
https://qiita.com/kaizen_nagoya/items/0f469e473a6ed0407daa
DataRobot 風 AI agent Robotをあなたに
https://qiita.com/kaizen_nagoya/items/1ca8ca1dedefaf739d16
ChatGPTの賢い使い方
https://qiita.com/kaizen_nagoya/items/3a7e4583553543eeeeb3
ChatGPTの弱みをあなたに
https://qiita.com/kaizen_nagoya/items/3c97c63a22939e203905
ChatGPTで裸の王様
https://qiita.com/kaizen_nagoya/items/8377be38d3a763e93811
設計 仕様 制約 AI利用開発の鍵 by ChatGPT
https://qiita.com/kaizen_nagoya/items/1b9cb2f9d26308d84791
PowerPoint 筋書き(outline), 見直し(review), 見栄え加工 by ChatGPT
https://qiita.com/kaizen_nagoya/items/37bb97fc250fca37295b
逃げ回るChatGPTを追い詰めるには
https://qiita.com/kaizen_nagoya/items/cd60426e626ba05e0377
三人寄れば文珠の知恵は直交する能力前提 by ChatGPT
https://qiita.com/kaizen_nagoya/items/512e5611615e2426bb42
プログラマ3年で社長事業(未成年編) 博士論文支援追加
https://qiita.com/kaizen_nagoya/items/326452b5bf29c144c307
自殺防止手引き原稿 補足 by ChatGPT
https://qiita.com/kaizen_nagoya/items/7e459fa7edf7205c2667
しつけ(discipline) の測定視点 by ChatGPT
https://qiita.com/kaizen_nagoya/items/6b5ce03c545f7bbd8723
技術者は英語を学ぶ必要はない。英単語の羅列でいい=プログラム。
https://qiita.com/kaizen_nagoya/items/4fc3963a21e0339fd1c9
猫中心設計から鳥中心設計へ part2
https://qiita.com/kaizen_nagoya/items/4d7a5a33c85e0b01dc5d
プログラマ必須科目 ChatGPTにも確認
https://qiita.com/kaizen_nagoya/items/7b30d9d119792130facd
なんで音楽とプログラムの関係がうまく書けないか。
https://qiita.com/kaizen_nagoya/items/489a68d360df4b26f87d
AI利用業務手引き
https://qiita.com/kaizen_nagoya/items/f201b292f37dba16e9ef
C言語(C++)が必要な人と必要ない人
https://qiita.com/kaizen_nagoya/items/2afe9e846b55b24cb6f1
C言語(C++)が必要な人、必要ない人 ChatGPT
https://qiita.com/kaizen_nagoya/items/a074cb8cd292d8d94bd4
C言語を習得する3つの方法
https://qiita.com/kaizen_nagoya/items/84cab0888c193bba429b
C言語を習得する3つの方法 ChatGPT
https://qiita.com/kaizen_nagoya/items/4a3518a18fa49f46787f