Need help with Ark?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

ArkScript-lang
406 Stars 41 Forks Mozilla Public License 2.0 1.9K Commits 34 Opened issues

Description

ArkScript is a small, fast, functional and scripting language for C++ projects

Services available

!
?

Need anything else?

Contributors list

ArkScript Latest version

Code size Downloads GitHub Workflow Status

Nota bene: the project is referred as "Ark" and as "ArkScript". The official public name is "ArkScript" since "Ark" is already being used by another language

Key features

ArkScript is * small: the compiler and the virtual machines fit under 8000 lines, but also small in terms of keywords (it has only 10)! * a scripting language: it's very easy to embed it in your application. The builtin construction is quite easy to understand, so adding your own functions to the virtual machine is effortless * portable: it produces a bytecode which is run by its virtual machine, the same way Java does it (with a smaller memory footprint) * a functional language: every parameter is passed by value, everything is immutable unless you use

mut
to specify your need of mutability * powerful: it can handle object-oriented programming in a very elegant way with its closures and explicit captures (see
examples/closures.ark
) * promoting functionalities before performances: expressiveness often brings more productivity, even though performances aren't left behind * easy to compile: it takes less than 200ms to compile and check a complex code with a lot of branches and sub-branches of 200 lines * a Lisp-like, but with fewer parentheses:
[...]
is expanded to
(list ...)
and
{}
to
(begin ...)
. More shorthands will come in the future * extensible: it is very easy to create a C++ module to use it in the language, adding functionalities

Also it has: * macros: if/else, values, and functions * a REPL with autocompletion and coloration * a growing standard library, composed of ArkScript code (under

lib/std/
) and C++ (under
lib/ext/
) * a lot of unit tests (but never enough), which are ran before every release to ensure everything work as intended * docker images to try the language without compiling it: * stable, images built after each release * nightly, image built after each commit

Examples

Fibonacci suite

(let fibo (fun (n)
    (if (< n 2)
        n
        (+ (fibo (- n 1)) (fibo (- n 2))))))

(print (fibo 28)) # display 317811

More or less game

(import "random.arkm")
(import "Math.ark")

(let number (mod (abs (random)) 10000))

(mut value 0) (mut tries 0) (mut continue true)

(while continue { (set value (toNumber (input "Input a numeric value: ")))

(if (&lt; value number)
    # then
    (print "More!")
    # else
    (if (= value number)
        # then
        {
            (print "Bingo!")
            (set continue false)
        }
        # else
        (print "Less!")))

(set tries (+ 1 tries))

})

(print "You won in " tries " tries")

More examples are available inside

examples/
.

Installation

You can either use docker:

docker pull arkscript/stable:latest

or use the most updated repo

docker pull arkscript/nightly:latest

or build the project with CMake and install it with CMake:

cmake --install build

Contributing

  • First, fork the repository
  • Then, clone your fork:
    git clone [email protected]:username/Ark.git
  • Create a branch for your feature:
    git checkout -b feat-my-awesome-idea
  • When you're done, push it to your fork and submit a pull request!

Don't know what to work on? No worries, we have a list of things to do :wink:

Related projects

We have other projects tightly related to ArkScript, which aren't necessarily C++ oriented: * the Request For Comments, where we discuss new features for the language * the standard library, written in ArkScript itself * the standard library modules, extending the capacities of the language, written in C++ * ArkDoc, a documentation generator à la doxygen, for ArkScript, written in Python 3 * our website written in HTML, CSS and JavaScript

Our beloved contributors

Full list here.

Coding guidelines for contributing

See C++ Coding guidelines if you want to contribute to ArkScript compiler / runtime.

Also, see ArkScript Coding guidelines for other files, written in ArkScript.

For performance reasons, some functions might be written in C++, in

include/Ark/Builtins/Builtins.hpp
and
src/Builtins/
.

Code structure

ArkScript code structure

Building

Dependencies

  • C++17
  • CMake >= 3.12
  • Visual Studio >= 11 (on Windows)
  • On macOS versions prior to 10.15,
    libc++
    lacks
    filesystem
    in the standard library.
    • Install a newer compiler using Homebrew:
      brew install gcc && brew link gcc
    • Pass compiler path to
      cmake
      in the build step:
      -DCMAKE_CXX_COMPILER=/usr/local/bin/g++-9

All the external libraries we use are already included in thirdparties.

Through CMake

Different CMake switches are available to customize the build: *

-DARK_BUILD_EXE
to generate an executable, defaults to Off, building a shared library only *
-DARK_ENABLE_SYSTEM
to enable
sys:exec
(execute shell commands without restrictions), defaults to On *
-DARK_PROFILER
to enable the coz profiler, defaults to Off *
-DARK_PROFILER_COUNT
to count every creation/copy/move of the internal value type, defaults to Off *
-DARK_NO_STDLIB
to avoid the installation of the ArkScript standard library *
-DARK_BUILD_MODULES
to trigger the modules build
# first, clone it
git clone --depth=50 --branch=dev https://github.com/ArkScript-lang/Ark.git
cd Ark
git submodule update --init --recursive
# building Ark
cmake . -Bbuild -DCMAKE_BUILD_TYPE=Release -DARK_BUILD_EXE=On
cmake --build build --config Release
# installing Ark (might need administrative privileges)
cmake --install build --config Release

Desired output of

arkscript --help
: ```bash DESCRIPTION ArkScript programming language

SYNOPSIS ark -h ark -v ark --dev-info ark -e ark -c [-d] ark -bcr -on ark -bcr [-(a|st|vt)] [-s ] ark -bcr [-cs] [-p ] ark [-d] [-L ] [-f(fac|no-fac)] [-f(ruv|no-ruv)]

OPTIONS -h, --help Display this message -v, --version Display ArkScript version and exit --dev-info Display development information and exit -e, --eval Evaluate ArkScript expression -c, --compile Compile the given program to bytecode, but do not run -d, --debug... Increase debug level (default: 0) -bcr, --bytecode-reader Launch the bytecode reader -on, --only-names Display only the bytecode segments names and sizes -a, --all Display all the bytecode segments (default) -st, --symbols Display only the symbols table -vt, --values Display only the values table -s, --slice Select a slice of instructions in the bytecode -cs, --code Display only the code segments -p, --page Set the bytecode reader code segment to display -L, --lib Set the location of the ArkScript standard library -f(fac|no-fac) Toggle function arity checks (default: ON) -f(ruv|no-ruv) Remove unused variables (default: ON)

LICENSE Mozilla Public License 2.0 ```

Performances

See https://github.com/ArkScript-lang/benchmarks

Games

You can find a snake created in ArkScript in the folder examples/games/snake (run it from there, otherwise it won't find the font and the sprites ; you won't need to install the SFML).

ArkSnake

Controls are the arrows (left, right, up and down), the game closes itself when you successfully collect the 3 apples.

The donators

Huge thanks to those people for their donations to support the project: * TheCountVEVO * llexto

Credits

This project was inspired by gameprogramingpatterns and ofan lisp.cpp

Copyright and Licence information

Copyright (c) 2019-2021 Alexandre Plateau. All rights reserved.

This ArkScript distribution contains no GNU GPL code, which means it can be used in proprietary projects.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.