RSSAmplifier

Blog

Room 101

A place to be (re)educated in Newspeak

gbracha.blogspot.comRSS feed ↗25 posts

Latest posts

What You Want Is What You Get

How do we resolve the classic tension between WYSIWYG and markup . Alas, one can't explain that properly in blogger, but if you follow this link , you'll see what I mean.

The Prospect of an Execution: The Hidden Objects Among Us

Depend upon it, Sir, when a man knows he is to be hanged in a fortnight, it concentrates his mind wonderfully. -- Samuel Johnson I wish to concentrate your mind, gentle reader, by focusing on an execution (not yours of course! I see you are already losing focus - no matter ...). My goal is to make you see the objects that are in front of you every day, hiding in plain sight. So who are we…

Bitrot Revisited: Local First Software and Orthogonal Synchronization

This post is based on a invited talk I gave recently at the Programming 22 conference. The talk wasn't recorded but I've recorded a reprise at: https://youtu.be/qx6ekxXdidI The definition of insanity not withstanding, I decided to revisit a topic I have discussed many times before: Objects as Software Services . In particular, I wanted to relate it to recent work others have been doing. The…

How is a Programmer Like a Pathologist?

Blogging platforms like Blogger are totally inadequate, because they don't support embedding interactive code in posts. So this is just an indirection for the real post at: https://blog.bracha.org/exemplarDemo/exemplar2021.html?snapshot=BankAccountExemplarDemo.vfuel#

Bits of History, Words of Advice

"Why do you jackasses use these inferior linguistic vehicles when we have something here that’s so precious, so elegant, which gives me so much pleasure? How can you be so blind and so foolish?" That debate you’ll never win, and I don’t think you ought to try. - Alan Perlis, 1978 In the late 1970s, researchers at Xerox Parc invented modern computing. Of course, there were others elsewhere - but…

The Build is Always Broken

Programmers are always talking about broken builds: "The build is broken", "I broke the build" etc. However, the real problem is that the very concept of the build is broken. The idea that every time an application is modified, it needs to be reconstructed from scratch is fundamentally flawed. A practical problem with the concept is that it induces a very long and painful feedback loop during…

Much Ado About Nothing

What sweet nothing does the title refers to? It could be about null, but it in fact will say nothing about that. The nothing in question is whitespace in program text. Specifically, whether whitespace should be significant in a programming language. My instinct has always been that it should not. Sadly, there are always foolish souls who will not accept my instinct as definitive evidence, and so…

Reified Generics: The Search for the Cure

Many have argued that run time access to generic type information is very important. A very bitter debate about this ensued when we added generics to Java. The topic recurs whenever one designs a statically typed object oriented language. Should one reify generic types, or erase them? Java chose erasure, .Net and Dart chose reification, and all three solutions are in my mind unsatisfactory for…

Dead Program's Society

In my last post I discussed live literate programming. I concluded the post by noting that the approach I had discussed had one glaringly obvious flaw. No one seems to have pointed out that flaw, so I was forced to point it out myself, in my Programming 17 keynote . The recording of the talk was a bit deficient, in that the camera operator focused on me rather than on the screen. Alas, I am not…

Illiterate Programming

I have long been a fan of literate programming, especially live literate programming . I wrote a brief note about the topic a while ago, but for various reasons did not distribute it. Recently, the early release of Eve (very nice work) has injected some new life in this area. So I decided to belatedly post my musings on the subject. Ironically, posting live programming content is difficult on many…

A DSL with a View

In a previous post, I promised to explain how one might define UIs using an internal DSL. Using an internal DSL would allow us to capitalize on the full power of a general purpose programming language and avoid having to reinvent everything from if-statements to imports to inheritance. Hopscotch, Newspeak's UI framework, employs such an internal DSL. Hopscotch has been discussed in a paper and in…

A DOMain of Shadows

One of the advantages of an internal DSL over an external one is that you can leverage the full power of a general purpose programming language. If you create an external DSL, you may need to reinvent a slew of mechanisms that a good general purpose language would have provided you: things like modularity, inheritance, control flow and procedural abstraction. In practice, it is unlikely that the…

Taking it to Th’emacs

Emacs is my preferred text editor. I don’t use old-fashioned text editors as much as I used to, because I often need more specialized tools. I use IDEs for various programming languages and other things when producing high quality documents. And yet, I often wish I could subsume these with a tool that had the basic goodness of emacs. What makes emacs interesting all these decades after its…

Making Methods Live

A few months ago, I suggested that IDEs should ensure that code is always “live” in the sense that it is associated with runtime data so that any part of the code can be immediately executed. I proposed that tightly integrating editors and debuggers would be reasonable way to pursue the idea. I’ve put together a prototype, an extension of the Newspeak IDE. I demonstrated an early version at the…

Inheriting Class

I wanted to share a nice example of class hierarchy inheritance. Regular readers of this blog are no doubt familiar with the notion of virtual classes and class hierarchy inheritance. For those who aren’t, I’ll recap. Class hierarchy inheritance is exactly what it sounds like: the ability to inherit from an entire class hierarchy rather than a single class. Nested classes, as originally conceived…

Debug Mode is the Only Mode

There has been a fair amount of discussion recently surrounding some of Bret Victor’s talks and blog posts . If you haven’t seen these, I recommend them highly - with a grain of salt. These pieces make important points related to programming and programming environments, and are beautifully done. They also relate to education and other matters which I will not discuss here . Because of their…

Newspeak on Dart

We've wanted to run Newspeak to run in a web browser for a long time - actually, since before the Newspeak project started. The need for better programming languages for the internet platform has been evident for a while. In a better world, the Newspeak project would be focused on that from day 1. However, this world is suboptimal. It was only in 2010 that I spent some time sketching out the first…

Seeking Closure in the Mirror

I've discussed mirror based reflection many times in the past, in this blog and in talks . And of course I'm not the only one - you can read Alan Wirf-Brock's posts on mirrors in Javascript. In this post, I want to focus on a particular kind of mirror that has not received much attention. Before I get to deep into the details, a few words of background. You cannot get at the internals of a…

Source Control Freak

Source control is an area of software development in need of reform. There is need for a clean, clear semantic model. To the extent that existing source control systems have some sort of model, each system is different. Each has its own terminology, usually entangled with the mechanics of file systems and directories. As with IDEs, the use of files and text has spread in this domain because it is…

Types are Anti-Modular

Last week I attended a workshop on language design. I made the off-the-cuff remark that types are actually anti-modular, and that comment resonated enough that I decided to tweet it. This prompted some questions, tweets being a less than perfect format for elaborate explanation of ideas (tweets are anti-communicative?). And so, I decided to expand on this in a blog post. Saying that types are…

The Truthiness Is Out There

For the past 5 years or so, I (like many others) have argued that Javascript is the assembly language of the internet platform. Over this period, some of the obstacles that limit the applicability of said platform have been slowly pushed aside. Things like client side storage, or decent performance. However, Javascript remains a seriously limited language for platform implementation. Here are some…

The Ministry of Nesting & Testing

Unit testing was introduced to the OO world by Kent Beck, in his seminal work on SUnit , the Smalltalk unit testing framework. Other languages have introduced their own unit testing frameworks following SUnit’s lead. Tangent: Unit testing was part of the overall introduction of extreme programming/agile development, which is just one of the major trends Smalltalk has brought to the world. Along…

Maybe Monads Might Not Matter

This post isn’t really about the Maybe Monad of course. It is more focused on the State Monad, but I have a weakness for alliteration. What do space suits nuclear waste containers romantic conquests monsters macros containers conversations have in common? They’ve all been used as metaphors for monads. Last time I looked, the Haskell wiki listed 29 tutorials on the subject, and that is where all…

Reflecting on Functional Programming

In this post, I wanted to make a case for reflection in the context of pure functional programming. I don’t know that pure functional languages should be different than other languages in this regard, but in practice they are: they generally do not have reflection support. To demonstrate the utility of reflection, I’m going to revisit one of my favorite examples, parser combinators. In particular,…

Meta Morphosis

Recently, I was pointed at rotated Google . This is cool in a perverse sort of way, and it immediately reminded me of Morphic. For those who don’’t know, Morphic is the name of the Squeak (and in earlier times, Self) GUI. John Maloney (who nowadays does Scratch ) introduced the original Morphic GUI back in the halcyon days of Self, and later adapted it to Squeak Smalltalk. The latest incarnation…