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

Implement ‘proper’ GAP kernel module #23

Open
wilfwilson opened this issue Sep 3, 2021 · 2 comments
Open

Implement ‘proper’ GAP kernel module #23

wilfwilson opened this issue Sep 3, 2021 · 2 comments
Labels
component: GAP Stuff about the GAP side of Vole component: Rust Stuff about the Rust side of Vole kind: thankless task nature: technical Uninteresting mathematically and fiddly things

Comments

@wilfwilson
Copy link
Collaborator

I'm not sure of the correct language to use here.

But @ChrisJefferson was saying that, in order to get acceptable performance in GAP-Julia, he may need to write a proper GAP-kernel-to-Vole-Rust-component connector. This would replace the forking and sockets and networking stuff that can be slow in some cases.

@wilfwilson wilfwilson added component: Rust Stuff about the Rust side of Vole component: GAP Stuff about the GAP side of Vole nature: technical Uninteresting mathematically and fiddly things kind: thankless task labels Sep 3, 2021
@fingolfin
Copy link
Collaborator

This would in particular get rid of the use of IO_fork and IO_WaitPid and friends, and thus the custom SIGCHLD handler in IO, which is a major impediment for using this from within GAP-Julia.

A middle ground might be to switch from using IO to using GAP's own InputOutputLocalProcess. It doesn't support TCP, though -- but it doesn't need to, as it generally works fine even in Cygwin, as it uses posix_spawn, which is high-level enough that Cygwin can implement it sanely on Windows without pipes.

But perhaps there is a deeper reason InputOutputLocalProcess wasn't used in the first place to implement the subprocess communication?

@ChrisJefferson
Copy link
Collaborator

One annoying technical issue is that there isn't a Rust compiler for Cygwin, so Vole's Rust component is compiled as a windows executable. That's why I mess about using non-regular pipes on windows.

I should try InputOutputLocalProcess -- I just used IO_fork and friends as it's my natural instinct.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component: GAP Stuff about the GAP side of Vole component: Rust Stuff about the Rust side of Vole kind: thankless task nature: technical Uninteresting mathematically and fiddly things
Projects
None yet
Development

No branches or pull requests

3 participants