Язык программирования D: различия между версиями
Содержимое удалено Содержимое добавлено
DannyS712 (обсуждение | вклад) м <source> -> <syntaxhighlight> (phab:T237267) |
|||
Строка 94:
C++ обычно требует, чтобы функции и классы были объявлены дважды — объявление происходит в заголовочных файлах (*.h), а описание происходит в файлах исходного кода (*.cpp). Это утомительный и подверженный ошибкам процесс. Очевидно, что программисту достаточно объявить функцию или класс лишь однажды, а компилятор должен впоследствии извлечь информацию об объявлении и сделать ее доступной для импортирования. Именно так работает язык программирования D, например:
<
class ABC
{
Строка 102:
int q;
</syntaxhighlight>
И более нет необходимости отдельного описания функций-членов, атрибутов и спецификаций внешних объявлений (<code>extern</code>), как в языке C++:
<
int ABC::func() { return 7; }
Строка 112:
extern int q;
</syntaxhighlight>
Заметка: Конечно же, в C++ тривиальные функции вроде { return 7; } тоже описаны внутри класса, но более сложные должны быть описаны отдельно. Вдобавок, если нужны опережающие ссылки (ссылки на класс или функцию, которые объявлены, но ещё не определены), то для этих объектов нужны прототипы (prototype). Следующий код не будет работать в C++:
<
class Foo
{
Строка 127:
int bar() { return 3; }
};
</syntaxhighlight>
Но эквивалентный код на языке D будет рабочим:
<
class Foo
{
Строка 141:
int bar() { return 3; }
};
</syntaxhighlight>
А то, будет ли функция встраиваемой (при компиляции вызов такой функции заменяется ее кодом) или нет, в языке D зависит от настроек оптимизатора.
Строка 157:
В языках C и C++ оператор typedef на самом деле просто создает синоним типа данных и никакого нового типа данных не объявляется. В языке D оператор typedef объявляет новый тип данных. Таким образом, код
<
typedef int handle;
</syntaxhighlight>
создает новый тип данных handle. К новому типу данных применяется проверка на соответствие типу данных, а также при перегрузке функций новый тип данных отличается от того типа данных, на основе которого он был создан. Например:
<
int foo(int i);
int foo(handle h);
</syntaxhighlight>
=== Документация ===
Строка 211:
* Массивы объявляются с использованием оператора <code>[]</code> после названия массива. Это ведет к использованию очень неуклюжего синтаксиса при объявлении, скажем, ссылки на массив:
<
int (*array)[3];
</syntaxhighlight>
В языке D оператор <code>[]</code> при объявлении массива ставится после типа данных:
<
int[3]* array; // объявляется ссылка на массив из трёх целых чисел
long[] func(int x); // объявляется функция, возвращающая массив длинных целых
</syntaxhighlight>
Этот код более легок для восприятия. В языке D можно использовать несколько видов массивов: указатели, статические массивы, динамические массивы и ассоциативные массивы.
Строка 275:
Многопоточное программирование становится всё более распространенным, поэтому в языке D реализованы базовые возможности для создания многопоточных приложений. Синхронизация может быть применена ко всему объекту или к отдельным его методам.
<
synchronized int func() { ... }
</syntaxhighlight>
Синхронизированные функции разрешают в один момент времени исполнять код функции только одному потоку.
|