@ramin_hal9001@emacs.ch
@ramin_hal9001@emacs.ch avatar

ramin_hal9001

@ramin_hal9001@emacs.ch

I'm just some kind of nerd: software developer, big fan of functional programming, especially Haskell and Scheme. I also love old Macintosh computers. Haskell programming since 2007, Linux user since 2008, Emacs user since 2018. Currently working as an app developer at a small machine learning consultancy. You could call me a "full stack" engineer, but server-side is where I am really in my element.

This profile is from a federated server and may be incomplete. Browse more on the original instance.

ramin_hal9001, to fediverse
@ramin_hal9001@emacs.ch avatar

PC world has an article here about whether you can use a VPN to circumvent the .

No. Just, no. Not , nor any other technology is a solution, because the problem is much deeper than that. The US banning TikTok is just the beginning, they will simply continue expanding of any content the government finds objectionable. We may soon find governments like the US passing legislation that running an server of any kind is illegal "terrorist activity" before long, and all NATO countries will follow suit (they must, or else risk losing NATO membership).

And of course the stated reason for the US blocking whole portions of the Internet is for "cypersecurity" reasons. Anyone with half a brain knows the real reason is to try to prevent sharing knowledge across borders, because that is the real threat to the politicians and their bosses.

It is really no different than what countries like China does with their Great Firewall, or what Iran does whitelisting only certain blocks of the Internet that exists outside of their borders, also for "cybersecurity" reasons. Of course the US government will continue to cite censorship of free speech as a reason that countries like China or Iran are inherently evil. This deranged political double-speak is the norm nowadays, as "antisemitism" is used as a justification to arrest Jewish people who protest war at their universities, but I digress.

ramin_hal9001, to ubuntu
@ramin_hal9001@emacs.ch avatar

ItsFoss reporting: disappointed with Ubuntu 24.04

The problem: the Ubuntu app store will no longer install ".deb" files, only Snaps. If you are a Linux "power user", this isn't much of an issue, Ubuntu is still based on Debian package management after all, and you can still use the "apt-get" command in the CLI. And you can still install FlatPaks.

But as Abhi points out, this could cause problems for people looking for an alternative to Windows or iOS. They are now pretty strongly locked-in to the Snap format and the Ubuntu's official app store unless they bother to learn about and install alternatives.

I think I am going to start recommending Fedora or Mint as my best Linux distro for beginners from now on.

ramin_hal9001, to emacs
@ramin_hal9001@emacs.ch avatar

I finally started using Mastodon.el in

Given the recent changes planned to be coming to coinciding with a rare lull in my daily work, I finally decided to go through with the effort to switch my browser over to on all of my computers, and also to start using non web-based clients for as many of my apps that I can. Part of this effort includes switching over to Mastodon.el in .

So far it has been one of the easiest Emacs apps I have ever used, and if I had known it would be this nice I would have switched a long time ago. I only wish there were a more distinct visual division between each "toot", but I can get used to the way it is now no problem. And also the fact that now it integrates into the rest of is in and of itself an incredibly handy feature that the web-based client could never have.

ramin_hal9001, to fediverse
@ramin_hal9001@emacs.ch avatar

Bonfire: a general server with pluggable front-end modules

...and it is programmed in Elixer!!! This typed programming language that runs on the Erlang platform automatically gives it a powerful advantage over more mainstream programming languages like Go or Ruby, through type safety and a language runtime that is built from the ground-up to be massively parallelizable and upward scalable, and easy to debug and patch running systems without downtime.

But from an end-user perspective, this is a social network framework in which you can install whatever front-end features you want through pluggable modules. If you want a Mastodon-like module, install that, if you want a Lemmy-like, or a Pixelfed-like, or a Frendica-like, you can theoretically just plug those in as well. From administrative tools to search and post indexing to social graph analysis, there are as many as 75 currently listed plug-ins. For anyone interested in technology, this is definitely a project to watch, and possibly even to which to contribute.

See also this article by Sean Tilly.

ramin_hal9001, to Lisp
@ramin_hal9001@emacs.ch avatar

New PeerTub channel

So I asked Will Byrd if I could re-upload his YouTube videos to PeerTube and he said it was OK, so I created a PeerTube channel called "Unofficial William E. Byrd" and am going to upload as many of the videos he makes to this channel that I can. (We'll see how diligent I can be about that.)

Will recently decided to just create 2 or 3 videos every day for the next year, he is hoping to create 1024 videos this year.

ramin_hal9001, to opengl
@ramin_hal9001@emacs.ch avatar

Question:

Does anyone know of an APL compiler or transpiler that can generated Vulkan or OpenGL shader scripts? (Free/libre would be most appreciated.) I think Aaron Hsu might have engineered something like this at some point, but I can't find anything about it at all right now, probably thanks to our amazing new "AI-enhanced" search engines.

ramin_hal9001, to ubuntu
@ramin_hal9001@emacs.ch avatar

I finally upgraded my computers to the latest

And since I always use whatever version of is the default in my Linux distro's package repository, I upgrade to Emacs 29.1 for the very first time, at long last!

To be honest, seeing libgccjit often AOT-compiling the various Emacs packages I have installed is going to take a little getting used to, though I definitely can't complain how very obviously faster Emacs is running now as a direct result.

ramin_hal9001, to mastodon
@ramin_hal9001@emacs.ch avatar

Authorized Fetch Circumvented by Alt-Right Developers

(Quoting part of the article...)

Alex Gleason, the former Truth Social developer behind Soapbox and Rebased, has come up with a sneaky workaround to how Authorized Fetch functions: if your domain is blocked for a fetch, just sign it with a different domain name instead.

Mastodon has been providing a half-measure to its users for years. Now it’s the time to make things right: going into 2024, I think it’s going to absolutely be a requirement to develop more robust forms of privacy options and access controls to empower users.

Bonfire is doing an incredible amount of research focused on this very problem, and Spritely has put forward some groundbreaking work on Object Capabilities in the recent past.

Discussion thread: https://mozilla.social/@wedistribute/111648319217106288

ramin_hal9001, to python
@ramin_hal9001@emacs.ch avatar

Beware: (today I learned)

If you accidentally put a comma at the end of a return statement, a 1-tuple is returned:

def thing(x): return x+1,thing(3) # returns (4,) instead of 4

When you think about it, it makes sense: Python implements multiple returns values as tuples, and tuples ending with a comma are 1-tuples, and that for either assigning or returning multiple comma-separated values you are not required to enclose values in parentheses, it makes sense that this would be the case with Python syntax. But even so, it still caught me off guard and crashed my program, I would have expected a syntax error.

ramin_hal9001, to threads
@ramin_hal9001@emacs.ch avatar

is / using the old 4-E strategy strategy to destroy Mastodon:

  1. Embrace: what they are doing now, launch a competing but compatible service with that of Mastodon. The vast majority of users, most of whom don't care about the privacy and intimacy of the Mastodon network will go with the brand with the most name recognition.
  2. Extend: attract users to their centralized network with features like search, which they have the resources to do but the rest of the Mastodon network does not. But also include features for tracking and advertising, sell this as a good thing, "a better place to grow your perasonal brand, your business."
  3. Extinguish: after attracting a critical mass of users large enough to decimate the user base of the competing Mastodon network, queitly remove compatibility with the Mastodon network, this will effect only 10% of Mastodon users because the other 90% will be on Threads. "Who cares if we lose contact with that tiny minority of old Mastodon users, they should have just joined Threads by now anyways, they still can. It has search, and more people voted for it with their patronage it, and you don't have to think about what instance to join, its easier!"
  4. Enshittification: without any real competition to keep people from leaving for an alternative, start exploiting users for more and more content for ad revenue, exploit advertisers with ever-increasing costs of ad revenue.

They are scared to death about losing control over the Internet that they had gained over the past 15 years or so, and they are fighting to take that control back for themselves. We built this, but now a corporation like Meta/Facebook feels they have the right to exploit it for all its riches until it is destroyed.

Don't let it happen. is the only way to protect our home-grown community from corporate take-over.

ramin_hal9001, to python
@ramin_hal9001@emacs.ch avatar

Yet another rant about Python and JavaScript:

I hate it when someone tells me, "well Python and JavaScript can be programmed in functional programming style, so they are just as good as any other functional programming language," and "something something objects are the same thing as closures."

Then my program crashes and I spend 20 minutes debugging only to find that for the 100th time I wrote a method like this:

def getThing(self): self.thing

instead of like this:

def getThing(self): return self.thing

...where basically the problem is most of my program is written in functional programming style, except you STILL have to write the fucking "return" statement as the last line of the function.

If your language has "return" as a built-in control flow, it is hopelessly imperative not functional, and there is not a single monad framework or higher-order-function library anywhere that will make your language functional.

Stop telling me imperative languages like Python and JavaScript are just as good as functional languages, they are objectively worse than functional languages.

ramin_hal9001, to Lisp
@ramin_hal9001@emacs.ch avatar

The Scheme language's small size isn't necessarily a strength

So I was reading through part of the EmacsWiki and in the article on the Scheme programming language there are references to this ancient online debate from August of the year 2000 at the comp.lang.lisp Usenet group started by the late Erik Naggum, who was apparently a somewhat opinionated and inflammatory individual, who brought up the Scheme/Common Lisp debate on comment thread about someone being confused about how the CASE clause works.

The Scheme language standard at the time was R5RS, Naggum's argument is a common refrain from Scheme fans such as myself, and he was arguing with Kent Pitman ( @kentpitman ) who was one of the sub-committee chairs of the Common Lisp X3J13 standardization process, and is the editor and maintainer of the Common Lisp HyperSpec, an online form of the Common Lisp specification. Kent Pittman's reply I thought was very well-reasoned, and worth re-posting here (quote):

I just absolutely don't believe the Scheme standard is fairly cited as a model of a "better" standard. It is enormously vague on numerous matters of consequence. It omits really essential functionality that would be needed to write any seriously portable programs. It was stagnant for years on quibbles over some of the silliest syntax details. In my opinion, it's a toy language. There are real commercial Scheme implementations, but only by the sheer will of those implementers who've gone beyond the so-called standard and written in the things that the standard ought to have said in order to make the language finally useful. It achieves its "prettiness" and its "smallness" on the back of just plain leaving stuff out where it would appear to "clutter", and whatever you think of CL, I personally reject any claim that the Scheme is a model of improvement.

(end quote)

I wouldn't go so far as to call Scheme a "toy language" because the parts of the standard that are well-defined are solid and very useful. But yes, it seems the only useful implementations do solve these problems not addressed by the standard in completely different ways that makes it very difficult to write a Scheme program on one implementation that runs on another. Try to write one program that runs on MIT Scheme, Guile, Chez, Racket, Bigloo, Cyclone, Stklos, and Gambit. Try to even compute what set of SRFI (language extensions) are common to all of them. Most Scheme programmers have to pick just one implementation and stick to it without much hope of ever porting their programs to other implementations. It is possible to do it, easier than porting a program from Python to C++, but still not at all as easy as running the same Common Lisp program on SBCL, ECL, ABCL, or Franz.

So I do agree with @kentpitman that there are some pretty important details left up to the implementers simply because none of them could agree on what to do and punted the issue rather than resolve it. Later (after the aforementioned Usenet debate) R6RS would try to solve these issues, but that standard was mostly rejected by the larger part of the Scheme community due to a lack of consensus. Much of that work lives on in the SRFIs, while Chez Scheme (R. Kent Dybvig) seems to be sticking to R6RS and is one of the most well-respected Scheme implementations, and a kind of flagship of that standard.

I still have hope for R7RS-large though, which might end up being even larger than X3J13 when all is said and done. Unfortunately, recently John Cowan, chair of the R7RS-large standardization committee threw his hands up in resignation a few months ago after almost 10 years of trying to hammer-out consensus over details of the new R7RS-large standard. Daphne Preston Kendal ( @dpk ) has taken over and is fully capable of continuing the work.

It might be interesting if some Schemers could get together and write a new fully R7RS-compliant Scheme-to-Scheme compiler in R7RS-small Scheme, with all of the COND-EXPAND expressions in place to run on all of the major R7RS-compatible Scheme implementations. This compiler would simply translate its input into code that the host Scheme compiler can compile, deferring low-level implementation details to the host. The compiler should be one massive file that you could just load into any Scheme compiler and it just works. Then this compiler maybe, just maybe could become The Scheme Standard. A good starting point would be the work of Marc Nieper-Wißkirchen who has written Rapid Scheme which compiles R7RS Scheme to another host Scheme, but it only supports Chibi and Larceny as the hosts.

ramin_hal9001, to emacs
@ramin_hal9001@emacs.ch avatar

#Magit is too easy to use sometimes: almost lost an important bug fix to a hard reset

I was trying to reset just one file, for that you press X f but I absentmindedly pushed X h instead which deleted all changes. Fortunately #Emacs saved me, I was able to remember all of the files I had changed, visit each of those buffers and press C-/ (undo) in each of them to recover my work. The correct copy of my files were on the Undo stack. I can see why some people love those backup files with the tilde characters at the end of the file name.

But then again, #Emacs , or rather #Magit was the problem to begin with. Is there any way to configure it to ask for confirmation before doing a hard reset?

ramin_hal9001, to guix
@ramin_hal9001@emacs.ch avatar

Somebody uploaded video of the SICP lectures by Sussman and Steele recorded at MIT in 1986 to PeerTube!

Here ⮕ sicp_lectures@diode.zone

I don't know how long these videos have been on the Internet, but I am amazed that this is the first time I ever learned about their existence.

ramin_hal9001, to scheme
@ramin_hal9001@emacs.ch avatar

I have been giving MIT/GNU Scheme a try

TL;DR it is pretty amazing!

According to the Ecraven's Scheme benchmarks, MIT/GNU Scheme is the 6th fastest major Scheme implementation (Guile is the 7th), and I have found it has several incredibly nice, ergonomic features unique to it. It even has its own text editor built-in (Edwin) which is a clone of Emacs 18, so it is quite archaic, but still gets the job done when you need to debug your Scheme programs. MIT/GNU Scheme is also quite minimal, which is good, but it unfortunately does not have as big a package ecosystem as Guile, Racket, or Chez.

I wrote a library for Functional Lenses in Guile Scheme, and I was going out of my way to stick to the R7RS standard, and to only use SRFIs (official Scheme language extensions), and not use absolutely any feature specific to Guile or the Guile namespaces. Then I tried to port my library to MIT/GNU Scheme, putting in the necessary "cond-expand" expressions... and it didn't work at all, even though MIT/GNU Scheme is in fact R7RS compliant. To be fair, I could probably make it work with a little more effort, for example, I have not yet learned how to use the debugger, and without the debugger, MIT/GNU Scheme tells you nothing when an error occurs.

I am just a little disappointed with how much effort it takes to make a R7RS compliant Scheme program work across just two different implementations. I hope I might have more luck building it with Larceny, Gambit, Racket/CS, Loko, and STklos. If I ever get my Lens library to work across all of the R7RS compatible implementations listed at docs.scheme.org, I'll report on what steps I had to take in order to make my R7RS Scheme code truly portable.

ramin_hal9001, to fediverse
@ramin_hal9001@emacs.ch avatar

David Pierce of

It is nice he thinks ActivityPub is the Internet of the future, calling it "the post-platform" world in which journalists, individuals, organizations all run their own ActivityPub services rather than create accounts on platforms like Ex-Twitter or Facebook. But his perspective is still limited to a world where all applications run on the HTTP protocol with DNS identifying services. He talks about the "Post On (your) Own (host), Syndicate Everywhere" (POSSE) model, and how organizations and individuals can deploy Mastodon instances on their own servers. They also interviewed @pluralistic (Cory Doctorow) which was nice.

They really should have interviewed the @spritelyinst folks to see the real Internet of the future, in which HTTP is replaced with the Object Capability Network (OCapN). But to be fair, this tech is still pretty new and maybe not yet to the point where tech journalists at The Verge would be interested in doing articles about it.

ramin_hal9001, to random
@ramin_hal9001@emacs.ch avatar

@cwebber Quick question: do you know of any ActivityPub servers written in Guile? And I guess more importantly: should there be one? Or do you think it would be better to start again from scratch, a kind of ActivityPub 2.0, with OCapN and Goblins as a foundation? Is this part of Spritely's roadmap for Goblins?

ramin_hal9001, to scheme
@ramin_hal9001@emacs.ch avatar

Why Program in C+Python when you can program in Zig+Scheme?

Another bit of gold from #ICFP2023 by Pjotr Prins of the University of Tennessee. The actual title of the talk is "Why code in Python+C if you can code in Lisp+Zig?" but the "Lisp" in this case is actually Guile Scheme. I didn't know this, but Zig uses the C ABI so it binds to any language that can do FFI bindings to C, including most Scheme and Common Lisp implementations. But why don't I just post the abstract here:

> "Most bioinformatics software today is written in Python and for performance C is used. Lisp has been around for over half a century and here I don’t have to tell how or why programming Lisp is great. I will talk about Zig as a minimalistic new language that is unapologetically focused on performance, tellingly with a blazingly fast compiler. It is advertised as a replacement for Thompson, Ritchie, and Kernighan’s C, but it may even replace C++ in places. Zig uses the C-ABI and does not do garbage collection, so it is ideal for binding against other languages. In this talk I will present combining GNU Guile Lisp with Zig. I’ll argue that everyone needs two languages: one for quick coding and one for performance. With Guile and Zig you get both at the same time and you won’t have to fight the Rust borrow checker either."

#Scheme #Guile #GuileScheme #Zig #CProgramming #CPlusPlus #FunctionalProgramming

ramin_hal9001, to FunctionalProgramming
@ramin_hal9001@emacs.ch avatar

Please watch the ICFP 2023 Keynote "Functional programming for the planet," by Anil Madhavapeddy

He talks about how he takes modern functional programing techniques from all walks, so not just monads, but reproducible builds (e.g. Nix, although Nix is not yet used), and building these very complex data processing pipelines. He talks about how at Cambridge he has to often sit down with scientists to discuss with them how they gather and process data and produce visualizations.

He then takes the code they have written, often in languages like R and Python, and translates the stateless, functional essence of it into OCaml, and then takes the references to the datasets (often hard-coded URLs) and turns them into proper data sources. The OCaml is annotated with symbols that allow for automatic generation of GUIs.

The data sources are incredibly diverse. Many of them come from scientific experiments that have been ongoing for decades, many of the sources come from multiple generations of measuring devices, where older devices give lower-accuracy information and newer sources give higher accuracy. He also talks about the importance of security for some data sources, e.g. the location of critically endangered animals that would almost certainly be poached if photographs of these animals leaked to the public, what with how easy it is to localize nowadays.

He also inspires computer scientists to use their talents to start talking with activists, and possibly even policy makers, directly to learn what their needs are and see how you can apply yout own skills.

WIlliam Byrd was in the audience and during the Q&A session informed the audience of a workshop related to this kind of intersection of technology and activism at the DECLMed workshop ("Declarative Programming for Biology and Medicine") colocated with ICFP2023, so please check that out as well.

Read the abstract for this talk at the ICFP 2023 home page.

ramin_hal9001, to gardening
@ramin_hal9001@emacs.ch avatar

: looking for a Mastodon instance

...to recommend someone in my family who is into gardening, sustainable farming, forest farming, rewilding, permaculture, native plants — and also photography. Geographically, North America anywhere proximate to the eastern US/Canadian border would be preferable, so Minneapolis, Chicago, Milwaukee, Detroit, Toronto, Montreal, New York.

ramin_hal9001, to random
@ramin_hal9001@emacs.ch avatar

"Learn Common Lisp by Example: QtGUI with EQL5"

(On Matthew D. Miller's blog, from a series of articles on GUIs and Lisp.)

After a bit of searching around on DuckDuckGo, I ran across this fantastic blog post on how to use EQL5 for the ECL compiler and transpiler. EQL5 is a Common Lisp wrapper around the Qt C++ library. I had already gone through the preliminaries of building EQL on my Debian box and reading through the examples and tutorials. But this fellow goes into further detail about how to use QML to design the user interface.

I had never heard of Matthew D. Miller, his blog profile says he's from Oklahoma, and "I'm a DBA by day and a youth pastor by night. I love Perl." and also "Part-time dragon slayer," but his blog is full of posts on Common Lisp and Scheme. And he seems to have a talent for explaining things, because the blog post was well written and easy to understand. I hope I can find him on the fediverse.

ramin_hal9001, to ai
@ramin_hal9001@emacs.ch avatar

Humorous commentary on the ever-encroaching surveillance state

All Microsoft Windows users shall now have their every keystroke recorded, every document, every copy and paste, sent to Microsoft, and used to train a neural network used to track your every move, so that they can "improve the quality of ads that they serve to you" (not an exact quote). In exchange for forfeiting your privacy and freedom, you get in return a moderately useful predictive AI that can sometimes do the thing you wanted to do on you computer before you do it (but have take the effort to correct it when it gets things wrong). Isn't modern technology awesome!

ramin_hal9001, to linux
@ramin_hal9001@emacs.ch avatar

laptop as graphical KVM with for multiple remote hosts

If you have used Linux you might know that even with a graphical login, you can (on most all distros) press "Ctrl-Alt-F1" to switch over to a "virtual terminal" (VTs) connected directly to a /dev/tty device and control the computer using a command line, rather than a GUI. It is one of these virtual terminals that you would also see if you installed Linux without Xorg or Walyand — a so-called "headless" setup. Some people (often times Arch or Gentoo users) prefer to not install a session manager at all, login on the VT and then launch the desktop environment (DE) like , , or Plasma using the "startx" command.

Most Linux distros also configure a number of VTs you can switch between freely. On Debian-based distros these virtual terminals are each on successive F-keys from "Ctrl-Alt-F1" to "Ctrl-Alt-F7" where the GUI (the DE) usually runs on an or server that commandeers the 7th virtual terminal. If you like to hack on software like Xfce or KDE Plasma, it is often helpful to run a second Xorg or Wayland server on one of these other VTs and launch the DE there. If your code is buggy and it crashes, you can switch back to another VT running a more stable DE. (See also the "chvt" command which switch the VT that you are currently seeing programmatically.)

I only recently realized that I could launch a DE on a remote computer using forwarding, and have it display on one of these other VTs on my laptop, making my laptop work effectively as a keyboard-video-mouse (KVM) console for my various Linux computers. I could have each computer attach to each VT and switch between them using Ctrl-Alt-F(n). The incantation to do this is relatively simple.

If you are able to run the command "ssh -X remote-host /some/command" where "/some/command" would ordinarily launch a GUI app (take Firefox, for example), you can run Firefox on the remote host and have it displayed in a window on your local computer (laptop).

But why be content with just Firefox? Why not instead launch the entire desktop environment instead and get ALL of the apps! For example you could launch the Xfce DE using the "xfce4-session" command...

But...

don't try this in an already running DE, because it will open several windows on top of your current DE, such as the panel and the desktop itself, and also could screw around with your themes and cause other issues. This is not a problem, however, if you launch a second Xorg server on a separate VT, and then run "ssh -X".

So finally, here is what I did:

First I setup the remote machine for login without a password (using "ssh-copy-id"), and I test it out to make sure I can run "ssh -X remote-host firefox" successfully without entering a password.

Then I press "Ctrl-Alt-F1" to switch to another VT, and I login to the new VT with my usual user account and password. I launch a new "ssh-agent" for this VT and unlock my master password with "ssh-add". Then I enter these commands:

``

xinit /usr/bin/ssh -vX remote-host /usr/bin/xfc4-session -- :15 vt1

The "xinit" starts a new Xorg server on the current VT, but instead of running a local DE, it runs "/usr/bin/xfce4-session" on the remote host via ssh -X. SSH will forward all X11 commands on the remote host over to my laptop which then displays them for me, and also sends X11 keyboard and mouse events over SSH back to the remote host. The symbols "-- :15 vt1" tells the Xorg server to identify itself as ":15" and attach to virtual terminal 1 (which I switched to with "Ctrl-Alt-F1"). The number 15 is an arbitrary choice I made, you can use any integer, but 1 through 7 are usually reserved. For other logins I could change these symbols to "-- :16 vt2", and "-- :17 vt3", and so on.

It works nicely, except for a few details like audio, which there is a way to make work using some pulse audio magical incantation that I haven't figured out yet. Also, I have no idea how well this would work for apps based on Wayland, or whether Wayland has a wire protocol that works over SSH similarly to X11. But for now, I am satisfied with this solution of using my laptop to switch between a few Linux machines, and I am quite happy that this solution uses only software that is already installed by default on all of my Linux installations (Xorg and SSH), and it isn't necessary to install anything like a special remote desktop server on all of my remote computers.

Happy hacking!

ramin_hal9001, to cpp
@ramin_hal9001@emacs.ch avatar

C++ is everywhere, that makes ECL very valuable.

The software industry, especially in the realm of free software, has mostly settled on a pattern of using C++ for creating performance critical libraries, and creating Python binding to the C++ libraries for scripting. I was hoping Rust might come along and change all this, but it will take decades.

In the mean time, if you want to use C++ but not actually write C++, you can make use of the ECL Common Lisp compiler, which can compile Lisp to C++ code. This gives you all the best features of Common Lisp for programming with the universe of C++ code libraries available to you. You can use a C++ library and still have Common Lisp macros, garbage collection, high-level scripting, S-expressions as serialization, domain specific languages, a proper meta-object protocol that wraps C++ classes nicely, and wealth of choices for functional programming systems from the untyped lambda calculus all the way up the lambda cube to System-F and the Calculus of Constructs. This not only makes ECL a viable alternative to Python for scripting and app development, but objectively better than Python since you can actually turn your Common Lisp scripts into code that gets compiled into a larger C++ application.

With ECL I would have all sorts of C++ libraries available to me:

  • game engines like Unreal and Godot
  • 3D modeling: FreeCAD, OpenSCAD, Blender
  • Machine learning, big data, and HPC with PyTorch, TensorFlow, OpenCV, OpenCL

I will continue to contribute to the Scheme and Haskell communities as much as I can. I will continue to pursue my dream of an Xfce-like desktop environment written in Scheme. But no matter how I look at it, I am going to more productive in the long run using ECL and C++.

I was hoping that the software industry would gradually shift over to better, more functional languages like Rust and Haskell. And I would love it if Scheme languages could ever begin to seriously replace Python as a scripting language. But realistically, I think I am going to change tack and meet the industry half way. I think I should probably start using ECL as my language of choice, as much as I would prefer Scheme or an ML-family language like Haskell.

ramin_hal9001, to random
@ramin_hal9001@emacs.ch avatar

Just a reminder:

The word coined by Cory Doctorow ( @pluralistic ) does not mean "degrades in quality." It means more specifically, a product or service that degrades in quality due to revenue streams depending on selling ads to audiences. Perhaps over time it might come to mean more generally a product or service that degrades in quality due to stingy corporate managers cutting corners and eliminating the good bits of a product or service to increase profit margins. Feel free to read Doctorow's book Chokepoint Captialism to learn more.

I mention it only because I just had a most unpleasant conversation with some reactionary who seems to be trying to appropriate the term "enshittification" to simply mean "degrading in quality." My concern here is that these reactionaries want to erase from the word's meaning any evocation of Doctorow's more specific critique of products/services that profit from ad revenue, and maybe also to spread fear, uncertainty, and doubt about federated alternatives like Lemmy or Mastodon (they were talking about the "enshittification" of Mastodon and Lemmy, which is pure nonsense).

Please be aware. Thanks for your time.

  • All
  • Subscribed
  • Moderated
  • Favorites
  • megavids
  • thenastyranch
  • magazineikmin
  • cubers
  • InstantRegret
  • cisconetworking
  • Youngstown
  • vwfavf
  • slotface
  • Durango
  • rosin
  • everett
  • kavyap
  • DreamBathrooms
  • provamag3
  • mdbf
  • khanakhh
  • modclub
  • tester
  • ethstaker
  • osvaldo12
  • GTA5RPClips
  • ngwrru68w68
  • Leos
  • anitta
  • tacticalgear
  • normalnudes
  • JUstTest
  • All magazines