Long rant about "obsolete" languages (not); contains swearing 

Inspired by @uncanny_kate’s discussion, I thought it was about time to rant about one phenomenon:

People shitting on “old” or “legacy” languages. It’s a long subject and I’d probably get close to the 65K limit my instance provides (nobody wants to read 65K chars anyway) so in the replies to this I’ll describe each such language that I’ve gotten hate for. I’ll try to make them as self contained as possible.

Long rant about "obsolete" languages (not); contains swearing 

Number one: . Oh Perl, my joy. At this point I am convinced there was an actual organized smear campaign against it and Larry Wall.

I’ll begin this by a quote from Bjarne Stroustrup, the designer of C++:
“There are only two kinds of languages: the ones people complain about and the ones nobody uses.”

Let’s address some common complaints:

  1. The syntax (usually complaints about sigils). This is extremely subjective, I don’t see these people hating on Java or JavaScript or Rust or Swift even though they’re all part of the same C family of languages or on Bash even though it shares the same dollar sign.
    Perl uses more of the ASCII character set to its benefit and its iconography takes advantage of that. It assigns simple mnemonics to each prefix (e.g. $ = value as in show me the money, @ = array (you can see the little a in there, plus it’s surrounded by an O/0 which means that @ contianers contain things located “at” 0-based indices), % = hash (Object/Object pairs). Alternatively, $ looks like an I overlapped with an S (it can either stand as an Item or a Scalar containing an Item),
    I prefer to treat these as maybe noun inflections, in a way, so I interpret $ as “the”, @ as “these”, % as “map of”. Heck, Larry Wall was a linguist, so he definitely was inspired by that to make Perl more like a natural language. It’s a reason why Perl has my and our in the language too. Read wall.org/%7Elarry/natural.html for the natural language principles in Perl.
    When I see $, I immediately know it has to return one value, a scalar, @ for a bunch of values, % for a hashmap. It also makes it easy to interpolate variables (no snprintf/std::format/f-strings/… tomfoolery) and it follows the language design rules of “different things look different”. made this sigil system a bit more uniform.
    One bonus: Sigils allow even a dumb text editor to accurately color highlight code while also giving different types different colors.
    You see, it’s perfectly possible to write programs in Perl that are absolutely crystal clear, shining examples of the art of programming and show off your clever algorithms in all their beauty. But Perl isn’t going to make you. It’s up to you. Perl doesn’t write illegible Perl, people do (a complaint shared with PHP too).

  2. “Perl is old”. No? It still receives updates with plenty of features (this year’s Perl update is expected to have NATIVE! (no Moose) classes, for instance). It has a lot of CPAN libraries (and thankfully avoiding npm/pip-levels of bloat). Also, the active and welcoming community of mature developers for which I am insanely grateful makes me feel like I am standing on the shoulders of giants, I am actually learning from seasoned programmers unlike in Python or Rust or JS where it genuinely feels like I am learning from people my age (the JS veterans are the one that have actively used jQuery (it’s still a fine library, by the way) and have been there before TS and all the billion frameworks that exist today).
    The documentation is plenty, it hasn’t changed completely in like 20 years because Perl developers care about backwards compatibility, it feels like C in a way where C99 is still fine to use or Common Lisp or Forth).
    Perl is a beast when it comes to text processing which is one of the places where it shines, and a part of that has to do with regexes. We have a motto: “There’s more than one way to do it”. We don’t force any particular style on you, so you can express your intentions in a way that reflects how you think about programming.

  3. Regex. People cope hard about us being able to just… write regex. It allows me to write really concise expressions that would otherwise be verbose in other languages. Perl’s regex parser is so great that other languages have either ported Perl’s parser over or just reimplemented them to handle regexes the way Perl does all the way down to the syntax. Perl’s regexes are ubiquitous because so many Perl idioms revolve around them, which means they’re fast. Insanely fast. Additionally, I need a module/library to use regex in other languages while even raw Perl 5.6 can do regex. If used carefully (and explained), they can make your code readable and clean. Your Perl regex code is as clean as the regex you’re using is. I can grep, map, split, trim etc. using only regex, even substitute (yeah, s/this/that/ isn’t something special in Perl, we can just replace strings without anyone noticing).
    Here’s a concrete example based on something I had to do yesterday: let’s say you have a 500K line file where you have two columns delimited by a comma (CSV file in my case) and you have to swap them. The way I thought about it was (I have to do them one line, since my instance apparently doesn’t support multiline code blocks:
    while (<>) { s/(.*),(.*)/$2,$1/; print; }

    On the command line (which took me literally 10 seconds, empty head no thought): perl -p -e 's/(.*):(.*)/$2:$1/'.
    Another valid way is:

    while (<>) { chomp; ($first, $second) = split /,/; print $second, ",", $first, "\n"; }

    which is what I’d use in an actual full-blown script.

  4. “Perl is just for one liners” (I’ve heard this one several times, actually). Wanna play the same game? Here is one Python oneliner I found on dev.to: cleanString = lambda s,countPound=0 : ''.join(filter(lambda char : not isinstance(char, int), [(countPound := countPound + 1) if c == '#' else c if countPound == 0 else (countPound := countPound - 1) for c in s[::-1]]))[::-1]. If I want to golf it: A=lambda s,p=0:''.join(filter(lambda C:not isinstance(char,int),[(A:=A+1)if B=='#'else B if A==0 else(A:=A-1)for B in s[::-1]]))[::-1]. Python ain’t so elegant now, huh? Any language is as ugly as you want to make it out to be. I’ve seen gorgeous Perl code and horrible Python code and viceversa. The people doing one liners in Perl most likely are either 1. too lazy or 2. doing it in the shell so you can run it using perl -e 'source'. Additionally, you can extend Perl to get at any C libraries you can do in Perl, so I could do bindings for Fortran and do the same number crunching as Numpy.

  5. It’s too slow. Okay, slow in what aspect? It can be pretty slow sometimes when it comes to runtime speed, but people don’t consider development time. I can crunch out a one liner in Perl that does the job I want instead of banging my head hacking the same job in C (where I have to think char by char instead of at a string level). This is the reason why people choose Python or Ruby or even JS, they shine in the development time department.

  6. Perl is insecure. What the hell does that mean? Just like the readability of your code and the wonderful Y2K bug (or soon to be Epochalypse), it’s not Perl’s fault that you programmed your script in an insecure manner. If you try to hide away all of the deficiencies in your code, you’re pulling a Microsoft right there. Security by obscurity isn’t secure at all and Perl doesn’t do that.

That was a lot and it doesn’t end here, oh no, I got more languages ahead.

Show thread

Long rant about "obsolete" languages (not); contains swearing 

Number two: (and ). Going raw on this one.

  1. “Pascal is just for teaching”. As if a language that’s easy to learn for beginners is bad. and are used a lot in teaching too and I don’t see them get shit for this. I pity people who start with because that’s an unreadable mess. Additionally, it came I think 2 years earlier than C, so it had to deal with the same constraints that C had. It has a lot of low level capabilities and plenty of compiler directives to choose from in case you’re a control freak. We even have asm blocks which, unlike C, aren’t (excuse my Spanish) dogshit to use, we can just reference variables inside them and it works as expected (you have to do some weird stuff in C to get that). We have pointers too and use them decently frequently. Pascal, along with ALGOL-60, was designed as a language for formal specification and teaching of algorithms, but contrary to ALGOL-68, emphasis was put on simplicity (imagine a world in which ALGOL-W was ALGOL-68…).

  2. “Pascal is slow”. What? Pascal was fast even back when Turbo Pascal was all the rage, a direct competitor to C. sure had their reasons to choose Object Pascal (basis for Delphi) when they did the Apple ][ and Apple ///). There also existed UCSD Pascal which ran on the UCSD p-System, popular at that time (it ran actual Pascal p-code, which means it was the Pascal equivalent of the Machine, really powerful). Free Pascal is on par sometimes with even GCC.

  3. “Pascal is outdated”. News flash for people who’ve only tried Turbo Pascal: we have interfaces, generics, lambdas, Unicode support, database support through a common interface, dynamic arrays, abstract and sealed classes, for..in, operator overloading, static methods/properties, RTTI, type inference and so, so, so much more. We’re more than able to meet modern demands with the amount of libraries at our disposal. It runs on more platforms than it ever has before (I beg you to find me a more portable language than Pascal (and Free Pascal specifically) that’s not C, it’s gonna be a rough realization). I have actual enums that work like symbols, I can have negative indices, character indices, enum indices, whatever. That allows me a lot of freedom (for example, it’s a pain to iterate over enums in C, something I have to deal with in in my compiler). It’s fast, performant, easy to understand and still has room for improvement.

  4. “Pascal’s syntax is too verbose”. It is verbose in a readable way, unlike some other public, static and void of any elegance main languages that are both terse and verbose in the most cursed way. The syntax is well structured and strict, which is good for not just beginners, but also parsers. In C, a function is 1. its signature and 2. the declaration of variables.. and definition of function which may be mixed up. In Pascal, it’s clear: 1. function/procedure signature, 2. declaration of variables, 3. definition of function/procedure/program. Simple as that, it follows a predictable structure. Don’t even get me started on C’s = vs == (which can BOTH be used as valid Boolean expressions), unlike Pascal where we have := for assignment and = for comparison (they’re mutually exclusive, as in assignment isn’t Boolean and comparison isn’t an assignment). We also have <> which is really different from != in C. I don’t need to insert break everywhere in my Case … Of section in Pascal because the syntax is strict and so it knows where to stop. There’s a strict difference between a pointer and a string (we have native strings too, btw, unlike C). We also have native set operators (and sets, obviously); we can check if an element is in a set via in, we can include/exclude elements, compare sets ((symmetric) difference), combine and intersect them). This is all in the language, no extra units needed.

  5. You Pascal and Delphi haters (usually ones that never even attempted to try these languages, as always, the grapes sure are sour) aren’t grateful enough for these languages existing. For one, it’s the first widely used implementation of a bytecode (if you want to put it that way, it’s also the first VM). The chief designer of Delphi went on to create C# (which you don’t seem to have a problem with, mostly, although the Delphi influence is clear as the night sky in the mountains). Also, have you heard of these irrelevant programs named Skype and InnoSetup? Yeah, those ones. News flash: they’re in Pascal (I think Delphi specifically). Delphi essentially pioneered the concept of RAD (rapid application development) in an IDE form which is why it evolved to fit so nicely with GUI development in mind, unlike its C++ sibling in RAD Studio. It’s still hard to beat Delphi in the GUI department (too bad Embarcadero realized a bit too late that they needed a Community Edition… or Linux support). Visual Basic, Visual FoxPro, VB.NET, C#… it all started with Delphi.

Show thread

Long rant about "obsolete" languages (not); contains swearing 

@alecui I just discovered VSI has Pascal for OpenVMS x86_64, so there must still be a userbase (cough..me cough) using it for them to port it. I have a soft spot for pascal

Follow

Long rant about "obsolete" languages (not); contains swearing 

@praetor my soft spot for Pascal appeared when I tried it on DOS (Turbo + Delphi) and Amiga. Without Pascal I wouldn’t have tried Ada (I’m mad I can’t use it for my current project, but oh well…)

Long rant about "obsolete" languages (not); contains swearing 

@alecui Are you an experienced Ada dev? Would love to hear a bit about how you percieve the language, what you are using it for and if you could recommend a good stack to learn it.

Long rant about "obsolete" languages (not); contains swearing 

@louis

HUGE DISCLAIMER: this is all my personal experience of a huge noob, you’re better directly asking the community.

I’m not experienced at all, I’d really want to get more involved. I am pissed off I can’t use Ada for my project because usb_embedded (a crate) is useless. Literally everything else around the Ada support for the Raspberry Pi Pico (pico-doc.synack.me/) is well supported but the most crucial part (getting input from USB) is totally borked. No examples to help me either, Synack had no clue either.
Also, I had a huge skill issue connecting ada_language_server (ALS) to Emacs (since ada-mode really, REALLY prefers eglot over lsp-mode, they even say it out loud:


ada-mode can be configured to work with a wisi parser, or an LSP language server via eglot. It can also be configured to experiment with other backends, such as tree-sitter or lsp-mode, but these other backends are not yet fully supported.

The Language Server Protocol (LSP, langserver.org) defines an external language parser, and it is supported by the GNU ELPA package eglot, using an Ada language server provided by AdaCore (ada_language_server, github.com/AdaCore/ada_languag). LSP supports face, indent, and multi-file navigation. However, as of ada_language_server (als) version 23.0, als provides face and single line indent, but both have significant problems, so it is only useful for xref. “
).

For a noob’s first impression, the syntax is a bit convoluted and The_Capitalization_Style is… interesting, to say the least, but it grows on you, I got used relatively quick. If you get into Ada, just go and install GNAT Studio (unless you’re willing to fiddle around with your editor of choice). We also have Alire (Ada LIbrary REpository) which has a decent amount of useful crates. A really good choice for embedded and low-level, see AdaCore’s guides.

Oh, it also has a… dialect? supraset? called SPARK with pre- and post-conditions and you can use those to actually prove that your program works.

I would definitely choose it as a systems programming language, I’ll give it another shot, but not now.

Sign in to participate in the conversation
Qoto Mastodon

QOTO: Question Others to Teach Ourselves
An inclusive, Academic Freedom, instance
All cultures welcome.
Hate speech and harassment strictly forbidden.