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 - "wk194"
-
Most of the code I write nowadays is for GPUs using a dialect of C. Anyways, due to the hardware of GPUs there is no convenient debugger and you can't just print to console neither.
Most bugs are solved staring at the code and using pen and paper.
I guess one could call that a quirk.11 -
PHP ist one of the languages I use regularly, but not the main language.
Anyhow, passing an array to a function will create a Copy of the array unless you specifically choose to Pass the reference.
That's seriously fucked up. What other language does that?! Coming from C, Java, Python to PHP I was not prepared to expect shit like that.21 -
PHP arrays.
The built-in array is also an hashmap. Actually, it's always a hashmap, but you can append to it without specifying indexes and PHP will use consecutive integers. Its performance characteristics? Who knows. Oh, and only strings, ints and null are valid keys.
What's the iteration order for arrays if you use them as hashmaps (string keys)? Well, they have their internal order. So it's actually an ordered hashmap that's being called an array. And you can produce an array which has only integer keys starting with 0, but with non-sequential internal (iteration) order.
This array weirdness has some non-trivial implications. `json_encode` (serializes argument to JSON) assumes an array corresponds to a JSON array if its keys are consecutive integers in increasing order starting with 0, otherwise the array becomes a JSON object. `array_filter` (filters arrays/hashmaps using callback predicate) preserves keys, so it will punch holes in the int key sequence if non-last items are removed, thus turning arrays into hashmaps and changing your JSON structure if you forget to discard keys before serialization.
You may wonder how JSON deserialization works, then? There's a special class for deserialized JSON objects, `stdClass`. It's basically a hashmap too, but it's an object, not an array, and all functions that would normally accept arrays won't work with it. So basically its only use is JSON (de)serialization. You can even cast arrays to objects, producing `stdClass`.
Bonus PHP trivia:
Many functions return nonsensical values. `preg_match`, the regex matching function, returns 1 for success, 0 for no matches and false for malformed regular expression. PHP supports exceptions, so it could just throw one on errors. It would even make more sense to return true, false and null for these three cases. But no, 1, 0 and false. And actual matches are returned by output arg.
`array_walk_recursive`, a function supposed to recursively apply callback to each element of an array. That's what docs say. It actually applies it to leafs only. It will also silently accept object instead of array and "walk" it, but without recursing into deeper objects.
Runtime type enforcing is supported for function arguments and returned values. You can use scalar types, classes, array, null and a few special keywords. There's also a `mixed` keyword, which is used in docs and means "anything". It's syntactically valid, the parser will accept it, but it matches no values in runtime. Calling such function will always cause a runtime error.
Strings can be indexed with negative integers. Arrays can't.
ReflectionClass::newInstanceWithoutConstructor: "Creates a new class instance without invoking the constructor". This one needs no commentary.
`array_map` is pretty self-explanatory if you call it with a callback and an array. Or if you provide more arrays of equal length via varargs, callback will be called with more arguments, one from each array. Makes sense so far. Now, you can also call `array_map` with null instead of callback. In that case it treats provided arrays as rows of a matrix and returns that matrix, transposed.5 -
COBOL is something I use at work. Typically, you see IF blocks like this
IF condition
Stuff
END-IF.
But the END-IF part if actually optional. You can just use a period and it does the same thing.
IF condition
Stuff.
Many headaches if not caught when reading.6 -
Quirks of.... PHP 😂😂😂😂
It's just a quirky language, you either love it or you hate it, or you hate it because you caught the bandwagon in town.
Weirdest quirk though, would have to be function naming conventions and order of arguments.
Shit be crazy at times but you get used to it.rant wk194 php naming things is hard consistent ordering would be a dream it's a love hate relationship1 -
Main language, do people have such a thing? Some quixotic shit about various languages I use:
C#: Microsoft
F#: never quite committing to 100% functional paradigms while still being one of the most enjoyable langs I use
Java: null handling via optional and maybes are ugly, but better than it was
C++: surprisingly functional in 2020
Haskell: no one else seems to ❤️ it, despite it being fucking beautiful
Kotlin: Ternary warfare, Czech sports opinions on how languages should work
Clojure: parenthetical scoping makes me far happier than it should
Typescript: makes ever more sense as it changes7 -
The tons of undefined behaviour in C that ought to have been implementation defined instead, and increasingly sadistic compiler writers on the other side.
Like signed integer overflow that should just do what the underlying machine does, i.e. in practice, wrap around two's complement.
But the wierdest UB is when a C source code line has a non-matching ' or ". WTF, this should have been a compile time error!2 -
I don’t know if I would call it a quirk of the language or serious abuse of it :P
But I managed to get a null ref exception when comparing a local int variable to an int parameter to the same function in C#.
Since a local or parameter of type in cannot be null and I compared the variables them self and dud not try to access any property on them (and no extension method or implicit case or similar) my first thought, along with all colleagues that chipped in to help, was that this should not be possible.
Turns out the method was called through reflection and in that part it injected null as the base object to call the method on.
Since local variables actually are referenced through the parent object this was what was causing the null ref.
That took some time to figure out.4 -
In PHP, constants can only be of simple data types like strings or floats.
You can't make a database connection a constant because it's not a simple data type.
That makes the only way of accessing complex "constants" within functions using the keyword global... which is not encouraged and forces you to make the database connection global (that may not be convenient in some software patterns).
The last option is passing the database connection as a parameter (either to the function or to the constructor of the instance whose methods will use the connection)... which would be good if I didn't want to go full OO. Because it's a pain to do so.
So all in all, constants are not well supported by PHP.
Come on, constants...12 -
Lua, tables ("arrays") start at 1.
It also has no sleep function and its defacto package manager (luarocks) has almost never worked for me without some serious fuckery7 -
Shell/bash for pipelines
The entire syntax seems so hard to read and to write
Makefiles are great but programming in them is shit -
My boss is being a stupid cunt. To give you a background we were facing issues with our Collections system. First week December 2019, I and a colleague of mine came up with a new efficient collections architecture. My colleague and I started to Code and create automation scripts mid December and completed it in First week of Jan 2020. This PoC version was supposed to be just between the Dev team(App Dev and Back end, also one from the Ops side to verify the data). I did not receive any feedback on the actual collections system and the data integrity but during this time all they’ve done is take meetings with no real outcome. I raised this and the only email I got is data is looking fine when I know it is not.Now in First week of Feb, he is stressing us to go ahead and deploy the architecture in Production and we have not done any Code Review, Static Code analysis, any real tests on Code and deployment scripts. Have not discussed any metrics for our dashboard and alerting. I have no idea how to handle this cunt. I have even asked for resources to atleast productionalize the code and move ahead the deployment and still no out come. I’ll go in a meeting with him in an hour, I will be very blunt and tell him that whatever he is doing is a foolish way and maybe resign in couple of weeks6
-
PL/SQL is one of my primaries at work.
Does not have an official "multidimensional array" per-say. Instead you define anonymous tables types and point it at a different "record" type to define the structure. Then you can make a table of that table indexed by string/number/record/etc. It's all tables. Tables of tables of tables.
Reading it can be wild.1 -
Python will occasionally forget how to do comparisons, so a statement like "if x == y:" will sometimes be false even if x == y. And then when someone else tries it or you reboot, it's all fine.5
-
First Rant on here!
One of the most frustrating things I have come across in PowerShell is non properly implemented ErrorAction methods in Microsoft maintained modules.
When you are attempting to write a quick script with simple yet proper error handling and Microsoft fumbles the ball at the 1 yard line! -
Kotlin
Look up the Kotlin Puzzlers presentations by Anton Keks, in which he shows the strangest behaviours of the Kotlin compiler. Bizarre syntax, strange results, bugs, etc. Some aren't even edge cases. And he's wearing a captain's hat.
2017: https://youtu.be/ukwVzLq_pHk
2018: https://youtu.be/Xq9vBZs0j-8
2019: https://youtu.be/_AM5VbPTKeg -
in BASH you cannot reassign associative arrays (i.e. string:string maps) to other variables.
If you have created an array as variable "arr", doing
```
declare -A arr2
arr2=${arr}
```
will not give you var2 as a usable assoc array. It will kind of transform it into an indexed array
In fact working with assoc arrays in shell is a bitch.3 -
I've been trying Flutter the past 2days. I liked how amazing Flutter framework is but I also hated how UGLY the Dart language is. First of all, I've been doing Java(Android) and JSX(React). So, after coming from these languages, Dart seems awful. Here are the things that I hated the most:
1. JSON parsing: The worst part of Flutter/Dart. No GSON/Jackson equivalent. not even possible to make one as described in the doc
2. Redux for flutter. I tried and I hated it. So, Tried some other state management libs
3. the way static functions are written in a class
4. Widgets hiarachy
5. Ambiguity - "this context is not the context we need, we need that one to make it work. so, pass that even when you don't have it" (if you have used flutter, you will know what I mean)4 -
Quirk of C++ (also C I think)
int array[]={1,2,3,4,5};
int temp = array[0]; //valid access
int temp2 = 0[array]; // also valid
C++ is a member of the Foot Shooters Club languages of choice.
Also, this weekend I learned you cannot have a vector of references:
https://stackoverflow.com/questions...
Well, at least not without some pain.5 -
Where to start, maybe from string.
Empty string conditions and string comparison.
if “”: - python
“” == false - javascript
.equals() - java1 -
The crazy shenanigans you can do with C++ standard libs are fascinating.
Like implementig multithreading with just a foreach, and bindings which can make member function pointers to simple function pointers, and placeholders in bindings. Also lambda functions are cool.
Something between the lines:
my_crazy_class *tmp = new my_crazy_class(...);
std::vector<type> my_array = .....;
std::for_each(std::execution::par,my_array.begin(),my_array.end(),
[&](type in){
auto fn = std::bind( &my_crazy_class::my_crazy_fnc,*tmp,_1,random_static_value);
return fn(in);
});
ps:
It's pretty much pseudocode, and please don't do things like this, it's bad for your mental health.
pps:
I need to learn how to use this tools wisely. -
current language vba.
(14 / 24) - (8 / 24) > (6 / 24)
compiled to true. apparently rounding to 8 digits did the trick. quirky was that debug.printing each calculations showed exactly '0.25' for both not giving a hint about some float issue in the first place. ah, and rounding to 4 digits wasn't right either. -
TypeScript has two levels of private values (at least in the beta):
private foo = false; // Cannot be accessed outside the object in TypeScript
#bar = false; // cannot be accessed outside the object in both TypeScript and JavaScript.2