@dlangru

Страница 403 из 719
Evgeny
08.02.2018
16:08:39
отговаривают от этого, говорят что грязный хак. аргументы не понял, но подробности есть на dlang idioms
потому что небезопасно. пользователь может сохранить эксепшн для передачи в другой поток, например. всякие future например так могут делать

Google
Igor
08.02.2018
16:09:39
мин, найду детали

https://p0nce.github.io/d-idioms/#Throwing-despite-@nogc

там внизу примечание

ну и вот еще дискуссия https://forum.dlang.org/thread/occ9kk$24va$1@digitalmars.com?page=6

Evgeny
08.02.2018
16:18:59
для nogc есть ещё варианты?
конечно: одна функция для любого типа

Igor
08.02.2018
16:32:19
насколько помню для ексепшнов обсуждался вопрос использования refcount

Pavel
08.02.2018
17:12:38
То есть на данный момент единственный рабочий вариант написать nogc библиотеку с исключениями - писать в дополнение еще и nothrow :)

Dmitry
08.02.2018
17:20:55
Мысли в слух. По идее санкции США могут помочь работодателям обратить внимание на Ди. Java то санкционный продукт P.s. Это я на фоне запрета Oracle в РФ подумал

Igor
08.02.2018
17:22:07
скорее они помогут думать как юзать нелегально то, что уже юзают

Oleg
08.02.2018
17:24:06
только тем что про D пока никто не знает и сделать его санкционным пока никто не додумался?

Dmitry
08.02.2018
17:24:56
Ну Ди ж GPL вроде

Google
Oleg
08.02.2018
17:25:11
а openjdk?

не gpl кстати

Dmitry
08.02.2018
17:25:24
Полный аналог?

Oleg
08.02.2018
17:26:23
не gpl кстати
https://dlang.org/articles/faq.html#q5

нет

Evgeny
08.02.2018
19:01:03
boost гораздо лучше

Igor
08.02.2018
21:05:44
интересно было посмотреть времена вызовов метода класса в разных вариантах и асм который генерится

https://run.dlang.io/is/svY1Lj

Dmitry
09.02.2018
05:21:19
такой паттерн-матчинг достаточно примитивен
Тут ты зря, паттерн-матчинг в Нахе вполне эквивалентен оному в языках вроде хаскеля и раста. В Нахе сперва превратили enum в алгебраики (как в расте), а потом и вовсе GADT из них сделали. И при этом все выглядит по-прежнему C-style.

https://code.haxe.org/category/functional-programming/enum-gadt.html

Dmitry
09.02.2018
07:45:49
В теме https://forum.dlang.org/thread/mvhddaendngqwbmlzdei@forum.dlang.org?page=4 Встретил следующее мнение: "- import ... really, we are 2018 and people are still wasting our time to have standard libraries as imports. Its even more fun when you split, only to need import the array library." Поясните плиз, что тут подразумевается? Делать неявный импорт всего и сразу? Разве это удобно? Подвопрос. Я на самом деле был бы рад, если бы ряд фишек был как в питон, доступен без всяких импортов. К примеру тот же `writeln` и разные методы типа `.array`

Evgeny
09.02.2018
07:56:15
Похоже, что так и есть. Хочет импорт стандартной библиотеки по умолчанию. ИМХО, ненужно.

qwerty
09.02.2018
08:27:04
конечно, не нужно

сделал import std.file и бинарик разпух до 4 мб

Igor
09.02.2018
08:57:40
одни хотят что-бы рантайм вообще не цеплялся, другие - что-бы цеплялась сразу вся std, им лениво написать import...

Igor
09.02.2018
09:17:25
На стройку пусть идут работать
таких точно на мясокомбинат не пошлют

Pavel
09.02.2018
12:07:04
Блин вы прикиньте

Google
Pavel
09.02.2018
12:07:21
Я вчера вечером пытался написать полностью @nogc код и столкнулся с отвратительным костылем

Оказывается нельзя просто так в nogc коде делать отладочные writeln

а printf не принимает string со спецификаторами

То есть приходится городить дикие костыли просто чтобы распечатать отладочные строки. Использовать streamFormatter какие-то и т.д.

Maxim
09.02.2018
12:11:40
Pavel
09.02.2018
12:12:31
Не помню.. сегодня гляну подробнее

Может я просто чего-то очевидного не заметил.

Но на форуме предлагают все переписать со своими велосипедами.

а почему не принимает-то?
Как минимум требует кастовать к const char*, ну и там далее какие-то проблемы начинаются

Maxim
09.02.2018
12:15:25
https://run.dlang.io/is/LncPzc работает же

Pavel
09.02.2018
12:16:15
Не, мне надо именно тип string

Распечатать переменную

Maxim
09.02.2018
12:16:52
ну ясное дело, что сишный printf ничего не знает о дишных стрингах

Pavel
09.02.2018
12:17:42
В общем боль

Ну почему так эффективно расставлены грабли в этом языке ...

Maxim
09.02.2018
12:18:24
не в языке, а в стандартной библиотеке)

Evgeny
09.02.2018
12:38:48
интересно, может ли шаблонная функция распознать вызвана ли она в контексте @nogc или нет?

распознать-то можно через __traits(compiles, "new int[1]")

но беда в том, что вызовы с одними и теми же шаблонными аргументами приведут к одному инстанцированию

бяда

Google
Pavel
09.02.2018
12:55:40
Ну можно просто всегда считать что nogc, и тогда в gc коде это все равно будет работать

Evgeny
09.02.2018
12:58:20
распознать-то можно через __traits(compiles, "new int[1]")
нет, не работает, всегда ture возвращает: https://run.dlang.io/is/w9Rude

Pavel
09.02.2018
13:10:25
Какие например?

Я бы переписал writeln на nogc ) Если бы мог осилить

Evgeny
09.02.2018
13:12:21
Какие например?
из @nogc нельзя вернуть string

точнее можно, но небезопасно

Pavel
09.02.2018
13:13:45
А ну по идее операции со стрингами аллоцируют, да

Если это не слайс

Но ведь если все переписать на ручной malloc/free, то это будет медленнее работать в теории?

Evgeny
09.02.2018
13:30:36
почему это?

Pavel
09.02.2018
13:31:14
https://stackoverflow.com/questions/2079151/minimizing-the-amount-of-malloc-calls-improves-performance я читаю всякие рассуждения, и вот в случае с GC память будет сначала выделяться непрерывными кусками, а потом когда придет время собирать мусор, то весь этот большой блок можно будет освободить одним вызовом. Я так рассуждаю.

Evgeny
09.02.2018
13:31:42
дык можно пул замутить

Pavel
09.02.2018
13:31:52
Или хотя бы GC как-то может оптимизировать это дело в общем случае.

дык можно пул замутить
Да, но это все усложняет. В конце концов так постепенно дорабатывая управление памятью, не придем ли мы к GC снова?

Evgeny
09.02.2018
13:32:36
да нет, я когда на плюсах писал, использовал пулы, если функция постоянно аллоцирует и освобождает объекты

Сам по себе GC - отличная шука, ничего не имею против. Главное чтобы он работал без проблем

усложнение микроскопическое, вместо malloc вызываешь malloc аллокатора

на дешных экспериментальных аллокаторах пул замутить как нефиг делать

Google
qwerty
09.02.2018
19:44:50
крутой inline assembler в D надо сказать)

по крайней мере проброс переменных мне очень нравится

Ievgenii
10.02.2018
12:12:19
Покажи пример

qwerty
10.02.2018
13:57:33
void main(string[] args) { int a = 2; int b = 3; asm { mov EAX, a[EBP]; mov EBX, b[EBP]; add EAX, EBX; mov a, EAX; } writeln(a); }

Ievgenii
10.02.2018
18:27:39
Ничего не понимаю, но выглядит круто)

Igor
10.02.2018
19:01:55
Ничего не понимаю, но выглядит круто)
EBP - указатель на стек, a[EBP] - получается значение a, аналогично для b. В регистры EAX и EBX засылают значения a и b, складывают и cохраняют результат в a.

Ievgenii
10.02.2018
19:03:44
Просто попробовать?

Или есть какая-то задаче, где реально нужен асемблер?

Igor
10.02.2018
19:04:46
это не мне, это ты попросил пример использования инлайн ассемблера, тебе его и прислали )

для чего может быть нужно? например если ты знаешь что в какой-то часто вызывающейся ф-ции компилятор генерит неудачнй код - вставляешь ассемблерный кусок и вперед

я так делал в сях при вычислении интегралов. Переписывал вычисления с плав.точной вручную на асме. помогало очень сильно.

Pavel
10.02.2018
19:42:30
Асм в наше время - не актуально. Попробуйте приплюснутый код с суперскалярными интринсиками странслировать. Желательно для LDC.

SR_team
10.02.2018
19:53:10
ASM - плохо, по крайней мере x86, LLVM еще куда не шло, но тоже плохо. ASM хорош для установления хука на метод активации в программе, но D для таких задач избыточен

Igor
10.02.2018
20:05:15
ну я это делал еще тогда когда это было актуально. приведено просто как пример где может пригодиться асм в языке высокого уровня

qwerty
11.02.2018
05:36:04
Да я вот хочу попробовать сделать свой context switching, да чтоб на betterc работал

Evgeny
11.02.2018
05:55:54
EBP - указатель на стек, a[EBP] - получается значение a, аналогично для b. В регистры EAX и EBX засылают значения a и b, складывают и cохраняют результат в a.
а почему когда читаем из a и b, то пишем a[EBP] и b[EBP], а когда в конце сохраняем результат, то пишем просто a, а не a[EBP]?

qwerty
11.02.2018
06:01:45
Не знаю, не разработчик

Страница 403 из 719