6 ms·
I'll just pitch in as someone who's worked with several 40+ year old codebases and 3+ year old perl, the perl code is significantly harder to maintain. The lang
by eyegor 2y ago
I'll just pitch in as someone who's worked with several 40+ year old codebases and 3+ year old perl, the perl code is significantly harder to maintain. The language lends itself to unreadable levels of terseness and abuse of regex. Unless you use perl every day, the amount of time trying to understand the syntax vs the code logic is skewed too heavily towards obscure syntax. Even the oldest fortran/c is much easier to work with.
Except maybe arithmetic gotos designed to minimize the number of functions. Those are straight evil and I'm glad no modern language supports them.
- temporallobe 2y agoI also maintain older codebases and this is how I feel about Clojure. It’s far too terse and the syntax is nigh unreadable unless you are using it very often - add to that there seems to be a culture that discourages comments. OTOH so-called “C” languages seem much more readable even if I have haven’t touched them in years or have never written a line of code in them. On another note, I have done a lot of things with Perl and know it well, and I agree that it can be written in a very unreadable way, which is of course enabled by its many esoteric features and uncommon flexibility in both syntax and methodology. It is simultaneously a high-level scripting language and a low-level system tool. Indeed, I have caught myself writing “clever” code only to come back years later to regret it. Instead of “TMTOWTDI”it is has turned into “TTMWTDI” (there’s too many ways to do it).
- shermantanktop 2y ago> Even the oldest fortran/c is much easier to work with. Could that be survivor bias? If that old Fortran was hard to work with, maybe it would have been rewritten, and left the set of “oldest code” in the process.
- Gibbon1 2y agoI think it's just procedural languages with a lack of magic.
- chubot 2y agoSure, Perl can be hard to maintain. (I haven't used it in over 25 years, and don't expect to ever use it again) From your experience maintaining 40+ year old codebases, is it possible that improving the Perl codebase is the best choice in a certain situation? Or should we always be "surprised" that Perl exists? (honest question) In other words, I don't see the connection between "this code is hard to maintain" and "I am surprised that it exists" / "it should be rewritten".
- Joel_Mckay 2y agoIn general, I tend to observe languages that are minimally challenging for amateurs tend to build less sustainable mutagenic ecosystems. Example: * Prolog generated the worlds most functional 1 liner code, as it is bewildering for hope-and-poke programmers * Pythons ease of use combined with out-of-band library packages became a minefield of compatibility, security, and structural problems (i.e. became the modern BASIC) * NodeJS was based on a poorly designed clown JavaScript toy language, so naturally became a circus * Modern C++ template libraries became unusable as complexity and feature creep spiraled out of control to meet everyone's pet use-case * Rust had a massive inrush of users that don't understand why llvm compilers are dangerous in some use-cases. But considering 99% of devs are in application space, they will unlikely ever need to understand why C has a different use-case. While "Goto" could just be considered a euphemism for tail-recursion in some languages. We have to remember the feature is there for a reason, but most amateurs are not careful enough to use it in the proper edge-case. I really hope Julia becomes more popular, as it is the first fun language I've seen in years that kind of balances ease of use with efficient parallelism. wrote a lot of RISC Assembly at one time... where stacks were finite, and thus one knew evil well... lol =3
- int_19h 2y agoWhy are LLVM compilers "dangerous in some use-cases", and what are those use-cases?
- Joel_Mckay 2y agoAny Real-Time or mcu system that relies on repeatable code-motion behavior, and clock domain crossing mitigation (a named problem with finite solutions.) Many seem to wrongly conflate this with guaranteed-latency schedulers... However, the danger occurs when a compiler fails to account for concurrent event order dependent machine states that do not explicitly lock (i.e. less efficient un-optimized gcc will reproduce consistent register op ordered in time behavior for the same source-code.) The llvm abstraction behavior is usually fine in multitasking application spaces, but can cause obscure intermittent failure modes if concurrent register states are externally dependent on the architecture explicitly avoiding contention. I would recommend having a look at zynq DMA kernel module memory mapped to hardware io examples. It seems rather trivial, Best of luck =3