Знакомство с языком D

This commit is contained in:
Alexander Zhirov 2023-01-21 19:59:09 +03:00
parent 5b83f89224
commit ea3d7c4485
2 changed files with 57 additions and 3 deletions

View File

@ -69,5 +69,5 @@ D это язык, который последовательно стара
*Андрей Александреску*<br> *Андрей Александреску*<br>
Воскресенье 2 мая 2010 г. Воскресенье 2 мая 2010 г.
[^1]: Афоризм американского комика Граучо Маркса. Прим. ред. [^1]: Афоризм американского комика Граучо Маркса. *Прим. ред.*
[^2]: Название компилятора языка D dmd расшифровывается как Digital Mars D. Digital Mars организация, которая занимается разработкой этого компилятора. Прим. пер. [^2]: Название компилятора языка D `dmd` расшифровывается как Digital Mars D. Digital Mars организация, которая занимается разработкой этого компилятора. *Прим. пер.*

View File

@ -1,6 +1,5 @@
# Знакомство с языком D # Знакомство с языком D
- [1. Знакомство с языком D]()
- [1.1. Числа и выражения]() - [1.1. Числа и выражения]()
- [1.2. Инструкции]() - [1.2. Инструкции]()
- [1.3. Основы работы с функциями]() - [1.3. Основы работы с функциями]()
@ -12,3 +11,58 @@
- [1.6. Интерфейсы и классы]() - [1.6. Интерфейсы и классы]()
- [1.6.1. Больше статистики. Наследование]() - [1.6.1. Больше статистики. Наследование]()
- [1.7. Значения против ссылок]() - [1.7. Значения против ссылок]()
Вы ведь знаете, с чего обычно начинают, так что без лишних слов:
```d
import std.stdio;
void main()
{
writeln("Hello, world!");
}
```
В зависимости от того, какие еще языки вы знаете, у вас может возникнуть ощущение дежавю, чувство легкой благодарности за простоту, а может, и легкого разочарования из-за того, что D не пошел по стопам скриптовых языков, разрешающих использовать «корневые» (top-level) инструкции. (Такие инструкции побуждают вводить глобальные переменные, которые по мере роста программы превращаются в головную боль; на самом деле, D позволяет исполнять код не только внутри, но и вне функции `main`, хотя и более организованно.) Самые въедливые будут рады узнать, что `void main` это эквивалент функции `int main`, возвращающей операционной системе «успех» (код 0) при успешном окончании ее выполнения.
Но не будем забегать вперед. Традиционная программа типа «Hello, world!» («Здравствуй, мир!») вовсе не повод для обсуждения возможностей языка. Она здесь для того, чтобы помочь вам начать писать и запускать программы на этом языке. Если у вас нет никакой IDE, которая выполнит за вас сборку программы, то самый простой способ это командная строка. Напечатав приведенный код и сохранив его в файле с именем, скажем, `hello.d`, запустите консоль и введите следующие команды:
```sh
$ dmd hello.d
$ ./hello
Hello, world!
$ _
```
Знаком `$` обозначено приглашение консоли вашей ОС (это может быть `c:\Путь\К\Папке>` в Windows или `/путь/к/каталогу%` в системах семейства UNIX, таких как OSX, Linux, Cygwin). Применив пару известных вам приемов систем-фу, вы сможете добиться автоматической компиляции программы при ее запуске. Пользователи Windows, вероятно, захотят привязать программу `rdmd.exe` (которая устанавливается вместе с компилятором D) к команде Выполнить. UNIX-подобные системы поддерживают запуск скриптов в нотации «shebang»[^1]. D понимает такой синтаксис: добавление строки
```sh
#!/usr/bin/rdmd
```
в самое начало программы в файле `hello.d` позволяет компилировать ее автоматически перед исполнением. Внеся это изменение, просто введите в командной строке:
```sh
$ chmod u+x hello.d
$ ./hello.d
Hello, world!
$ _
```
(`chmod` нужно ввести только один раз).
Для всех операционных систем справедливо следующее: программа `rdmd` достаточно «умна», для того чтобы кэшировать сгенерированное приложение. Так что фактически компиляция выполняется только после изменения исходного кода программы, а не при каждом запуске. Эта особенность в сочетании с высокой скоростью самого компилятора позволяет экономить время на запусках программы между внесением в нее изменений, что одинаково полезно как при разработке больших систем, так и при написании маленьких скриптов.
Программа `hello.d` начинается с инструкции
```sh
import std.stdio;
```
которая предписывает компилятору найти модуль с именем `std.stdio` и сделать его символы доступными для использования. Инструкция `import` напоминает препроцессорную директиву `#include`, которую можно встретить в синтаксисе C и С++, но семантически она ближе команде `import` языка Python: никакой вставки текста подключаемого модуля в текст основной программы не происходит выполняется только простое расширение таблицы символов. Если повторно применить инструкцию `import` к тому же файлу, ничего не произойдет.
По давней традиции C программа на D представляет собой набор определений, рассредоточенный по множеству файлов. В числе прочего эти определения могут обозначать типы, функции, данные. В нашей первой программе определена функция `main`. Она не принимает никаких аргументов и ничего не возвращает, что, по сути, и означает слово void. При выполнении `main` программа вызывает функцию `writeln` (разумеется, предусмотрительно определенную в модуле `std.stdio`), передавая ей строковую константу в качестве аргумента. Суффикс `ln` указывает на то, что `writeln` добавляет к выводимому тексту знак перевода строки.
Следующие разделы это стремительная поездка по Дибургу. Небольшие показательные программы дают общее представление о языке. Основная цель повествования на данном этапе обрисовать общую картину, а не дать ряд педантичных определений. Позже все аспекты языка будут рассмотрены с должным вниманием в деталях.
[^1]: «Shebang» (от shell bang: shell консоль, bang восклицательный знак), или «shabang» (# sharp) обозначение пути к компилятору или интерпретатору в виде `#!/путь/к/программе`. *Прим. пер.*