Thank god, Javascript is a mess.
I’ll still plug Scala for having the beauty of Python, the ecosystem of Java, the correctness of Rust, the concurrency of Go, and the power of Lisp.
Thank god, Javascript is a mess.
I’ll still plug Scala for having the beauty of Python, the ecosystem of Java, the correctness of Rust, the concurrency of Go, and the power of Lisp.
Is COBOL subject to buffer overflows and use-after-free bugs? I honestly don’t know.
I don’t recall the COBOL code I’ve read using pointers.
Yeah maybe that’s true. I thought the recent work eliminated it but it looks like ZGC2 has a bounded and usually microseconds-range pause time.
FYI the JVM’s GC is concurrent and doesn’t freeze.
Try Scala. It has all the functional goodness, all the OOP goodness, all the imperative goodness, clean syntax like python or like typescript, really well thought out libraries like ZIO, Akka, Tapir, Caliban and access to all Java libraries. Very mature runtime with best-in-class high performance concurrent GC and a green thread implementation that can handle 10s of millions of concurrent operations.
Yeah let’s not forget the Common Lisp Object System (CLOS) which was more full-featured of an object-oriented language than most “current” languages.
The dynamism allowed both Smalltalk and CLOS to avoid a dark corner that will confound your typical OOP’er today - the circle/ellipse modeling problem; they allow an object to “become” a different type on its own accord. Take that, Java!
Could be a crypto key, or a randomly distributed 64-bit database row ID, or a memory offset in a stack dump of a 64 bit program
And then JSON doesn’t restrict numbers to any range or precision; and at least when I deal with JSON values, I feel the need to represent them as a BigDecimal or similar arbitrary precision type to ensure I am not losing information.
That’s because the nearest representable float to 0.99999999999999 is 1.0 - not because Python is handling rationals correctly.
This is a float imprecision issue that just happens to work out in this case.
It’s worth wondering why, if Python is OK with “/“ producing a result of a different type than its arguments, don’t they implement a ratio type. e.g. https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node18.html#SECTION00612000000000000000
How would you implement this in code?
JavaScript is truly a bizarre language - we don’t need to go as far as arbitrary-precision decimal, it does not even feature integers.
I have to wonder why it ever makes the cut as a backend language.
You have to explicitly check if the return value is an error and propagate it. You write the same boilerplate
if (err) return err
over and over again, which just litters your code.
That’s only true in crappy languages that have no concept of async workflows, monads, effects systems, etc.
Sad to see that an intentionally weak/limited language like Go is now the counterargument for good modeling of errors.
Yes, it is a huge pain, especially if you want to have round-trip interoperability with humans using markup. Wikipedia had a major challenge with this when they decided to add a rich text editor alongside wiki markup.
Surge suppressors do not drop extra voltage to ground. They selectively short out surges between whatever two conductors have a high potential between them.
No ground conductor means there cannot be a high potential between it and anything else!
Calling people “resources” and the mindset that delivery teams are just a number that you can spend money to increase is a mark of poor project and personnel management, as well.
Why should no one be touching it? You’re basically forcing manually communicated sync/check points on a system that was designed to ameliorate those bottlenecks
If “we work in a way that only one person can commit to a feature”, you may be missing the point of collaborative distributed development.
Never use rebase for any branch that has left your machine (been pushed) and which another entity may have a local copy of (especially if that entity may have committed edits to it).
Not just calls to self - any time a function’s last operation is to call another function and return its result (a tail call), tail call elimination can convert it to a goto/jump.
Not the foot-shooting complexity though, just the extra-power complexity