Этого треда уже нет.
Это копия, сохраненная 5 июня 2021 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
DProgrammingLanguagelogo.svg.png301 Кб, 1200x910
Тред самого совершенного и универсального языка D. /dlang/ 1831629 В конец треда | Веб
Язык
объектно-ориентированный
процедурный
функциональный
обобщённый,
параллельный,
мультипарадигмальный,
императивный,
компилируемый


Официальный сайт: 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();
}
|/////////////////////////////////
2 1831635
>>1831629 (OP)
Это далеко не первая попытка создать D-тред, и ни одна не взлетела.
3 1831699
>>1831629 (OP)

>a.writeln; // функцию без параметров можно вызывать без скобок


Самая ужасная вещь, которую только можно сделать в ЯП.
4 1831711
>>1831629 (OP)

>языка D


Dедуля?
5 1831712
>>1831699
Мне понравилось, как в Perl. Там можно вообще не ставить скобки вне зависимости от количества аргументов.
6 1831727
>>1831712
Как мне сохранить указатель на функцию в переменную, если следующая конструкция вызывает функцию?
var a = func;
7 1831736
>>1831727
my $a = \&func;
&$a(); // первый способ вызвать
$a->(); // второй
&$a; // третий
8 1831751
>>1831736
Какая-то еботня + куча неочевидных моментов.
9 1831762
>>1831751
Ну да, одного взгляда на этот пример достаточно, чтобы понять, почему Perl умер. И это ещё простой пример, вот когда передаёшь ссылку на массив хешей (местные словари) в функцию, начинается треш со всякими\%$$a.
10 1832065
>>1831699
И в чем проблема?

>>1831751
В плюсах тоже есть неочевидные моменты.
11 1832214
>>1832065

> И в чем проблема?


Очень хуевая читаемость кода.

> В плюсах тоже есть неочевидные моменты.


Тем не менее плюсы востребованы всегда и везде. А d как был студенческим поделием, так им и останется.
yoba.png5 Кб, 129x129
sage 12 1832335
Что мешает дописать pure к нечистой функции?
13 1832337
>>1832335
Я по приколу попробовал запустить в онлайн-компиляторе, и похоже, что внешние переменные из такой функции нельзя изменять, и нечистые функции нельзя вызвать, будет ошибка компиляции.
14 1832352
>>1832065

>И в чем проблема?


Если я хочу передать ее как функцию высшего порядка в другую функцию, то как сказать об этом компилятору?
15 1832353
>>1832352
ее в функцию высшего порядка
фикс
16 1832356
>>1832352
Раз уж сабж позиционирует себя как продолжателя C/C++, то здесь наверняка вместо "функций высшего порядка" передаётся указатель на функцию: func1(&func2).
17 1832382
>>1832352
import std.stdio;
int[] map(scope int delegate(int) f, int[] a){
auto b = new int[a.length];
foreach(i,x;a) b = f(x);
return b;
}
void main(){
int a = 2;
writeln(map(x=>ax, [1,2,3]));
}
//////////////////////////////
import std.stdio;
T[] map(T,S)(scope T delegate(S) f, S[] a){
auto b = new T[a.length];
foreach(i,x;a) b = f(x);
return b;
}
void main(){
int a = 2;
writeln(map((int x)=>a
x, [1,2,3]));
writeln(map((double x)=>a*x, [1.6,2.7,3.8]));
}
18 1832513
>>1832065

>В плюсах тоже есть неочевидные моменты.


Например?
19 1832935
>>1832513
Ты щас серьезно?

> cout << 5 / 2.5 << endl;


Что будет в консоли?
20 1832941
>>1832513
Аргументы равнозначны.
void print(int numbers[]);
void print(int *numbers);

Хотя по логике должно работать что то одно что бы не запутывать программиста когда передается массив.
21 1832948
>>1832935
2. В чем неочевидность?

>>1832941
Это уже особенность того, как кресты работают с памятью, для них массив = указатель на первый элемент. Да и вряд ли кто-то пишет как в первой строке.
22 1833033
>>1832941

> Хотя по логике должно работать что то одно что бы не запутывать программиста когда передается массив.


void print(std::vector<int> &numbers);
Остальное - депрекейтед.
23 1834922
>>1831629 (OP)
Как с работой без gc? Всё так же стандартная библиотека от gc сильно зависит? Пробовал кто-то микроконтроллеры прогать на D?
24 1835570
>>1832513
Нельзя использовать strcpy и strncpy.
25 1835592
>>1835570
Почему нельзя? Я вот смог: https://gcc.godbolt.org/z/TTEWTc
26 1848960
>>1831629 (OP)
Почему не взлетает?
На первый взгляд гораздо приятнее го/раста - по сути, единственных конкурентов в этом поле.
27 1849020
>>1848960
Потому что миру не нужно два C++.
28 1850332
>>1848960
За ним нет крупной компании, за го Гугол, за растом Мозилла. Да и го ближе к питону, чем к крестам, как по мне. Отсюда вытекает отсутствие какого-либо продвижения в массы.

За крестами и питоном как бы тоже нет крупных компаний, но на них написано много софта, что создаёт спрос на специалистов.
29 1854741
>>1848960
Да потому что сообщество мудацкое: вместо того, чтобы объединить усилия, решили поиграть в "лебедь, рак и щука". Пока они коноёбились с тремя вечно сырыми компиляторами и двумя стандартными библиотеками, кресты слизали их фичи и выпустили новый стандарт. Сначала один, потом другой. К тому времени все, кого проект бы мог заинтересовать, уже поняли, что это бесконечный долгострой. А затем уже и раст с го вышли.
30 1854742
>>1848960
А сейчас кому он нужен?
31 1854748
>>1854741

> го


Go - не альтернатива крестам. Вообще. Совсем. Это узкопрофильный серверный язык, и то, что он компилится в нейтив, ещё ничего не значит.
В остальном согласен.
32 1854970
>>1854748

>Go - не альтернатива крестам.


Зато ди мог бы быть альтернативой го. А о крестах и речи не было.
33 1854981
>>1854970
Ну так ди и раст - это убийцы именно крестов.
34 1855010
>>1831712

>понравилось, как в Perl


Да вы, батенька говноед. Я свою карьеру начинал в шараге, которая перлом активно пользовалась. Как вспомню, так вздрогну.
35 1855011
>>1854981
Убийца крестов только один — Страуструп
36 1855014
>>1855010
Да просто подход необычен с точки зрения более современных языков. Люблю экзотику. В хаскелле и лиспе вон тоже можно, но там свои причины для этого.
37 1855024
>>1835592
Поскольку функция не проверяет длину строки и размер буфера, она не должна использоваться для работы с данными, размер которых неизвестен, во избежание переполнения буфера dst.

Вместо strcpy рекомендуется использовать стандартную функцию strncpy (добавляя нуль-терминатор при необходимости!) или не входящие в стандарт функции strlcpy или strncpy_s.

Стандартное поведение strncpy неоптимально — функция всякий раз заполняет нулями весь остаток буфера[1][2], что приводит к непроизводительному расходу процессорного ресурса при буфере большого размера и работе с короткими строками (обычная ситуация в сетевых серверах).

То есть эти функции до сих пор не могут пофиксить.
38 1855034
>>1855024
В плюсах надо использовать std::string, а не си с классами, где больше половины функций уже объявлено опасными.
39 1855035
>>1855034

>где больше половины функций уже объявлено опасными.


Тогда почему их не исправят?
40 1855039
>>1855035
Чтобы не ломать совместимость с сишкой и её либами, где эти функции используются. Без ломания API/ABI никак не исправить.
41 1855310
>>1855024

>Нельзя


>рекомендуется


Ну ты понел.

И в D я могу вызвать strcpy и стрелять себе в колено. Это даже в питоне можно.
42 1859169
>>1849020
Миру и один с++ не нужен.
Для управляемого кода есть норм языки.
Для неуправляемого - си, ди, обжектив си.
Крестам место в наклепанном во времена хайпа легаси.
43 1869779
Опа, нифига какой трендж! Подписался на каменты.
44 1883416
>>1831629 (OP)

>самого совершенного и универсального языка


А микроконтроллеры на нем программировать можно? Кросскомпилятор-то хотя бы завезли?
45 1883431
>>1855039
Если их исправить ничего не поломается, функции стабильно будут работать.
16074647713543.jpg155 Кб, 600x900
46 1883464
>>1883416

>>самого совершенного и универсального языка


>А микроконтроллеры на нем программировать можно?



На betterC точно да (аналог чистого C), на обычном D пока под вопросом - хеловорды работают, но бинарник жирен и всё это какая-то альфа-версия.

>Кросскомпилятор-то хотя бы завезли?



Да и давно. Рекомендую ldc2, но и gdc тоже что-то там может.
47 1883468
>>1883431

>Если их исправить


Их нельзя исправить без изменения поведения или аргументов.
48 1883900
>>1855039

>Без ломания API/ABI никак не исправить.


А давно ли в кресты завезли ABI?
49 1883944
>>1883900
Так речь про сишку, в ней не так плохо с аби.
50 1884620
>>1883464

>betterC


>Unrestricted use of compile-time features


>Full metaprogramming facilities


Спасибо за наводку, анон. А я было уж подумывал педеrustом становиться.
51 1884731
>>1884620
Не за что.

Кстати, из betterC даже классовые методы С++ можно дёргать официально, и всё будет работать. (На случай если линкуешься с чужим кодом)
52 1884772
>>1884731
К счастью, полезных библиотек на крестах не бувае
53 1884797
>>1884772
А как же бингинг к пистону, например?
54 1884813
>>1884797
К какому пистону? Тот, который на расте? Или который на си?
Ни тому, ни другому не место на микроконтроллерах.
55 1884827
>>1884813
А, не вкурил что вы про микроконтроллеры тут. Тогда да
sshot-2020-12-20-22-16-32.png10 Кб, 591x204
56 1885725
Что у вашего охуитительного языка с локалью? Почему не конвертит в привычную для венды кодировку?
57 1885744
>>1885725
В какой кодировке написал, в такой и выводит
58 1885756
>>1885744
Писал в utf-8, это стандартная кодировка для файлов .d Вывод должен быть в OEM 866 если включена локаль
59 1885768
>>1885756
Так шиндошч-соснолька не умеет в юникод. Какие претензии к языку?
60 1885776
>>1885768
Можно переключиться на юникод коммандой chcp 65001 тогда будет норм, но стандартная кодировка 866
61 1885792
>>1885725

>Что у вашего охуитительного языка с локалью?



Сначала изучи как работает твоя говно ОС. А именно, как устроена в винде кодировка в терминале и какие там наслоения понаделали.

Этот прав:
>>1885744

Вроде, совсем недавно добавили UTF8 в терминал, так что может быть достаточно будет переключить настройку в терминале и забыть о проблеме.
62 1885793
>>1885768

>Так шиндошч-соснолька не умеет в юникод. Какие претензии к языку?



Могли бы в рантайме это учитывать и перекодирвоать налету.
63 1885802
>>1885793
Петухон так делает, один раз пришлось долго ебаться с чем-то, чтобы выяснить, что проблема именно из-за этого, затем думать, как это выключить и указать принудительную кодировку (переменные окружения нельзя было использовать).

мимо
64 1885811
>>1885802
Этот >>1885725, похоже, с пистона и спрыгнул как раз.
sshot-2020-12-26-23-37-31.png17 Кб, 491x390
65 1891900
>>1885811
Но Ди это жи и есть конпелируемый питухон.
66 1891906
>>1891900

> конпелируемый питухон


Ещё так любят говорить про свой язык котлинисты, шарписы и гоферы.
67 1892198
>>1891906

>> конпелируемый питухон


>Ещё так любят говорить про свой язык котлинисты, шарписы и гоферы.



В принципе, так можно отличать болие лименее адекватов от PHP-ёбов
68 1896889
>>1892198
что там с количеством стандартных библиотек в вашем Ди?
их уже три или всё ещё две?
69 1898403
>>1896889

>что там с количеством стандартных библиотек в вашем Ди?


>их уже три или всё ещё две?



Скоро фобос и дрантайм объединят в одну.
70 1909853
>>1883468
Так поведение и аргументы будут теже, просто внутри функции будет исправлена работа с памятью.
71 1909868
>>1909853
Как ты исправишь работу с памятью, например, у функции gets? Функция не знает размер буфера, и если юзер введёт больше допустимого, произойдёт выход за пределы буфера. Вместо неё, в частности, рекомендуют юзать gets_s, но там даже число аргументов другое.
72 1915297
>>1909868
И в чем проблема исправить метод что бы он правильно работал с памятью?
73 1915303
>>1915297
Буратино дали 5 яблок. Сколько их у него теперь, если неизвестно, сколько было в начале?
74 1916142
Это убийцы нима тред?
75 1916262
>>1916142

>Это убийцы нима тред?


То что мертво умереть не может.
76 1916674
>>1915303

>Буратино дали 5 яблок.


- И всё же, он - великий плут.
77 1916785
Dlang охуенен, но нахер он нужен?
78 1916786
79 1917283
>>1916786
Так я и думал
80 1930167
>>1916785
Он последний раз был охуенен лет десять назад, а сейчас он со своими текстовыми макросами, обязательным gc и полудохлыми компиляторами сосёт по удобству даже у крестов новее c++11. А уж какое кустарное говно там внутри стандартной библиотеки - ебал и плакал. Всё, не взлетело, закапываем трупешника.
81 1930674
>>1930167

> со своими текстовыми макросами


Адепт графического языка "Дракон" или что?
82 1959755
>>1930674
У них макросы строки генерируют, а не код.
83 1959787
>>1831629 (OP)
А типы фиксированного размера?
84 1959919
>>1959787
Некоторые можешь растягивать, пока рантайм не порвётся.
85 2030247
>>1959919
На всякий случай, БАМП годному треду. Пусть живёт.
Тред утонул или удален.
Это копия, сохраненная 5 июня 2021 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски