mirror of
https://github.com/ProgramSnail/Lama.git
synced 2025-12-05 22:38:44 +00:00
Update README.md for 1.3 version
This commit is contained in:
parent
b444aa53e8
commit
acc697206e
10 changed files with 49 additions and 46 deletions
45
README.md
45
README.md
|
|
@ -1,9 +1,9 @@
|
|||
| Lama 1.2 |
|
||||
| ------------------- |
|
||||
| [![Lama 1.2][1]][2] |
|
||||
| Lama 1.3 |
|
||||
|---------------------|
|
||||
| [![Lama 1.3][1]][2] |
|
||||
|
||||
[1]: https://github.com/PLTools/Lama/Lama/workflows/Build/badge.svg?branch=1.10
|
||||
[2]: https://github.com/PLTools/Lama//Lama/actions
|
||||
[1]: https://github.com/PLTools/Lama/Lama/workflows/Build/badge.svg?branch=1.30
|
||||
[2]: https://github.com/PLTools/Lama/Lama/actions
|
||||
|
||||
# Lama
|
||||
|
||||
|
|
@ -27,8 +27,7 @@ The lack of a type system (a vital feature for a real-world language
|
|||
for software engineering) is an intensional decision that allows showing the unchained diversity of runtime behaviors, including those that a typical type system is called to prevent.
|
||||
On the other hand the language can be used in the future as a raw substrate to apply various ways of software verification (including type systems).
|
||||
|
||||
The current implementation contains a native code compiler for **x86-32**, written in **OCaml**, a runtime library with garbage-collection support, written in **C**, and a small standard library, written in  itself.
|
||||
The native code compiler uses **gcc** as a toolchain.
|
||||
The current implementation contains a native code compiler for **x86-64**, written in **OCaml**, a runtime library with garbage-collection support, written in **C**, and a small standard library, written in  itself.
|
||||
|
||||
In addition, a source-level reference interpreter is implemented as well as a compiler to a small stack machine.
|
||||
The stack machine code can in turn be either interpreted on a stack machine interpreter, or used as an intermediate representation by the native code compiler.
|
||||
|
|
@ -39,9 +38,7 @@ The language specification can be found [here](lama-spec.pdf).
|
|||
|
||||
## Installation
|
||||
|
||||
Supported target: GNU/Linux x86_32 (x86_64 by running 32-bit mode)
|
||||
|
||||
***Mac*** users should use either a virtual machine or docker with a Linux distributive inside.
|
||||
Supported target: GNU/Linux x86_64, MacOS x86_64 (arm using Rosetta).
|
||||
|
||||
***Windows*** users should get Windows Subsystem for Linux a.k.a WSL (recommended) or cygwin.
|
||||
Ubuntu-based variant of WSL is recommended.
|
||||
|
|
@ -52,14 +49,9 @@ Ubuntu-based variant of WSL is recommended.
|
|||
|
||||
For example, (for Debian-based GNU/Linux):
|
||||
```bash
|
||||
$ sudo apt install gcc-multilib
|
||||
sudo apt install gcc-multilib
|
||||
```
|
||||
|
||||
On some versions, you need to install the additional package `lib32gcc-9-dev` in case of errors like
|
||||
```
|
||||
/usr/bin/ld: cannot find -lgcc
|
||||
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/9/libgcc.a when searching for -lgcc
|
||||
```
|
||||
- [opam](http://opam.ocaml.org) (>= 2.0.4)
|
||||
- [OCaml](http://ocaml.org) (>= 4.10.1). *Optional* because it can be easily installed through opam.
|
||||
Compiler variant with `flambda` switch is recommended.
|
||||
|
|
@ -71,10 +63,7 @@ Ubuntu-based variant of WSL is recommended.
|
|||
1. Install the right [switch](https://opam.ocaml.org/doc/Manual.html#Switches) for the OCaml compiler
|
||||
|
||||
```bash
|
||||
# for fresh opam
|
||||
$ opam switch create lama --packages=ocaml-variants.4.14.0+options,ocaml-option-flambda
|
||||
# for old opam
|
||||
$ opam switch create lama ocaml-variants.4.13.1+flambda
|
||||
opam switch create lama --packages=ocaml-variants.4.14.0+options,ocaml-option-flambda
|
||||
```
|
||||
|
||||
* In the above command:
|
||||
|
|
@ -85,8 +74,7 @@ Ubuntu-based variant of WSL is recommended.
|
|||
|
||||
2. Update PATH variable for the fresh switch. (You can add these commands to your `~/.bashrc` for convenience but they should be added by `opam`)
|
||||
```bash
|
||||
$ export OPAMSWITCH=lama
|
||||
$ eval $(opam env)
|
||||
eval $(opam env --switch=lama --set-switch)
|
||||
```
|
||||
|
||||
* Check that the OCaml compiler is now available in PATH by running `which ocamlc`; it should answer with `/home/user/.opam/lama/bin/ocamlc` (or similar) and `ocamlc -v` should answer with
|
||||
|
|
@ -98,16 +86,16 @@ Ubuntu-based variant of WSL is recommended.
|
|||
3. Pin Lama package using `opam` and right URL (remember of "#" being a comment character in various shells)
|
||||
|
||||
```bash
|
||||
$ opam pin add Lama https://github.com/PLTools/Lama.git\#1.2 --no-action
|
||||
opam pin add Lama https://github.com/PLTools/Lama.git\#1.30 --no-action
|
||||
```
|
||||
|
||||
The extra '#' sign is added because in various Shells it is the start of a comment
|
||||
|
||||
4. Install *dep*endencies on system-wide *ext*ernal packages and `lama` itself after that.
|
||||
4. Install dependencies on system-wide external packages and `lama` itself after that.
|
||||
|
||||
```bash
|
||||
$ opam depext Lama --yes
|
||||
$ opam install Lama --yes
|
||||
opam depext Lama --yes
|
||||
opam install Lama --yes
|
||||
```
|
||||
|
||||
5. Check that `lamac` executable was installed: `which lamac` should answer with
|
||||
|
|
@ -125,6 +113,11 @@ It should build a local compiler `src/lamac` and a few tutorial executables in `
|
|||
|
||||
* [Plugin for VS Code](https://marketplace.visualstudio.com/items?itemName=arsavelev.lsp-lama)
|
||||
|
||||
### Changes in Lama 1.3
|
||||
|
||||
* Migrated from x86-32 to x86-64 architecture.
|
||||
* Added `let ... in ...` construct.
|
||||
|
||||
### Changes in Lama 1.2
|
||||
|
||||
* New garbage collector: single-threaded stop-the-world `LISP2` (see GC Handbook for details: [1st edition](https://www.cs.kent.ac.uk/people/staff/rej/gcbook/), [2nd edition](http://gchandbook.org/)) [mark-compact](https://www.memorymanagement.org/glossary/m.html#term-mark-compact).
|
||||
|
|
|
|||
BIN
lama-spec.pdf
BIN
lama-spec.pdf
Binary file not shown.
|
|
@ -29,9 +29,9 @@ of runtime behaviors, including those which a typical type system is called to p
|
|||
the language can be used in future as a raw substrate to apply various ways of software verification (including
|
||||
type systems) on.
|
||||
|
||||
The current implementation contains a native code compiler for \textsc{x86-32}, written
|
||||
The current implementation contains a native code compiler for \textsc{x86-64}, written
|
||||
in \textsc{OCaml}, a runtime library with garbage-collection support, written in \textsc{C}, and a small
|
||||
standard library, written in \lama itself. The native code compiler uses \textsc{gcc} as a toolchain.
|
||||
standard library, written in \lama itself.
|
||||
|
||||
In addition, a source-level reference interpreter is implemented as well as a compiler to a small
|
||||
stack machine. The stack machine code can in turn be either interpreted on a stack machine interpreter, or
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
\label{sec:wellformedness}
|
||||
|
||||
{
|
||||
\newcommand{\Ref}{\primi{Ref}{}}
|
||||
\renewcommand{\Ref}{\primi{Ref}{}}
|
||||
\newcommand{\Val}{\primi{Val}{}}
|
||||
\newcommand{\Void}{\primi{Void}{}}
|
||||
\newcommand{\Weak}{\primi{Weak}{}}
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
\label{sec:lexical_structure}
|
||||
|
||||
The character set for the language is \textsc{ASCII}, case-sensitive. In the following lexical description we will use
|
||||
the GNU Regexp syntax~\cite{GNULib} in lexical definitions.
|
||||
the POSIX-Extended Regular Expressions in lexical definitions.
|
||||
|
||||
\subsection{Whitespaces and Comments}
|
||||
|
||||
|
|
@ -83,7 +83,7 @@ The following identifiers are reserved for keywords:
|
|||
after array at before box case do elif else
|
||||
esac eta false fi for fun if import infix
|
||||
infixl infixr lazy od of public sexp skip str
|
||||
syntax then true val var while
|
||||
syntax then true val var while let in
|
||||
\end{lstlisting}
|
||||
|
||||
\subsection{Infix Operators}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ property ``$e$ is a reference''. The result of assignment operator coincides wit
|
|||
assigns 3 to both "\lstinline|x|" and "\lstinline|y|".
|
||||
|
||||
\begin{figure}[h]
|
||||
\newcommand{\Ref}[1]{\mathcal{R}\,({#1})}
|
||||
\renewcommand{\Ref}[1]{\mathcal{R}\,({#1})}
|
||||
\renewcommand{\arraystretch}{4}
|
||||
\[
|
||||
\begin{array}{cc}
|
||||
|
|
@ -108,7 +108,8 @@ designates an anonymous functional value in the form of a closure.
|
|||
& & \nonterm{whileDoExpression}&\alt\\
|
||||
& & \nonterm{doWhileExpression}&\alt\\
|
||||
& & \nonterm{forExpression}&\alt\\
|
||||
& & \nonterm{caseExpression}&
|
||||
& & \nonterm{caseExpression}&\alt\\
|
||||
& & \nonterm{letExpression}&
|
||||
\end{array}
|
||||
\]
|
||||
\caption{Expression concrete syntax}
|
||||
|
|
@ -136,6 +137,14 @@ Expression \lstinline|skip| can be used to designate a no-value when no action i
|
|||
|
||||
There are three forms of expressions to specify composite values: arrays, lists and S-expressions (see Fig.~\ref{composite_expressions}).
|
||||
|
||||
\FloatBarrier
|
||||
|
||||
\subsection{Let Expressions}
|
||||
|
||||
TODO
|
||||
|
||||
\FloatBarrier
|
||||
|
||||
\subsection{Conditional Expressions}
|
||||
|
||||
\begin{figure}[h]
|
||||
|
|
|
|||
|
|
@ -4,11 +4,10 @@
|
|||
\chapter{Implementation-dependent Limitations}
|
||||
\label{sec:limitations}
|
||||
|
||||
The following limitations are in effect for \textsc{x86-32} platform implementation:
|
||||
The following limitations are in effect for \textsc{x86-64} platform implementation:
|
||||
|
||||
\begin{itemize}
|
||||
\item the range of representable integers is [-1073741824..1073741823] (31-bit signed in two-complement representation);
|
||||
\item the maximal length of array/string/number of S-expression parameters is 536870911 (29-bit unsigned integer);
|
||||
\item the minimal address space size is 2GB (garbage collector requirement);
|
||||
\item the maximal number of S-expression constructor name symbols taken into account is 5.
|
||||
\item the range of representable integers is \newline [-4611686018427387905..4611686018427387904] (63-bit signed in two-complement representation);
|
||||
\item the maximal length of array/string/number of S-expression parameters is 2305843009213693952 (61-bit unsigned integer);
|
||||
\item the maximal number of S-expression constructor name symbols taken into account is 9.
|
||||
\end{itemize}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@
|
|||
\chapter{Debugging Support}
|
||||
\label{sec:debugging}
|
||||
|
||||
Current implementation supports a minimalistic debugging with \textsc{GDB}~\cite{gdb}. In order to include the debug information into object files/executable these files
|
||||
Current implementation supports a minimalistic debugging with \textsc{GDB}~\cite{gdb} for the Linux target only.
|
||||
In order to include the debug information into object files/executable these files
|
||||
have to be compiled with the command-line option "\texttt{-g}" (see Section~\ref{sec:driver}).
|
||||
|
||||
The following debugging features are supported:
|
||||
|
|
@ -36,4 +37,5 @@ The following customized commands are available:
|
|||
\item "\texttt{pc }$i$", where "$i$" is an integer number. The commands prints a value of $i$-component of current closure.
|
||||
\end{itemize}
|
||||
|
||||
|
||||
For the MacOS target the debugging is supported with \textsc{LLDB}.
|
||||
But debugging features are not available.
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ is automatically created and closed within the call.}
|
|||
\descr{\lstinline|fun fprintf (file, fmt, ...)|}{Same as "\lstinline|printf|", but outputs to a given file. The file argument should be that acquired
|
||||
by \lstinline|fopen| function.}
|
||||
|
||||
\descr{\lstinline|fun regexp (str)|}{Compiles a string representation of a regular expression (as per GNULib's regexp~\cite{GNULib}) into
|
||||
\descr{\lstinline|fun regexp (str)|}{Compiles a string representation of a regular expression (as per POSIX-Extended Regular Expressions syntax) into
|
||||
an internal representation. The return value is a external pointer to the internal representation.}
|
||||
|
||||
\descr{\lstinline|fun regexpMatch (pattern, subj, pos)|}{Matches a string "\lstinline{subj}", starting from the position "\lstinline|pos|",
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@
|
|||
\newcommand{\descr}[2]{\smallskip{#1}\begin{itemize}[noitemsep,topsep=0pt]\item[]{#2}\end{itemize}}
|
||||
|
||||
\lstdefinelanguage{abslama}{
|
||||
keywords={skip,if,then,else,elif,fi,while,do,od,for,fun,public,import,
|
||||
keywords={skip,if,then,else,elif,fi,while,do,od,for,fun,public,import,let,in,
|
||||
box,val,var,case,of,esac,when,box,str,sexp,array,infix,infixl,infixr,at,before,after,true,false,eta,lazy,syntax,ref,ignore,elemRef},
|
||||
sensitive=true,
|
||||
basicstyle=\small,
|
||||
|
|
@ -109,7 +109,7 @@ morecomment=[l][\ttfamily]{--}
|
|||
}
|
||||
|
||||
\lstdefinelanguage{lama}{
|
||||
keywords={skip,if,then,else,elif,fi,while,do,od,for,fun,public,import,
|
||||
keywords={skip,if,then,else,elif,fi,while,do,od,for,fun,public,import,let,in,
|
||||
box,val,var,case,of,esac,when,box,str,sexp,array,infix,infixl,infixr,at,before,after,true,false,eta,lazy,syntax},
|
||||
sensitive=true,
|
||||
basicstyle=\small,
|
||||
|
|
@ -168,7 +168,7 @@ language=lama
|
|||
|
||||
{\huge\bfseries \lama Language Specification}\\[0.4cm] % Title of your document
|
||||
|
||||
{\textsc{Version 1.10}}
|
||||
{\textsc{Version 1.30}}
|
||||
|
||||
\HRule\\[1.5cm]
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue