aboutsummaryrefslogtreecommitdiff
path: root/documentation/book/the_lux_programming_language/chapter_1.md
blob: 9b670ef5c315399d76bb593f08b8371466888102 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Chapter 1: Getting Started

_Where you will learn how to set up a development environment for Lux._

---

Before any coding can happen, it is necessary to set-up everything you need to become a productive Lux programmer.

## Question #1: How do I write Lux code?

Text editor support is a fundamental thing for any language, and Lux already covers some of that.
The catch is that there's only support for Emacs at the moment.

The plugin is called [lux-mode](https://github.com/LuxLang/lux/tree/master/lux-mode).

The instructions for how to install it are at the link and it won't take much time.

**Note**: If you've already installed _lux-mode_ before while using a previous version of Lux, you should install it again, as the language has changed a lot between previous versions and v0.6.

## Question #2: How do I build Lux programs?

Lux uses a custom-made build tool named Aedifex which is configured using a declarative Lux-based syntax.
To install Aedifex, go to https://github.com/LuxLang/lux/tree/master/shell and download either `lux.bat` or `lux.sh` depending on whether you're on Windows or Linux/Mac.
Also download the `aedifex.jar` file, and place it (along with either of the scripts you downloaded) somewhere in your `PATH`.
Now, you'll have access to the `lux` command, which allows you to run Aedifex to build and test Lux projects.

## Question #3: How do I use Aedifex?

To find out, let's create a sample project that will have everything we need.

These are the steps:

1. Create a directory called `my_project`.
2. Create a new project file at `my_project/project.lux`.
3. Add this to the project file:

```
{#identity ["my.group" "my_project" "0.1.0-SNAPSHOT"]
 #repositories ["https://oss.sonatype.org/content/repositories/snapshots/"
                "https://oss.sonatype.org/service/local/staging/deploy/maven2/"]
 
 #dependencies [["com.github.luxlang" "stdlib" "0.6.0" "tar"]]
 #compiler ["com.github.luxlang" "lux-jvm" "0.6.0" "jar"]

 #program "main"}

## By default, Aedifex uses the "source" directory for finding your source-code.
## The file containing our program will be my_project/source/main.lux.

```

4. Create `my_project/source/main.lux` and add this code to it:

```
(.module:
  [library
   [lux #*
    [program (#+ program:)]
    ["." debug]
    [control
     ["." io]]]])

(program: args
  (io.io (debug.log! "Hello, world!")))

## As you can see, this is nothing more than a very simple "Hello, world!" program to test things out.
## Everything will be explained later in the rest of the book.
```

5. In your terminal, go to `my_project`, and execute `lux build`.

When it's done, you should see a message like this:

```
...
Compilation complete!
Duration: +15s26ms
[BUILD ENDED]
```

A directory named `target` will have been created, containing everything that was compiled, alongside an executable JAR file.

6. Run the program with this command: `java -jar target/jvm/program.jar`
7. Smile :)

## Question #4: Where can I find documentation for Lux?

A specially useful source of information is [the documentation for the standard library](https://luxlang.github.io/lux/).
You can also explore [the Lux repository on GitHub](https://github.com/LuxLang/lux) for more information.

## Question #5: Where do I talk about Lux?

The place to talk about Lux is at [the Lux forum](http://luxlang.freeforums.net/).

---

Now, we can proceed to the actual teaching of the language!

See you in [the next chapter](chapter_2.md)!