Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alimpfard/citron
General purpose programming language (mainly for unix-like systems)
https://github.com/alimpfard/citron
c interpreter programming-language
Last synced: about 2 months ago
JSON representation
General purpose programming language (mainly for unix-like systems)
- Host: GitHub
- URL: https://github.com/alimpfard/citron
- Owner: alimpfard
- Created: 2017-12-28T15:29:20.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2023-08-12T18:52:34.000Z (over 1 year ago)
- Last Synced: 2024-08-03T18:14:57.514Z (5 months ago)
- Topics: c, interpreter, programming-language
- Language: C
- Homepage:
- Size: 35.1 MB
- Stars: 62
- Watchers: 3
- Forks: 5
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- AwesomeInterpreter - citron
README
## Citron :: A Programming Language for the crazy and people that like functions [![Build Status](https://travis-ci.com/alimpfard/citron.svg?branch=master)](https://travis-ci.com/alimpfard/citron) [![codecov](https://codecov.io/gh/alimpfard/citron/branch/master/graph/badge.svg)](https://codecov.io/gh/alimpfard/citron)
### Release
A binary release (x86_64 ELF) is available (see [Default Module Resolution](#default-module-resolution) for dynamic modules)You can also use the docker image (will probably be auto-built later...)
```sh
# to run an interpreter
$ docker run --rm -it anothertest/citron:latest
```### Build guide
required libraries:
* `libdl` -- for dynamic loading of modules
* `libbsd` -- for utility functions (compile without forLinux defined to get rid of this dependency)
* `libpcre` -- for regular expressions
* `libpthread` -- for threading support
* `libgc` -- for Garbage Collection
* `libsparsehash` -- Symbol storage
* `llvm` -- (>= 7) for inline asm (if you're on a braindead distro that adds version numbers to these, add an alias for `llvm-config`)build-time tools:
* cmake -- for libsocket#### for the braindead distros (don't kill me)
```sh
$ sudo apt install build-essential cmake libbsd-dev libpcre3-dev libgc-dev libsparsehash-dev llvm-8 llvm-8-dev
```#### Basic steps to build and install:
clone this repository
```sh
$ cd citron
$ git submodule update --init
$ make
$ sudo make install
```##### Note
If the binary is built without ffi, to launch the repl, you must pass these flags to it:
+ `--assume-non-tty --without-signals`i.e. the invocation would be `citron --assume-non-tty --without-signals`
### Basic language syntax:
All operations are done through sending and receiving messages between objects.`receiver message`
`receiver keyword: 'string' messages: 1, can be: 'chained', like so.`
there are some examples in the `examples` directory.
### Default Module Resolution
A default module resolution path is assigned at build-time, which normally points to the data directory of the install;
However, this can always be overridden by specifying an environment variable (`CITRON_EXT_PATH` by default).### Scratchpad fun
Assuming the Tcl extension is built and accessible (the binary build has it); a basic scratchpad can be accessed:
```sh
$ citron -m scratchpad
```
For a basic introduction, see [Scratchpad](https://alimpfard.github.io/citron_book/book/scratchpad.html) on the [citron-book](https://alimpfard.github.io/citron_book/book/)