So MATLAB users are moving away from the language (and toolkit?) in favour of other tools <https://www.infoworld.com/article/4207496/matlab-programming-language-sinking-in-popularity.html>. Yes, proprietary languages and toolkits are a lot less attractive these days, given the embarrassment of riches available in the open-source world. MATLAB was probably good enough at the time for its original use (matrix manipulation), but take advice from someone who had to do programming work in that language (for pay, yet): *stay well away* from the GUI-toolkit API, if you can help it. It was a long time ago, but I still get the shakes thinking about it ...
On Tue, Aug 11, 2026 at 01:38:49PM +1200, Lawrence D'Oliveiro wrote:
So MATLAB users are moving away from the language (and toolkit?) in favour of other tools <https://www.infoworld.com/article/4207496/matlab-programming-language-sinking-in-popularity.html>.
Yes, proprietary languages and toolkits are a lot less attractive these days, given the embarrassment of riches available in the open-source world. MATLAB was probably good enough at the time for its original use (matrix manipulation), but take advice from someone who had to do programming work in that language (for pay, yet): *stay well away* from the GUI-toolkit API, if you can help it.
It was a long time ago, but I still get the shakes thinking about it
I use Matlab quite a lot mainly for numerical computing. But I have to admit they have really screwed up the 2025 version and the GUI, IMHO, is a disaster. Mind you, I have always programmed Matlab using emacs and normally reduce the GUI down to the command line window only. But the lastest version is a shocker that even ruins that experience, and for the first time ever I am wondering whether to move to other tools. One of my colleagues has always thought well of Julia but has never fully switch to it because it is still lacking in features. Cheers, Michael.
On Tue, 11 Aug 2026 21:40:09 +1200, Michael Cree wrote:
Mind you, I have always programmed Matlab using emacs and normally reduce the GUI down to the command line window only. But the lastest version is a shocker that even ruins that experience, and for the first time ever I am wondering whether to move to other tools.
I was actually talking about creating a GUI for a custom application written in MATLAB. Using a language which was purpose-built mainly for dealing with arrays, now trying to cope with more complex data structures like GUI widgets, and with no proper event loop as such ... not fun.
One of my colleagues has always thought well of Julia but has never fully switch to it because it is still lacking in features.
I know you’ve previously expressed a dislike of Python. But it remains the one that attracts all the best add-on support, and also all the best minds to work on adding that support. I agree that relying on indentation for statement structure was a mistake. My way of dealing with this is to add “#end” comment lines indicating the ends of compounds statements. E.g. a block of my code, written more the way others might lay it out: now = time.monotonic() if now - last_flush >= poll_delay : try : waited = os.waitpid(-1, os.WNOHANG) except ChildProcessError : waited = (0, 0) if waited[0] != 0 : child = tuple((i, c) for i, c in enumerate(children) if c["proc"].pid == waited[0]) # sequential search good enough for small nr connections if len(child) > 0 : (i, child), = child logger.log \ ( (logging.DEBUG, logging.WARNING)[waited[1] != 0], "child pid %d terminated with status %d" % waited ) child["waited"] = True if child["done_output"] : os.unlink(child["outpipe_full"]) children.pop(i) else : logger.info("child pid %d, status %d is not one of mine" % waited) last_flush = now versus the way I actually write it: now = time.monotonic() if now - last_flush >= poll_delay : try : waited = os.waitpid(-1, os.WNOHANG) except ChildProcessError : waited = (0, 0) #end try if waited[0] != 0 : child = tuple((i, c) for i, c in enumerate(children) if c["proc"].pid == waited[0]) # sequential search good enough for small nr connections if len(child) > 0 : (i, child), = child logger.log \ ( (logging.DEBUG, logging.WARNING)[waited[1] != 0], "child pid %d terminated with status %d" % waited ) child["waited"] = True if child["done_output"] : os.unlink(child["outpipe_full"]) children.pop(i) #end if else : logger.info("child pid %d, status %d is not one of mine" % waited) #end if #end if last_flush = now #end if I think that makes it clearer where the structures are and how they nest, don’t you think? Also, I have custom Emacs commands defined to jump between lines with matching indentation. This includes the “#end” lines, so I can easily navigate between the beginning and end of a compound statement with just a keystroke.
participants (2)
-
Lawrence D'Oliveiro -
Michael Cree