The Developer Times — simplicity & usability

Язык программирования Rust с нуля [под Ubuntu x86]

Судя по анонсируем возможностям, язык программирования (ЯП) Rust будет вкуснейшим: лаконичность, ООП и функциональщина, ориентация на параллельность, статическая компиляция и так далее и тому подобное — ммм =)… Что же, опробуем блюдо от шеф повара, имя которому Mozilla Labs. :-)

Сначала установим необходимые библиотеки:

$ sudo apt-get install python3 make git g++ curl valgrind texinfo

Затем выкачаем LLVM:

$ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
$ cd llvm/projects
$ svn co -r131034 http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt

Собираем и инсталлируем LLVM (на время сборки и инсталляции уходим пить кофе, так как это длительный процесс):

$ cd llvm
$ ./configure --enable-optimized
$ make
$ sudo checkinstall

Скачиваем и собираем компилятор Rust (пока идёт сборка пьём чай):

$ git clone git://github.com/graydon/rust.git
$ cd rust
$ mkdir build
$ cd build
$ ../configure
$ make check

Настраиваем окружение для компилятора Rust:

$ export LD_LIBRARY_PATH=~/rust/build/rt:~/rust/build/rustllvm:~/rust/build/stage0/lib

Изучаем параметры запуска компилятора:

$ pwd
~/rust/build
$ stage0/rustc --help
usage: stage0/rustc [options] <input>

options:

    -h --help          display this message
    -v --version       print version info and exit

    -o <filename>      write output to <filename>
    --glue             generate glue.bc file
    --shared           compile a shared-library crate
    --pretty [type]    pretty-print the input instead of compiling
    --ls               list the symbols defined by a crate file
    -L <path>          add a directory to the library search path
    --noverify         suppress LLVM verification step (slight speedup)
    --depend           print dependencies, in makefile-rule form
    --parse-only       parse only; do not compile, assemble, or link
    -g                 produce debug info
    --OptLevel=        optimize with possible levels 0-3
    -O                 equivalent to --OptLevel=2
    -S                 compile only; do not assemble or link
    -c                 compile and assemble, but do not link
    --emit-llvm        produce an LLVM bitcode file
    --save-temps       write intermediate files in addition to normal output
    --stats            gather and report various compilation statistics
    --time-passes      time the individual phases of the compiler
    --time-llvm-passes time the individual phases of the LLVM backend
    --sysroot <path>   override the system root (default: rustc's directory)
    --no-typestate     don't run the typestate pass (unsafe!)

Например, на момент написания статьи, у меня был развёрнут компилятор следующей версии:

$ stage0/rustc --version
stage0/rustc prerelease (8655349 2011-06-29 15:39:30 -0700)

Теперича напишем первую программу на Rust, для этого создадим файл hello.rs со следующим содержимым:

fn main() {
  log "Hello World";
}

Скомпилируем наше первое приложение:

$ stage0/rustc hello.rs

На выходе получим бинарный файл hello.

Зададим переменную окружения RUST_LOG, которая расскажет, что для программы hello необходимо поддержать логирование в консоль:

$ export RUST_LOG=hello

И запустим наше приложение:

$ ./hello
rt: ---
rt: 1248:main:main:                   rust: Hello World

Ура, товарищи! Оно работает! Экспериментируйте, и у вас всё получиться. А вдруг, за ЯП Rust будущее разработки программного обеспечения?

Что дальше? А дальше, рекомендую ознакомиться с полезными ресурсами по Rust, там вы найдёте и спецификацию языка в формате PDF, и примеры, и фирменный склад для багов:

| tags:
9 заметок:
  1. drevlyanin это опубликовал(а)