-
Notifications
You must be signed in to change notification settings - Fork 119
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とJavaのブロッキングAPIを実装 #705
CとJavaのブロッキングAPIを実装 #705
Conversation
ロガーの初期化をどこに置くのかについては選択肢がいくつかあると思います。例えば次のように毎回 #[no_mangle]
pub unsafe extern "C" fn f() -> VoicevoxResultCode {
let _ = init_logger();
into_result_code_with_error((|| { … })())
}
#[no_mangle]
pub unsafe extern "C" fn g() -> VoicevoxResultCode {
let _ = init_logger();
into_result_code_with_error((|| { … })())
} |
ロガーの初期化ですが、C APIについては、全ての関数にロガー初期化を明示的にはさむようにしました。 #[no_mangle]
pub unsafe extern "C" fn voicevox_synthesizer_new(
open_jtalk: &OpenJtalkRc,
options: VoicevoxInitializeOptions,
out_synthesizer: NonNull<Box<VoicevoxSynthesizer>>,
) -> VoicevoxResultCode {
+ init_logger_once();
into_result_code_with_error((|| {
let options = options.into();
let synthesizer = VoicevoxSynthesizer::new(open_jtalk, &options)?.into();
out_synthesizer.as_ptr().write_unaligned(synthesizer);
Ok(())
})())
} Javaでは @@ -64,5 +64,11 @@ abstract class Dll {
throw new RuntimeException("Failed to load Voicevox Core DLL for " + target, e);
}
}
+
+ new LoggerInitializer().initLogger();
+ }
+
+ static class LoggerInitializer {
+ native void initLogger();
}
} |
あすみません、返信できてませんでした 🙇 ロガーの初期化ですが、ちょっと考えた感じCもJavaも実装された方法が良いのかなと思いました。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!!!!!
お疲れ様でした!!!
あ、C APIは意外とinit_logger
を明示的に呼んでもらう形でも良いかなとちょっと思いました。
C APIを使うのはプログラミングに割と慣れてる人だと思うので、ドキュメント読んでくれるかなと。
(あとexampleに書いておけば十分そう)
内容
#702 で実装したブロッキングAPIをC APIとJava APIで使い、両者からtokioの依存を外します。
ロガーの初期化をどうするかですが、
次の方針に従います。追記: #705 (comment)
関連 Issue
#662
#702
その他