It is so weird when people idolize programming languages. They are all flawed and they all encourage some bad design patterns. Just chill and pick yours.
Yeah, but that makes it sound like they’re all equal, and there hasn’t been any progression, which is untrue. You’re either insane or a historical reenactor if you write something new in COBOL.
I think Rust is genuinely a huge leap forwards compared to C/C++. Maybe one day it will be shitty and obsolete, and at the very least it will become a boring standard option, but for now…
Rust is already obsolete, compared to Stingpie’s excellent assembly language, paired with object oriented programming!
This is the SEALPOOP specification:
- an assembler must create a binary program which satisfies the programmer’s specifications.
- a compiler must translate the programmer’s code into SEALPOOP’s parallel instruction set source, which should be fed into the SEALPOOP PISS assembler.
Well that’s going to get cancelled. Think of the non binary folk out there!
Don’t worry, they have DreamBerd
Booleans can be true, false or maybe. Technical info: Booleans are stored as one-and-a-half bits.
I now want a community led historical reenactment of loose tie wearing software devs in the 60s where they are just chain smoking and banging out COBOL or Fortran punch cards
I don’t think much happens in person, but the community for it definitely exists.
C++ when it was new was exactly like this. Rust still hasn’t had 30 years of legacy, all these Rust prophets will shit on it’s name in 15 years when they have to maintain huge codebases with it
Besides, C++ is very likely to adopt memory safety
Now it seems the way is unique_ptr and shared_ptr. And std::any to replace void*. At least is what it seems to me.
Yeah, that’s my guess too.
As to whether C++ can update enough to steal it’s thunder, I feel less qualified to answer. It’d be pretty impressive if they managed to preserve backwards compatibility and do that at the same time, though.
i think it’s more like a “significant” step in language design that could make a “huge” leap in software quality
I mean, until Electron is rewritten in Rust, so people with Stockholm syndrome can still write painful JavaScript desktop apps…
Tauri gets us quite a long way there
YOU CAN HAVE MY COBOL ON COGS WHEN YOU PRY IT FROM MY COLD, DEAD HANDS.
If you’re also not familiar, in it’s plain http glory: http://www.coboloncogs.org/
That is indeed very cool, and falls squarely into the second case.Edit: Or maybe the first? (A joke about how insane it would be counts)
It seems non-serious, given the lack of downloads and snail mail as a contact method. If they actually made this, though, reenactment.
makes it sound like they’re all equal, and there hasn’t been any progression
Programming peaked with Lisp (and SQL for database stuff).
Every “progression” made since Lisp has been other languages adding features to (partially but not quite completely) do stuff that could already be done in Lisp, but with less well implemented (though probably with probably less parentheses).
Spoken like a true Lisp fan. I dunno, I really like static typing, and too many brackets gets tiresome.
You can use typed Lisp, there are plenty of them, from Typed Racket to Shen in their complexity. Or to make your own type system in 50-100 lines when you actually need
There have been “improvements” but fundamentally in my perspective, these “improvements” could be revealed to be a mistake down the line.
Assembly has produced some insane pieces of software that couldn’t be produced like that with anything else.
Maybe types in programming languages are bad because they are kinda misleading as the computer doesn’t even give a shit about what is data and what is code.
Maybe big projects are just a bad idea in software development and any kind of dependency management is the wrong way.
I like modern languages, types and libraries are nice to have, but I am not the student of the future but of the past.
That’s a valid argument, but a very weak one. If we are not completely sure something is an improvement in all aspects are we just to dismiss it altogether?
Yeah, you could dismiss combustion engines for the same reason, or like, carpentry. You wouldn’t be wrong, they have caused problems down the line at various points (modern climate change, medieval deforestation), but you bet I’d still call them an advance on mule power, or on no carpentry.
This is pretty much an nullification of the idea of technological progress existing at all, which is a kinda hot take.
@Tartas1995@discuss.tchncs.de, so you can reply in the right place.
I see your perspective and I think you kinda miss my perspective which I am to blame for.
I don’t say there weren’t improvements. I am saying that given the uncertainty of “goodness”. Maybe we shouldn’t idolize it. You can appreciate the attempt of creating memory safe code through a programing language without thinking the bare metal code should be written in that language. You can like a typeless easy to write language like Js without thinking desktop app should be written in it. You can like the idea behind functional programming while believing that any application is in the end about side effects and therefore a purely functional application impossible.
You can approach the whole topic as an area of study and possible technological advances instead of a dogma.
Oh, well I can agree with that.
You can like the idea behind functional programming while believing that any application is in the end about side effects and therefore a purely functional application impossible.
It’s a bit of a tangent, but if you’re doing something completely deterministic and non-interactive, like computing a digit of pi, it’s great in practice as well. I use Haskell semi-regularly for that kind of thing.
You could argue printing the output is a side effect, but is a side effect followed by termination really “side”?
I agree.
I think it is a side effect if it runs on a modern Os. But honestly who cares…
[warning: “annoying Rust guy” comment incoming]
I don’t think Rust is perfect, but arguably I do “idolize” it, because I genuinely think it’s notably better both in design and in practice than every other language I’ve used. This includes:
- C
- C++
- Java
- C#
- Kotlin
- Scala
- Python
- Ruby
- JavaScript (…I’ve barely used this, but I doubt my opinion would change on this one)
- Perl
- Go
- Bash (…look, I’ve had to write actual nontrivial scripts with loops and functions, so yes, Bash is a real language; it just sucks)
- Tcl/Tk (if you don’t know, don’t ask)
- CommonLisp (…again, I’ve barely used this, and I wish I had more experience with this and other Lisps)
In a literal sense, I agree that all (practical) languages “are flawed.” And there are things I appreciate about all of the above languages (…except Tcl/Tk), even if I don’t “like” the language overall. But I sincerely believe that statements like “all languages are flawed” and “use the best tool for the job” tend to imply that all (modern, mainstream) languages are equally flawed, just in different ways, which is absolutely not true. And in particular, it used to be true that all languages made tradeoffs between a fairly static, global set of binary criteria:
- safety/correctness versus “power” (i.e. low-level system control)
- safety/correctness versus run-time efficiency (both parallelism and high single-thread performance)
- ease-of-use/ease-of-learning versus “power” and runtime-efficiency
- implementation simplicity versus feature-richness
- build-time versus run-time efficiency
- type-safety versus runtime flexibility
Looking at these, it’s pretty easy to see where most of the languages in my list above fall on each side of each of these criteria. What’s special about Rust is that the core language design prevents a relatively novel set of tradeoffs, allowing it to choose “both” for the first two criteria (though certainly not the latter three; the “ease-of-use” one is debatable) at the expense of higher implementation complexity and a steeper learning curve.
The great thing about this isn’t that Rust has “solved” the problem of language tradeoffs. It’s that Rust has broadened the space of available tradeoffs. The assumption that safety necessarily comes at a runtime cost was so pervasive prior to Rust that some engineers still believe it. But now, Rust has proven, empirically, that this is not the case! And so my ultimate hope for Rust isn’t that it becomes ubiquitous; it’s that it inspires even better languages, or at least, more languages that use concepts Rust has brought to the mainstream (such as sum-types) as a means to explore new design tradeoff spaces. (The standard example here is a language with a lightweight garbage-collecting runtime that also has traits, sum-types, and correct-by-default parallelism.)
There are other languages that, based on what I know about them, might inspire the same type of enthusiasm if I were to actually use them more:
- Erlang
- Gleam
- OCaml
- Swift
…but, with the exception of Swift, these are all effectively “niche” languages. One notable thing about Rust is that its adoption has actually been rather astounding, by systems language standards. (Note that D and Ada never even got close to Rust’s popularity.)
I know religious people who could not explain their faith so specifically.
Because they just have their own brain chemistry as the basis of it whereas the above comment clearly states:
Rust has proven empirically that the tradeoff between performance and safety doesn’t need to exist.
Which is truth. And it’s much easier to base a coherent argument on truth rather than vibes.
Eh, technical merit is only one of many factors that determine what language is the “best”. Best is inherently a subjective assessment. Rust’s safety and performance is the conceptual bible rustacians use to justify thier faith.
I also know religious people who have written books about their faith too (my uncle is a preacher and my ex-spouse was getting their doctorate in theology). Rust has the same reality-blind, proselytizing zealots.
The needs of the project being planning and the technical abilities of the developers building it are more important that what language is superior.
I like rust. I own a physical copy of the book and donated money to the rust foundation. I have written a few utilities and programs in rust. The runtime performance and safety is paid for in dev time. I would argue that for most software projects, especially small ones, Rust adds too much complexity for maintainability and ease of development.
Have you actually ever seen an example of such an annoying rust dev? Cause I haven’t, only a ton of people who see rust as their enemy number 1 because of such people. Those who are “annoyed” are way more annoying…
I have. You just don’t hang out in the “right” places
I have made experiences with annoying PHP devs and I don’t hate them.
My critic wasn’t towards rust devs or any devs of any language but towards idolization of a language instead of studying the nature of those languages the flaws and advantages and use the best tool available or attempting to create a better tool.
Yes, absolutely. Constantly, in fact.
Rust the language is great.
Rust the community makes me hate rust, never want anything to do with it, and actively advise people not to use Rust. Your community is so, so important to a programming language, because that’s who makes your documentation, your libraries, fills out the discords, IRC, and mailing lists. As a developer, any time you’re doing anything but rote boilerplate zombie work, you’re interacting with the community. And Rust has a small, but extremely vocal, section of their community that are just absolute shitheads.
Maybe in 5-10 years when the techbros stop riding its’ dick and go do something else will Rust recover its reputation, but for now? Absolutely no.
So you’re saying Rust is the TOOL of programming languages.
I just villainize languages. C++ is the devil.
nice, i encourage satanic panics in software engineering too
I probably wouldn’t describe them as flawed, because the goal wasn’t and couldn’t ever be perfection, so then everything is flawed, but then is it really a flaw? It sounds like more of an issue of what’s useful in what type of situation.
That’s something I don’t get about doing things in a language that is not meant to be used for that (like JS for something other than web).
It’s a significant time investment for some, and they want to be reassured they picked the right camp. :D
…but what if I pick the one with all the furries? :3
That’s just Rust again. Well, or Python. Shower thing still applies.
I am proud of you and wish you happiness in your little corner of this world.
They are all flawed and they all encourage some bad design patterns.
On the other hand, Lisp.
How can a rewrite in a completely different language violate this license? There should also be a clause “Once you looked at the source code you must not write anything with similar functionality … in any programming language”
Leaked Windows code made Wine and ReactOS devs anxious, since MS could sue over it. On the other hand, I’ve looked up the keycodes from the Linux kernel for X11 (it’s literally just PS/2 with the unused codes being used in place of the E0 keys), and they haven’t yet came after us.
It made them nervous because someone might put parts of the original source into Wine. You can’t do that in a rewrite in a different language, it doesn’t even make sense. The thing the people in this screenshot are gloating about isn’t even relevant to this license.
It made them nervous for the same reason emulator devs don’t touch leaks with a ten foot pole, giving the megacorp any reason to argue your clean house reimplantation is anything but clean is just asking for trouble.
That’s a lot of words for “I don’t understand the borrow checker”
In all seriousness, yeah rust users are annoying, but I think rust is a welcome change over C/C++
Hey I’m both an annoying Rust user and I also don’t understand the borrow checker. I just put & and * in front of things until it works.
I found this tutorial pretty helpful for that: http://intorust.com/
You can presumably skip the first two chapters…
Same. I keep thinking back to my time TAing for an intro programming course and getting students who just add random braces until their code compiles. That’s me right now with Rust pointers.
Speaking as an annoying Rust user, you’re being bigoted. I’m annoying, but the vast majority of Rust users are normal people who you wouldn’t even know are using Rust.
Don’t lump all the others in with me, they don’t deserve that.
While the borrow checker has its downsides, so its legitimate uses. A few people in the D community were thinking about implementing it as a library.
Didn’t know D still had an active community, that’s pretty awesome. Wonder if someone has ever worked on a borrow checker for Nim.
D seems to getting traction yet again, and some stuff might get better (D3, new GC, new standard library, etc).
It really whips the crab’s ass.
Lol rust winamp clone let’s gooooo
Agreed, crab that anti-foss activist in particular
ironic that winamp is was built on open formats and widespread IP theft (music ripped and shared)… but they’re strangely prickly when it comes to their code.
:|
The guy who wrote Winamp Sold it decades ago. So you should clarify who is defensive about their code :-) The original coder is really good - he also wrote the awesome AVS visualization plugin for Winamp which among other things utilizes a special programming language called “eel”. After selling Winamp he went on to create Reaper which also uses eel I think.
TIL! appreciate the deets
I mean, it’s not Rust but QMMP has existed for years. You could do a rewrite of QMMP with no issues if you really wanted to.
That’s insanely dumb
Rust (derogatory)
you may not create, maintain, or distribute a forked version of the software
ok, i’m just gonna host it on my website for archival purposes and if someone happens to download it that’s not my fault
Huh weird, these pull requests just magically accepted themselves
host it on my website
That’s distributing and barred under the other license item. Sorry to burst your bubble.
this is from the thread complaining that it’s against TOS
godamn C lovers
Some of these people are Javascript web developers idealizing system development and the C language.
Damn header file change causes entire program to be recompiled only to result in segfault.
The license, even if it’s truly just to avoid rust (for whatever dumbass reason they have), is enough to me to hardpass on the entire project.
No distribution, but he didn’t say no distributing a language parser to change it into rust and then microcompile a new executable on the spot.
Tell me you are having a midlife crisis over not wanting to change over from the programming language you grew up mastering without telling me you are having a midlife crisis over not wanting to change over from the programming language you grew up mastering.
Is it really just old men saying stuff should remain in C/C++ to preserve their nostalgia? What a bunch of petty bullsh!t.
they actually said it?
Not them
I want to use Rust, but it lacks an Specification. Until that is done it’s a no go.
What is this abi and standard calling methods you speak off? Are you a rust-non-believer or some shit! Rewrite it all in rust, no questions asked!
( i too like the ideas of rust, but without a decent abi or not constantly changing interface, its useless to me. I dont want to rebuild all code, including libraries every time i update 1 library in my application )
You’re aware that Rust gives you access to the full C ABI?
What language are you going to use instead that has a better ABI story? Swift? Or maybe a dynamic language like Python?
I know that exists, but whats the point of that? You loose all advantages of rust when you use the library then because it cant predict application state with the library code. There is a reason all those rust libraries are compiled locally when you compile a rust application. Its a major lacking point for rust, and as long as it lacks that its dead in the water for big projects.
Again, i like strong type stuff and i like the ideas of rust but it is not grown up enough for meIt’s a lacking point yes but unless you want to use a closed-source library it’s also a non-issue, which is why it has never been given priority. It’s not like language semantics would prevent portable dylibs it’s that there’s more important fronts to improve Rust on. A proper solution would take quite some engineering effort, and do note that C doesn’t have a proper solution either it just lets you link stuff up willy-nilly and then crash. Rust is actually in a better position to implement a proper solution than C is.
The “big project” thing is a red herring given that rust compiles incrementally. I know it is technically possible to not rebuild everything from scratch in C but the code has to specifically written to not break assumptions your build system makes while rust is happily re-using the compilation results for one function in a file while discarding those of another because actual dependencies are actually tracked. Out of the box.
Speaking of large Rust projects and proper type-safe linking: The WebAssembly folks are hashing out their Component Model which isn’t really limited to compiling to wasm, in principle: Big picture it’s a way to programmatically specify ABIs and even derive ABI translation code. That might be a good option as a rust-specific solution would be, well, rust-specific and when you engineer something that can support multiple versions of a language you can just as well engineer a bit more and have something cross-language.
I think you have things wrong. Any other languages can have libraries be distributed as some format that would allow applications to use it, be it linux/gcc and .a files ( which are actually archives with elf/object files of the code ), or a full on library like .so/.dll.
Rust can only do .o/.dll and only have it expose like a c library afaik. Even .net has improved on the .dll and includes all its language features in it. Rust has none of that. Its not true that libraries not rebuilding are only for closed source. Its also ease of use/access and less problem prone. What if i build my library using a different version of the compiler than you and your application? I could have no problems building my library, while you cant build your application because the library i made gets rebuild and errors.
These errors happen and are all because there is no stable interface/abi and all other languages have overcome this.Also, by default, nothing in c is rebuild unless it needs to. Thats why the intermediate .o ( elf object ) files exist, so it only has to do the relinking and not recompile and thats why .a archive/libraries in c work, because it doesnt recompile. Unless you meant the fact rust can rebuild part of a file, without recompiling it completely?
I think you dont fully understand how c compilers ( gcc specifically ) work when using multi file projects ( and not just doing
gcc input.c -o output.exe
) just how i dont fully know how the rust compiler works. Also, anything using IL will always have an abi, because how else will it jump from code to IL code, so its obvious that rust to wasm will have to abide by that haha. Be it c wasm, c# wasm or rust wasm calling one another. Wasm is wasm, and you only need an exposed interface to call or include the other wasm ( c#/blazor havingNativeFileReference
in the csproj )Again, i like the idea of rust, but it has a long way to go to be viable atm. And it has many pitfalls to avoid so it doesnt become the hot mess that is any framework based on node.js
I think you dont fully understand how c compilers ( gcc specifically ) work when using multi file projects
They don’t. C compilers compile single files produced by the c preprocessor (resolving all
s), they have no concept of multi-file projects. That’s a thing for the build system, such as make, and it needs dependency information from the preprocessor to do its job (
cpp -M
), and once it has that it has to act correctly on them which is often completely broken because people don’t understand make. Like using it recursively, bad idea. In the wild, a random C project at work you’ll come across needs a full rebuild to build cleanly. Things have gotten better with things like cmake getting more popular but the whole thing is still brittle. GNU autohell certainly makes nothing better, ever.Also, anything using IL will always have an abi,
Everything will always have an ABI because ABI is just API in the target language, whatever that may be. If your program is compiled and can run it uses an ABI.
Wasm is wasm, and you only need an exposed interface
The core wasm abi is less capable than the C abi: You get scalar values and pointers, that’s it. No structs, no nothing, memory layout is completely unspecified. The component model allows compilers to say “so I’m laying out strings like this and structs like that” giving linkers a chance to say “yeah I can generate glue code between you two”.
Again, i like the idea of rust, but it has a long way to go to be viable atm.
C isn’t even close to being viable according to your standards people just have gotten used to the jank.
And it has many pitfalls to avoid so it doesnt become the hot mess that is any framework based on node.js
Rust doesn’t have portable dylibs precisely because it isn’t a hot mess. Because it’s actual work to do it properly. Unlike everyone else. Meanwhile It speaks the local C ABI fluently (they differ by architecture and operating system, btw), which isn’t a thing that can be said about many languages that aren’t C.
Differently put: What, precisely, do you want to do? Have you any actual use-case for your doubts, or are they spooks?
Do you mean everything that uses LLVM automatically gets an ABI standard?
That’s so nice of clang, really they should be proub.
Are you suggesting OP write a C application and then compile it as Rust? I’m not a pro, but that sounds kind of janky.
I’m suggesting building a Rust library and exposing a C ABI. That’s what rsvg does for example.
Oh. There’s a still Rust-y way to do this? Nevermind.
OP wanted stability and predictability. I suppose we’ll see how entrenched one library can become.
The Rustinomicon has a chapter on it. The basics are quite simple: Declare non-opaque types to use layout matching the C ABI, export/import functions, some wibbles around name mangling.
Option<T>
vs. null pointers. Where things get a bit more involved is unwinding, but then you’re at the end of it, nothing should be shocking to anyone having written C.As to how Rusty it is… not very. I mean Rust has first-class FFI support, but the way FFI stuff is written is necessarily unidiomatic because you’re basically writing C in Rust syntax and you won’t get out of declaring your own functions `unsafe’ before you read the rest of the Rustinomicon to understand what properties you need to ensure because the nice and shiny parts of Rust assume them.
Hmm. So I guess it comes down to what OP is doing. They either want to write a Rust library, or something that uses a Rust library that may not be standardised or even exist yet. If the latter, they should stick with C.
Yeah, Rust has pretty good integration of it: https://doc.rust-lang.org/nomicon/ffi.html#calling-rust-code-from-c
You do lose some of the Rust-y-ness, because obviously the C ABI is much more simplistic, but in terms of a stable ABI, it’s impossible to beat C.
But it does rebuild all the libraries every time does it not?
TIL about this problem.