Join devRant
Do all the things like
++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatar
Sign Up
Pipeless API
From the creators of devRant, Pipeless lets you power real-time personalized recommendations and activity feeds using a simple API
Learn More
Search - "stdlib"
-
I and my mates finally finished the project : a console calculator that manages parenthesis, infinite numbers, the four major operators and also all the bases from 1 to 94
We were not allowed to use stdlib except for malloc, stdio was disallowed too, but we had the unistd write, read and sizeof ahaha
That was a long road of a week but finally we did it :D2 -
Fuck this shitty C ecosystem! Multible compilers, one standard complying, one hacked toghether? Only one GPL poisoned standart library, with no real chance of switching it, which prevents me of making staticly linked programs? And then there is microsofts compiler, with fucking ANSI support. Thanks. No dependency handling. Concurrency? pthreads. Are you fucking kidding. JSON? Have fun finding something static. Compile times where you can read entire books. Segfaults without one helpful info, so you have to debug with prints. And every library, every tool, installer, compiler, stdlib, anything is poisoned by GPL. But hey, its fast. And efficient. After you spend many slow and inefficient months developing something. I am so done with this shit.
Well.
Tommorow i will continue working with C on my backup project.
Did i mention that the stdlib has no features? Not even threading? Which is IN THE STANDARD?8 -
I'm curious, what was the most ridiculously otherworldly, the least understandable, eye-opening code you have every seen?
BUT, I mean that in a good way. And what did you learn from it?
For me personally, I would probably say some of the c++ stdlib implementations. Just totally not English in some places. I mean seriously, sometimes asm is more readable than c++15 -
man, fuck php.
fuck fucking php fuckitily fucking hard.
basically every fuckin stdlib function it has is fucked in some way.
can't even remember it anymore properly, but...
for example:
explode(" ", "some string like this ");
function to "split a string into array of strings using the first param as the boundary marker.
the above one would return
["some", "string", "like", "this", ""]
BECAUSE I'M FUCKING FUCKITTY SURE THAT WHEN THE LAST CHARACTERS OF THE STRING ARE EQUAL TO THE SEPARATOR STRING, EVERYONE WANTS TO GET BACK ONE EXTRA FUCKING USELESS EMPTY ITEM IN THE ARRAY.
because beyond the last wall of my house, there's another room of my house, you stupid Lerdorf fuck.28 -
If you've ever tried using Go plugins raise your hand.
If you've ever tried doing plugins in Go, raise your hand.
If you think that the following rant will be interesting, raise your hand.
If you raised your hand, press [Read More]:
This is a tale of pain and sorrow, the sorrow of discovering that what could be a wonderful feature is woefully incomplete, and won't be for a very long time...
Go plugins are a cool feature: dynamically load pre-compiled code, and interact with it in a useful and relatively performant way (e.g. for dynamically extending the capabilities of your program). So far it sounds great, I know right?
Now let me list off some issues (in order of me remembering them):
1. You can't unload them (due to some bs about dlopen), so you need to restart the application...
2. They bundle the stdlib like a regular Go binary, despite the fact that they're meant to be dynamic!
3. #2 wouldn't be so bad if they didn't also require identical versions of all dependencies in both binaries (meaning you'd need to vendor the dependencies, and also hope you are using the right Go version).
4. You need to use -trimpath or everything dies...
All in all, they are broken and no one is rushing to fix it (literally, the Go team said they aren't really supporting it currently...).
So what other options are there for making plugins in Go?
There's the Hashicorp method of using RPC, where you have two separate applications one the plugin, one the plugin server, and they communicate over RPC. I don't like it. Why? Because it feels like a hack, it's not really efficient and it carries a fear of a limitation that I don't like...
Then we come to a somewhat more clever approach: using Lua (or any other scripting language), it's well known, it's what everyone uses (at least in games...). But, it simply is too hard to use, all the Go Lua VMs I could find were simply too hard to set up...
Now we come to the most creative option I've seen yet: WASM. Now you ask "WASM!? But that's a web thing, how are you gonna make that work?" Indeed, my son, it is a web thing, but that doesn't mean I can't use it! Someone made a WASM VM for Go, and the pros are that you can use any WASM supporting language (i.e. any/all of them). Problem inefficient, PITA to use, and also suffers from the same issues that were preventing me from using Lua.
Enter Yaegi, a Go interpreter created by the same guys who made (and named) Traefik. Yes, you heard me right, an INTERPRETER (i.e. like python) so while it's not super performant (and possibly suffering from large inefficiency issues), it's very easy to set up, and it means that my plugins can still be written in Go (yay)! However, don't think this method doesn't have its own issues, there's still the problem of effectively abstracting different types of plugins without requiring too much boilerplate (a hard problem that I'm actively working on, commits coming soon). However, this still feels to be the best option.
As you can see, doing plugins in Go is a very hard problem. In the coming weeks (hopefully), I'm going to (attempt to at least) benchmark all the different options, as well as publish a library that should help make using Yaegi based plugins easier. All of this stuff will go (see what I did there 😉) in a nice blog post that better explains the issues and solutions. But until then I have some coding to do...
Have a good night(/day)!13 -
The C Standard Library has a Hash Table implementation, and it's a man-made horror beyond comprehension:
https://youtube.com/watch/...8 -
Once again lost source of retoorscript. Wasn't that mad about it, there was some stuff that could've been better anyway.
I wrote a whole new interpreter in 48 hours or so.
It supports user defined functions and native functions that you can add to the VM yourself.
I did spend extra effort to make it faster than python. Who says python is slow never wrote a language.
It has garbage collection and it doesn't contain leaks.
Sad thing is that I have to write the string manipulation functions again. That's a lot of effort.
In the screenshot, obj is not existing, this is how you declare vars, just using it. Works directly as an object. It does keep all his properties if I would assign a value later to obj. Numbers can be property names for some reason.
It would be possible to write a webapplication with it. This requires a decent stdlib. A lot of work.
Other stuff that I'll still have to add:
- loops
- arrays
- if / else
The goal is to make the most easy understandable and easy to extend interpreter ever.
You can just do VM_register(vm, "name", ptr_to_your_function) to add any methods.
Ideas are very welcome17 -
Well, I thought "hey, I need to urgently update my own infra for a change, been neglecting this way too long, but should not be longer then a day."
I spent the whole weekend dependency resolving, modulesyncing and ensure deps are met ... And every single goddamn time it's stdlib causing a whoupsie on another module...
Oh at least I am having fun. Sort of.1 -
!rant
The biggest fuckin problem with learning C++ is that you have no idea where to go next after you finish learning the basics.
Should I learn regex next or stdlib? If I wanna learn the standard library, where do I fuckin start?
IS THERE AN ACTUAL GOOD BOOK OUT THERE THAT DOESNT BECOME INDECIPHERABLE AT PAGE 203??3 -
The objective c stdlib is pretty cool, it's what backs the swift stdlib on mac. The collection classes dynamically switch backend depending on size and expected performance characteristics. EG a set of 3 items is faster to linearly search a vector, so it'll switch that out.
https://objc.io/issues/...
I'm not a mac fan but that's some truly artful engineering.
(reposting comment as rant coz I think it's cool)3 -
I get the feeling, there are 2 devs in the Golang team, that were like
"Every idiot knows that Acronyms should be all caps."
"Da fuck?! Wanna know what should be all caps?!
The sign on your mom's brothel, dickhead!"
And so they both tried to establish their style as a convention in the stdlib, and that's why half the the Acronyms are written in all-caps and the other half isn't.1