-
Notifications
You must be signed in to change notification settings - Fork 13.3k
Add go to rust-inside-other-languages chapter #28915
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
Add go to rust-inside-other-languages chapter #28915
Conversation
Like ruby, python, and node.js javascript, go is a commonly used modern language on the server. Like them it is garbage-collected. Unlike them, it does not have a GIL (indeed, it is even compiled to native assembly instructions). A quick conversation in the Rust IRC channel lends me to think this is at least worth considering.
Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @brson (or someone else) soon. If any changes to this PR are deemed necessary, please add them as extra commits. This ensures that the reviewer can see what has changed since they last reviewed the code. The way Github handles out-of-date commits, this should also make it reasonably obvious what issues have or haven't been addressed. Large or tricky changes may require several passes of review and changes. Please see the contribution instructions for more information. |
One further fault this addition may have: it should be possible, by adding the library you create in rust to the system library locations, or by otherwise finding a cgo comment syntax to link against it, to invoke rust from go without needing a third party ffi library wrapper. That I was unable to figure out a way to link against a library in cgo using a relative path does not, after all, mean it is impossible. I don't know if that is important. |
$ go get bitbucket.org/binet/go-ffi/pkg/ffi | ||
``` | ||
|
||
(You may need to install mercurial first). |
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.
Mercurial should be capitalized
Capitalization, spacing, and link neatness.
I'm happy to make stylistic improvements but I'm still somewhat concerned about the comparability of the timings. |
☔ The latest upstream changes (presumably #29932) made this pull request unmergeable. Please resolve the merge conflicts. |
Hey @PeterSP , So, I am conflicted here. On one hand, I really like this addition. On the other hand... well let me just spill it out:
So, I'm not sure what to do. I think I'm leaning towards "this chapter should just be removed", I think. |
I'm convinced just by "this isn't meant to be a full reference". We can't include every language here - that's for another document. |
Some history: While getting Rust to 1.0, it was a struggle to keep the book in a working state. I had always wanted a certain kind of TOC, but couldn't quite get it there. At the 11th hour, I wrote up "Rust inside other langauges" and "Dining Philosophers" in an attempt to get the book in the direction I wanted to go. They were fine, but not my best work. I wanted to further expand this section, but it's just never going to end up happening. We're doing the second draft of the book now, and these sections are basically gone already. Here's the issues with these two sections, and removing them just fixes it all: // Philosophers There was always controversy over which ones were chosen, and why. This is kind of a perpetual bikeshed, but it comes up every once in a while. The implementation was originally supposed to show off channels, but never did, due to time constraints. Months later, I still haven't re-written it to use them. People get different results and assume that means they're wrong, rather than the non-determinism inherent in concurrency. Platform differences aggrivate this, as does the exact amount of sleeping and printing. // Rust Inside Other Languages This section is wonderful, and shows off a strength of Rust. However, it's not clear what qualifies a language to be in this section. And I'm not sure how tracking a ton of other languages is gonna work, into the future; we can't test _anything_ in this section, so it's prone to bitrot. By removing this section, and making the Guessing Game an initial tutorial, we will move this version of the book closer to the future version, and just eliminate all of these questions. In addition, this also solves the 'split-brained'-ness of having two paths, which has endlessly confused people in the past. I'm sad to see these sections go, but I think it's for the best. Fixes rust-lang#30471 Fixes rust-lang#30163 Fixes rust-lang#30162 Fixes rust-lang#25488 Fixes rust-lang#30345 Fixes rust-lang#29590 Fixes rust-lang#28713 Fixes rust-lang#28915 And probably others. This lengthy list alone is enough to show that these should have been removed. RIP.
/cc #30595 |
…ankro Some history: While getting Rust to 1.0, it was a struggle to keep the book in a working state. I had always wanted a certain kind of TOC, but couldn't quite get it there. At the 11th hour, I wrote up "Rust inside other langauges" and "Dining Philosophers" in an attempt to get the book in the direction I wanted to go. They were fine, but not my best work. I wanted to further expand this section, but it's just never going to end up happening. We're doing the second draft of the book now, and these sections are basically gone already. Here's the issues with these two sections, and removing them just fixes it all: // Philosophers There was always controversy over which ones were chosen, and why. This is kind of a perpetual bikeshed, but it comes up every once in a while. The implementation was originally supposed to show off channels, but never did, due to time constraints. Months later, I still haven't re-written it to use them. People get different results and assume that means they're wrong, rather than the non-determinism inherent in concurrency. Platform differences aggrivate this, as does the exact amount of sleeping and printing. // Rust Inside Other Languages This section is wonderful, and shows off a strength of Rust. However, it's not clear what qualifies a language to be in this section. And I'm not sure how tracking a ton of other languages is gonna work, into the future; we can't test _anything_ in this section, so it's prone to bitrot. By removing this section, and making the Guessing Game an initial tutorial, we will move this version of the book closer to the future version, and just eliminate all of these questions. In addition, this also solves the 'split-brained'-ness of having two paths, which has endlessly confused people in the past. I'm sad to see these sections go, but I think it's for the best. Fixes rust-lang#30471 Fixes rust-lang#30163 Fixes rust-lang#30162 Fixes rust-lang#25488 Fixes rust-lang#30345 Fixes rust-lang#29590 Fixes rust-lang#28713 Fixes rust-lang#28915 And probably others. This lengthy list alone is enough to show that these should have been removed. RIP.
Some history: While getting Rust to 1.0, it was a struggle to keep the book in a working state. I had always wanted a certain kind of TOC, but couldn't quite get it there. At the 11th hour, I wrote up "Rust inside other langauges" and "Dining Philosophers" in an attempt to get the book in the direction I wanted to go. They were fine, but not my best work. I wanted to further expand this section, but it's just never going to end up happening. We're doing the second draft of the book now, and these sections are basically gone already. Here's the issues with these two sections, and removing them just fixes it all: // Philosophers There was always controversy over which ones were chosen, and why. This is kind of a perpetual bikeshed, but it comes up every once in a while. The implementation was originally supposed to show off channels, but never did, due to time constraints. Months later, I still haven't re-written it to use them. People get different results and assume that means they're wrong, rather than the non-determinism inherent in concurrency. Platform differences aggrivate this, as does the exact amount of sleeping and printing. // Rust Inside Other Languages This section is wonderful, and shows off a strength of Rust. However, it's not clear what qualifies a language to be in this section. And I'm not sure how tracking a ton of other languages is gonna work, into the future; we can't test _anything_ in this section, so it's prone to bitrot. By removing this section, and making the Guessing Game an initial tutorial, we will move this version of the book closer to the future version, and just eliminate all of these questions. In addition, this also solves the 'split-brained'-ness of having two paths, which has endlessly confused people in the past. I'm sad to see these sections go, but I think it's for the best. Fixes rust-lang#30471 Fixes rust-lang#30163 Fixes rust-lang#30162 Fixes rust-lang#25488 Fixes rust-lang#30345 Fixes rust-lang#28713 Fixes rust-lang#28915 And probably others. This lengthy list alone is enough to show that these should have been removed. RIP.
Some history: While getting Rust to 1.0, it was a struggle to keep the book in a working state. I had always wanted a certain kind of TOC, but couldn't quite get it there. At the 11th hour, I wrote up "Rust inside other langauges" and "Dining Philosophers" in an attempt to get the book in the direction I wanted to go. They were fine, but not my best work. I wanted to further expand this section, but it's just never going to end up happening. We're doing the second draft of the book now, and these sections are basically gone already. Here's the issues with these two sections, and removing them just fixes it all: // Philosophers There was always controversy over which ones were chosen, and why. This is kind of a perpetual bikeshed, but it comes up every once in a while. The implementation was originally supposed to show off channels, but never did, due to time constraints. Months later, I still haven't re-written it to use them. People get different results and assume that means they're wrong, rather than the non-determinism inherent in concurrency. Platform differences aggrivate this, as does the exact amount of sleeping and printing. // Rust Inside Other Languages This section is wonderful, and shows off a strength of Rust. However, it's not clear what qualifies a language to be in this section. And I'm not sure how tracking a ton of other languages is gonna work, into the future; we can't test _anything_ in this section, so it's prone to bitrot. By removing this section, and making the Guessing Game an initial tutorial, we will move this version of the book closer to the future version, and just eliminate all of these questions. In addition, this also solves the 'split-brained'-ness of having two paths, which has endlessly confused people in the past. I'm sad to see these sections go, but I think it's for the best. Fixes #30471 Fixes #30163 Fixes #30162 Fixes #25488 Fixes #30345 Fixes #29590 Fixes #28713 Fixes #28915 And probably others. This lengthy list alone is enough to show that these should have been removed. RIP.
Like ruby, python, and node.js javascript, go is a commonly used modern language on the server. Like them it is garbage-collected. Unlike them, it does not have a GIL (indeed, it is even compiled to native assembly instructions).
A quick conversation in the Rust IRC channel lends me to think this is at least worth considering.
As noted in the HTML comment, this submission has times measured on a different system than the other examples, mine. On mine, the other examples took 50%, 60%, or 88% of the time listed (depending on the example). The example should probably be measured on the same system as the others in any final version of this chapter.