What exactly does homoiconicity mean?
It means “code as data” which is a general characteristic of Lisp family. (add 2 3) Just like above string, which is both a list and also a function call. The “Homo” prefix stands for this characteristic.
It means “code as data” which is a general characteristic of Lisp family. (add 2 3) Just like above string, which is both a list and also a function call. The “Homo” prefix stands for this characteristic.
I’d say that before you begin you might want to take a look at the Dragon Book and/or Programming Language Pragmatics. That will ground you in the theory of programming languages. The books cover compilation, and interpretation, and will enable you to build all the tools that would be needed to make a basic programming … Read more
On the top of my head: good IDE support (with refactoring) stable enough specifications clear policy about backward compatibility (in term of sources, binaries and behavior) frameworks and tools around the language (like code static analysis, code coverage, …) Scala, for instance, is still evolving and moving “too fast” to be “largely” used even though … Read more
Images Images are basically memory dumps. Typically a Lisp development system starts a runtime plus an image. The user then makes changes and later can write a new image. Sometimes this is a feature used by the developer, sometimes it’s also used during the development of the Lisp system itself. Many Lisp systems are using … Read more
Aside from cheating¹ there is no difference between compiled and interpreted languages. The generic approach to quines is quite easy. First, whatever the program looks like, at some point it has to print something: print … However, what should it print? Itself. So it needs to print the “print” command: print “print …” What should … Read more
Oh no, I may have to go edit Wikipedia again. There are really only two distinctions worth making: first-class and not first-class. If Michael Scott talks about a third-class anything, I’ll be very depressed. Ok, so what is “first-class,” anyway? Well, it is a term that barely has a technical meaning. The meaning, when present, … Read more
Ragel is a state machine language. IOW, it’s not a language that also supports state machines, it’s a language that only supports state machines. Which obviously means that it’s not Turing-complete, but who needs that? More precisely, Ragel is a state machine compiler, which takes a description of a state machine in a regexp-like language … Read more
Yes, they’re just general terms. It’s to do with abstraction, and how close you are to what the computer’s actually doing. Here’s a list of programming languages ranging from very low to very high level: Machine Code could probably be considered the lowest level programming language. Assembly language is at the level of telling the … Read more
I’d suggest two paradigm shifts: Software Transactional Memory You may want to take a look at the concept of Software Transactional Memory (STM). The idea is to use optimistic concurrency: any operation that runs in parallel to others try to complete its job in an isolated transaction; if at some point another transaction has been … Read more
Malbolge would be a good place to start. Every instruction is self-modifying, and it’s a lot of fun(*) to play with. (*) Disclaimer: May not actually be fun.