2020-05-15 13:41:26 +03:00
|
|
|
---
|
|
|
|
layout: section-summary
|
|
|
|
title: Enso's Syntax
|
|
|
|
category: syntax
|
|
|
|
tags: [syntax, readme]
|
|
|
|
order: 0
|
|
|
|
---
|
|
|
|
|
|
|
|
# Enso's Syntax
|
2020-07-21 15:59:40 +03:00
|
|
|
|
2020-05-15 13:41:26 +03:00
|
|
|
When working with a programming language, the syntax is the first thing that a
|
|
|
|
user encounters. This makes it _utterly integral_ to how users experience the
|
|
|
|
language, and, in the case of Enso, the tool as a whole.
|
|
|
|
|
|
|
|
Enso is a truly novel programming language in that it doesn't have _one_ syntax,
|
|
|
|
but instead has two. These syntaxes are dual: visual and textual. Both are
|
|
|
|
first-class, and are truly equivalent ways to represent and manipulate the
|
|
|
|
program. To that end, the design of the language's syntax requires careful
|
|
|
|
consideration, and this document attempts to explain both the _what_, of Enso's
|
|
|
|
syntax, but also the _why_.
|
|
|
|
|
|
|
|
Furthermore, Enso is novel in the fact that it does not enforce any artificial
|
|
|
|
restriction between the syntaxes of its type and value levels: they are one and
|
|
|
|
the same. This enables a staggering level of uniformity when programming in the
|
|
|
|
language, allowing arbitrary computations on types, because in a
|
|
|
|
dependently-typed world, they are just values.
|
|
|
|
|
|
|
|
The various components of Enso's syntax are described below:
|
|
|
|
|
|
|
|
- [**Encoding:**](./encoding.md) The source encoding of Enso files.
|
|
|
|
- [**Naming:**](./naming.md) The naming of Enso language constructs.
|
|
|
|
- [**Layout Rules:**](./layout.md) The layout rules for Enso code.
|
2020-07-21 15:59:40 +03:00
|
|
|
- [**Imports and Exports:**](./imports.md) The syntax and rules for importing
|
2020-06-16 15:52:11 +03:00
|
|
|
modules and exporting module functions.
|
2020-05-15 13:41:26 +03:00
|
|
|
- [**Literals:**](./literals.md) The syntax for Enso literals.
|
|
|
|
- [**Assignment:**](./assignment.md) The syntax for various forms of assignment
|
|
|
|
expression in Enso.
|
|
|
|
- [**Types and Type Signatures:**](./types.md) The syntax for writing types and
|
|
|
|
type signatures in Enso.
|
|
|
|
- [**Macros:**](./macros.md) The syntax for writing macros in Enso.
|
|
|
|
- [**Top-Level Syntax:**](./top-level.md) The syntax at the top-level of an Enso
|
|
|
|
file.
|
|
|
|
- [**Functions:**](./functions.md) The syntax for writing functions in Enso.
|
2020-05-18 16:03:27 +03:00
|
|
|
- [**Function Arguments:**](./function-arguments.md) The syntax for function
|
2020-05-15 13:41:26 +03:00
|
|
|
arguments in Enso.
|
|
|
|
- [**Field Access:**](./projections.md) The syntax for working with fields of
|
|
|
|
data types in Enso.
|
|
|
|
- [**Comments:**](./comments.md) The syntax for writing comments in Enso.
|