Finals are comming, so I might as well hack around a bit with ASM...
It's been a while since the last status update and I hate to admit it, but not much has changed in ASM repo. I was messing around with combinators in an attempt to simplify ASM' environments, and I was experimenting with new immutability semantics, since at the moment it's pretty much a one big copy-vs-alias mess. There are still a bunch of unresolved issues here and there concerning efficiency mainly, but if ASM is to be relevant in 100 years of time I'd much rather sacrifice efficiency for simpler semantics and expressive power.
Lastly, I was thinking about a way of exposing as much of ASM' semantics as possible and allowing their run-time overriding, using a Metaobject protocol:
(import 'samples.tinyclos) (defmethod apply ((v Vector) n) (write "Applying a vector to something? Are you " n "?")) (apply '[1 2 3 4] '(nuts))
"Kajtek, you incredibly handsome stallion, what have you been doing these past few months?" - you might ask, concerned about the lack of ASM dev logs recently...
As mentioned before, I was working on an extensible reader that would support user-defined reader macros for easy DSL programming. It took me quite some time, effort and researching but eventually I came up with an awesome solution. It's worthy to mention here, that it's in no way a new solution. I prefer to figure stuff out myself and often times it turns out that similar concept already existed a few years before mine. Bummer
Despite being absorbed thoroughly by the University and numerous end term tests and projects I still have lot's and lot's of free time on my hands... Let's face it, I'm just faffing about.
There was very little to none activity arround in ASM repo lately due to a single, simple reason - my poor time management skills. I'm an Emacs Org-Mode user and most of my time management happens in accordance to David Allen's GTD but for some reason I thought "Herp derp, Myself, let's not put them projects into them GTD lists! Heck no!" and left delicious, lispy ASM aside to bitrot on my harddrive...
Not going to happen anymore as I've just created a dedicated GTD list, in addition to numerous TODO lists ASM already had, where I'm going to schedule next actions to be performed in ASM codebase aswell as deadlines for the releases. Furthermore, I got myself a laptop so I can code on the go and...
puts sunglasses on
...go on with the code.
I had very little time for this blog lately, but this is about to end soon enough. Here's a quick post showing ASM' keyboard distribution.
Hello fellow programmers. Look at your favourite programming language.
Now back to Lisp.
Now back to your favourite language.
Now back to Lisp.
Sadly, it isn't Lisp, but if you stopped wasting your time, it could feel like it's Lisp.
Where are you?
Reading in OldSpice-guy's voice as I introduce the ASM programming language.
What's on your mind?
Back at me.
ASM has it. The expressiveness and brevity augmented by powerful and extensible features.
ASM is now usable.
Anything is possible when your programming language is functional and not imperative.
It's highly munctional.
It's high time for more Another Syntactic Monstrosity examples, but first let's take a look at its development.
The new parsing strategy reminds of CommonLisp reader and reader-macros:
- The raw input is passed to the lexer (written in D) that uses dynamic syntax table - a set of regular expressions describing the syntax (defined in ASM) to tokenize the input into a token stream.
- Next, the token stream is passed to the parser (written in ASM with default implementation in D), that uses ASM functions, correlated to the syntax table, to dispatch the token stream and translate it to basic, lispy S-expressions (see LR parser for details on how it's done).This will allow ASM to act like any other language, given there's the syntax table available, making it perfect for DSL programming.
(lambda (x y) (pow (+ x y) 2))
...might be written as:
[x y => (x + y)^2]
...and ASM will happily accept it. Awesome!Continue reading
Finally. Good job, Lazy-me, keep it up! Or shall I say, 'keep it down', dohoho!
So we've seen latmab - the calculator and Scheme - RNoRS Scheme interpreter, both leading to the following, somewhat fun story... After having basics of Scheme implemented even though I did not have any previous Lisp experience, I figured I could do even better. Hell, let's actually learn some Lisp, said my inner smoking-hot stallion-programmer-guy!Continue reading