8 ms·
Rust's 2017 roadmap, six months in
- shock 9y agoI was really hoping we'd have bindings to Qt by now, but looking at the GUI category on crates.io I didn't find any. What do people use to make cross platform GUIs in Rust?
- shmerl 9y agoThe last time I checked there was this: https://github.com/White-Oak/qml-rust https://github.com/White-Oak/qml-rust But it looks stalled. Not sure if anyone is working on such bindings today. UPDATE: I just found this which looks active: https://github.com/rust-qt/cpp_to_rust https://github.com/rust-qt/cpp_to_rust
- JoshTriplett 9y agobindgen has native C++ support (as of recently), so hopefully that will help.
- shmerl 9y agoThat's great!
- kodablah 9y agoThere are some glaring issues w/ the Rust Qt crates, namely subclassing things like QWidget. But it is high priority [0]. This is essential for using Qt as many things are not "signals" but instead overridable protected methods. I started a embedded browser PoC [1] until I hit these limitations which forced me to use C++ [2]. And many other static langs (i.e. not-python) have issues with their Qt bindings (e.g. Go [3] which can't compile via MSVC which some things like the QtWebEngine stuff need). Sadly, for advanced UI (e.g. complex tree views, docking, etc) that is cross platform and looks native, Qt is all there is, and it's reliance on C++ makes it a bit tough to use across languages. A maintained C iface for Qt is really needed. 0 - https://github.com/rust-qt/cpp_to_rust/issues/53 https://github.com/rust-qt/cpp_to_rust/issues/53 1 - https://github.com/cretz/rust-qt_cef_poc https://github.com/cretz/rust-qt_cef_poc 2 - https://github.com/cretz/qt_cef_poc https://github.com/cretz/qt_cef_poc 3 - https://github.com/therecipe/qt/ https://github.com/therecipe/qt/
- nicoburns 9y agoGTK is the best option at the moment. Apparently QT is difficult due to it being heavily based in C++'s view of the world, which doesn't translate particularly well to Rust (notably Rust not supporting OOP in the same way). There is hope of a new rust-native GUI library (possibly in the vain of Flutter[1]) based on the work done for Servo[2], but that looks to be a way off. [0] https://www.reddit.com/r/rust/comments/6l5c94/can_we_crowdfund_a_crossplatform_gui_lib_for_rust/ https://www.reddit.com/r/rust/comments/6l5c94/can_we_crowdfu... [1] https://flutter.io/ https://flutter.io/ [2] https://github.com/servo/webrender https://github.com/servo/webrender
- shmerl 9y agoI think translation problems aren't caused by OOP itself, but by messed up name mangling, and total lack of any sane standard for it in C++.
- wyldfire 9y agoThis thread [1] has some good recent discussion of the current state. [1] https://users.rust-lang.org/t/current-state-of-gui-development-in-rust/11643 https://users.rust-lang.org/t/current-state-of-gui-developme...
- rexicus 9y agoYou might try the imgui/nuklear crates, dealing with generated bindings for something massive like Qt will never be pleasant.
- dom0 9y agoBoth PyQt and PySide work quite well for something that "will never be pleasant".
- rexicus 9y agoPyQt and PySide was exactly what I had in mind. It'll leak memory, segfault on load 1% of the time, segfault if you call unrelated methods in the wrong order, you'll randomly get QStrings and QExceptions instead of their Python equivalents, and it'll be impossible to debug.
- coldtea 9y agoNothing much (some OpenGL bindings and such). They use it for systems software and backend services.
- abiox 9y agostill hoping that someday we'll see namespacing in crates/cargo.
- raphlinus 9y agoThis has been discussed quite a bit, and there are very good reasons why not[0]. But I suppose things can always change. [0]: https://internals.rust-lang.org/t/crates-io-package-policies/1041 https://internals.rust-lang.org/t/crates-io-package-policies...
- Perceptes 9y agoAnd as a result we have to deal with dumb shit like this: https://twitter.com/jdalton/status/869964222716821504 https://twitter.com/jdalton/status/869964222716821504 (continued) https://twitter.com/littlecalculist/status/870356560047816704 https://twitter.com/littlecalculist/status/87035656004781670...
- aphistic 9y agoI don't think I follow you. Can't you create namespaces using modules?
- ofek 9y agoThose integrations with other languages look awesome! I just wish there was a good one for Python.
- Dowwie 9y ago@mitsuhiko has been working on one: https://github.com/mitsuhiko/snaek https://github.com/mitsuhiko/snaek and there's "pythonium trioxide", but I've gotten the impression that its more of an exploratory project: https://github.com/PyO3/PyO3 https://github.com/PyO3/PyO3
- stusmall 9y agoHave you seen this one: https://github.com/dgrunwald/rust-cpython https://github.com/dgrunwald/rust-cpython The extension-module feature might give you what you want
- dbrgn 9y agoThis, combined with https://github.com/PyO3/setuptools-rust https://github.com/PyO3/setuptools-rust, is a pretty fantastic way to create native Python extension modules.
- MichaelGG 9y agoIs seems that Racer is still missing support for auto-complete on basic code snippets: let x = vec![1] x.<no completion> Even if they special cased vec! or all the std macros, it'd be a good on-ramp improvement. But I thought RLS was supposed to step in where Racer can't handle things - is that not the case for macro support?
- steveklabnik 9y agoYou said racer above; did you mean to say the RLS?
- MichaelGG 9y agoThe linked article mentions that RLS completes via Racer, which is inline with what I understood before: Racer's a lot faster for this use-case, so RLS delegates to it.
- steveklabnik 9y agoYes, my confusion is that in your OP, you were talking a bunch about racer, but then switched to the RLS. Right now, it's exactly what you said. RLS is still an extremely active project, and so are the compiler internals it relies on, so it's going to gain features in the future. I'm not aware of any specific plans to exclude macros, but it's not my area of specialty.
- saghm 9y ago> Is seems that Racer is still missing support for auto-complete on basic code snippets Interesting; I view that as a bit more than a "basic" snippet for autocompletion to handle, although that's mostly a few facto interpretation because it's one of the few things that no Rust autocompletion engine I've tried (racer, RLS, or Intellij's plugin) has been able to handle. For pretty much everything else I've tried, at least one of them has been able it.
- MichaelGG 9y ago
- Lerc 9y agoOne of the things that I'd like to see for the Rust Book is some form of "Here's how to use it in a function". For example, Taking a random piece of code from the Rust Book let buffer: &mut [i32]; let coefficients: [i64; 12]; let qlp_shift: i16; for i in 12..buffer.len() { let prediction = coefficients.iter() .zip(&buffer[i - 12..i]) .map(|(&c, &s)| c * s as i64) .sum::<i64>() >> qlp_shift; let delta = buffer[i]; buffer[i] = prediction as i32 + delta; } How would one break part of this into a function fn get_part ??? What might go here ??? let buffer: &mut [i32]; let coefficients: [i64; 12]; let qlp_shift: i16; for i in 12..buffer.len() { let prediction = get_part(&coefficients,&buffer,i) .map(|(&c, &s)| c * s as i64) .sum::<i64>() >> qlp_shift; let delta = buffer[i]; buffer[i] = prediction as i32 + delta; } [Exercise for the reader] I'm not sure If I could write the code to do this without taking a few wrong turns.
- steveklabnik 9y agoWell, this code in particular is presented as "hey there's no context." If I were to try to extract this, I would take each of those lets and make them an argument, then see what the compiler says for the return type, done.
- Lerc 9y agoHow do you find out what the compiler says for the return type? Is that covered in the book somewhere? I feel like this might help me quite a bit in my struggles.
- bbatha 9y agoI commonly let the compiler error out by specifying the wrong type or leaving off a type annotation. For instance, https://is.gd/8lLrY8 https://is.gd/8lLrY8
- steveklabnik 9y ago
- clumsysmurf 9y ago"Even better, you can pre-order a printed version through No Starch Press." Thanks for choosing a publisher that supplies DRM-free eBooks ;)
- quodlibetor 9y agoIt's available online: https://doc.rust-lang.org/book/second-edition/ https://doc.rust-lang.org/book/second-edition/ , a publisher that didn't believe in digital sharing that also agreed to publish it would be a little... surprising.
- clumsysmurf 9y agoThat would be MIT press (sometimes). For example https://mitpress.mit.edu/books/deep-learning https://mitpress.mit.edu/books/deep-learning is available at http://www.deeplearningbook.org/ http://www.deeplearningbook.org/ , but you can't get DRM-free ePubs or PDFs.
- steveklabnik 9y agoYou're welcome; this was important to me. In addition, No Starch's commitment to letting the book be generally freely available on doc.rust-lang.org was mandatory, and they are awesome enough to be supportive of that :)
- artificial 9y agoThank you for your efforts. I purchased the book today!
- kevinSuttle 9y ago> We’ve also been working on a number of language changes aimed at improving language ergonomics. http://bukk.it/clap.gif http://bukk.it/clap.gif