> Create a simple web server that supports at least creating accounts and payment submissions. We recommend using one of the many Rust web servers like iron, nickel, or pencil, but you are welcome to create your own web server if you like.
Compare with the winning contest entry for the last underhanded-c contest which is one printed-page of code in total.[0]
Note that using a library keeps the actual code size pretty small. You can't introduce underhandedness into the library (unless you explicitly fork it). But it gives you the opportunity to introduce underhandedness by misusing a library API, which adds a whole new class of interesting tricks which you can use.
Depending how this one goes, we may reduce the scope for the next ones.
Are we sure of this? The contest may prove otherwise.
Half-jokes aside, it would be surprising if it wasn't significantly harder in Rust than in C, and presumably any glaring problems are easier to address based on the more active nature of Rust development as well as tight feedback between the language development/compiler and the rest of the community (along with Rust's general attitude of "just be careful" not being good enough).
http://www.underhanded-c.org/_feed_rss2
http://www.underhanded-c.org/_feed_atom
I added those to my RSS reader a long time ago, but didn't notice the 2015 announcement, let alone the winning entries. Why? Because the feeds are stuck, their latest entries are more than 2 years old:
11/03/2014 The 7th Underhanded C Contest is now Open
09/29/2014 2013 Winners
...[1]: https://github.com/aturon/rfcs/blob/roadmap-2017/text/0000-r...
struct Foo {
foo: Foo,
}
Is caught by the compiler: error[E0072]: recursive type `Foo` has infinite size
--> src/main.rs:1:1
|
1 | struct Foo {
| ^ recursive type has infinite size
|
= help: insert indirection (e.g., a `Box`, `Rc`, or `&`) at some point to make `Foo` representable
Obviously, I'm not thinking deep enough to understand the approaches you are mentioning!Benefits:
- More approachable to mess around with for newbies -- download the example and try to break it.
- More likely that you'll get submissions from experts who have time to implement the underhanded part but may not get around to putting together the boilerplate.
- More likely that submissions will get the general task right and look similar for parts that don't matter, making for easier review.
Drawbacks:
- Potential for too many cookie cutter submissions.
- Might lead people away from thinking about alternate server designs that are more underhanded.
Mostly I think this might be worth doing because of the second benefit -- you're asking people to do a bunch of grunt work even after they've figured out the core underhanded technique.
[1]: https://github.com/rust-community/underhanded.rs/issues/9
[0] https://www.reddit.com/r/rust/comments/3hb0wm/underhanded_ru...
[1] https://play.rust-lang.org/?gist=cadcbee43557e8e3bbe0&versio...
The solution can be found in the thread at https://www.reddit.com/r/rust/comments/3hb0wm/underhanded_ru...
> We're writing to let you know that the group you tried to contact (rust-underhanded) may not exist, or you may not have permission to post messages to the group.