Прошлые домены не функционирует! Используйте адрес
ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна.
Подробности случившегося. Мы призываем всех неравнодушных
помочь нам с восстановлением утраченного контента!
объектно-ориентированный
процедурный
функциональный
обобщённый,
параллельный,
мультипарадигмальный,
императивный,
компилируемый
Официальный сайт: https://dlang.org/
Русский сайт: http://dlang.ru/
Онлайн редактор: https://run.dlang.io/
Git: https://github.com/dlang
Примеры кода.
//////////////////////////////////
import std.stdio;
void main()
{
writeln ("Hello, world!");
}
//////////////////////////////////
//////////////////////////////////
import std.stdio;
import std.algorithm;
import std.array;
void main()
{
auto a = [2, 4, 1, 3];
// все три следующих варианта корректны и работают одинаково
writeln(a); // "классический" C-подобный вариант
a.writeln(); // функция вызывается так, как будто является методом объекта "a", хотя и не является таковой
a.writeln; // функцию без параметров можно вызывать без скобок
// это позволяет использовать цепочки вызовов, характерные для функциональных языков
int[] e = a.sort().reverse;
// многострочная цепочка вызовов также возможна
stdin
.byLine(KeepTerminator.yes)
.map!(a => a.idup)
.array
.sort;
}
//////////////////////////////////
//////////////////////////////////
Сортировка массива
import std.stdio, std.array, std.algorithm;
void main()
{
stdin
.byLineCopy
.array
.sort!((a, b) => a > b) // descending order
.each!writeln;
}
//////////////////////////////////
//////////////////////////////////
pure int sum (int first, int second)
{
return first + second;
}
int sum (int first, int second) pure // атрибуты можно указывать и после списка аргументов
{
return first + second;
}
pure — функциональная чистота
@safe — гарантия безопасной работы с памятью
nothrow — функция гарантированно не генерирует исключений
@nogc — гарантия того, что функция не содержит операций, выделяющих память на сборщике мусора
@property — атрибут метода класса, позволяющий избежать использования «наивных» геттеров-сеттеров
//////////////////////////////////
//////////////////////////////////
В D юнит-тесты являются частью языка, их можно использовать без подключения дополнительных библиотек или фреймворков.
import std.stdio;
int first (int[] arr) {
return arr[0];
}
unittest {
int[] arr1 = [1, 2, 3];
int[] arr2 = [10, 15, 20];
assert(first(arr1) == 1);
assert(first(arr2) == 10);
}
//////////////////////////////////
|/////////////////////////////////
Минимальный веб-сервер
#!/usr/bin/env dub
/+ dub.sdl:
dependency "vibe-d" version="~>0.8.0"
+/
void main()
{
import vibe.d;
listenHTTP(":8080", (req, res) {
res.writeBody("Hello, World: " ~ req.path);
});
runApplication();
}
|/////////////////////////////////