Skip to content
/ slap Public

πŸ– A dynamically- and strongly-typed, object-oriented programming language

License

Notifications You must be signed in to change notification settings

bichanna/slap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

6fdffa4 Β· Oct 17, 2022
Mar 20, 2022
Apr 12, 2022
Apr 8, 2022
Mar 20, 2022
Apr 11, 2022
Mar 22, 2022
Apr 14, 2022
Mar 21, 2022
Mar 23, 2022
Feb 17, 2022
Oct 17, 2022
Mar 25, 2022
Feb 22, 2022
Mar 13, 2022

Repository files navigation

The SLAP Programming Language

| Doc |

Ubuntu macOS Windows

WARNING!! THIS LANGUAGE IS IN DEVELOPMENT (AND FOR LEARNING PURPOSES). ANYTHING CAN CHANGE AT ANY MOMENT.

πŸ– SLAP stands for "SLow And Powerless." And I hope to make it "Powerful" someday.

SLAP is a dynamically- and strongly-typed, object-oriented programming language. Its syntax is a member of the C family with a bit of difference.

Example

As of March 2022, you can write pretty decent, small programs in SLAP.

Note: The SLAP-to-JS transpiler is in progress (see compiler branch).

SLAP-to-JS Compiler Example
Screen.Recording.2022-04-07.at.11.41.19.PM.mov

Installation

On Linux/macOS, you may be able to run the following commands to install SLAP.

$ git clone https://github.com/bichanna/slap.git
$ cd slap
$ chmod +x ./build.sh 
$ ./build.sh         # The SLAP Vim highlighter automatically gets installed

For Windows, I haven't written bat version of build.sh, so you have to manually compile the source code.

$ nimble build --multimethods:on -d:release

Then, mark it as an executable file if necessary, and try running slap --version.

$ slap --version
SLAP 0.0.3

You may want to test current SLAP you just built before running your programs.

$ nimble test

TODO

Note: If you have a feature request, please open an issue.

Main

  • Basic Data Types
    • Integer
    • Float
    • String
    • Boolean
    • Null
    • List
    • Map
  • Basic Arithmetics
  • Variables
  • If Statements
    • elif
    • else
  • While Loops
  • For Loops
    • Break
    • Continue
    • "Enhanced" for loop (in the form of forEach)
  • Try-except Blocks
  • Functions
    • Lambdas (anonymous functions)
    • Default Arguments
    • Rest Parameters
  • Standard Library
    • Std
    • String
    • OS
    • I/O interfaces
    • Math
    • Networking
  • Classes
    • Class Methods
    • Inheritance
    • Abstract Class (Interface)
  • Import
  • Concurrency
  • Virtual Machine Compiler

Others

  • Assignment Shorthands (e.g, +=, *=)
  • String Interpolation
  • Optional Type Annotations
  • Multi-line Comments
  • Vim Highlighter
  • VSCode Highlighter
  • Transpiler (to JavaScript)
  • Newline As Statement Separator

Contribution

Bug reports and contributions are always welcome :)
Please be sure to add test files if you want to add new features (see tests directory for more info).

Credits

I learned a lot from