Hi George, > [For those about to object: yes, Scheme has a formal denotational definition > in contrast to the many languages that are operationally defined by > (relatively) informal description of behavior combined with a "reference" > implementation. Consider that Scheme's denotational spec is describing the > behavior of an abstract machine, and that Scheme implementations are > realizations of the machine.]
I was very surprised to learn about this, I always assumed Scheme was "officially" defined with operational semantics. But you are right, the r7rs small contains the description of the denotational semantics. Although the domains are not defined excplicitly. Cheers, Eugen. November 25, 2020 6:26 AM, "George Neuner" <gneun...@comcast.net (mailto:gneun...@comcast.net?to=%22George%20Neuner%22%20<gneun...@comcast.net>)> wrote: On 11/24/2020 7:34 PM, Tim Meehan wrote:Some Schemes allow you to compile to a (self-hosting?) executable (Chicken {via C}, Chez, Racket, others?). Some do not (Guile, others?), but compile to bytecode.Why would a group of developers choose one over the other? Or is the end result not that different in either case? The reason for creating stand-alone executables is to be able to run programs in environments where the language tools are not, or cannot be, installed. For security reasons, many companies do not permit installing programming tools. However, creating stand-alone executables is rather unrelated to what the compiler produces. There are a number of language implementations - Racket included - which can embed their bytecode (as static data) into a native "runtime" program which executes it. Is there a book/paper that I might read on this? Unfortunately, language implementation is a very large subject area. If you want to understand why things are being done a certain way, you need to understand the ways that they *could be* done and what trade-offs are involved in using various methods. Little understood fact: all languages actually are defined by a *virtual* abstract machine. This is the reason that languages can be implemented on many different real-world CPUs: it is the abstract machine that defines the language's behavior, and it is the abstract machine - not some CPU - that is the *real* compilation target. [For those about to object: yes, Scheme has a formal denotational definition in contrast to the many languages that are operationally defined by (relatively) informal description of behavior combined with a "reference" implementation. Consider that Scheme's denotational spec is describing the behavior of an abstract machine, and that Scheme implementations are realizations of the machine.] To get a sense of what is going on under the hood, you need to learn a bit about hardware, and a lot about compilers and interpreters. Particular language features often can be implemented in multiple ways, and the choices made for various features often affect how harmoniously they can coexist. If you really are serious about learning this stuff, I'm sure we can keep you busy reading for a while. Cheers,Tim George -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com (mailto:racket-users+unsubscr...@googlegroups.com). To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/8a2d8868-41b7-7b3c-eba2-2cf0517032a8%40comcast.net (https://groups.google.com/d/msgid/racket-users/8a2d8868-41b7-7b3c-eba2-2cf0517032a8%40comcast.net?utm_medium=email&utm_source=footer). -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/8d711e7f3a11d3ce891264db447c439f%40disroot.org.