
Evgeny
11.02.2018
06:22:01
Я вроде и не тебя цитировал. На самом деле можно писать просто a без [EBP].
правда там есть еще странная оговорка:
If the [EBP] is omitted, it is assumed for local variables. If naked is used, this no longer holds.

Igor
11.02.2018
07:38:17

Maxim
11.02.2018
07:39:38
подозреваю, naked — это функция без инициализации

Google

Maxim
11.02.2018
07:39:54
точнее, без пролога и эпилога, чистый ассемблер

Pavel
11.02.2018
17:40:53
Кажется мне удалось нормально настроить vscode
Из плагина code-d от webfreak
workspace-d изкоробки не работает, но после того как я вручную собрал его из репозитория и заменил бинаркник на имеющийся, все зарабтало. Автокомплит нормально, goto declaration работает

Pavel
11.02.2018
19:51:20
Там пути некорректно указаны. Помнится, после автосборки модулей один исполняемый руками переносить приходилось.

Pavel
11.02.2018
20:03:04
Ты наверно как раз про worspace-d
С ним пришлось повозиться, а остальные - dcd, dfmt, dscanner я поставил из репозитория и они нормально прописались в $PATH
Вообще было бы просто замечательно иметь джентельменский docker образ, в котором все уже поставлено. Просто поднимаешь контейнер, маунтишь в него директорию с исходниками, указываешь порт и все работает. Но vscode так не умеет, ему подавай пути к бинарникам

NullSanya
11.02.2018
20:31:09
Ну мне только dcd приходилось ручками ставить, ибо по умолчанию он в m32mscoff компилировался
А раньше dscanner на место ложить
Ну и пути к std

Pavel
11.02.2018
20:32:37
В общем я пока работаю, мне очень нравится. Скорость разработки возросла, ошибки прямо в редакторе видны, не приходится каждый раз идти в консоль перекомпилировать. методы пишутся быстрее. Все, теперь то заживем :)

NullSanya
11.02.2018
20:33:40

Google

NullSanya
11.02.2018
20:36:02
По какой-то причине dcd может просто зависнуть и перестать грузить

Pavel
11.02.2018
20:43:07
Буду следить

NullSanya
11.02.2018
20:46:50
Хотя думаю тут в компе дело, на другом идеально было все

Dmitry
12.02.2018
06:27:21
Под виндой приходится это хозяйство (workspace-d) руками собирать, да. Причем DMD там не канает, надо с LDC.
Я бинарник положил к файлам code-d (плагина vscode), и в какой-то момент vscode не спрашивая решила мне плагин обновить и все файлы текущей версии плагина потерла. Не кладите, дети, бинарники туда. :)
В линуксе все как-то проще ставится и заводится. В обеих ОС сейчас пользуюсь.

NullSanya
12.02.2018
06:33:53

Valeriy
12.02.2018
14:20:09
Как в D сделать шаблонную перегрузку оператора присваивания?
Хочу что то такое:
class A
{
void opAssign(T)(T rhs)
{
writeln(rhs);
}
}
Получаю Error: class destr_test.A identity assignment operator overload is illegal

Pavel
12.02.2018
14:42:17
https://dlang.org/spec/operatoroverloading.html#assignment тут написано что так делать нельзя

Pavel
12.02.2018
14:42:19
Для класса T не может быть А

Pavel
12.02.2018
14:43:11
Ну это не класс а параметр шаблона, тем не менее компилятор наверно думает что он может быть и ссылочным типом и не позволяет. Попробуй как-то поменять сигнатуру.

Valeriy
12.02.2018
14:44:37
Да для структур работает.
Как то видимо связано с тем что классы всегда ссылки. Пока не понял почему

Pavel
12.02.2018
14:45:07
Наверное можно условие влепить, или как оно там называется

Pavel
12.02.2018
14:46:31
Типа контракт сразу после сигнатуры метода? Но это не избавит от шаблона. Придется тебе перечислить явно все типы которые может принимать этот оператор
Ну или, может в языке есть какой-то модификатор который говорит явно что данный параметр шаблона не является ссылочным, не знаю.

Oleg
12.02.2018
14:50:44
https://dlang.org/spec/traits.html#isRef

Pavel
12.02.2018
14:52:18
Не уверен что компилятор настолько умный что сумеет извлечь пользу из этого трейта и разрешить шаблонный метод объявлять

Oleg
12.02.2018
14:52:41
class A
{
void opAssign(T)(T rhs)
if (!(is(T == A)))
{
writeln(rhs);
}
}
вот так работает

Google

Pavel
12.02.2018
14:54:01
Воу неплохо, прям удивил

Pavel
12.02.2018
14:56:29
allSameType из traits тоже должно сойти?

Valeriy
12.02.2018
14:59:34

Oleg
12.02.2018
15:06:21

Pavel
12.02.2018
15:06:36
вот так работает
Но ведь это как-бы не запрещает присваивать другие identity assigment, которые запрещены?

Oleg
12.02.2018
15:07:26
Можно запретить классы
!is(A == class)

Pavel
12.02.2018
15:08:31
Да, вроде так будет правильнее
Что-то я не понял, а что такое identity assigment и чем оно плохо ?

Dmitry
12.02.2018
16:45:32
У классов ссылочная семантика, т.е. когда мы пишем
auto x = new A();
auto y = new A();
то x и y это ссылки на объекты.
Когда мы потом пишем
x = y;
мы меняем ссылку x, а не объект, на который x ссылается.
А переопределенный оператор opAssign занимается именно изменением объекта, а не ссылки. Если разрешить переопределять opAssign, то можно разучиться присваивать переменные типа А, менять ссылки.
Если же в x=y; тип y отличается, это уже достаточно отличная от обычного присваивания ситуация, сюда можно уже повесить свою логику.

Pavel
12.02.2018
16:50:00
identity assignment by default rebinds the left-hand-side to the argument at the right, and this is not overridable.
С трудом, но вроде понял

Valeriy
12.02.2018
17:38:32

Dmitry
12.02.2018
17:44:12
А иначе и нельзя. Если у нас есть переменная х класса А, то как сделать копию объекта, не вызывая его методов? Ведь реально объект там может быть типа Б, унаследованного от А. Статический тип переменной нам об этом не скажет.
Там, где есть наследование, нужны виртуальные методы и ссылочная семантика. Поэтому такое разделение на классы и структуры в Ди.

Valeriy
12.02.2018
18:09:20
Так что всё верно Дмитрий написал

Evgeny
13.02.2018
06:11:58
вся жопа из-за смешения семантик.
взяли дурной пример из жабы?

Google

Evgeny
13.02.2018
06:13:09
Кто знает, в шарпе такая же херь?

Evil
13.02.2018
06:14:23

Денис
13.02.2018
07:58:26
Бажный тг
Не в первый раз форвардит в случайный канал

Dmitry
13.02.2018
08:05:27
А разделение на классы и структуры такое же

Evgeny
13.02.2018
08:51:12

Pavel
13.02.2018
09:23:35
Почему бы и нет?

Evgeny
13.02.2018
11:20:56
лично я, смешивание семантик считаю неверным решением. Хотя бы даже из-за диалогов подобным состоявшемуся выше.
По крайней мере в D
очередной WAT?

Pavel
13.02.2018
13:20:22
Смешивание семантик является частью естества и никуда от него не деться.
Язык без такового будет Лиспом, или примитивным ассемблером.

NullSanya
13.02.2018
13:25:28

Evgeny
13.02.2018
13:28:42

NullSanya
13.02.2018
13:29:27

Evgeny
13.02.2018
13:29:29

Pavel
13.02.2018
13:32:45

Google

Pavel
13.02.2018
13:36:32

Evgeny
13.02.2018
13:38:53

Pavel
13.02.2018
13:41:15
И это тоже неверно) А что же верно?

Oleg
13.02.2018
13:53:04

Evgeny
13.02.2018
13:54:36

NullSanya
13.02.2018
13:55:38

Evgeny
13.02.2018
13:56:04

NullSanya
13.02.2018
13:56:31

Evgeny
13.02.2018
13:57:28
то что мне ЛИЧНО не нравится смешання семантика я написал сразу. Некоторые пытаются это выдать за некое безаппеляционное не терпящее возражений заявление. Это не так.

Oleg
13.02.2018
13:59:40
опять же состояние WAT возникает, только если с плюсов переходить на D (в плане различия классов и структур)

Evgeny
13.02.2018
14:00:18

Oleg
13.02.2018
14:04:41
у меня это прям органично вписалось в работу