The Lounge is rated Safe For Work. If you're about to post something inappropriate for a shared office environment, then don't post it. No ads, no abuse, and no programming questions. Trolling, (political, climate, religious or whatever) will result in your account being removed.
Wow.. this level of performance investigation is beyond me...
I couldn't help but wonder though... have you considered what kind of native code Ryujin (native compiler) ultimately produce, eventually?
Other than that I have to admit the C# doesn't produce the ultimate performance than C++ allegedly produce. I say allegedly because it is, apparently, quite hard to produce consistently.. but doable nonetheless.
C++ doesn't support the full range of case statements you find in VB.Net (and now in C#). The limited support in C++ lends itself to jump tables. The full range unfortunately needs to be compiled to a slew of if then elseif then elseif then else endif statements.
In C# I typically use a class to represent a state in a state machine. However, when the code gets generated it either resolves to an array instantiation with the appropriate state machine information (fastest option under .NET) or it can resolve to series of gotos (can't really switch case here unless you were to have goto case all over the place in which case you may as well just use goto). The latter option doesn't perform as well as the array/table driven approach. In C++ however, the latter would be faster - and I'd be using a switch to make sure the compiler was generating jmp tables.
In C# I typically use a class to represent a state in a state machine.
Fair enough. But if you activate anything as complex as a class mechanism to serve for state value (which in most simpler state machines is nothing more than a scalar value), then I do not understand why you are worried about the compiler using hash tables rather than simple jump tables in a small set of cases where it might have saved you some small fraction of a microsecond.
I'm not a python dev. I have written exactly zero bits of software in it.
That said, even I know you can do practically anything with it, and a lot of complicated things can be shockingly easy to do in python.
I'm guessing that's probably why it's so popular with the AI crowd.
The thing that keeps me away from it is the significant whitespace in the grammar** and my general distaste for scripting. I know both of those things are just me being nit picky but we all have our preferences.
**I'm deeply concerned about this as it raises a lot of questions. Is 4 spaces read the same way as a tab? Is my editor going to destroy my sourcecode if it reformats the document? etc. I really don't like this.
Another problem with whitespace is which definition of whitespace. Python scopes by a subset of whitespace characters. I guess this subset is defined in a language spec, but there is only one way to be reasonably sure to avoid problems: Whenever anyone says "whitespace", read it as "a space character".
I agree though I'll say I've written enough parsers and grammars that I guess I expect it to be a language specific subset of whitespace (the JSON standard grammar has a similar issue) but that's me. It's rare that I've found languages that accept literally any whitespace you can throw at it. I think C# is an exception in that it can handle it (but I'd have to look to be certain)
I usually need a bigger hammer.
I think we all tend to look at something newish as a replacement for our current "hammer".. I find python to be very handy to work out what someone really wants. A friend has a bunch of (older) IoT controllers in an office building. The interface is via a built in web server in each controller. He wants to collect the data remotely. Turns out that these things will contact a syslog server if you configure it. Wrote the initial server in python to figure out what data he wanted to parse out and how to format it. Then rewrote it in C++ (runs on a W7 system). Reason to rewrite? Since the controllers are independent, and clashes are probable, performance was high priority... Windows is not an RTOS. Do they miss an occasional event? Probably, how would we know?
Give a man a fish; you have fed him for today.
Teach a man to use the Internet and he won't bother you for weeks, or even months unless you give him your email address.
If you can keep your head while those about you are losing theirs, perhaps you don't understand the situation.
I once spent an hour finding a bug in a Haskell program.
It was a homework assignment so it needed to run, but I kept getting "variable not defined" or some such.
Turned out one line in a give or take 50 lines application was indented with a tab instead of spaces
significant whitespace has no place in language grammars. It's poor design. People will argue about that maybe, but the proof is in the results. Like you said, it took you an hour to find that invisible bug.
It is hard enough to finds the ones you can actually see.
"Program testing can be used to show the presence of bugs, but never to show their absence." - Edsger Dijkstra
"I have never been lost, but I will admit to being confused for several weeks. " - Daniel Boone
With a right editor you can make them visible.
...my code vs.
-> my code.
But that creates a lot of noise on your screen and doesn't contribute to readability.
Even better, an editor that always converts tabs to spaces, which I think VS does too (or at least it's a setting).
Everyone on the team should always use the same amount of spaces for all projects though.
Not having that is annoying in C#, but probably disastrous in Python (or Haskell).
All in all, I don't think it has to be a problem.
I've been doing some YAML lately and I couldn't even get it to break because my (web) editor just wouldn't allow it.
If the code is properly formatted and the spaces are invisible I think it looks pretty and concise though.
If you use a Python aware editor you probably don't need to care. I use IDLE (the Python IDE), and Visual Studio Code. Both of them handle the indentation perfectly so it is not much of an issue. Until you want to reformat the file in a different editor.
Having to use a language aware editor so that it doesn't actually destroy your code is a huge red flag in terms of language design, IMO.
Significant whitespace has no place in language grammars. It's poor design. The proof is in the confusion and other problems it generates, like literally invisible syntax/"compilation" errors in source code.
Real programmers use butterflies
Last Visit: 31-Dec-99 18:00 Last Update: 10-May-21 9:18