diff --git a/README.md b/README.md index b07a38e5e..6d08276a6 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,27 @@ -

- Meevax Lisp System -
- A programmable programming lanugage. -

- ## Overview > Programming languages should be designed not by piling feature on top of > feature, but by removing the weaknesses and restrictions that make additional > features appear necessary. ->
-> Revised7 Report on the Algorithmic Language Scheme [1] ->
- -Meevax is an implementation of Lisp-1 programming language, supporting subset -of the [Scheme](http://www.scheme-reports.org/) (R7RS) and -[SRFI](https://srfi.schemers.org/)s. +>
Revised7 Report on the Algorithmic Language Scheme
+ +Meevax is an implementation of Lisp-1 programming language, supporting the +latest [Scheme](http://www.scheme-reports.org/) language standard and some +[SRFI](https://srfi.schemers.org/)s (SRFI; Scheme requests for implementation). +This implementation is focused on integration with modern C++ and practicality: +it not only works as an interpreter with support for the latest Scheme +standard, but also provides a flexible Lisp-1 kernel as a C++ library. The +library is installed as a CMake package for [easy +linking](./example/CMakeLists.txt), and [any C++ classes can be used from +Lisp-1 scripts](./example/example.ss) [via simple stubs](example/example.cpp). + +However, as the major version indicates, this implementation is still in its +infancy. Its performance is significantly inferior to that of common Scheme +implementations. For example, in a microbenchmark comparison with Chibi Scheme, +which can be embedded into C, Meevax takes more than 40x longer to compute than +Chibi Scheme. We will try to improve the performance in future development, but +we do not recommend using Meevax for anything other than toy programs, at least +at this time. ### Releases @@ -23,13 +29,32 @@ Latest release is [here](https://github.com/yamacir-kit/meevax/releases). ### Features -- Architecture - SECD machine. -- Modern C++ compatible dynamic typing - Meevax provides RTTI-based language - runtime library. +- Traditional SECD machine [[Landin 1964](#Landin-1964)]. +- Low-level hygienic macro system, known as *syntactic closures* [[Bawden and + Rees 1988](#Bawden-and-Rees-1988); [Hanson 1991](#Hanson-1991)] and *explicit + renaming* [[Clinger 1991](#Clinger-1991)]. For these, the well-known macro + transformers `sc-macro-transformer`, `rsc-macro-transformer`, and + `er-macro-transformer` from the library [`(meevax + macro-transformer)`](./basis/meevax.ss) are provided. Note that these are + non-Scheme standards. +- C++ friendly precise garbage collection [[Kempf 2001a](#Kempf-2001a); [Kempf + 2001b](#Kempf-2001b)] ### Standards -Subset of R7RS-small. +Meevax can be used as an interpreter that supports the Scheme standard specified by the following report: + +- Revised4 Report on the Algorithmic Language Scheme (R4RS) [[Clinger and Rees 1991a](#Clinger-and-Rees-1991a)] +- Revised5 Report on the Algorithmic Language Scheme (R5RS) [[Kelsey, Clinger and Rees 1998](#Kelsey-Clinger-and-Rees-1998)] +- Revised7 Report on the Algorithmic Language Scheme (R7RS) [[Shinn, Cowan and Glecker 2013](#Shinn-Cowan-and-Glecker-2013)] + +Procedures for each standard are provided by the following R7RS-style libraries: + +| Language | Library name | +|:--------:|--------------| +| R4RS | [`(scheme r4rs)`](./basis/r4rs.ss) +| R5RS | [`(scheme r5rs)`](./basis/r5rs.ss) +| R7RS | [`(scheme base)`](./basis/r7rs.ss) [`(scheme case-lambda)`](./basis/r7rs.ss) [`(scheme char)`](./basis/r7rs.ss) [`(scheme complex)`](./basis/r7rs.ss) [`(scheme cxr)`](./basis/r7rs.ss) [`(scheme eval)`](./basis/r7rs.ss) [`(scheme file)`](./basis/r7rs.ss) [`(scheme inexact)`](./basis/r7rs.ss) [`(scheme lazy)`](./basis/r7rs.ss) [`(scheme load)`](./basis/r7rs.ss) [`(scheme process-context)`](./basis/r7rs.ss) [`(scheme read)`](./basis/r7rs.ss) [`(scheme repl)`](./basis/r7rs.ss) [`(scheme time)`](./basis/r7rs.ss) [`(scheme write)`](./basis/r7rs.ss) [`(scheme r5rs)`](./basis/r5rs.ss) ### SRFIs @@ -74,7 +99,7 @@ Subset of R7RS-small. cmake -B build -DCMAKE_BUILD_TYPE=Release cd build make package -sudo apt install build/meevax_0.4.824_amd64.deb +sudo apt install build/meevax_0.4.825_amd64.deb ``` or @@ -106,9 +131,9 @@ sudo rm -rf /usr/local/share/meevax | Target Name | Description |-------------|------------- -| `all` | Build shared-library `libmeevax.0.4.824.so` and executable `meevax` +| `all` | Build shared-library `libmeevax.0.4.825.so` and executable `meevax` | `test` | Test executable `meevax` -| `package` | Generate debian package `meevax_0.4.824_amd64.deb` +| `package` | Generate debian package `meevax_0.4.825_amd64.deb` | `install` | Copy files into `/usr/local` directly ## Usage @@ -132,10 +157,18 @@ See [LICENSE](./LICENSE). ## References -- [1] A.shinn, J.Cowan, A. A. Greckler, editors, "[Revised7 Report on the Algorithmic Language Scheme](https://bitbucket.org/cowan/r7rs/raw/tip/rnrs/r7rs.pdf)", Technical report, 2013. - -### Resources - -* [Chibi-Scheme](https://github.com/ashinn/chibi-scheme) -* [SECDR-Scheme](http://www.maroon.dti.ne.jp/nagar17/mulasame/) -* [TinyScheme](http://tinyscheme.sourceforge.net/) +| Authors | Year | Title | Journal Title / Publisher | Pages | +|-------------------------------------------------------------------------------------------------------|:----:|-------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|----------------| +| John McCarthy | 1960 | [Recursive functions of symbolic expressions and their computation by machine, Part I](https://dl.acm.org/doi/10.1145/367177.367199) | [Communications of the ACM, Volume 3, Issue 4](https://dl.acm.org/toc/cacm/1960/3/4) | 184‑195 | +| P. J. Landin | 1964 | [The Mechanical Evaluation of Expressions](https://academic.oup.com/comjnl/article/6/4/308/375725) | [The Computor Journal, Volume 6, Issue 4](https://academic.oup.com/comjnl/issue/6/4) | 308‑320 | +| Peter Henderson | 1980 | [Functional Programming: Application and Implementation](https://archive.org/details/functionalprogra0000hend/mode/2up) | Prentice Hall | | +| Alan Bawden and Jonathan Rees | 1988 | [Syntactic Closures](https://dl.acm.org/doi/10.1145/62678.62687) | [LFP '88: Proceedings of the 1988 ACM Conference on LISP and Functional Programming](https://dl.acm.org/doi/proceedings/10.1145/62678) | 86‑95 | +| William Clinger and Jonathan Rees (Editors) | 1991 | [Revised4 Report on the Algorithmic Language Scheme](https://dl.acm.org/doi/10.1145/382130.382133) | [ACM SIGPLAN LISP Pointers, Volume IV, Issue 3](https://dl.acm.org/toc/sigplan-lisppointers/1991/IV/3) | 1‑55 | +| Chris Hanson | 1991 | [A Syntactic Closures Macro Facility](https://dl.acm.org/doi/10.1145/1317265.1317267) | [ACM SIGPLAN LISP Pointers, Volume IV, Issue 4](https://dl.acm.org/toc/sigplan-lisppointers/1991/IV/4) | 9‑16 | +| William Clinger | 1991 | [Hygienic Macros Through Explicit Renaming](https://dl.acm.org/doi/10.1145/1317265.1317269) | [ACM SIGPLAN LISP Pointers, Volume IV, Issue 4](https://dl.acm.org/toc/sigplan-lisppointers/1991/IV/4) | 25‑28 | +| William Clinger and Jonathan Rees | 1991 | [Macros That Work](https://dl.acm.org/doi/10.1145/99583.99607) | [POPL '91: Proceedings of the 18th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages](https://dl.acm.org/doi/proceedings/10.1145/99583) | 155‑162 | +| Rechard Kelsey, William Clinger and Jonathan Rees (Editors) | 1998 | [Revised5 Report on the Algorithmic Language Scheme](https://dl.acm.org/doi/10.1145/290229.290234) | [ACM SIGPLAN Notices, Volume 33, Issue 9](https://dl.acm.org/toc/sigplan/1998/33/9) | 26‑76 | +| William E. Kempf | 2001 | [A garbage collection framework for C++](https://www.codeproject.com/Articles/912/A-garbage-collection-framework-for-C) | https://www.codeproject.com/Articles/912/A-garbage-collection-framework-for-C | | +| William E. Kempf | 2001 | [A garbage collection framework for C++ - Part II](https://www.codeproject.com/Articles/938/A-garbage-collection-framework-for-C-Part-II) | https://www.codeproject.com/Articles/938/A-garbage-collection-framework-for-C-Part-II | | +| Michael D. Adams and R. Kent Dybvig | 2008 | [Efficient Nondestructive Equality Checking for Trees and Graphs](https://dl.acm.org/doi/10.1145/1411204.1411230) | [ICFP '08: Proceedings of the 13th ACM SIGPLAN International Conference on Functional Programming](https://dl.acm.org/doi/proceedings/10.1145/1411204) | 179‑188 | +| Alex Shinn, John Cowan and Arthur A. Gleckler (Editors) | 2013 | [Revised7 Report on the Algorithmic Language Scheme](https://standards.scheme.org/official/r7rs.pdf) | http://www.scheme-reports.org/ | | diff --git a/VERSION b/VERSION index 78a548007..001ab55ee 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.4.824 +0.4.825 diff --git a/configure/README.md b/configure/README.md index eb34ca8be..db3661b97 100644 --- a/configure/README.md +++ b/configure/README.md @@ -1,21 +1,27 @@ -

- Meevax Lisp System -
- A programmable programming lanugage. -

- ## Overview > Programming languages should be designed not by piling feature on top of > feature, but by removing the weaknesses and restrictions that make additional > features appear necessary. ->
-> Revised7 Report on the Algorithmic Language Scheme [1] ->
- -Meevax is an implementation of Lisp-1 programming language, supporting subset -of the [Scheme](http://www.scheme-reports.org/) (R7RS) and -[SRFI](https://srfi.schemers.org/)s. +>
Revised7 Report on the Algorithmic Language Scheme
+ +Meevax is an implementation of Lisp-1 programming language, supporting the +latest [Scheme](http://www.scheme-reports.org/) language standard and some +[SRFI](https://srfi.schemers.org/)s (SRFI; Scheme requests for implementation). +This implementation is focused on integration with modern C++ and practicality: +it not only works as an interpreter with support for the latest Scheme +standard, but also provides a flexible Lisp-1 kernel as a C++ library. The +library is installed as a CMake package for [easy +linking](./example/CMakeLists.txt), and [any C++ classes can be used from +Lisp-1 scripts](./example/example.ss) [via simple stubs](example/example.cpp). + +However, as the major version indicates, this implementation is still in its +infancy. Its performance is significantly inferior to that of common Scheme +implementations. For example, in a microbenchmark comparison with Chibi Scheme, +which can be embedded into C, Meevax takes more than 40x longer to compute than +Chibi Scheme. We will try to improve the performance in future development, but +we do not recommend using Meevax for anything other than toy programs, at least +at this time. ### Releases @@ -23,13 +29,32 @@ Latest release is [here](https://github.com/yamacir-kit/meevax/releases). ### Features -- Architecture - SECD machine. -- Modern C++ compatible dynamic typing - Meevax provides RTTI-based language - runtime library. +- Traditional SECD machine [[Landin 1964](#Landin-1964)]. +- Low-level hygienic macro system, known as *syntactic closures* [[Bawden and + Rees 1988](#Bawden-and-Rees-1988); [Hanson 1991](#Hanson-1991)] and *explicit + renaming* [[Clinger 1991](#Clinger-1991)]. For these, the well-known macro + transformers `sc-macro-transformer`, `rsc-macro-transformer`, and + `er-macro-transformer` from the library [`(meevax + macro-transformer)`](./basis/meevax.ss) are provided. Note that these are + non-Scheme standards. +- C++ friendly precise garbage collection [[Kempf 2001a](#Kempf-2001a); [Kempf + 2001b](#Kempf-2001b)] ### Standards -Subset of R7RS-small. +Meevax can be used as an interpreter that supports the Scheme standard specified by the following report: + +- Revised4 Report on the Algorithmic Language Scheme (R4RS) [[Clinger and Rees 1991a](#Clinger-and-Rees-1991a)] +- Revised5 Report on the Algorithmic Language Scheme (R5RS) [[Kelsey, Clinger and Rees 1998](#Kelsey-Clinger-and-Rees-1998)] +- Revised7 Report on the Algorithmic Language Scheme (R7RS) [[Shinn, Cowan and Glecker 2013](#Shinn-Cowan-and-Glecker-2013)] + +Procedures for each standard are provided by the following R7RS-style libraries: + +| Language | Library name | +|:--------:|--------------| +| R4RS | [`(scheme r4rs)`](./basis/r4rs.ss) +| R5RS | [`(scheme r5rs)`](./basis/r5rs.ss) +| R7RS | [`(scheme base)`](./basis/r7rs.ss) [`(scheme case-lambda)`](./basis/r7rs.ss) [`(scheme char)`](./basis/r7rs.ss) [`(scheme complex)`](./basis/r7rs.ss) [`(scheme cxr)`](./basis/r7rs.ss) [`(scheme eval)`](./basis/r7rs.ss) [`(scheme file)`](./basis/r7rs.ss) [`(scheme inexact)`](./basis/r7rs.ss) [`(scheme lazy)`](./basis/r7rs.ss) [`(scheme load)`](./basis/r7rs.ss) [`(scheme process-context)`](./basis/r7rs.ss) [`(scheme read)`](./basis/r7rs.ss) [`(scheme repl)`](./basis/r7rs.ss) [`(scheme time)`](./basis/r7rs.ss) [`(scheme write)`](./basis/r7rs.ss) [`(scheme r5rs)`](./basis/r5rs.ss) ### SRFIs @@ -123,10 +148,18 @@ See [LICENSE](./LICENSE). ## References -- [1] A.shinn, J.Cowan, A. A. Greckler, editors, "[Revised7 Report on the Algorithmic Language Scheme](https://bitbucket.org/cowan/r7rs/raw/tip/rnrs/r7rs.pdf)", Technical report, 2013. - -### Resources - -* [Chibi-Scheme](https://github.com/ashinn/chibi-scheme) -* [SECDR-Scheme](http://www.maroon.dti.ne.jp/nagar17/mulasame/) -* [TinyScheme](http://tinyscheme.sourceforge.net/) +| Authors | Year | Title | Journal Title / Publisher | Pages | +|-------------------------------------------------------------------------------------------------------|:----:|-------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|----------------| +| John McCarthy | 1960 | [Recursive functions of symbolic expressions and their computation by machine, Part I](https://dl.acm.org/doi/10.1145/367177.367199) | [Communications of the ACM, Volume 3, Issue 4](https://dl.acm.org/toc/cacm/1960/3/4) | 184‑195 | +| P. J. Landin | 1964 | [The Mechanical Evaluation of Expressions](https://academic.oup.com/comjnl/article/6/4/308/375725) | [The Computor Journal, Volume 6, Issue 4](https://academic.oup.com/comjnl/issue/6/4) | 308‑320 | +| Peter Henderson | 1980 | [Functional Programming: Application and Implementation](https://archive.org/details/functionalprogra0000hend/mode/2up) | Prentice Hall | | +| Alan Bawden and Jonathan Rees | 1988 | [Syntactic Closures](https://dl.acm.org/doi/10.1145/62678.62687) | [LFP '88: Proceedings of the 1988 ACM Conference on LISP and Functional Programming](https://dl.acm.org/doi/proceedings/10.1145/62678) | 86‑95 | +| William Clinger and Jonathan Rees (Editors) | 1991 | [Revised4 Report on the Algorithmic Language Scheme](https://dl.acm.org/doi/10.1145/382130.382133) | [ACM SIGPLAN LISP Pointers, Volume IV, Issue 3](https://dl.acm.org/toc/sigplan-lisppointers/1991/IV/3) | 1‑55 | +| Chris Hanson | 1991 | [A Syntactic Closures Macro Facility](https://dl.acm.org/doi/10.1145/1317265.1317267) | [ACM SIGPLAN LISP Pointers, Volume IV, Issue 4](https://dl.acm.org/toc/sigplan-lisppointers/1991/IV/4) | 9‑16 | +| William Clinger | 1991 | [Hygienic Macros Through Explicit Renaming](https://dl.acm.org/doi/10.1145/1317265.1317269) | [ACM SIGPLAN LISP Pointers, Volume IV, Issue 4](https://dl.acm.org/toc/sigplan-lisppointers/1991/IV/4) | 25‑28 | +| William Clinger and Jonathan Rees | 1991 | [Macros That Work](https://dl.acm.org/doi/10.1145/99583.99607) | [POPL '91: Proceedings of the 18th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages](https://dl.acm.org/doi/proceedings/10.1145/99583) | 155‑162 | +| Rechard Kelsey, William Clinger and Jonathan Rees (Editors) | 1998 | [Revised5 Report on the Algorithmic Language Scheme](https://dl.acm.org/doi/10.1145/290229.290234) | [ACM SIGPLAN Notices, Volume 33, Issue 9](https://dl.acm.org/toc/sigplan/1998/33/9) | 26‑76 | +| William E. Kempf | 2001 | [A garbage collection framework for C++](https://www.codeproject.com/Articles/912/A-garbage-collection-framework-for-C) | https://www.codeproject.com/Articles/912/A-garbage-collection-framework-for-C | | +| William E. Kempf | 2001 | [A garbage collection framework for C++ - Part II](https://www.codeproject.com/Articles/938/A-garbage-collection-framework-for-C-Part-II) | https://www.codeproject.com/Articles/938/A-garbage-collection-framework-for-C-Part-II | | +| Michael D. Adams and R. Kent Dybvig | 2008 | [Efficient Nondestructive Equality Checking for Trees and Graphs](https://dl.acm.org/doi/10.1145/1411204.1411230) | [ICFP '08: Proceedings of the 13th ACM SIGPLAN International Conference on Functional Programming](https://dl.acm.org/doi/proceedings/10.1145/1411204) | 179‑188 | +| Alex Shinn, John Cowan and Arthur A. Gleckler (Editors) | 2013 | [Revised7 Report on the Algorithmic Language Scheme](https://standards.scheme.org/official/r7rs.pdf) | http://www.scheme-reports.org/ | |