Программирование

Ответить в тред Ответить в тред
Check this out!
Тред самого совершенного и универсального языка D. /dlang/ Аноним 16/10/20 Птн 01:11:06 18316291
DProgrammingLan[...].png 301Кб, 1200x910
1200x910
Язык
объектно-ориентированный
процедурный
функциональный
обобщённый,
параллельный,
мультипарадигмальный,
императивный,
компилируемый


Официальный сайт: 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();
}
|/////////////////////////////////
Аноним 16/10/20 Птн 01:30:19 18316352
>>1831629 (OP)
Это далеко не первая попытка создать D-тред, и ни одна не взлетела.
Аноним 16/10/20 Птн 09:16:26 18316993
>>1831629 (OP)
>a.writeln; // функцию без параметров можно вызывать без скобок
Самая ужасная вещь, которую только можно сделать в ЯП.
Аноним 16/10/20 Птн 10:01:05 18317114
Аноним 16/10/20 Птн 10:04:27 18317125
>>1831699
Мне понравилось, как в Perl. Там можно вообще не ставить скобки вне зависимости от количества аргументов.
Аноним 16/10/20 Птн 10:44:07 18317276
>>1831712
Как мне сохранить указатель на функцию в переменную, если следующая конструкция вызывает функцию?
var a = func;
Аноним 16/10/20 Птн 10:58:07 18317367
>>1831727
my $a = \&func;
&$a(); // первый способ вызвать
$a->(); // второй
&$a; // третий
Аноним 16/10/20 Птн 11:20:22 18317518
>>1831736
Какая-то еботня + куча неочевидных моментов.
Аноним 16/10/20 Птн 11:33:38 18317629
>>1831751
Ну да, одного взгляда на этот пример достаточно, чтобы понять, почему Perl умер. И это ещё простой пример, вот когда передаёшь ссылку на массив хешей (местные словари) в функцию, начинается треш со всякими\%$$a.
Аноним 16/10/20 Птн 16:32:58 183206510
>>1831699
И в чем проблема?

>>1831751
В плюсах тоже есть неочевидные моменты.
Аноним 16/10/20 Птн 19:29:18 183221411
>>1832065
> И в чем проблема?
Очень хуевая читаемость кода.

> В плюсах тоже есть неочевидные моменты.
Тем не менее плюсы востребованы всегда и везде. А d как был студенческим поделием, так им и останется.
16/10/20 Птн 22:14:29 183233512
yoba.png 5Кб, 129x129
129x129
Что мешает дописать pure к нечистой функции?
Аноним 16/10/20 Птн 22:20:27 183233713
>>1832335
Я по приколу попробовал запустить в онлайн-компиляторе, и похоже, что внешние переменные из такой функции нельзя изменять, и нечистые функции нельзя вызвать, будет ошибка компиляции.
Аноним 16/10/20 Птн 23:03:51 183235214
>>1832065
>И в чем проблема?
Если я хочу передать ее как функцию высшего порядка в другую функцию, то как сказать об этом компилятору?
Аноним 16/10/20 Птн 23:04:10 183235315
>>1832352
ее в функцию высшего порядка
фикс
Аноним 16/10/20 Птн 23:22:49 183235616
>>1832352
Раз уж сабж позиционирует себя как продолжателя C/C++, то здесь наверняка вместо "функций высшего порядка" передаётся указатель на функцию: func1(&func2).
Аноним 17/10/20 Суб 00:08:06 183238217
>>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]));
}
Аноним 17/10/20 Суб 10:05:20 183251318
>>1832065
>В плюсах тоже есть неочевидные моменты.
Например?
Аноним 17/10/20 Суб 19:33:54 183293519
>>1832513
Ты щас серьезно?

> cout << 5 / 2.5 << endl;
Что будет в консоли?
Аноним 17/10/20 Суб 19:39:18 183294120
>>1832513
Аргументы равнозначны.
void print(int numbers[]);
void print(int *numbers);

Хотя по логике должно работать что то одно что бы не запутывать программиста когда передается массив.
Аноним 17/10/20 Суб 19:45:27 183294821
>>1832935
2. В чем неочевидность?

>>1832941
Это уже особенность того, как кресты работают с памятью, для них массив = указатель на первый элемент. Да и вряд ли кто-то пишет как в первой строке.
Аноним 17/10/20 Суб 20:49:04 183303322
>>1832941
> Хотя по логике должно работать что то одно что бы не запутывать программиста когда передается массив.
void print(std::vector<int> &numbers);
Остальное - депрекейтед.
Аноним 19/10/20 Пнд 23:03:20 183492223
>>1831629 (OP)
Как с работой без gc? Всё так же стандартная библиотека от gc сильно зависит? Пробовал кто-то микроконтроллеры прогать на D?
Аноним 20/10/20 Втр 19:02:51 183557024
>>1832513
Нельзя использовать strcpy и strncpy.
Аноним 20/10/20 Втр 19:37:31 183559225
Аноним 05/11/20 Чтв 20:16:08 184896026
>>1831629 (OP)
Почему не взлетает?
На первый взгляд гораздо приятнее го/раста - по сути, единственных конкурентов в этом поле.
Аноним 05/11/20 Чтв 21:36:38 184902027
>>1848960
Потому что миру не нужно два C++.
Аноним 07/11/20 Суб 13:02:39 185033228
>>1848960
За ним нет крупной компании, за го Гугол, за растом Мозилла. Да и го ближе к питону, чем к крестам, как по мне. Отсюда вытекает отсутствие какого-либо продвижения в массы.

За крестами и питоном как бы тоже нет крупных компаний, но на них написано много софта, что создаёт спрос на специалистов.
Аноним 13/11/20 Птн 00:32:50 185474129
>>1848960
Да потому что сообщество мудацкое: вместо того, чтобы объединить усилия, решили поиграть в "лебедь, рак и щука". Пока они коноёбились с тремя вечно сырыми компиляторами и двумя стандартными библиотеками, кресты слизали их фичи и выпустили новый стандарт. Сначала один, потом другой. К тому времени все, кого проект бы мог заинтересовать, уже поняли, что это бесконечный долгострой. А затем уже и раст с го вышли.
Аноним 13/11/20 Птн 00:34:13 185474230
>>1848960
А сейчас кому он нужен?
Аноним 13/11/20 Птн 00:42:26 185474831
>>1854741
> го
Go - не альтернатива крестам. Вообще. Совсем. Это узкопрофильный серверный язык, и то, что он компилится в нейтив, ещё ничего не значит.
В остальном согласен.
Аноним 13/11/20 Птн 12:33:18 185497032
>>1854748
>Go - не альтернатива крестам.
Зато ди мог бы быть альтернативой го. А о крестах и речи не было.
Аноним 13/11/20 Птн 12:51:05 185498133
>>1854970
Ну так ди и раст - это убийцы именно крестов.
Аноним 13/11/20 Птн 13:33:04 185501034
>>1831712
>понравилось, как в Perl
Да вы, батенька говноед. Я свою карьеру начинал в шараге, которая перлом активно пользовалась. Как вспомню, так вздрогну.
Аноним 13/11/20 Птн 13:34:25 185501135
>>1854981
Убийца крестов только один — Страуструп
Аноним 13/11/20 Птн 13:38:52 185501436
>>1855010
Да просто подход необычен с точки зрения более современных языков. Люблю экзотику. В хаскелле и лиспе вон тоже можно, но там свои причины для этого.
Аноним 13/11/20 Птн 13:50:02 185502437
>>1835592
Поскольку функция не проверяет длину строки и размер буфера, она не должна использоваться для работы с данными, размер которых неизвестен, во избежание переполнения буфера dst.

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

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

То есть эти функции до сих пор не могут пофиксить.
Аноним 13/11/20 Птн 14:06:08 185503438
>>1855024
В плюсах надо использовать std::string, а не си с классами, где больше половины функций уже объявлено опасными.
Аноним 13/11/20 Птн 14:07:27 185503539
>>1855034
>где больше половины функций уже объявлено опасными.
Тогда почему их не исправят?
Аноним 13/11/20 Птн 14:16:54 185503940
>>1855035
Чтобы не ломать совместимость с сишкой и её либами, где эти функции используются. Без ломания API/ABI никак не исправить.
Аноним 13/11/20 Птн 18:20:02 185531041
>>1855024
>Нельзя
>рекомендуется
Ну ты понел.

И в D я могу вызвать strcpy и стрелять себе в колено. Это даже в питоне можно.
Аноним 18/11/20 Срд 02:51:41 185916942
>>1849020
Миру и один с++ не нужен.
Для управляемого кода есть норм языки.
Для неуправляемого - си, ди, обжектив си.
Крестам место в наклепанном во времена хайпа легаси.
Аноним 01/12/20 Втр 07:45:29 186977943
Опа, нифига какой трендж! Подписался на каменты.
Аноним 18/12/20 Птн 13:36:11 188341644
>>1831629 (OP)
>самого совершенного и универсального языка
А микроконтроллеры на нем программировать можно? Кросскомпилятор-то хотя бы завезли?
Аноним 18/12/20 Птн 13:57:19 188343145
>>1855039
Если их исправить ничего не поломается, функции стабильно будут работать.
Аноним 18/12/20 Птн 14:37:52 188346446
16074647713543.jpg 155Кб, 600x900
600x900
>>1883416
>>самого совершенного и универсального языка
>А микроконтроллеры на нем программировать можно?

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

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

Да и давно. Рекомендую ldc2, но и gdc тоже что-то там может.
Аноним 18/12/20 Птн 14:40:31 188346847
>>1883431
>Если их исправить
Их нельзя исправить без изменения поведения или аргументов.
Аноним 18/12/20 Птн 19:45:02 188390048
>>1855039
>Без ломания API/ABI никак не исправить.
А давно ли в кресты завезли ABI?
Аноним 18/12/20 Птн 20:12:52 188394449
>>1883900
Так речь про сишку, в ней не так плохо с аби.
Аноним 19/12/20 Суб 16:06:45 188462050
>>1883464
>betterC
>Unrestricted use of compile-time features
>Full metaprogramming facilities
Спасибо за наводку, анон. А я было уж подумывал педеrustом становиться.
Аноним 19/12/20 Суб 17:49:44 188473151
>>1884620
Не за что.

Кстати, из betterC даже классовые методы С++ можно дёргать официально, и всё будет работать. (На случай если линкуешься с чужим кодом)
Аноним 19/12/20 Суб 18:46:02 188477252
>>1884731
К счастью, полезных библиотек на крестах не бувае
Аноним 19/12/20 Суб 19:12:18 188479753
>>1884772
А как же бингинг к пистону, например?
Аноним 19/12/20 Суб 19:24:23 188481354
>>1884797
К какому пистону? Тот, который на расте? Или который на си?
Ни тому, ни другому не место на микроконтроллерах.
Аноним 19/12/20 Суб 19:41:32 188482755
>>1884813
А, не вкурил что вы про микроконтроллеры тут. Тогда да
Аноним 20/12/20 Вск 22:24:09 188572556
sshot-2020-12-2[...].png 10Кб, 591x204
591x204
Что у вашего охуитительного языка с локалью? Почему не конвертит в привычную для венды кодировку?
Аноним 20/12/20 Вск 22:54:36 188574457
>>1885725
В какой кодировке написал, в такой и выводит
Аноним 20/12/20 Вск 23:11:29 188575658
>>1885744
Писал в utf-8, это стандартная кодировка для файлов .d Вывод должен быть в OEM 866 если включена локаль
Аноним 20/12/20 Вск 23:23:28 188576859
>>1885756
Так шиндошч-соснолька не умеет в юникод. Какие претензии к языку?
Аноним 20/12/20 Вск 23:56:09 188577660
>>1885768
Можно переключиться на юникод коммандой chcp 65001 тогда будет норм, но стандартная кодировка 866
Аноним 21/12/20 Пнд 01:43:34 188579261
>>1885725
>Что у вашего охуитительного языка с локалью?

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

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

Вроде, совсем недавно добавили UTF8 в терминал, так что может быть достаточно будет переключить настройку в терминале и забыть о проблеме.
Аноним 21/12/20 Пнд 01:44:33 188579362
>>1885768
>Так шиндошч-соснолька не умеет в юникод. Какие претензии к языку?

Могли бы в рантайме это учитывать и перекодирвоать налету.
Аноним 21/12/20 Пнд 02:12:16 188580263
>>1885793
Петухон так делает, один раз пришлось долго ебаться с чем-то, чтобы выяснить, что проблема именно из-за этого, затем думать, как это выключить и указать принудительную кодировку (переменные окружения нельзя было использовать).

мимо
Аноним 21/12/20 Пнд 02:41:07 188581164
>>1885802
Этот >>1885725, похоже, с пистона и спрыгнул как раз.
Аноним 26/12/20 Суб 23:38:22 189190065
sshot-2020-12-2[...].png 17Кб, 491x390
491x390
>>1885811
Но Ди это жи и есть конпелируемый питухон.
Аноним 26/12/20 Суб 23:47:46 189190666
>>1891900
> конпелируемый питухон
Ещё так любят говорить про свой язык котлинисты, шарписы и гоферы.
Аноним 27/12/20 Вск 12:33:32 189219867
>>1891906
>> конпелируемый питухон
>Ещё так любят говорить про свой язык котлинисты, шарписы и гоферы.

В принципе, так можно отличать болие лименее адекватов от PHP-ёбов
Аноним 31/12/20 Чтв 16:23:15 189688968
>>1892198
что там с количеством стандартных библиотек в вашем Ди?
их уже три или всё ещё две?
Аноним 02/01/21 Суб 07:04:39 189840369
>>1896889
>что там с количеством стандартных библиотек в вашем Ди?
>их уже три или всё ещё две?

Скоро фобос и дрантайм объединят в одну.
Аноним 14/01/21 Чтв 15:14:45 190985370
>>1883468
Так поведение и аргументы будут теже, просто внутри функции будет исправлена работа с памятью.
Аноним 14/01/21 Чтв 15:27:48 190986871
>>1909853
Как ты исправишь работу с памятью, например, у функции gets? Функция не знает размер буфера, и если юзер введёт больше допустимого, произойдёт выход за пределы буфера. Вместо неё, в частности, рекомендуют юзать gets_s, но там даже число аргументов другое.
Аноним 19/01/21 Втр 16:52:19 191529772
>>1909868
И в чем проблема исправить метод что бы он правильно работал с памятью?
Аноним 19/01/21 Втр 16:58:30 191530373
>>1915297
Буратино дали 5 яблок. Сколько их у него теперь, если неизвестно, сколько было в начале?
Аноним 20/01/21 Срд 11:38:07 191614274
Это убийцы нима тред?
Аноним 20/01/21 Срд 14:44:34 191626275
>>1916142
>Это убийцы нима тред?
То что мертво умереть не может.
Аноним 20/01/21 Срд 22:01:22 191667476
>>1915303
>Буратино дали 5 яблок.
- И всё же, он - великий плут.
Аноним 21/01/21 Чтв 02:03:40 191678577
Dlang охуенен, но нахер он нужен?
Аноним 21/01/21 Чтв 02:18:08 191678678
Аноним 21/01/21 Чтв 17:44:32 191728379
Аноним 04/02/21 Чтв 06:07:09 193016780
>>1916785
Он последний раз был охуенен лет десять назад, а сейчас он со своими текстовыми макросами, обязательным gc и полудохлыми компиляторами сосёт по удобству даже у крестов новее c++11. А уж какое кустарное говно там внутри стандартной библиотеки - ебал и плакал. Всё, не взлетело, закапываем трупешника.
Аноним 04/02/21 Чтв 19:14:01 193067481
>>1930167
> со своими текстовыми макросами
Адепт графического языка "Дракон" или что?
Аноним 07/03/21 Вск 14:08:26 195975582
>>1930674
У них макросы строки генерируют, а не код.
Аноним 07/03/21 Вск 14:35:33 195978783
>>1831629 (OP)
А типы фиксированного размера?
Аноним 07/03/21 Вск 16:54:43 195991984
>>1959787
Некоторые можешь растягивать, пока рантайм не порвётся.
Аноним 14/05/21 Птн 12:05:23 203024785
>>1959919
На всякий случай, БАМП годному треду. Пусть живёт.
Настройки X
Ответить в тред X
15000
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов