HNHacker News
TopNewBestAskShowJobs

BruceM

3,597 karma · joined December 11, 2011

Working on Open Dylan (http://opendylan.org/) among other things.
submissionscomments
BruceM··on A Web IDE for Teams using Golang
Btw, I sent you an email on a somewhat related topic recently.
BruceM··on FormatJS – Internationalize your web apps on the client and server
Any thoughts on how hard this might be to integrate with Polymer (or web components in general)?
BruceM··on Rich Command Shells
Watch the Mathematica-backed StrangeLoop 2014 keynote by Stephen Wolfram. That's one way to think about it. There are others like how things work on the Lisp Machine (and somewhat similarly in CLIM).
BruceM··on Rich Command Shells
Okay.

But sometimes, the logical output format for the response from a command is going to be an image. And sometimes, you'd like to view that inline with your commands in the terminal.

That isn't that radical a suggestion. And it doesn't turn anything into a big old GUI suddenly. :)

BruceM··on Rich Command Shells
In my post, I mention that iTerm supports inline images (although only in nightly builds so far). So does Terminology.

xterm actually support Sixel graphics now (although with 16 colors and a configure flag being set). Other terminals also support Sixel graphics, but not all terminal emulators and not the primary ones (Terminal.app, PuTTY, iTerm2, GNOME Terminal, etc).

Sixel and Regis graphics used to be available in actual terminals. I didn't mention Regis graphics in my post, nor did I mention Tektronix graphics, also available in vintage terminals. Both Sixel and Regis graphics were designed by DEC (Digital Equipment Corporation). Sixel was raster-based while Regis was vector-based.

Should we bother with Sixel today? Who knows? But there used to be standards for this sort of thing, but in the actual physical terminals, before we all switched to terminal emulators, most of which stuff with VT100 / VT220 emulation rather than anything too advanced. (Regis was available in the VT240, while Sixel came with the VT340, I think.)

Once the iTerm inline image support is out in an actual release, I have some tools that I'll update to support soon after.

But I have some follow up posts where I'll talk about some of this in-depth. This wasn't a random one-off post that I wrote. :)

BruceM··on Rich Command Shells
GCLI is interesting, but I didn't mention it because I feel like it focuses more on the issue of command parsing / completion.

That said, that's a great topic to cover! I think GCLI does a pretty good job of command completion. The Lisp Machine did as well. I have friends who love some of the router CLIs, but not sure which one(s).

BruceM··on Rich Command Shells
I will probably write a "More Rich Command Shells" to cover things I missed here that are important in some way (like Apple's MPW).

The next thing I want to write though is about building something that has a command shell UI today and thinking about how to do so in a flexible way that works with multiple output devices.

BruceM··on C++11/14 compiler and library shootout
One really nice thing about the level of C++11 and C++14 (and even C++1z) support in clang and libc++ is that it has let emscripten remain at the forefront of support as well. While emscripten's compiler is a bit older (clang 3.3-based), I just updated the libc++ that emscripten uses to a current version (as of 3 days ago).
BruceM··on Faster Backtraces for Native Applications
It would be useful to know the commands that were run for gdb, lldb, and so on to do our own comparisons.

I also have need of being able to run a program under a harness that, should it crash, lets me get the stack and other details. Bonus points if I get to set up my own code to help decode and pretty print my own data types. But for my purposes, that needs to be something under a more open license which is why I've been working with LLDB to date.

BruceM··on The Road to Rust 1.0
I'd love to have the time and the resources to deal with more OSes. :) 20 years ago, I had to keep stuff running on Solaris and lots of other platforms. About 20 years ago, I still did some work on VMS on actual VAX hardware! It wasn't that long ago, that we had the possibility of BeOS either. Comparatively, we have quite a monoculture (of POSIX) these days with Windows being the non-POSIX representative.

Maybe unikernels like OpenMirage will help make things interesting.

And thanks! The work on Dylan is a lot of fun and keeps me semi-sane by keeping me busy.

BruceM··on The Road to Rust 1.0
I've been experimenting with Nix on Mac OS X lately and it works fine. I've heard that it works on FreeBSD as well. The big gap is Windows.

The good news is that you can integrate your language-specific tools with Nix as well, such as has been done for Haskell, node.js and other things. (I'm looking at it so that we can integrate our Dylan stuff with it.)

BruceM··on Comparative Macrology
I posted an explanation of how Dylan's macro system would handle this elsewhere (including http://www.reddit.com/r/programming/comments/2gesag/comparat...).

Dylan was one of the original languages to have an infix-syntax with a Lisp / Scheme style macro system. (It is fairly similar to Scheme's syntax rules, but there's an implementation of something more powerful that is used within the compiler but isn't currently available to users.)

The examples that he is demonstrating in the other languages would like this in Dylan:

    define macro swap!
      { swap! (?place1:expression, ?place2:expression) }
      =>
      { let value = ?place1;
        ?place1 := ?place2;
        ?place2 := value; }
    end;
and:

    define macro each-it
      { each-it (?collection:expression)
          ?:body
        end }
      =>
      { for (?=it in ?collection)
         ?body
        end };
    end;
Dylan's macros are hygienic by default, and as can be seen in the ``each-it`` macro, ``?=it`` is a way to violate hygiene without much difficulty, when needed.

My full post as linked above contains links to documentation and other minor details.

BruceM··on Ask HN: Do you program in multiple languages in a day?
Every day is pretty much a mix of Dylan (http://opendylan.org/), some Python, some JavaScript and either C or C++. Occasionally shell scripts.

My productivity in any of them is usually pretty decent, but it depends more on what I'm doing. In Dylan, I'm often hacking on the compiler or the runtime, so that's harder and slower going than doing some web services in Python, or Javascript for some visualization / UI. C++ varies from fairly easy work to modifying the standard C++ library to add instrumentation hooks, so again, the productivity varies.

BruceM··on An Overview of the Dylan Type System
Hey Eric!

> I've previous written about techniques for implementing fast multiple > dispatch using Dylan's type system: > http://www.cs.dartmouth.edu/reports/abstracts/TR2001-404/

We may be coming back to you about this. The dispatch mechanism implemented in Open Dylan is great for 1990s hardware, but less so on today's architectures.

> Limited integer types were ....

One of my next posts (already a good deal written, but a lot to go) is about the "limits of limited types" and looks at how they might be generalized into some more interesting and broadly useful types, namely parametric polymorphism and refinement types. There's some interesting research required to pull that off though.

> - Both type unions and subclass types worked quite well in practice.

Funny ... I forgot to mention subclass types (since they're technically an extension to the language and not part of the core specification).

> Dylan was an exceptionally good language for its time, and I had a ton of fun using it.

I hope that you're on the hackers mailing list still, then. We're going to start some discussions this coming week about the future of Dylan and making some fairly drastic changes to things.

One thing is that we'd like to make it much easier to hack on. The compiler is, as you indicate, fairly complex and it would be great to reduce the build time, add more tests, and in general, make it simpler.

Another is that some parts of Dylan could use an update in keeping with modern research and theory. The type system is an interesting example of this, and that's why I wrote an overview of what we have now. We'd like to increase the knowledge available to the compiler and increase the amount of static checking that can be done. I've already written about adding function types, we want to add parametric polymorphism in a general sense, and there are other things that can still be improved.

There are also just some missing features in the language & implementation like vector math, a solid Unicode definition and implementation. It would be interesting to revisit mutability of some things.

We'll see!

BruceM··on An Overview of the Dylan Type System
The main issue with them is that they require that the object be ==, not just =. But given that almost every use that I know of for them in the core libraries is for integers or symbols, this isn't a big issue at all.

Other than that, they seem to work out fine.

BruceM··on An Overview of the Dylan Type System
This does make the compiler work much harder though! Having to optimize dispatch everywhere makes it quite a different thing from how a good optimizing Scheme or CL compiler works.
BruceM··on An Overview of the Dylan Type System
Yes. The compiler kept track of which source locations were impacted by which types of "method upgrades". Was something inlined? Dead code eliminated? Converted to a direct call to an internal entry point (avoiding dispatch)? Converted to a direct slot accessor? All of those could be colored differently.

I'm thinking of writing a blog post along the lines of "So, you thought that was a function call, eh?" as Dylan treats everything as a function call at the syntax level, but can go and optimize it into something better. That'll be a pretty complicated post though with a lot of Dylan + generated code examples and I know that I lost some people today by showing C in the type system overview post.

BruceM··on Dylan: the harsh realities of the market
Dylan was originally designed by committee back in the days when it was designed by people @ Apple, Harlequin and CMU.

And many of the people involved with that were also involved with the Common Lisp standardization (like David Moon, Scott Fahlman, etc).

Common Lisp is a pretty interesting example, but due to the politics of the various companies involved, the vast amounts of code in each of the various Lisps, and so on, I don't think it is a fair reflection on "designed by committee". It is just what that committee was able to design given the constraints imposed upon them.

In many ways, Dylan was a stripped down and much more minimal Common Lisp, but with aspects of Scheme as well. But Dylan was designed from a green field, while Common Lisp was designed with a number of existing Lisps in mind that each had a stake.

BruceM··on Dylan: the harsh realities of the market
I do ... and I post on http://dylanfoundry.org/.

I don't usually bother to post them on HN as I don't have the time to try to get something on the front page (otherwise, no attention). I do post them on r/lisp though or lobste.rs usually.

I've got a couple of posts in draft stage now that I hope to publish this week or next.

BruceM··on Dylan: the harsh realities of the market
I'm the Bruce that he mentioned in the post.

For better or worse, I've been pushing Dylan forward heavily over the last few years and am effectively the primary maintainer.

Over the last couple of years, we've made a lot of progress. We've completely revived the documentation from 1990s era FrameMaker files and have it published via a pretty modern system. We've converted from SVN to Git and moved to GitHub. We've done 4 actual releases. We've improved our platform portability. We've provided some basic debugging integration with LLDB. We've fixed some long standing issues in the compiler and tool chain. We've improved the GC integration on all platforms.

But there's a lot to do. We need to fix our Unicode support. We need to improve the type system in at least minor ways if not major ways. We need to improve how parse failures are handled as the errors are not always friendly. We need more libraries. Some of this is really easy, some isn't. But for pretty much everything, there are bite-sized pieces of work that could be done in a couple of hours/week that would lead to significant gains.

I've wanted to just flat out use Dylan for something and have built some small prototypes with it and while they've worked out well enough, the actual projects themselves didn't go anywhere (unrelated to the use of Dylan).

I think this blog post was triggered by a comment that I'd made publicly yesterday that I'm feeling rather discouraged at this point. There was also a private email that I sent to 19 people who have been involved with Dylan recently, but the author of this post didn't get that email.

I view Dylan, not as a language from the past, but as a stepping ladder towards building a better language for the future. We don't have to get bogged down in a lot of the minutiae involved in creating a new language as a lot of the work has been done. We get to focus on things at a different level and those things are just as important. People bring up Goo often when Dylan comes up. Goo is interesting, but the implementation is nothing close to being industrial enough to survive an encounter with the real world.

I came to Dylan because I saw the mess that Scala and other languages were. I didn't like where they were going and following some people on Twitter like https://twitter.com/milessabin and others seems to show that I'm not alone.

And that's why I'll probably keep at it with Dylan. I want a better future and I'm going to keep trying to build it.

BruceM··on Dyad: Minimal, portable async networking library for C
poll, epoll, kqueue, sigio and other options depending on OS, etc.
BruceM··on Talking with Mikel Evins about the Lisp-based Newton OS from Apple
This is a subject that keeps coming up over the years in the Dylan community (and why, in part, Mikel is slowly working on an s-expression reader for the current compiler).

It is impossible to know what might have happened if Dylan had kept the s-expression syntax and how that syntax might have evolved. When the switch was made, the language didn't have all of the features that it soon had in the infix syntax. The macro system is just a single example of this. (And Dylan was one of, if not, the first infix language to have a macro system like it does. See http://people.csail.mit.edu/jrb/Projects/dexprs.pdf for a discussion of it and some extensions.)

In the s-expression syntax, you defined a new method by:

    (define-method odd? ...)
In the infix syntax, you do:

    define method odd? ...
      ...
    end;
However, you can supply adjectives as well, which weren't present in the s-expression syntax:

    define sealed inline method odd? ...
      ...
    end;
Personally, I don't really care if I'm using the infix syntax or an updated form of the s-expression syntax. But to deal with the features present in the infix syntax, it would have to be a somewhat modified version of the old s-expression syntax.

Given the history of the last 20+ years since Dylan was created, there are a lot of other things that could've been done differently in the syntax as well:

* Something more terse and compact.

* Not requiring semicolons.

* Using braces or whitespace instead of 'end' statements.

* Stuck with s-expressions since Lisp is more acceptable today (ala Clojure).

* <Your bikeshed here.>

One of the Dylan designers, David Moon, went on design (but not implement) a new language with some differing takes on the syntax: http://users.rcn.com/david-moon/PLOT3/ ... it is interesting, but without an implementation.

There's also the question of whether Dylan failed due to the syntax. There were a lot of factors that led to Dylan not seeing the adoption that was desired:

* Java was a big factor.

* The financial troubles at Apple.

* The collapse of Harlequin. Harlequin had an implementation of Dylan that lives on today as Open Dylan, but had a very advanced IDE on Windows and a pretty solid foundation.

* The business model of Harlequin. Harlequin sold expensive commercial development tools. Lispworks lives on with that business model, but it can't be said to be a massive success.

* The team at CMU switched to Java and away from their Gwydion Dylan implementation. (This was partly due to research dollars.)

And the failings of the Apple Dylan product itself didn't help. It was late to market, buggy, slow, and lacked PowerPC support in the initial release.

Much of the above wasn't due to or related to the syntax.

Yet despite all of that, Dylan still has a special place in my heart and that of many others. We've put out new releases, fixed a lot of bugs, improved platform portability and more in the last few years. Now we're looking towards the future and considering potentially larger changes.

BruceM··on Talking with Mikel Evins about the Lisp-based Newton OS from Apple
Well, keep in mind this point as well:

    At the time, there was much frustration that Apple
    Cambridge spent so much time on their new development
    environment, and not as much as we wanted on making
    improvements to the Dylan runtime (for example, we hired
    Ken because we concluded that Cambridge would not get
    around to threads in time to matter to us). That said,
    I have nothing but respect for what Apple Cambridge
    accomplished.
Oliver Steele who was involved with the Dylan IDE on the Apple Cambridge team has said that they spent too much time on IDE features, if I recall correctly.

Given that, it is pretty likely that they lacked a tree-shaker to reduce executable sizes (https://groups.google.com/forum/#!topic/comp.lang.lisp/pspFr...). It is also pretty unlikely that they'd spent enough time on reducing the memory usage and so on. (It is worth noting that even today, Open Dylan hasn't got a tree shaker.)

Bringing up a whole new ecosystem from scratch is hard work!

BruceM··on Talking with Mikel Evins about the Lisp-based Newton OS from Apple
http://pastebin.com/0vcwKsjk
BruceM··on Talking with Mikel Evins about the Lisp-based Newton OS from Apple
Mikel has many stories to tell and it would be great if he would tell more of them (publicly). We talk occasionally due to our shared interest and history with Dylan (http://opendylan.org/) and he's always got valuable points of view on things like development tools, frame-based knowledge systems, interactive development, and so on.

After his time on Dylan and the Lisp-based Newton at Apple, he went on to work on SK8 (http://en.wikipedia.org/wiki/SK8). If you dig around online, you can find the SK8 sources which were openly published at some point. They aren't that useful now given that they're written for Macintosh Common Lisp on the original Mac OS, but they're definitely interesting to read through.

These days, Mikel is still doing Common Lisp work, but he's also worked on his own language, Bard: https://github.com/mikelevins/bard and he's slowly been working with us in the Open Dylan community to add support back for the old s-expression syntax.

BruceM··on Talking with Mikel Evins about the Lisp-based Newton OS from Apple
IIRC, the machine hosting this doesn't always have a lot of resources / bandwidth. I'm pretty sure that he used to discourage linking to stuff there for that sort of reason.

It works for me now at the moment though.

BruceM··on (Ab)Using Language Features: The Common Lisp Condition System
> Are there any other languages that allow the calling scope to specify how lower-level functions handle errors without unwinding the stack?

Dylan (http://opendylan.org/) has them, but that's because some of the same people who standardized Common Lisp went on to design Dylan.

BruceM··on Guinea worm: Close to eradication? [video]
While horrifying, this was pretty interesting. The ability to interrupt the cycle of the worm with existing technology is inspiring.
BruceM··on Apple's Cyclone Microarchitecture Detailed
And 68k to PPC.
BruceM··on Open-Sourcing My Gambit Scheme iOS Game from 2010
We have a specification: http://opendylan.org/books/drm/

We have, in the past had multiple implementations, but due to community size, desire to evolve things, etc, we narrowed it down to Open Dylan being supported and maintained.

← PreviousPage 3 of 7Next →