<commit_before>![Image Alt](https://raw.githubusercontent.com/fractalide/fractalide/master/doc/images/fractalide.png)
# Fractalide
 _**"A shell for today, for tomorrow, for forever." - Lain**_

 [![LICENSE](https://img.shields.io/badge/license-MPLv2-blue.svg)](LICENSE)
 [![Join the chat at https://gitter.im/fractalide](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/fractalide?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

## Welcome

**Fractalide is a programming platform with Nix, the functional package manager, at its heart. All presented via a simple shell, with familiar syntax, called Lain**.

The canonical source of this project is hosted on [GitLab](https://gitlab.com/fractalide/fractalide), and is the preferred place for contributions, however if you do not wish to use GitLab, feel free to make issues, on the mirror. However pull requests will only be accepted on GitLab, to make it easy to maintain.

## Problem 1
Devops today leans towards distributing software via hyped container technologies, that, in most cases, bundle messy code.

## Solution
The Lain shell makes use of [Nix](http://nixos.org/nix) as its package manager, which properly solves an entire class of errors, that named "dependency hell".

## Problem 2
Applications today do not compose very well, nor pipe data from one application to another easily.

## Solution
Lain comes with its own actor oriented programming language called Flowscript, implemented in Rust. Flowscript makes the concept of data flowing through a system to be a first class citizen, thus easily manipulable by the programmer/designer.
At a top level, component hierarchies are exposed to Lain, who knows how to compose and pipe data between components. The goal is to allow for piping and manipulation of structured data, much like PowerShell does.

example:

```
lain > cat text.json | filter name date | print
```

## Problem 3
Security and business interests rarely align these days.

## Solution
##### Security
Fractalide's components are very strict about what data they accept. Strongly inspired by the [work](http://langsec.org) of <NAME>, <NAME>, <NAME>. Fractalide makes use of the [Nom](https://github.com/Geal/nom) parser combinator, implemented by <NAME>, and [Capnproto](https://capnproto.org/) contracts extensively. Of course, [Rust](https://www.rust-lang.org/), a high level systems language helps us prevent an entire class of buffer overflow exploits, without sacrificing speed for safety.
##### Business
Flowscript allows for a separation of business logic and component implementation logic. Thus programmers can specialize on easily specifiable components and the suits can design and easily make changes to their business logic, without the need of programmer intervention.

### Layers
- [x] Actor language built on Rust; components are implemented in Rust, message passing via Capnproto contracts.
- [ ] A shell called Lain, she controls her little universe.
- [ ] Whatever you want to build, this is a [living system](https://hintjens.gitbooks.io/social-architecture/content/chapter6.html).

### Setup
Fractalide supports whatever platform [Nix](http://nixos.org/nix) runs on. Quite possibly your package manager already has the `nix` package, please check first.
For the most efficient way forward, ensure you're using [NixOS](http://nixos.org), The Purely Functional Linux Distribution.
```
$ git clone https://gitlab.com/fractalide/fractalide.git
$ cd fractalide
$ nix-build
$ ./result/bin/lain<commit_msg>Problem: description not clear enough<commit_after>![Image Alt](https://raw.githubusercontent.com/fractalide/fractalide/master/doc/images/fractalide.png)
# Fractalide
 _**"A shell for today, for tomorrow, for forever." - Lain**_

 [![LICENSE](https://img.shields.io/badge/license-MPLv2-blue.svg)](LICENSE)
 [![Join the chat at https://gitter.im/fractalide](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/fractalide?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

## Welcome

**Fractalide is a rolling release programming platform, with the aim of making software distribution cheaper and easier, yet forcing the programmer to implement high quality, modular, message passing components; all presented via familiar shell, called Lain.**

The canonical source of this project is hosted on [GitLab](https://gitlab.com/fractalide/fractalide), and is the preferred place for contributions, however if you do not wish to use GitLab, feel free to make issues, on the mirror. However pull requests will only be accepted on GitLab, to make it easy to maintain.

## Problem 1
Devops today leans towards distributing software via hyped container technologies, that, in most cases, bundle messy code.

## Solution
The Lain shell makes use of [Nix](http://nixos.org/nix) as its package manager, which properly solves an entire class of errors, that named "dependency hell".

## Problem 2
Applications today do not compose very well, nor pipe data from one application to another easily.

## Solution
Lain comes with its own actor oriented dataflow programming language (Flow-based programming) called Flowscript, implemented in Rust. Flowscript makes the concept of data flowing through a system to be a first class citizen, thus easily manipulable by the programmer/designer.
At a top level, component hierarchies are exposed to Lain (the shell), they know how to compose and pipe data between components. The goal is to allow users to easily transition between a fully expressive graph language and the shell type environment, thus giving a strong ability to compose components together is a fast and effective manner.

## Problem 3
Security and business interests rarely align these days.

## Solution
##### Security
Fractalide's components are very strict about what data they accept. Strongly inspired by the [work](http://langsec.org) of <NAME>, <NAME>, <NAME>. Fractalide makes use of the [Nom](https://github.com/Geal/nom) parser combinator, implemented by <NAME>, and [Capnproto](https://capnproto.org/) contracts extensively. Of course, [Rust](https://www.rust-lang.org/), a high level systems language helps us prevent an entire class of buffer overflow exploits, without sacrificing speed for safety.
##### Business
Flowscript allows for a separation of business logic and component implementation logic. Thus programmers can specialize on easily specifiable components and the suits can design and easily make changes to their business logic, without the need of programmer intervention.

### Layers
- [x] Actor language built on Rust; components are implemented in Rust, message passing via Capnproto contracts.
- [ ] A shell called Lain, she controls her little universe.
- [ ] Whatever you want to build, this is a [living system](https://hintjens.gitbooks.io/social-architecture/content/chapter6.html).

### Setup
Fractalide supports whatever platform [Nix](http://nixos.org/nix) runs on. Quite possibly your package manager already has the `nix` package, please check first.
For the most efficient way forward, ensure you're using [NixOS](http://nixos.org), The Purely Functional Linux Distribution.
```
$ git clone https://gitlab.com/fractalide/fractalide.git
$ cd fractalide
$ nix-build
$ ./result/bin/lain
{'fraction_non_alphanumeric': 0.08746915272826981, 'fraction_numerical': 0.0019193857965451055, 'mean_word_length': 5.069051580698836, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 12, 'https://': 22, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3884779', 'n_tokens_mistral': 1996, 'n_tokens_neox': 1880, 'n_words': 876}