Compare commits

..

1 Commits

Author SHA1 Message Date
Johan B.W. de Vries
2039d11e19 Some repo cleanup 2022-08-20 18:14:28 +02:00
3 changed files with 22 additions and 54 deletions

View File

@ -6,39 +6,11 @@ Elevator pitch
A programming language, that looks like Python, handles like Haskell,
and compiles directly to WebAssembly.
Project state
-------------
This is a hobby project for now. Use at your own risk.
How to run
----------
You should only need make and python3. Currently, we're working with python3.8,
since we're using the python ast parser, it might not work on other versions.
To run the examples:
```sh
make examples
```
To run the tests:
```sh
make test
```
To run the linting and type checking:
```sh
make lint typecheck
```
To compile a Phasm file:
```sh
python3.8 -m phasm source.py output.wat
```
Additional required tools
-------------------------
At the moment, the compiler outputs WebAssembly text format. To actually
get a binary, you will need the wat2wasm tool[6].
Name origin
-----------
- p from python
- ha from Haskell
- asm from WebAssembly
Example
-------
@ -66,28 +38,26 @@ Gotcha's
- When importing and exporting unsigned values to WebAssembly, they will become
signed, as WebAssembly has no native unsigned type. You may need to cast
or reinterpret them.
- Currently, Phasm files have the .py extension, which helps with syntax
highlighting, that might change in the future.
Contributing
------------
At this time, we're mostly looking for use cases for WebAssembly, other than to
At this time, I'm mostly looking for use cases for WebAssembly, other than to
compile existing C code and running them in the browser. The goal of WebAssembly
is to enable high-performance applications on web pages[5]. Though most people
seem to use it to have existing code run in the browser.
If you have a situation where WebAssembly would be useful for it's speed, we're
If you have a situation where WebAssembly would be useful for it's speed, I'm
interested to see what you want to use it for.
Also, if you are trying out Phasm, and you're running into a limitation, we're
Also, if you are trying out Phasm, and you're running into a limitation, I'm
interested in a minimal test case that shows what you want to achieve and how
Phasm currently fails you.
Name origin
-----------
- p from python
- ha from Haskell
- asm from WebAssembly
Additional required tools
-------------------------
At the moment, the compiler outputs WebAssembly text format. To actually
get a binary, you will need the wat2wasm tool[6].
.
References
----------

View File

@ -4,5 +4,3 @@
- Implement a proper type matching / checking system
- Check if we can use DataView in the Javascript examples, e.g. with setUint32
- Storing u8 in memory still claims 32 bits (since that's what you need in local variables). However, using load8_u / loadu_s we can optimize this.
- Implement a FizzBuzz example
- Also, check the codes for FIXME and TODO

View File

@ -1,11 +1,11 @@
def helper(n: u64, a: u64, b: u64) -> u64:
def helper(n: i64, a: i64, b: i64) -> i64:
if n < 1:
return a + b
return helper(n - 1, a + b, a)
@exported
def fib(n: u64) -> u64:
def fib(n: i64) -> i64:
if n == 0:
return 0
@ -15,5 +15,5 @@ def fib(n: u64) -> u64:
return helper(n - 1, 0, 1)
@exported
def testEntry() -> u64:
def testEntry() -> i64:
return fib(40)