Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I'm impressed, it's no insignificant feat.

Although, I'm more amazed this post has been up an hour without any rust comments..



> Although, I'm more amazed this post has been up an hour without any rust comments..

There are more comments on any given post about hypothetical obnoxious Rust comments than any actual comments of that nature.


Ah, this feels like a promising debate. Can't someone do a statistical analysis about it?


Empirically speaking, OP brought it up first...


It's almost certainly a much more tractable problem to get C code compiling with a C++ compiler, and then gradually transitioning to C++ and the STL over time. I would love to see greater Rust adoption (especially in things that deal with untrusted peers on a network!), but that project is likely orders of magnitude larger than what the author has chosen to take on.

Also it seems like the author is already well-versed in C++; learning Rust might not be a priority for them, and would certainly slow things down a lot.

And while there are certainly plenty of footguns and unsafe things you can do in C++ (even unintentionally), it's probably still safer than C, even if it's not as safe as Rust.


And just to be that overly pedantic nit-picker, when most people refer to the "STL" today, they are really talking about the C++ Standard Library[1], which is related to and based on the conventions of the old-school Standard Template Library (STL), but a different thing. When you #include <vector> on most modern development platforms, you are not using the actual historic STL implementation.

1: https://en.wikipedia.org/wiki/C%2B%2B_Standard_Library


I would go with a transpiler approach first (eg https://c2rust.com/) and then gradually transition pieces to use the Rust standard library and to safe code instead of the adhoc custom containers.

Still, that all would be predicated on having good Rust experience or using it as a learning experience and that may not be the motivation of the authors.


> gradually transition pieces to use the Rust standard library and to safe code

Is this realistically possible on a non-trivial project? I suppose that porting to safe Rust requires a radical rearchitecture of the code.


I have no experience converting a C or C++ project to Rust but have transitioned Objective-C projects to Swift and have found that even with Obj-C's newer additions to improve Swift interop, making the project as a whole safe is difficult until you've factored Obj-C out of all critical paths. It's just too easy for things to go wrong in the Obj-C half or in the Obj-C → Swift interop.

So almost unavoidably you end up with two refactors: first, the piecemeal rewrite in the the safer language, and then a second when the original language has been rooted out and you can take advantage of all of the features of the new language.


>"And while there are certainly plenty of footguns and unsafe things you can do in C++"

If I want to shoot myself in the foot I should have full rights and the ability to do so.

In a normal coding however modern C++ is very reasonable language and I do not recall stepping onto any landmines in a last few years even though my code runs high load / high performance business servers that also do a lot of calculations.


Unless you are a perfect programmer, you will sometimes make a mistake, and shoot yourself in the foot even though you didn't intend to.

Perfect programmers don't exist. Everyone will screw up sometimes.

With Rust, I know that my code will be free of memory errors and data races as long as I never use `unsafe`. No one can say the same about a C++ program, not with certainty.

If you don't care, that's fine (I guess), but please don't get all huffy with those of us who do. I think it's telling that you seemed to need to get all defensive even considering that my original post was in support of the libtransmission author using C++ instead of Rust.


Just because you can't rely on the compiler to tell you, doesn't mean memory errors exist. There's this weird idea Rust programmers have that since C++ doesn't force you to write less performant code by bowing down to a borrow checker that isn't smart enough to handle e.g. single threaded futures and locking properly, that it is IMPOSSIBLE to write memory safe C++ code.

A piece of code without memory errors is, by definition, memory safe. This whole idea of "every piece of code has bugs" is some new-wave tripe coming out of code camps and the web development scene.


" No one can say the same about a C++ program, not with certainty."

Formal proof is a thing, so I think you can.

"Hello world" would be easy to verify. Verifying transmission on the other hand, is a kind of big project on its own, though.

And I agree, that there are no perfect programmers around, but I would also agree to parents point, that if I want to have full power, I fully want to remain my right for footguns. It all remains a tradeof. The ecosystem of C++ is just incredibly bigger than rust, so a new game, I would start in C++, but for something critical I would probably also choose rust.


This.

It is quite easy to steer clear of unsafe constructs, and is less work. The people who trigger footguns are mostly those trying to code as if they were still coding C. Their code is typically slower, too.


> especially in things that deal with untrusted peers on a network!

Are there any practical torrent clients that I can run in docker container?


Transmission itself. I highly recommend the image built by the linuxserver.io: https://hub.docker.com/r/linuxserver/transmission


> Although, I'm more amazed this post has been up an hour without any rust comments..

I've actually thought "WTF why porting a project to a memory unsafe language", but actually the PR title is somewhat excessive - it's more of a modernization, indeed described by the author as "the first incremental step of getting libtransmission to compile with a C++ compiler".


> WTF why porting a project to a memory unsafe language

Because proper handling of memory is actually quite easy to achieve in C++ assuming you're doing all the right things. We also have great tooling for this a la sanitizers and valgrind.

Also, C and C++ remain to be more performant than Rust in the general case, and don't require rewriting everything into a completely different paradigm.


I think there is a tool to automatically convert C to Rust, but that would probably be a terrible idea given what looks like a lot of custom data structures that would translate to unsafe Rust.


It would be interesting to try to make it recognize C++ STL usage but not much more of C++ next.


I confess that it crossed my mind. Torrents are obviously network-oriented and are often used to interact with, uh, untrusted content (the torrent files but also the trackers and peers that exchange data with the client). The surface of attack is rather large, using a memory-safe language doesn't seem like a luxury. I also can't imagine wanting to write C++ in this day and age, but that's my prejudice.

That being said I've been using transmission for years without complaints, so I trust them to do the right thing.


The PR doesn't do much if you look at the changes. It looks like it's mostly compiling as C++ and using things like 'auto' and C++-style casts.


Speaking as a C++ person - you're right that this doesn't _do_ much, but nevertheless this is still a significant effort. This kind of groundwork is _work_, and opens lots of doors for future improvements.

That said, there are definitely downsides here. Even if they manage to keep c++ entirely out of headers, consumers now have the headache of either building libtransmission themselves _or_ making sure they include a compatible runtime in their own projects.

As soon as c++ leaks out into the public interfaces, it's game over for precompiled binaries - everyone will have to build it whether they want to or not. Not the end of the world, but certainly it could be painful for downstream projects.


They should probably be like LLVM and just keep a C wrapper around new C++ interfaces for such purposes.

But agreed this is the right first step.


Already that little does much, as C++'s type system is more strict.

The rest can be (hopefully) increasingly migrated.

This was both the plus (and now Achilles's heel regarding fixing C++) of migrating C code into C++.


But someone needs to do this before the interesting stuff can happen.


...but you did make a Rust comment :-O


Said the guy posting a Rust comment.


I'm sure the thread is monitored and strike force is being dispatched as we speak.


I bet you like to poke wasp nests with sticks too.


Rust is good but the GUI support is far from perfect, especially Qt-based interfaces.


they use rlang (don't confuse with erlang) as their C++ compiler (rlang is a C++ compiler written in rust, giving the benefits of ownership to C++ programs for free)


Rust has jumped the shark.


Same impression. I was wondering when those Rustamans will descend ;)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: