#linux and #unix users will understand this one ๐Ÿ˜…

@alexander_schoch โ€œAt first glance, #Perl looks like PHP and bash had a child, which is not something Iโ€™d expect in a #programming language.โ€

What if I told you it was the other way around?

- Perl dates back a full two years before #Bash, originating as a better text manipulation option than #Unix commands while still looking familiar to #shell scripters
- #PHP dates from the mid 1990s, when it was heavily inspired by Perl, though with much more inconsistent syntax

A visual representation of some of my bash or perl scripts https://bash.cyberciti.biz/guide/Main_Page

Here's how to confuse your friends or coworkers by setting your PS1 to "C:\>":

export PS1='C:\> '

Add this to your ~/.bashrc file, or to /etc/bashrc for everyone on the system just for lulz.

All Qtriots in control #QAnon #Conspiracy #photography #dogs #nature #camping #anime #music #BSD #cycling #DOS #fedi22 #fitness #FOSS #GNU #infosec #Lego #linux #MOC #MSDOS #OpenSource #OpSec #OSINT #pinball #privacy #RightToRepair #security #StarTrek #Unix #believeinfilm #fedi22 #photography #filmphotography #35mm #filmisnotdead #Politics #Fediblock #Trump #Caturday #Dutch #English #LGBTQIA #Minecraft #Programming

There's two standard packages on my install list.... because I'm still 7 years old in my head

$ doas pkg install xteddy sl

Microsoft should do a release of Xenix just to fuck with people.

I'd say if you're happy with #C, there's no need to choose any second language. ๐Ÿคท

Before even looking at any alternatives, the question should be "why not C". Some of the typical complaints are:

  • memory safety โ€“ or, more generally, the fact that C is only partially defined, leaving a lot to the dangerous area of undefined behavior. There's no way to reliably detect undefined behavior by static code analysis, and it will often hide well at runtime. Especially errors regarding memory management often directly expose security vulnerabilities. In my experience, the risk can be reduced a lot by some good coding and design practices. Examples are avoiding magic numbers, using sizeof everywhere possible, preferably on expressions instead of type names, defining clear ownership of allocated objects (and, where not possible, add manual reference counting), making ownership explicit by using const where appropriate and naming your functions well, and so on. Given also there's no guarantee alternative languages will safeguard you from all the possible issues and there are also a lot of other ways to create security vulnerabilities, my take on this would be: partially valid.
  • programming paradigm โ€“ you can only program in classic procedural style. Well, that's simply not true. First of all, you can program whatever you want in any turing-complete language, so what we talk about shouldn't be what's directly supported by the constructs of the language, but what's practically usable. In C, using some simple OOP is commonplace. Well, you can apply OOP to assembler programming without too much hassle, so, it's not surprising you can do it in C, as it's a pretty thin abstraction on top of machine code. C helps further with its linkage rules, where everything in a compilation unit is by default inaccessible to other units, and its incomplete types, where only a type name is known, but neither its size nor inner structure, giving you almost perfect information hiding for free. If you want/need polymorphism, it gets a bit more complicated (you have to think about how you identify types and manage virtual tables for them), but still perfectly doable. You'll hit the practical limits of the language when you want to go functional. The very basics are possible through function pointers, but most concepts of functional programming can't be applied to C in a somewhat sane way. Unless that's what you need, my take would be: invalid.
  • limited standard lib. Indeed, the C standard library misses lots of things that are often needed, for example generic containers like lists, hashtables, queues, etc. It's straight-forward to build them yourself, but then, there are many ways to do that (with pros and cons). You'll find tons of different implementations, many non-trivial libraries bring their own, of course this also increases the risk to run into buggy ones ... I wouldn't consider it a showstopper, but I'd mark this complaint as: valid.


Then, the next question would be: For what purpose are you looking for a second language?

For applications and services, there's already a wide range of languages used, and I'd say do what everyone does and pick what you're most comfortable with and/or think best suits the job. IOW, it makes little sense to ask what would be "the future", there have always been many different languages used, just pick one that's unlikely to quickly disappear again, so you'd have to restart from scratch.

For systems programming "the future" has been C for many decades ๐Ÿ˜ ... some people want to change that, actually for good reasons. IMHO, the current push for #Rust (I don't see anything similar regarding #Zig yet?) into established operating systems is dangerous. An operating system is very different from individual apps and services. It's required by these as a reliable and stable (in terms of no breaking changes) platform. It's complex and evolves over an extremely long period of time. It needs to interface with all sorts of hardware using all sorts of machine mechanisms (PIO, DMA, MMIO, etc pp). I conclude it needs a very stable, proven and durable programming language. You'll find C code from the 30 years ago that just still builds and works. IMHO a key factor is that there's an international standard for the C language, governed by a standards body that isn't controlled by any individual group. And correlated to that, there are many different implementations of the language. Before considering any different language in core areas of an established operating system, I'd like to see similar for that new language.

Now, C was developed more or less together with #Unix, so back then, nobody knew it would be such a success, of course there was no standard yet. But then, I think this is the sane way to introduce a new systems programming language: Use it in a new (research?) OS.

To celebrate the X Window System's 40th birthday, I did a deep dive on something about it: the iconography of its boot-up stipple (that gray pattern you first see as the X Server starts up):

https://matttproud.com/blog/posts/x-window-system-boot-stipple.html

Did you know the stipple has a name, age, and cultural significance to the ecosystem? I'll share my personal history with it. What's yours?

#XWindowSystem #UNIX