
Dmitry
31.01.2017
18:30:27
Читаю
Спасибо большое, только блин у этих больших примеров проблема. Читаешь вроде все норм, а как сам начинаешь задачу решать, так сразу fail
Пока не мог бы вот этот момент уточнить:

Google

Сергей
31.01.2017
18:38:02
абстрактный класс это обычный класс, просто его нельзя создать, но можно создать его потомков
тоесть ты не можешь написать
new Human()
но можешь
Human human = new Man()
если Man не abstract

Dmitry
31.01.2017
18:46:01
Правильно ли я понимаю что любой класс в котором есть хотя бы один абстрактный метод тоже будет абстрактным?

Сергей
31.01.2017
18:46:15
да, все верно
и потомок этого класса будет считаться абстрактным, если ты не опишешь в нем все абстрактные методы

Dmitry
31.01.2017
18:53:46
А зачем при реализации методов абстрактного класса нужно override использовать?
почему без этого не будет работать?

Сергей
31.01.2017
18:57:04
потому что компилятор защитает тебя от выстрела в ногу, когда кто-то поменял базовый класс (изменил параметры, имя метода), а твой код скомпилируется без ошибок но не будет работать(не будет вызываться)

Dmitry
31.01.2017
19:00:10
Почему поля класса публичные? Я просто всегда думал, что они приватные и их нужно выставлять чеерез методы
Я про модификаторы доступа знаю, но логики в публичных полях по умолчанию не увидел. Вроде как наоборот делают так чтобы туда никто ничего не мог записать извне

Сергей
31.01.2017
19:00:56
так и есть

Google

Сергей
31.01.2017
19:01:23
публичне потому что ты еще не написал private: protected:

Dmitry
31.01.2017
19:01:34
Лучше их сразу писать?

Сергей
31.01.2017
19:02:48
ну согласись в томже с++ немного тупо, что твой класс всегда начинается вот так
class MyClass
{
public:

Dmitry
31.01.2017
19:03:26
А смысл тогда конструктора в чем если их можно было бы так поставить?

Сергей
31.01.2017
19:03:27
и 99% твоих классов имют public: первой строчкой тела класса
да нельзя их так поставить
ты как програмист их прячешь

Dmitry
31.01.2017
19:05:00
В смысле прячу?
auto myclass = new MyClass();
myclass. name = "foo"
class MyClass()
{
string name;
}
это разве не выставит значение у name?

Сергей
31.01.2017
19:06:57
выставит, но ты же пишешь код, и должен его писать в соотвествии с логикой и здравым смыслом

Dmitry
31.01.2017
19:07:20
Мне просто минусы такого способа не очевидны — тупо опыта не хватает

Сергей
31.01.2017
19:07:54
поэтому пряч все в protected:

Dmitry
31.01.2017
19:08:21
так а если не спрячу то в чем минусы то?

Сергей
31.01.2017
19:10:21
так и надо прятать
причем тут минусы?

Dmitry
31.01.2017
19:11:22
ну так по умолчанию они же публичны т.е. что мешает их таковыми и оставить и инициализировать не через конструктор, а так как я написал

Сергей
31.01.2017
19:12:22
здравый смысл и парадигма обьектно орентированного програмирования

Dmitry
31.01.2017
19:12:47
не мог бы мне объяснить, мне это вообще не очевидно
Просто еще вчера я думал, что конструктор ( this() ) нужен для их инициализации. А теперь оказывается что их инициализировать можно и без него
Тогда возникает вопрос — он вообще зачем нужен

Google


Сергей
31.01.2017
19:30:20
тебе как програмисту ничего не мешает.
но как хорошему програмисту тебе мешают основные принципы ООП
а если точнее то Инкапсуляция
я не должен знать что и как там внутри класса у тебя работает, если я захочу использовать твой класс я буду работать только с методами, а какие там данные у тебя веутри класса меня это не должно заботить
вот то как это хочешь делать ты
class Eye
{
bool IsRightEye;
}
class Nose
{
}
class Head
{
Eye leftEye;
Eye rightEye;
Nose nose;
}
class Hand
{
bool IsRightHand;
}
class Leg
{
bool IsRightLeg;
}
class Body
{
Hand leftHand;
Hand rightHand;
Leg leftLeg;
Leg rightLeg;
}
class WrongHuman
{
Head head;
Body humanBody;
}
void main()
{
auto human = new WrongHuman();
human.head = new Head();
human.head.leftEye = new Eye();
human.head.rightEye = new Eye();
human.head.rightEye.IsRightEye = true;
human.head.nose = new Nose();
human.humanBody = new Body();
human.humanBody.leftHand = new Hand();
human.humanBody.rightHand = new Hand();
human.humanBody.IsRightHand = true;
human.humanBody.leftLeg = new Leg();
human.humanBody.rightLeg = new Leg();
human.humanBody.IsRightLeg = true;
}
а вот так будет когда ты будешь использовать конструкторы
void main()
{
auto human = new RightHuman();
}
А никто не знает групп по gamedev?


Dmitry
01.02.2017
13:24:35
Пhедположим конструктор описан так:
this(string host, string user, string password, string database, ushort port = 3306, SvrCapFlags capFlags = defaultClientFlags)
Могу я заполнить структуру в соответствии с этими полями и ему передать? Просто он ругается, что не понимает, что за структуру ему подсовывают т.к. он эти поля по отдельности хочет

Grigirii
01.02.2017
13:30:09
не можешь. можно только объявить в конструкторе, что принимаешь структуру и тогда передавать структуру
для удобства можно сделать 2 конструктора: один со структурой, вторйо по отдельности

Dmitry
01.02.2017
13:31:16
да там уже готовый класс, просто мне не нравится в конструктор передавать очень длинную строку полей
хочу как-то поадекватнее сделать

Grigirii
01.02.2017
13:32:26
всевозможные способы именованных аргументов и разворачиваний структур в список уже обсуждались не раз. текущий вердикт - в D этого нет и не предвидится

Dmitry
01.02.2017
13:33:30
А можно ссылку какую нить, а то найти не могу про "структуры в список"

Grigirii
01.02.2017
13:35:33
ищи по named params, там на форуме найдутся обсуждения в эту тему

Grigirii
01.02.2017
13:35:50
я имел в виду список аргументов, просто сократил неудачно

Dmitry
01.02.2017
13:54:50
А в каком месте лучше вызывать закрытие соединения?
auto c = mdb.lockConnection();
scope(exit) c.close();
Я правильно понимаю, что Connection должен создаваться при создании класса? И дальше будет переиспользоваться просто?

Grigirii
01.02.2017
14:04:21
это всё очень зависит от задачи и библиотеки, сложно абстракто ответить

Dmitry
01.02.2017
15:29:44
А стоит ли коннект в конструкторе создавать?
Просто если в нем, что-то не так, то не в конструкторе же исключение ловить?
if(connection is null)
{
mydb = new MysqlDB( ... );
connection = mydb.lockConnection();
}

Денис
01.02.2017
15:32:34

Dmitry
02.02.2017
07:29:30
Вопрос хитрый. А сколько для сайта нужно подключений? Т.е. если я в конструкторе буду создавать соеденение, то получится, что у меня одно соединение которое условно говоря будет 100 пользователей использовать? Так?

Сергей
02.02.2017
07:40:55
гугли
Database Connection Pool

Google

Dmitry
02.02.2017
07:41:43
уже погуглил, там про случай с сайтами не написано...
Просто допустим может ли один коннект 1000 подключений обработать?
ну и тд

Сергей
02.02.2017
07:42:43
да там все про сайты, в нете 90% инфы по БД про сайты

Dmitry
02.02.2017
14:31:06
А кто в диапазонах разбирается хорошо? Можете объяснить зачем выборке из БД (смотрю mysql драйвер) нужны подобне свойства:

Evil
04.02.2017
15:44:16
https://www.quora.com/Why-didnt-D-language-become-mainstream-comparing-to-Golang

Dmitry
04.02.2017
15:48:35
ИМХО причина лишь одна — попытка сделать язык максимально совместимый с С++. Опыт разных Rust и Go показал, что вторые плюсы нафиг никому не нужны. Одних хватает. Рынок часто готов забить на разные обратные совместимости если технология позволяет издержки сократить. Здесь Вальтер Брайт кучу времени на совместимость с Плюсами угрохал и результата как я понимаю практически никакого т.е. вместо добавления в языка новых возможностей было сделано кучу нежнхыз массам вещей.

Мерлин
04.02.2017
15:59:46
ну тащемта Go - это и близко не плюсы, да и выстрелили уже вполне себе

Admin
ERROR: S client not available

Dmitry
04.02.2017
16:07:58
Я вот сколько на Go не смотрю не могу себя заставить его учить даже. Dart вот очень понравился, а от Go просто воротит

Evil
04.02.2017
16:18:16
http://nomad.so/2015/03/why-gos-design-is-a-disservice-to-intelligent-programmers/

Мерлин
04.02.2017
16:23:53
На самом деле половина Go-хейтеров не писала на нём кода
К тому же, надо понимать, что гошечка - оно для того, чтобы писать продукт, а не изъясняться затейливо

Evil
04.02.2017
16:34:59
На D продукты за нехуй делать пишутся :)

Pavel
04.02.2017
16:35:46
Из ответа в посте я так понял что все ок и 14 лет для языка это не много. Т.е. можно спокойно писать на Д и не волноваться.

Evil
04.02.2017
16:36:21

Heorhi
04.02.2017
17:04:27
D не хватает пиара.
Хотя он уже сам себя перерос.
А go меня бесит многими вещами.

Dmitry
04.02.2017
17:34:46
Ребят, давайте коллективно статью на Хабр напишем. Я начал делать наметки, потом кому нить еще скину, чтобы мыслями дополнили

u13147
04.02.2017
17:35:35
Так вроде кто-то уже писал. Я лично о языке и узнал с хабра.

Dmitry
04.02.2017
17:53:27
Вот то что я накидал
https://kobra.io/#/e/-Kc9FPi9FJshyVSsTwAU

Google

Pavel
04.02.2017
17:54:33
Я тоже с хабра
Причем я долгое время думал что это какой-то скриптовый язык, который сделали очень похожим на C/C++

Dmitry
04.02.2017
17:56:40
Я думаю особо экспертную статью можно не писать, на хабре все равно дай бог процентов 5, кто глубоко в теме, остальные так поверхностно. Можно просто по основным косякам Go пробежаться

Pavel
04.02.2017
17:58:39
Но эти 5 процентов обязательно какашками закидают в комментариях )
Они только и выискивают такие статьи
Статья интересная, но я могу посоветовать перед публикацией дать ее на ревью go-фанату, чтобы он максимально оптимизировал go исходники

Dmitry
04.02.2017
18:02:40
Да пусть кидают. Лишне упоминание не помешает.
Экспертную статью писать тяжело, и ее уже через пол дня никто и нн вспомнит
А так общие вещи проще и для большинства очевиднее

Мерлин
04.02.2017
18:07:12

Dmitry
04.02.2017
18:08:53
Если есть мысли лучше допиши их плиз
А то я не на столько в теме

u13147
04.02.2017
18:24:02
» 6. На Go крайне быстрая компиляция
» Проект в 15 тыс строк кода на D у меня собирается за
» несколько секунд. Куда уж быстрее?
А разве компиляция и скорость выполнения бинарника не являются взаимно обратными?

Pavel
04.02.2017
18:24:29
нет


Мерлин
04.02.2017
18:25:10
>Единственный (и то очень сомнительный плюс) это поддержка Google
Ну не оч. Куча языков от гугла не взлетели, тот же Dart и Go! (да, это другой язык)
Основные плюсы гошечки - это офигенно удобная и простая модель асинхронности на основе CSP из коробки, примитивизм и читаемость кода (не надо знать go, чтобы понимать его код, да и учится он дня за два), богатая стандартная библиотека (веб сервисы можно клепать прямо без сторонних библиотек), прикрученное гвоздями форматирование (я считаю это плюсом, очень упрощает понимание чужого кода), моментальная (меньше секунды на большинстве проектов) компиляция и приличная, уровня си, джавы и ноды скорость работы, низкое потребление памяти и вообще в целом неплохой рантайм, который к тому же активно пилят, удобная модульность.
Вообще, когда пишешь на гошечке, ощущения близки к питону, этакое ощущение лёгкости, как от скриптовых языков, вот серьёзно. Сам Go - это что-то типа питонистого си, ориентированного на сетку.
Минусов тоже полно.
Язык очень бедный на средства выражения, никакого метапрограммирования кроме интерфейсов (это пытаются исправить кодогенерацией, она очень популярна в go, но это костыли), тоталитарное управление со стороны авторов (Роб Пайк и co.) в стиле "у нас не будет X потому что идите нахуй, вот почему, но зато у нас будут альясы типов", отсуствие общепринятого пакетного менеджера (это боль), и центра пакетов (хотя эту экологическую нишу сейчас занял гитхаб), GOPATH как место хранения зависимостей (это адище), структуры могут неявно имплементировать интерфесы, по сути замороженность языка - с версии 1.5 изменяются только кишки и стандартная библиотека в гомеопатических дозах
Это если навскидку


Сергей
04.02.2017
18:25:19
15 тыс строк это же мало

Pavel
04.02.2017
18:26:28
Только этот пункт написан бездарно :) "несколько секунд" "куда уж быстрее" - это не по-прогерски. Надо написать конкретно метрики и сравнить с программой на го

Мерлин
04.02.2017
18:40:49
А закидать Go какахами с позиции D не получится, потому что D хочет конкурировать с C++, C и рустом, а Go соревнуется (и частенько уделывает соперников) с питончегом, рубями, пыхом и частично с жабкой.
А ещё он уже с нами и надолго и от этого никуда не деться, такие дела

Pavel
04.02.2017
18:42:31
ну вообще D хочет конкурировать со всеми)

Мерлин
04.02.2017
18:42:58
Со всеми не получится :3

Pavel
04.02.2017
18:43:02
быть легким в написании как питон, быстрым как си и мощным как жава