Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

アイデア:C APIで、stderr以外からログを受け取れるようにする #556

Open
3 tasks done
sevenc-nanashi opened this issue Jul 30, 2023 · 2 comments
Open
3 tasks done

Comments

@sevenc-nanashi
Copy link
Member

内容

タイトル通りです。

Pros 良くなる点

C FFIのラッパーがそれぞれの言語にあった形(Loggerなど)でログを出せるようになる

Cons 悪くなる点

ないはず?

実現方法

struct VoicevoxLogObject {
	VoicevoxLogLevel level;
	char*			 message;
}

typedef void (*voicevox_log_callback)(VoicevoxLogObject);

void voicevox_set_log_callback(voicevox_log_callback callback);

VOICEVOXのバージョン

0.15.0(vvm-async-api)

OSの種類/ディストリ/バージョン

  • Windows
  • macOS
  • Linux

その他

(なし)

@qryxip
Copy link
Member

qryxip commented Aug 2, 2023

気付いたのですがこれをやるためには #541 を、少なくとも「panic=abortのまますべてをextern "C-unwind"にする」という形でやらないといけませんね。やらない場合、「絶対にコールバックからunwindするな」という注意書きを書くことになります。

#541 で以下の表を引用しましたが、extern "C"からC++の例外を発射することは例えpanic=abort下であってもUBです。これを防ぐにはコールバックが呼ばれうるすべての関数をextern "C-unwind"にする他ありません。

panic runtime ABI panic-unwind Unforced foreign unwind
panic=unwind "C-unwind" unwind unwind
panic=unwind "C"-like abort UB
panic=abort "C-unwind" panic! aborts abort
panic=abort "C"-like panic! aborts (no unwinding occurs) UB

2945-c-unwind-abi - The Rust RFC Book

@qryxip
Copy link
Member

qryxip commented Oct 17, 2023

このissueですが、 #545 から一旦外しました。
(後で入れてもおそらくbreaking changeではないので)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants