@dlangru

Страница 107 из 719
Dmitry
21.11.2016
19:53:13
Денис, а нет идей что оно может падать то

Денис
21.11.2016
19:57:37
Денис, а нет идей что оно может падать то
Хз. Надо поглядеть, что сервер самой базы говорит. В логах или в консоль он должен печатать, что дескать ждём подключения по такому-то порту и можно посмотреть пыталось ли приложение законнектиться или даже не дошло до этого.

''' if(conn !is null) { conn = ds.getConnection(); } '''

Сдаётся мне что тут логический косяк

Google
Денис
21.11.2016
20:10:59
Чому conn получает коннекшн, если оно не нуль

То есть изначально оно нуль и получается этот самый коннекшн никогда и не получит

Pavel
21.11.2016
20:11:54
!is -> is

Dmitry
21.11.2016
20:15:37
Денис, ты походу прав тк падать начало после переделки этого места

Завтра вечером смогу проверить

Да. Походу так и естт

А такие ошибки как отлавливать?

Oleg
21.11.2016
20:18:00
Dmitry
21.11.2016
20:18:53
Ну да. Тут же трай-кетч не поможет

Oleg
21.11.2016
20:29:31
пиши тесты

на каждую строчку

а сколько покрыл тестами можно проверить с помощью coverage функции компилятора

Dmitry
22.11.2016
04:45:25
А суть теста в чем. Я много про них читал и понимаю их определение. Но я не могу понять как они от логических ошибок могут защитить?

Google
Dmitry
22.11.2016
04:45:58
Я же в тесте бы по инерции тоже самое бы написал

qwe
22.11.2016
06:09:10
Я же в тесте бы по инерции тоже самое бы написал
Тут играет человеческий фактор. Можно только посоветовать отдыхать периодически и во время разработки не отвлекаться

В D и так полно вещей, чтоб сделать безопасный читаемый код. Есть еще такая вещь, называется статический анализатор, но у D их пока нет кажется

Oleg
22.11.2016
06:57:18
В D и так полно вещей, чтоб сделать безопасный читаемый код. Есть еще такая вещь, называется статический анализатор, но у D их пока нет кажется
Много вещей в D либо не разрешены, либо вызывают warning, который тоже может интерпретироваться как ошибка, так что некоторый статический анализ все-таки есть

qwe
22.11.2016
07:20:37
я имел ввиду что-нибудь уровня pvs studio)

Oleg
22.11.2016
08:10:13
да я понял... pvs studio не пользовался, но читал несколько раз про продукт. Мне кажется подобные вещи должны быть сразу в компиляторе. Для D отчасти это так. Например @safe режим, или pure некоторые вещи запрещают, да и сам язык не поддерживает некоторых закидонов, которые в C++ можно делать.

элементарно присвоение в if нельзя делать

но создавать переменные можно

qwe
22.11.2016
08:13:15
что-то я не понял как создавать переменные без присвоения

нельзя присваивать уже созданным перенным что-нибудь?

Oleg
22.11.2016
08:13:40
1 сек

import std.stdio; void main() { auto a = 5; //if (a = 6) // writeln("oops"); auto list = ["yes" : 1, "no" : 0]; if (auto x = "yes" in list) writeln(x); } закоментированные строки не компилятся с ошибкой вида "нельзя присваивать в выражении if, возможно вы имели ввиду ==", а во втором случае в x будет лежать не null адрес

qwe
22.11.2016
08:17:50
да, я так и подумал

круто

не нужен йода style)

хотя интересно насколько это увеличивает время компиляции

некоторые вещи все-таки не хотелось бы решать компилятором, а отдельным инструментом

Oleg
22.11.2016
08:20:33
по мне так главное чтобы читать было удобно и работало в итоге быстро

время компиляции очень сильно увеличивается если есть инстанцирование шаблонов, которые используют mixin'ы

Google
Oleg
22.11.2016
08:22:21
там и памяти можно выжрать прилично

qwe
22.11.2016
08:23:02
я понял

Oleg
22.11.2016
08:24:01
там и памяти можно выжрать прилично
настолько прилично, что пару раз мне не хватило 6гб оперативы...

qwe
22.11.2016
08:25:41
что-то совсем грустно

Oleg
22.11.2016
08:30:19
да я сам дурак) просто грустно, что если это не входит в оперативу нет возможности это как-то кэшировать на диск средствами компилятора, только через swap системы, который у меня отключен (ssd портить не хочу лишний раз)

qwe
22.11.2016
08:42:10
6 гб все равно много

мне кажется я когда на UE4 что-то собираю, столько не съедается RAM

на C++ разумеется

Oleg
22.11.2016
08:42:56
ну так С++ же

там каждый файл отдельно компилируется в объектный

а в D принято всё вместе собирать

а ты хорошо ue4 знаешь?

qwe
22.11.2016
08:44:29
не, плагин один с горем пополам поддерживаю для ИК)

время на это надо

Oleg
22.11.2016
08:44:51
что есть ИК?

инфракрасный порт?)

qwe
22.11.2016
08:45:10
инверсивная кинематика

)

Oleg
22.11.2016
08:45:15
воу

Grigirii
22.11.2016
08:50:50
Я же в тесте бы по инерции тоже самое бы написал
TDD говорит, что сначала пишется тест, потом проверяется, что он не проходит, а потом уже пишется код. По факту удобнее сначала накидать скелет реализации и интерфейс, потом написать тесты и потом реализацию.

Google
Армен
22.11.2016
10:44:39
Всем привет! Есть такой код:

import std.stdio; enum Color { blue, green, red }; class Point { int x; int y; Color color; this(int x, int y, Color) { this.x = x; this.y = y; this.color = color; } bool opEquals()(auto ref const Point rhs) { if((this.x == rhs.x) && (this.y == rhs.y)) { return true; } else return false; } } void main() { auto x = new Point(3, 2, Color.red); auto c = new Point(3, 2, Color.red); writeln(x == c); }

из учебника али чехрелли. он в данном случае выдает False вместо true. Если x == c заменить на x.opEquals(c), то срабатывает правильно

это глюк или я накосячил?

Oleg
22.11.2016
10:46:10
операция == должна вызывать opEquals, но возможно тут сравнивает адреса

для сравнения адресов используется is

Армен
22.11.2016
10:46:55
мне тоже так показалось

x!=c - выдает true. по ходу, адреса сравнивает

Oleg
22.11.2016
10:48:02
попробуй убрать шаблонизацию

Admin
ERROR: S client not available

Oleg
22.11.2016
10:48:14
auto ref const на ref const

и скобки пустые

и лучше для класса поставить overload

auto ref в случае с классом не оправдан, класс всегда передаётся по ссылке

возможно в твоём случае не происходит перегрузки

вернее её точно не происходит

шаблонный же метод

https://dlang.org/spec/operatoroverloading.html#equals

для структур можно разное делать, а для класса видимо нет

Google
Oleg
22.11.2016
10:51:36
хотя...

можно сделать такой хак class Point { ... override bool opEquals(Object obj) { if (auto p = cast(Point)obj) return opEquals(p); else return super.opEquals(obj); } ... }

Grigirii
22.11.2016
10:56:36
вот только хотел написать. для классов надо делать с override и без шаблона. для структур не оверрайд и как хочешь. но выглядит всё равно криво

Oleg
22.11.2016
10:57:15
согласен, как-то раньше не натыкался на сравнение классов...

ну если только по адрессу

Grigirii
22.11.2016
10:58:15
самое странное, что при нарушении сигнатуры или сужении компилятор не ругается на override. если писать public override bool opEquals()(Point rhs) { это вообще компилиться не должно, но компилится и просто не вызывается

Oleg
22.11.2016
10:58:44
по сути то это не компилится)

шаблонные методы инстанцируются только если вызываются

Армен
22.11.2016
10:59:03
Просто без шаблона и override не компилится, да

Oleg
22.11.2016
10:59:55
то есть компилятор видит, что есть достаточно конкретный opEquals в базовом классе, вставляет его , а до нового с шаблоном не доходит

вот он и не инстанцируется

следовательно не компилится

а override с шаблонами использовать, к сожалению, нельзя

на то есть веские причины, хотя иногда было бы оч удобно

Grigirii
22.11.2016
11:00:45
а у меня почему-то во всех вариациях компилится. DMD 2.070.0. видимо пора обновляться

Oleg
22.11.2016
11:01:09
следовательно не компилится
я про конкретный участок кода

Армен
22.11.2016
11:01:27
Получается, только с приведением?

Oleg
22.11.2016
11:01:40
если вставить туда pragma(msg, "..."), не должно вывестись

Получается, только с приведением?
не скромный вопрос можно?)

зачем точка — класс?

Армен
22.11.2016
11:03:48
Это из упражнения) Реально решение через cast только.



Grigirii
22.11.2016
11:09:07
впринципе в доке действительно всё так: https://dlang.org/spec/operatoroverloading.html#equals

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