From 04b65516efde25b81b704793306212fc33774e0c Mon Sep 17 00:00:00 2001 From: MaiaVictor Date: Tue, 21 May 2019 19:03:01 -0300 Subject: [PATCH] Updated Home (markdown) --- Home.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Home.md b/Home.md index 2bc5169..1859627 100644 --- a/Home.md +++ b/Home.md @@ -12,7 +12,7 @@ def main: &("Sum from 0 from 65536 is:", sum) ``` -In order for all that to be possible, FMC makes some fundamental changes to the memory model behind the λ-calculus, allowing it to be compatible with an optimal functional runtime known as [Lamping's Abstract Algorithm](https://medium.com/@maiavictor/solving-the-mystery-behind-abstract-algorithms-magical-optimizations-144225164b07), which is based on a beautiful model of computation, [Interaction-Nets](https://pdfs.semanticscholar.org/1731/a6e49c6c2afda3e72256ba0afb34957377d3.pdf). The most important change is the fact its lambdas are affine: a lambda-bound variables can't be used more than once. At first, this sounds like an extreme limitation, but this is mitigated by FMC's boxed duplication system. It allows you to perform efficient deep copies of arbitrary values, as long as you respect certain structural restrictions. +In order for all that to be possible, FMC makes some fundamental changes to the memory model behind the λ-calculus, allowing it to be compatible with an optimal functional runtime known as [Lamping's Abstract Algorithm](https://medium.com/@maiavictor/solving-the-mystery-behind-abstract-algorithms-magical-optimizations-144225164b07), which is based on a beautiful model of computation, [Interaction-Nets](https://pdfs.semanticscholar.org/1731/a6e49c6c2afda3e72256ba0afb34957377d3.pdf). The most important change is the fact its lambdas are affine: a lambda-bound variables can't be used more than once. At first, this sounds like an extreme limitation, but this is mitigated by FMC's boxed duplication system. It allows you to perform efficient, lazy deep copies of arbitrary values, as long as you respect certain structural restrictions. Formality-Core is very similar to Rust. The main difference is that Rust mitigates the limitations of affine lambdas with a complex ownership system which includes borrows, lifetimes, mutable references. In FMC, you're instead encouraged to simply `.clone()` structures whenever you need to. Due to the underlying interaction-net runtime, those copies are performed lazily, granularly and in parallel. They're, thus, much less expensive than a Rust-like `.clone()` (and often free).