
Denis
27.07.2018
02:19:41

Виталий
27.07.2018
02:22:05
Что за dip кстати?

qwerty
27.07.2018
02:24:23
Да хоть какой-то. Вообще ни одного не обсуждали кажется. Сейчас рассматривается dip про передачу rvalue в метод, который ждёт lvalue и есть dip про инициализацию структур

Google

qwerty
27.07.2018
02:32:11

Denis
27.07.2018
02:39:18

qwerty
27.07.2018
02:43:52
Там есть несколько вариантов инициализации. Как минимум можно обсудить какой лучше.

Denis
27.07.2018
04:26:22

qwerty
27.07.2018
06:37:02
Прошу прощения, уснул

Stepanos
27.07.2018
06:54:23

qwerty
27.07.2018
07:05:02
может быть и здоово, однако же 2й схож с вызовом функции, что может быть хорошо, а может и запутать, если не саблюдать style guide. В первом варианте как мне видится ненужные круглые скобки. Третий вариант как альтернатива второму, если хотелось бы отличать вызов функции от структуры. Я бы хотел второй вариант, все таки потому что будут именованые аргументы для функций и следовательно контрукторы классов будут вызываться с круглыми скобками
тогда будет "единообразие"
ну вот там же пишут, что если контруктор будет объявлен для структуры

Ievgenii
27.07.2018
07:16:13
Мне хоть такое и не нравится A a = A{} , но оно самое практичное. Ты его не спутаешь с другими вариантами
Типа А(r:8) так себе... Если ты указываешь без имени? Основываясь на порядке...
Это вызов ф-ции

Google

Ievgenii
27.07.2018
07:18:03
А такое A({r:4}) уж как-то много скобок, + тоже похоже на вызов функции с передачей в нее структуры

Denis
27.07.2018
07:20:15

qwerty
27.07.2018
07:39:13
Мне хоть такое и не нравится A a = A{} , но оно самое практичное. Ты его не спутаешь с другими вариантами
Да не спутаешь, но появляется различие между конструированием структуры и класса, а хотелось бы все-таки схожести между этими двумя вещами. К тому же есть нюанс. Если такую структруру без @disable this()
struct Point {
int x;
int y;
this(int x, int y){ ... }
}
то еще и новая возможность появляется создавать экземпляр структуры без конструктора. Сейчас если сделать Point(1, 2), то вызовется констуктор. А если выбрать A a = A{}, то можно будет делать так Point{1, 2} и конструктор уже не будет вызываться, если не изменить логику в компиляторе

Dark
27.07.2018
07:39:23

Igor
27.07.2018
07:48:19
а по какому пути идёт Point{1, 2} ?
как он инициализирует?

Dark
27.07.2018
07:52:37

Denis
27.07.2018
07:54:13

qwerty
27.07.2018
07:54:36

Igor
27.07.2018
07:58:18
да, много тонкостей

Dark
27.07.2018
07:58:54
Если параметр помечен ref'ом, он изменяется внутри функции, иначе от него смысла нет

Denis
27.07.2018
08:00:00
Ну и что?

Dark
27.07.2018
08:00:30
А какой от него смысл?

Denis
27.07.2018
08:01:04
Ну типа показывает что вызов это передача указателя, а не копирование большого объекта

Dark
27.07.2018
08:01:56
Для этого можно и указатель передать

Denis
27.07.2018
08:02:27
Неа, он может быть null

Dark
27.07.2018
08:02:58
А ref разве нет?

Google

Dark
27.07.2018
08:06:13
А, ну да
В случае с const ref это имеет смысл
А в остальных случаях только скроет мутации объекта

Pavel
27.07.2018
09:58:23
Очень плохо что нельзя ref делать у членов класса или структуры
Я хочу нередко хранить там ссылку на что-то, а приходится указатель

Dark
27.07.2018
10:00:02

Pavel
27.07.2018
10:00:34
Да не знаю. Или просто не доделали, или есть какая-то фундаментально-теоретическая причина навроде rvalue/lvalue

NullSanya
27.07.2018
10:01:19
Ну в плюсах ее нельзя изменить вроде и ее надо сразу инициализировать чем-то валидным
может тут так же

Igor
27.07.2018
10:03:58
если у тебя член стуктуры - класс, то вот тебе и ref. А ref на структуру это и есть в каком-то смысле ссылка. Можно её обвернуть в Nullable или еще как-то

Denis
27.07.2018
10:07:13

Pavel
27.07.2018
13:13:52
Причем такую ситуацию в Д довольно трудно выявить, я сталкивался пару раз.

Denis
27.07.2018
13:14:24

Pavel
27.07.2018
13:24:38
Во-первых да, во вторых в случае с указателем все же segfault случается. Но по крайней мере можно будет не писать везде myvar* в сигнатуре типа

Denis
27.07.2018
14:52:12
Страшное предлагаешь
И щас можно не писать
Но зачем?

Pavel
27.07.2018
15:12:39
мне не нравится звездочка

Google

Pavel
27.07.2018
15:12:48
Она мне напоминает о временах си и адресной арифметики

Denis
27.07.2018
15:13:53

Dmitry
27.07.2018
15:44:16
on conflict
А как с ним работать, если у меня эти поля не имеют ограничения уникальности.
Ситуация следующая.
Мне нужно Вставить значения если их нет, Если есть, то обновить один из столбцов (занят номер или не занят).
Сейчас проблему решаю через:
INSERT ... where not exists ()

Denis
27.07.2018
19:01:57

Pavel
27.07.2018
19:16:13

qwerty
27.07.2018
19:21:37
https://github.com/llvm-mirror

Pavel
27.07.2018
19:40:08
Спасибо, конечно, но я его уже собрал и теперь пол-года как минимум не буду к этому возвращаться.

Dmitry
28.07.2018
10:43:06
Пусть заимеют
предлагаешь составной ключ сделать и потом сделать его уникальным?
Кстати, а есть ли смысл вообще разделять одинарные и двойные кавычки? Может проще как в питоне сделать?
print('hello') вместо print("hello")?

Admin
ERROR: S client not available

NullSanya
28.07.2018
10:51:26
' ' для символа
"" для строки

Dmitry
28.07.2018
11:24:20
да это понятно, но надо ли такое разделение?

NullSanya
28.07.2018
11:24:59

Dmitry
28.07.2018
11:28:31
Ну если символ объявлен как char то значит это просто симол, или я не понял что ты имеешь ввиду?

NullSanya
28.07.2018
11:29:03

DarkRiDDeR
28.07.2018
11:45:16
Auto a = 'a';
А так какой? ))

NullSanya
28.07.2018
11:46:00
Я видел такой подход к строкам, но там не было типа символов

qwerty
28.07.2018
11:47:37
сейчас опять про питон начнется))

Google

Dmitry
28.07.2018
11:47:41
как в других языках проблему решают?

NullSanya
28.07.2018
11:47:48
просто убирают тип чар
и все

qwerty
28.07.2018
11:48:11

Dmitry
28.07.2018
12:06:31
Кстати, а вот по вашему опыту юнит-тесты на сколько жизнь облегчают? Нужно ли ими все покрывать? Или они тоже не дают существенных гарантий?

NullSanya
28.07.2018
12:08:24

Dmitry
28.07.2018
12:09:18
Просто в том же Ди они хотя бы в общем коде идут, а в Питоне при мысле про отдельные файлы меня передергивает т.к. сразу возникает ощещение двойной если не тройной работы

NullSanya
28.07.2018
12:10:02
в расте юнит в коде, интеграционные в папке тест

Oleg
28.07.2018
12:44:25
все крайние значения, нестандартные применения, выброс исключений, всё
ну в пределах разумного, конечно
а разумно это 1:1
но это если всё оформлено обособленно (классы с понятной зоной ответственности, нормальная архитектура, которая позволяет частями проверять) и если проверка проще чем код

Dmitry
28.07.2018
12:49:42
А ты как обычно делаешь? Пишешь Класс и потом сразу же юнит-тест на него?
или в начале все приложение и потом юнит-тесты на него после того как первая версия заработает?
Просто же не всегда понятно как в итоге код будет организован

Oleg
28.07.2018
12:55:29
даже если ты не знаешь как в итоге будет всё сделано это не мешает проверить составные части

Pavel
28.07.2018
13:22:30
Причем не только юнитов, а функциональные и интеграционные и приемочные

Dmitry
28.07.2018
14:21:40
Поясни на примере что такое функциональные и интеграционный.