@dlangru

Страница 404 из 719
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
а почему когда читаем из a и b, то пишем a[EBP] и b[EBP], а когда в конце сохраняем результат, то пишем просто a, а не a[EBP]?
не в курсе. видимо как-раз и работает умолчание про EBP. А naked это возможно режим без умолчания. нужно доку читать на обращение с встроенным асмом. мне это пока не было нужно, так что всё что написал - предположения

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
В общем я пока работаю, мне очень нравится. Скорость разработки возросла, ошибки прямо в редакторе видны, не приходится каждый раз идти в консоль перекомпилировать. методы пишутся быстрее. Все, теперь то заживем :)

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
Под виндой приходится это хозяйство (workspace-d) руками собирать, да. Причем DMD там не канает, надо с LDC.
ну я под виндой сам ничего не собираю, только пути после того, что оно собрало, правлю

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
allSameType из traits тоже должно сойти?
возможно, я точно сейчас не скажу отличия allSameType от is, кроме того, что первый должен принимать больше 2х типов

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.

С трудом, но вроде понял

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

Там, где есть наследование, нужны виртуальные методы и ссылочная семантика. Поэтому такое разделение на классы и структуры в Ди.

Valeriy
12.02.2018
18:09:20
class A { void opAssign(T)(T rhs) if (!(is(T == A))) { writeln(rhs); } }
Базовый класс можно присвоить наследнику, а производный базовому нет

Так что всё верно Дмитрий написал

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
Кто знает, в шарпе такая же херь?
Какая? Там "Assignment operators cannot be overloaded" вообще

А разделение на классы и структуры такое же

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:29:27
или растом?
Ох, не напоминай, я чет не смог в него

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
И это тоже неверно) А что же верно?
в Лиспе не только строки. В лиспе вообще не строки, а списки. Но есть и мапы. И в смешанной семантике нет ничего природного.

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 (в плане различия классов и структур)

Oleg
13.02.2018
14:04:41
возможно, но кроме WAT есть еще аргументы.
сейчас перечитал и не увидел аргументов не спора ради, хочу понять чем это может не нравиться (классы отдельно от структур)?

у меня это прям органично вписалось в работу

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