10 ms·
Rocket v0.4: Typed URIs, Database Support, Revamped Queries
- hermanradtke 8y agoOnce rocket makes it to stable, I think it will be the go to choice for web development in Rust. The focus on creating a great developer story makes rocket a joy to use. I am shocked that Sergio maintained rocket alone for so long. I would have figured there was a team of 3-4 people working on rocket. Glad to see he is getting help!
- vhakulinen 8y agoI'm really eager to push for use of rocket (and thus rust) at work, but while rocket being on version 0.x it probably is a tough sell. The benefits rocket (at least seems to) bring feels obvious and I notice every now and then at work that "hey, this would be so easy to do with rocket".
- grayrest 8y agoAs a whole, Rust developers see 1.0 as a stability commitment and to my knowledge, everybody (well, not Rouille) wants to be async and depend on Futures 1.0. I believe Futures 0.3 is most of the way to where the Futures team wants 1.0 to be and the initial roadmap was trying for 1.0 in 2018 so my uninformed guess is that we'll see Futures 1.0 in the first half of 2019. I expect the whole Rust network server ecosystem to shift around over the coming months as Futures and async/await come online in the next few months.
- steveklabnik 8y agoSo, Futures are moving into the standard library; there’s been a last minute procedural issue over one name, and then they’ll be in. So “futures 1.0” isn’t as important, the futures library mostly provides extra utilities, not the core of futures themselves. It’s likely this means they’ll be in 1.33, February 28 (if my math is right)
- Matthias247 8y ago> So, Futures are moving into the standard library; there’s been a last minute procedural issue over one name, and then they’ll be in. That's just the open issue around pinning. There are however a few open discussions around the futures/task/waker parts, from the other RFC. I just wrote down a list of the open points here: https://github.com/aturon/rfcs/pull/15#issuecomment-445492382 https://github.com/aturon/rfcs/pull/15#issuecomment-44549238...
- steveklabnik 8y agoOh right, I forgot about that but, thank you!
- dominotw 8y ago> benefits rocket (at least seems to) bring feels obvious Sorry I am not a webdev. Curious what these are compared to something like RoR.
- vhakulinen 8y agoI'm not familiar with RoR, but with rocket, to know which requirements needs to be met in order for a handler to run, you just look at the function definition while in other web framework you usually need to know which middlewares are present etc. Here are couple of examples (didn't test them, but they should illustrate the point): // Simple with admin user. #[get("/admin")] fn admin(user: AdminUser) -> String { // Request is made as admin user. format!("Allowed.") } #[get("/admin"), rank = 2] fn admin(user: User) -> String { // Request is made as a normal user. format!("Not allowed!") } #[get("/admin"), rank = 3] fn admin(user: AnonymousUser) -> String { // Request is made as a anonymous user. format!("Please login.") } // More flexable, with permissions. #[get("/article/<id>/edit")] fn aritcle_edit(permission: PermissionEditContent, article_id: u64) -> String { // Request is made with a user that has the correct permission. format!("Allowed.") } #[get("/article/<id>/edit"), rank = 2] fn aritcle_edit(article_id: u64) -> String { // Request is made with a user that doesn't have the correct permission. format!("Not allowed!") } // Or in single handler. #[get("/article/<id>/edit")] fn aritcle_edit(permission: Option<PermissionEditContent>, article_id: u64) -> String { if permissions.is_some() { format!("Allowed.") } else { format!("Not allowed!") } } This is just one of the nice things that rocket brings. To know more, the guide is really good source: https://rocket.rs/v0.4/guide/ https://rocket.rs/v0.4/guide/.
- rapsey 8y agoAre ther plans to get to stable?
- thsowers 8y agoYes, progress is tracked here: https://github.com/SergioBenitez/Rocket/issues/19 https://github.com/SergioBenitez/Rocket/issues/19
- grayrest 8y agoThe plan was always to get on stable[1]. Sergio just wasn't willing to compromise on the API to make it happen sooner and I appreciate that since it's a motivation to stabilize the things Rocket depends on. The release notes being discussed here mention that Rocket should be on stable with the next major (Rocket) release. [1] https://github.com/SergioBenitez/Rocket/issues/19 https://github.com/SergioBenitez/Rocket/issues/19 edit: specify Rocket release, not Rust release
- swsieber 8y agoTo be clear, it means the next major release of Rocket, not Rust (I misinterpreted your comment and had to go look, so I thought I'd save others time if they also misinterpreted your comment.)
- k__ 8y agoDoes it make any sense to use this with FaaS?
- mastox 8y agoI would assume so. At a high level, not much different than node with express (Edit: for FaaS).
- steveklabnik 8y agoLambda just announced native support for Rust last week.
- k__ 8y agoSure thing, but does it make any sense to use Rocket on it?
- steveklabnik 8y agoRocket specifically? Lots of people like it. Rust generally? Stuff like https://andre.arko.net/2018/10/25/parsing-logs-230x-faster-with-rust/ https://andre.arko.net/2018/10/25/parsing-logs-230x-faster-w... is one success story we’ve already seen.
- dominotw 8y agogp is asking abt rocket inside lambda.
- steveklabnik 8y agoI don't personally think that there's anything inherently specific to Rocket that makes it better for lambdas than any other Rust web framework. That's just my opinion, of course.
- k__ 8y ago
- deleted 8y ago[deleted]
- osrec 8y agoI've never tried Rust or Rocket, but it appears to be gaining popularity, so I have the following questions for existing users: What's it like to work with? Do you prefer it to JS/PHP/Python for web related projects? Can you iterate on code quickly, or is there a compile step on every iteration? Are there stable libraries for interacting with MySQL/Redis/Postgres asynchronously? Is there good IDE support, for example in Atom? Thanks!
- jlangenauer 8y agoIt's a bit rough to work with still - the IDE support is still a work in progress (though improving) and there is a compile step with every iteration (incremental compilation has improved this too). Diesel is the main library for interacting with SQL databases, it wasn't async last time I used it, and a quick web search tells me it still isn't - this has been a BIG problem with Rust over the last year, as everyone waits for the async implementation to finally become stable. Rust is a funny beast at the moment - you have to deal with the learning curve, you have to deal with the unstable/pre-1.0 libraries (some of which are fine), you have to deal with all the errors the compiler throws at you. But once you've done all that, something magical happens: you end up with software that is mind-blowingly stable and blazingly fast. It doesn't throw segfaults, it doesn't leak memory, it just works, and works amazingly well.
- osrec 8y agoThat's a great summary, thank you. What about the rate of improvement? Do you think it will be significantly more developer friendly in a few months?
- AsyncAwait 8y agoFutures should be in Rust within a few months and the next Rocket release will switch to async. The Rust plugin for JetBrains IDEs is also getting better every release[1]. In short, I'd say Q2 2019 would be a time to seriously jump into it if you don't want to do it now. 1 - https://intellij-rust.github.io https://intellij-rust.github.io
- 8y ago
- plainOldText 8y agoI've toyed with various Rust web frameworks and I think rocket is one of the most promising. A thought out, high quality project. The person behind it strikes me as someone who pays attention to details, from the codebase, docs, all the way to the presentational website. Kudos!
- zanny 8y agoI lurk the Matrix room for Rocket and I have no idea where Sergio finds the time to near single handedly develop a huge web framework while helping at least a dozen people a day get into it on the IRC.
- Reisen 8y agoThere's some super exciting stuff in this release, but what caught my eye was this: > Aynchronous Request Handling (#17) > > In 0.5, Rocket will migrate to the latest asynchronous version of hyperand futures with compatibility for async/await syntax. Of utmost importance is preserving Rocket's usability. As such, these changes will be largely internal, with asynchronous I/O peeking over the covers only when explicitly desired or required. As a side effect, we expect a substantial performance boost from the migration as well as resolution to long-standing issues. Lacking async was my main reason at the time for switching out a hobby project from Rocket to Actix, It's exciting to see that this might change soon as Rocket really just hits the nail on the head when it comes to useability. It _feels_ fantastic compared to so many frameworks both in Rust and other languages.
- woah 8y agoI don’t really understand this. Futures don’t “peak from under the covers” they hit you over the head with syntax. And iirc Rocket uses a thread per request model. So I’m guessing they have optimized their threaded model with futures, plus given you the ability to turn on a non blocking mode, but your routes will need to use futures if you do that?
- leoh 8y agoIt concerns me that you have to use a Rust nightly build to use Rocket. Am I off the mark on being concerned about this?
- epage 8y agoI think it is healthy to have some projects pushing the envelope on what is possible. It provides a goal to work towards and helps test out those new language features so they can be further refined before hitting stable. It becomes less healthy if the whole community is relying on nightly.
- steveklabnik 8y agoIt’s an extremely common objection, you’re not alone. The post does discuss this as well.
- leshow 8y agoAFAIK Rocket has always been focused on developing an ergonomic type safe API to building web applications. Many things it depends on, codegen, proc macros, that sort of thing, are yet to be stabilized. I'm not affiliated with the project, this is just what I've read about it. There are other frameworks you can use if you want to use stable, many of them are async already. Granted, none are really 'mature', but this is a new-ish space for Rust anyway.
- steveklabnik 8y agoMost of that stuff is now stable; the major thing it’s waiting on is a fairly technical detail that gives Rocket more informative errors. If Sergio was willing to regress a bit there, it could be on stable, in my understanding. But developer experience is kind of the whole point, so he’s making the call to wait longer. (EDIT: I just reviewed the flag list and I am 99% sure this is true; the never type could use a library instead, and I am pretty (but not %100) sure proc_macro_hack could fix the other one. It’s quite possible I’m wrong, but in the end, it’s still basically three features left to go.)
- Spartan-S63 8y ago
- jozfeen 8y agogood one .
- jozfeen 8y agoI make up to $90 an hour working from my home. My story is that I quit working at Walmart to work -online and with a little effort I easily bring in around $40h to $86h… Someone was good to me by -sharing this link with me, so now i am hoping i could help someone else out there by sharing this link… Try it, you won’t regret it!… http://xurl.es/xdjy9 http://xurl.es/xdjy9
- gtycomb 8y agoI am truly moved by what this small (probably one, maybe two person?) team has accomplished here. Just look at their code and its organization, while noting how languages like Rust, Nim, and Go show us how to tackle the software complexity in various software domains. Having been in the enterprise field for a handful of decades, I am convinced that work such as this is signaling a brave new world of software development that is just ahead of us -- small teams, phenomenal productivity, which needs to combine with a grasp of architecture processes to taken on complex IT stuff. After having been in the SAP, Dessault PLM, and Oracle database-centric industries for some decades now, and I am convinced that a new generation of software software engineers with imagination and willingness to learn aspects of the businesses they serve, they will take on these sprawling legacy systems with much less effort than we think it should take right now. Exiting times are ahead for those who use these opportunities, I'd say.
- herrosheep 8y agoI assumed, I guess incorrectly, that Racket was more than a 1-2 person team. Also was perturbed that they were only at a v0.4. Not sure how things like SAP and Oracle are valid in a conversation about Racket...
- elteto 8y agoFYI: This is Rocket, a web framework for Rust, not Racket, the programming language.
- herrosheep 8y agoAh my bad, assume we have to use a nightly build then?
- nindalf 8y agoThe link contains release notes for 0.4, which state that nightly is no longer required. An important milestone for the team, for sure.
- matt2000 8y agoIs anyone able to lay out some of the reasons why you might want to write web applications in rust? I was under the impression rust was designed as a safer language for low level systems programming. Thanks!
- staticassertion 8y agoIt's fast. It's type safe. Solid developer tooling story. Those three things are very appealing, whether it's web or anything else.
- steveklabnik 8y agohttps://news.ycombinator.com/item?id=18621820 https://news.ycombinator.com/item?id=18621820
- haiihaii 8y agoWeb servers for embedded or otherwise constrained systems, bolt-on embedded api servers for your existing apps, or just any high perf app/gateway. All the reasons you would otherwise do it in cpp except nope.
- AsyncAwait 8y agoI'd say that in all the talk of Rust being a C replacement, what gets lost is that it is also a very expressive, modern, functionally flavored language, perfectly suitable for higher-level programming. If you want type safety, speed, expressive language & native binaries, Rust is a good choice.
- IshKebab 8y agoSure, however you do pay the significant cost of having to satisfy the borrow checker. There are other nice expressive languages where you don't have to do that so if you actually don't need the speed Rust is maybe not the best choice.
- AsyncAwait 8y ago> you do pay the significant cost of having to satisfy the borrow checker Right, but this is presumably a one-time investment while learning Rust, much less of an ongoing hurdle.
- throwaway487550 8y agoWith all due respect, 166 packages to compile for a 5 line hello-word is so Nodejsy. It is a smell, a red flag. We should learn more from Go and Erlang. I hope the Tide will do.
- throwaway487551 8y agoWith all due respect, 166 packages to compile for a 5 line hello-word is so Nodejsy. It is a smell, a red flag. We should learn more from Go and Erlang. I hope the Tide will do.
- jake_the_third 8y ago>166 Yikes! Does anyone know where I can get an overview of the entirety of rocket's dependency graph. Crates.io only lists 11 direct dependencies.
- IshKebab 8y agoNo, but that would be a good project. Probably the easiest way at the moment is to see the compilation output. E.g. from the CI logs: https://travis-ci.org/SergioBenitez/Rocket/jobs/465537062 https://travis-ci.org/SergioBenitez/Rocket/jobs/465537062
- TimNN 8y agoYou can use the `cargo graph` [0] command to get a graphviz view of the dependency graph. The `Cargo.lock` file which Cargo generates should also contain all the information you want in machine-readable form. [0]: https://github.com/kbknapp/cargo-graph https://github.com/kbknapp/cargo-graph
- steveklabnik 8y agoTide is pretty expressly being built as a collection of smaller packages; I would expect it to have far more than Rocket.
- IshKebab 8y agoI do agree, and Go is definitely better in this regard, but why is that the case? I can't see any technical reasons for it.
- deleted 8y ago[deleted]
- Dowwie 8y agoAll of this is done while pursuing a computer science PhD at Stanford, teaching, and other life activities. Sergio has been digging deep for a really long time. It is great to see that others are helping to advance Rocket's mission but as with most open source projects, the primary author moves it forward. This release isn't just about new features or rewrites. It's about passion for one's work. It's about grit. It's about uncompromising commitment to excellence. While there will ever be only one Sergio in the world, there are many others in the broader Rust community who are signaling many of the same positive qualities. The signal is only increasing in strength as new talent adopts the language for critical path work. I am more optimistic than ever about Rust as a tool for general use, not just because of the tools but because of the leadership in its community.
- InGodsName 8y agoDid anyone manage to build a SaaS product in Rocket yet? Looking for ActiveMerchant equivalent in Rust. How do you handle subscription billing?