]]> ]]>
Править | Обсудить | История

D

Дата создания:
1999
Создан под влиянием:
Парадигма:
Типизация:
Принятые расширения файлов:
.d
Реализации и версии (свернуть все | развернуть все):
Язык программирования

D — язык программирования общего назначения, предназначенный для прикладного и системного программирования. Он является языком высокого уровня, но сохраняет возможности прямого взаимодействия с программным интерфейсом операционной системы и с оборудованием. D предназначен для написания средних и крупных систем с миллионами строк исходного кода, для ведения командной разработки. Язык D имеет C-подобный синтаксис, он лёгок в изучении, предоставляет программисту многие удобные возможности, а также пригоден для проведения агрессивной оптимизации кода компилятором.

D был создан Уолтером Брайтом в 1999. Изначально он задумывался как улучшенный C++, но не стал одним из его клонов. Первая версия языка D1 реализовала поддержку императивного и объектно-ориентированного программирования, а также метапрограммирования, как и C++. Разработка второй версия, D2, началась в 2007 году; в ней акцент сместился на поддержку новых стилей, функционального и многопоточного. В 2010 году D2 стала стабильной версией языка, и именно ее обычно подразумевают под термином “D”.

Две основные библиотеки языка — Phobos (официальная) и Tango (разрабатываемая сообществом).

Элементы синтаксиса:

Комментарий до конца строки //
Комментарии, которые могут быть вложенными /* ... */
Комментарии, которые не могут быть вложенными /+ ... +/
Регистрозависимость да
Регулярное выражение идентификатора переменной [_a-zA-Z][_a-zA-Z0-9]*
Регулярное выражение идентификатора функции [_a-zA-Z][_a-zA-Z0-9]*
Присваивание значения переменной <varname> = <value>
Объявление переменной <type> <varname>
Объявление переменной с присваиванием значения <type> <varname> = <value>
Группировка выражений ( ... )
Блок { ... }
Равенство ==
Неравенство !=
Сравнение < > <= >=
Определение функции returntype f (type1 p1, type2 p2, ... ) { ... }
Вызов функции f(a, b, ...)
Вызов функции без параметров f()
Последовательность ;
Если - то if (condition) ...
Если - то - иначе if (condition) ... else ...
Цикл с предусловием while (condition) ...
Цикл с постусловием do ... while (!condition)
Цикл for - next для диапазона целых чисел с инкрементом на 1 for (int i = 1; i <= 10; i++) ...
Цикл for - next для диапазона целых чисел с декрементом на 1 for (int i = 10; i > 0; i--) ...

IDE/Редакторы:

Примеры:

Hello, World!:

Пример для версий GDC 0.24

Функция writef примерно эквивалентна printf в C++ и выводит на печать строку определенного формата.

module hello;

import std.stdio;

int main()
{
	writefln( "Hello, World!" );
	return 0;
}

Факториал:

Пример для версий GDC 0.24

Используется рекурсивное определение факториала.

module factorial;

import std.stdio;

ulong recursive(ulong x)
{
	return (x == 0 ? 1 : x * recursive( x - 1 ));
}

int main()
{
	for (int i = 0; i < 17; ++i)
	{
		writefln("%s! = %s", i, recursive(i));
	}
	return 0;
}

Факториал:

Пример для версий GDC 0.24

Используется итеративное определение факториала. Отметим использование цикла foreach, в котором переменная цикла принимает все значения от нижней границы включительно до верхней исключительно.

module factorial;

import std.stdio;

int main()
{	ulong fact = 1;
	foreach (ulong i; 1..18)
	{	writefln("%s! = %s", i-1, fact);
		fact *= i;
	}
	return 0;
}

Числа Фибоначчи:

Пример для версий GDC 0.24

Используется рекурсивное определение чисел Фибоначчи.

module fibonacci;

import std.stdio;

ulong recursive(ulong x)
{
	return x <= 2 ? 1 : recursive( x - 2 ) + recursive( x - 1 );
}

int main()
{
	for (uint i = 1; i < 17; i++)
	{
		writef("%s, ", recursive(i));
	}
	writefln("%s", "...");
	
	return 0;
}

Числа Фибоначчи:

Пример для версий GDC 0.24

Используется итеративное определение чисел Фибоначчи.

module fibonacci;

import std.stdio;

ulong iterative(ulong x)
{
    ulong prev1 = 1L;
    ulong prev2 = 1L;
    ulong result = x <= 2 ? 1L : 0L;
    
    for ( ulong i = 3; i <= x; ++i )
    {
        result = prev1 + prev2;
        prev1 = prev2;
        prev2 = result;
    }
    return result;

}

int main()
{
	for (uint i = 1; i < 17; i++)
	{
		writef("%s, ", iterative(i));
	}
	writefln("%s", "...");
	
	return 0;
}

Квадратное уравнение:

Пример для версий GDC 0.24
import std.c.stdio;
import std.stdio;
import std.math;

int main() {
    int A, B, C;
    writef("A = ");
    scanf("%d", & A);
    if (A==0)
    {   writefln("Not a quadratic equation.");
        return 0;
    }
    writef("B = ");
    scanf("%d", & B);
    writef("C = ");
    scanf("%d", & C);
    A*=2;
    float D = B*B-2*A*C;
    if (D == 0)
    {   writefln("x = %f\n",-B*1.0/A);
        return 0;
    }
    if (D>0)
        writefln("x1 = %f\nx2 = %f",(-B+sqrt(D))/A,(-B-sqrt(D))/A);
    else    
        writefln("x1 = (%f, %f)\nx2 = (%f, %f)",-B*1.0/A,sqrt(-D)/A,-B*1.0/A,-sqrt(-D)/A);
    return 0;
}

CamelCase:

Пример для версий D 2.009

Первая строка читает строку из стандартного потока ввода и переводит ее в нижний регистр. Вторая — заменяет все символы, не являющиеся буквами латинского алфавита, на пробелы (последний параметр — атрибуты замены, “g” означает, что замена выполняется во всей строке, а не только в первом подходящем месте). Третья — использует стандартную функцию capwords для того, чтобы убрать пробелы из начала и конца строки, заменить последовательности нескольких пробелов на один пробел и перевести первую букву каждого слова в верхний регистр. Наконец, все оставшиеся пробелы удаляются из строки, и результат выводится на печать.

import std.stdio;
import std.string;
import std.regexp;
 
void main() {
    string text = tolower(readln());
    text = sub(text,"[^a-z]"," ","g");
    text = capwords(text);
    text = sub(text," ","","g");
    writeln(text);
}

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам