# Flang
A stack-based programming language for teaching basic concepts.
---
Flang is an overly-simple programming language.
It's intended for teaching, but isn't quite complete yet.
For now, this is the feature list.
- [X] Number type: Int
- [X] Number type: Float
- [ ] Number type: Rational
- [X] Function type
- [X] String type (UTF-8)
- [X] Human-readable error messages, designed for beginners.
- [-] As much parse-time safety as is possible.
- [ ] Loops? (This may not happen, as we can push functions to the stack)
- [ ] Conditionals
- [ ] Swap function, to rearrange the stack
- [ ] Slice function, to more easily rearrange large parts of the stack
- [X] Print function, including using special characters inside strings
- [X] Print/literal function, not including using special characters inside strings
- [X] Print/stack function, for displaying the stack
- [X] Exit function
- [X] Reset function, to set the stack back to nothing
- [X] Reverse function, to rearrange the stack
- [X] Push function, for placing typed objects on the stack
- [X] Add function, for mathematics or combining strings
- [X] Take function, for mathematics
- [X] Times function, for mathematics
- [X] Divide function, for mathematics
- [X] Pop function, for executing functions on the stack
- [X] Peek function, for executing functions on the stack
- [X] Drop function, for not executing functions on the stack
- [X] Read-Eval-Print-Loop
- [X] Ability to execute a file
- [X] Comments. Can be nested.
- [ ] User functions.
- [ ] String Library for working with strings.
- [ ] Help function
- [ ] Interactive Tutorial function
- [ ] Documentation
## Decisions to make:
- [ ] Case insensitivity. Should Flang be case-sensitive or not?
- [X] Indexing. Flang will be 1-indexed, to make new adoption easier.
- [ ] User Functions. What kind of shape should these take? How could they be written?
- [ ] Hash Table Type. Do we need it? How would it be used?
- [ ] Mini-Stack Type. Do we need it? How would it be used? (Think Linked-List)
- [ ] A library of tools for strings is needed. But, it needs to be defined.
- [ ] Semantic Versioning. What API will be covered by semver?
---
## Install
Don't.
This is alpha-software, and breaking is going to happen a lot.
The documentation that is vitally needed, isn't anywhere near ready for the public.
Right... So, if you're insisting on ignoring all that:
The latest release can be installed via pip:
pip install flang
Or, you can install from the git repository to get all the very latest changes:
git clone https://gitlab.com/shakna-israel/flang.git
cd flang
python3 setup.py install
---
## Usage
You can explore Flang in two ways:
If you have a file filled with Flang commands:
flang filename
Or, you can enter the interactive Read-Evaluate-Print Loop:
flang repl