質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

Q&A

2回答

2630閲覧

異言語間インタフェース FFI とは

nguyenseiji

総合スコア156

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Rust

Rustは、MoFoが支援するプログラミング言語。高速性を維持しつつも、メモリ管理を安全に行うことが可能な言語です。同じコンパイル言語であるC言語やC++では困難だったマルチスレッドを実装しやすく、並行性という点においても優れています。

0グッド

1クリップ

投稿2020/09/07 21:26

iosアプリをrustで開発した場合は
c++を使って異言語間インタフェース FFI をしないといけないみたいなのですが

そうするとc++のコードに変換されるのでしょうか
そうしたらやはりパフォーマンスなどはc++のパフォーマンスになってしまうのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2020/09/07 21:54

本題には知識がなく申し訳ありませんが、 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12231285687 https://teratail.com/help#posted-otherservice によると、teratailのルールとしては 「複数のサイトに質問を投稿された場合は、質問内容にマルチポストをする理由を書き、他のサイトの投稿へのリンクを貼ってください。また、解決した際には必ずteratail及びすべての投稿に解決した旨と、どのように解決したかを記載してください。」だそうです。
guest

回答2

0

Rust言語のFFIについて誤解があるように見受けられます。一般に、FFI=実行時に他プログラミング言語インターフェイスを呼び出す仕組みです。

他言語関数インターフェイス - Rust By Example 日本語版 より:

RustはCのライブラリを呼び出すために他言語関数インターフェイス(Foreign Function Interface, FFI)を持っています。


そうするとc++のコードに変換されるのでしょうか

いいえ。Rustで記述されたコードと、C++で記述されたコードが協調・連携して動作します。
(より正確には、Rust/C++それぞれからコンパイルされた機械語命令列となるため、そもそも両者を区別する意味はなくなります。)

そうしたらやはりパフォーマンスなどはc++のパフォーマンスになってしまうのでしょうか?

プログラミング言語の実行性能という観点では、RustとC++は同程度といって差し支えありません。

投稿2020/09/08 04:07

編集2020/09/08 04:08
yohhoy

総合スコア6191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nguyenseiji

2020/09/08 21:33 編集

詳しい説明ありがとうございます iosアプリを構築予定なのですが rustを使うかc++を使うか迷っていて rustの方が早いとして rustを使う場合は必然的にrust/c++になるとおもうのですが rust/c++とc++ではどちらの方が早いでしょうか rustとc++の場合はrustの方が処理速度は速いとします(実際に若干rustの方が早いかと)
nguyenseiji

2020/09/08 22:50

rust/c++は理論的にc++よりは処理速度は低下しないのでしょうか? rust/c++ですと2つの言語を実行しているのでコンフリクト?みたいな事が起きて 遅くなることもあるのでしょうか?
yohhoy

2020/09/09 04:59

> rustとc++の場合はrustの方が処理速度は速いとします(実際に若干rustの方が早いかと) プログラミング言語間の速度比較は、単純には比較できるものではありません。 個人的な感覚としては、C++とRustの性能差はプログラマの設計スキルやコーディングスキルに依存します。 アドバイスとして言えるのは、ご自身が得意な方を選べばよいでしょう。 > rust/c++ですと2つの言語を実行しているのでコンフリクト?みたいな事が起きて遅くなることもあるのでしょうか? Rust(に限らずほとんどすべての言語の)のFFIは、厳密にはC++言語ではなくC言語インタフェースをサポートするものです。 つまり Rust → C → C++ という経路をたどる必要があり、インタフェース設計によっては若干のオーバーヘッドが発生する可能性は否定できません。
guest

0

FFIで問題になりがちなのはデータ構造の取り扱いだと思います。つまり単一の言語で書くときと比較して、データの値渡しが出来ずにポインタ経由でやり取りしなければならなくなったり、あるいは移植性が低下したり(C++のクラスのメンバー関数をそのまま渡すとき)、余計なコピーが発生したりすることが考えられます。これはつまるところ、C言語レベルまでデータ構造を落とさないといけないことに由来します。

ただまあiOSのAPIを叩くときはそもそもCでもC++ですらなくObjective-C++ないしSwiftですよね。雑に調べた感じ、iOSのAPIをRustから叩くって実質自分で全部ラップするような苦行が始まると思うんですが・・・。Rustの関数をSwiftから呼び出すだけならかんたんなんですが。

すなおにSwift使うのがいいんじゃないですかね・・・

投稿2020/09/09 04:07

yumetodo

総合スコア5852

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問