@dlangru

Страница 607 из 719
Maxim
19.06.2018
11:39:33
и где-то там выше по стеку кто-то знает, чо делать

Денис
19.06.2018
11:42:57
например, идешь в базу читать объект по ключу, а таких нету, возвращаешь null-object
Возвращаешь не null-object, а ошибку и где-то там выше по стеку кто-то знает чо делать. Только в отличие от исключения на каждом уровне эту ошибку еще можно обволакивать дополнительной инфой

Я не говорю, что исключения - это фу, плохо. Тоже удобный механизм. Но они медленные (это правда проблема) и не очень гибкие - и это серьезные минусы.

Maxim
19.06.2018
11:44:05
ну это зависит от архитектуры, конечно, но лучше пустой объект, тогда бизнес-логику не придется мазать всякими if (ololo)

Google
Maxim
19.06.2018
11:44:47
Я не говорю, что исключения - это фу, плохо. Тоже удобный механизм. Но они медленные (это правда проблема) и не очень гибкие - и это серьезные минусы.
он не тоже удобный, а очень хорошо позволяет отделять бизнес-логику от логики обработки «катастроф» в приложении

и нету другого такого инструмента

всё остальное приходится обмазывать ифами-хуифами, а потом разбираться во всем этом хитросплетении

Ievgenii
19.06.2018
11:48:01
Ну такое...

При поиске записи в БД, имхо, нормально возвращать NullObject, а не исключение

Т.к. это просто не найдена запись

Maxim
19.06.2018
11:48:44
про что я и говорил)

Ievgenii
19.06.2018
11:48:45
БД же тебе не кидает исключение при поиске

А код, который кидает исключения при таких ситуациях, лично мне, не нравится.

Maxim
19.06.2018
11:49:43
если отсутствие чего-то (записи, соединения, памяти) — это распространенный кейс в каком-то алгоритме, оно должно тем или иным образом стать частью «бизнес-процесса»

Денис
19.06.2018
11:49:52
всё остальное приходится обмазывать ифами-хуифами, а потом разбираться во всем этом хитросплетении
Ну в целом explicit is better than implicit частенько. Строить иерархию исключений, проверять функции на уровень гарантии исключения - тоже такое себе удобство.

Dmitry
19.06.2018
13:19:28
Кто там хотел генерики в Gо? https://github.com/albrow/fo

Google
qwerty
19.06.2018
13:50:15
пффффффф. Ну всё! Я пошел в Go)))

А стоп!

это ЯП отдельный

не Go

произошла типичная подмена понятий)

Ievgenii
19.06.2018
13:52:23
func curry2__int__int__int(f func(int, int) int) func(int) func(int) int { return func(p1 int) func(int) int { return func(p2 int) int { return f(p1, p2) } } }

Капец)))

Pavel
19.06.2018
13:58:24
Мне go чем-то напоминает советский автопром

Раз простой - легко починить на месте.

С помощью кувалды и изоленты.

Dmitry
19.06.2018
14:15:24
это ЯП отдельный
Это суперсет, надстройка. Как С++ в молодости.

qwerty
19.06.2018
14:16:11
я не знаю что такое суперсет(

Dmitry
19.06.2018
14:16:48
func curry2__int__int__int(f func(int, int) int) func(int) func(int) int { return func(p1 int) func(int) int { return func(p2 int) int { return f(p1, p2) } } }
В Ди шаблоны в такую же лапшу раскрываются, просто мы это не видим обычно.

как будет антоним к "подмножеству"?

любой код на Го это валидный код на Фо

Ievgenii
19.06.2018
14:20:22
В Ди шаблоны в такую же лапшу раскрываются, просто мы это не видим обычно.
Вот именно! Мы его не видем. А тут ЭТО ты видешь и если что-то не так, ты не получаешь бектрейс своего fo, а go

И тебе нужно разбераться уже в нем...

Dmitry
19.06.2018
14:21:05
По идее, кроме как в бектрейсах тут тоже не должен видеть.

Pavel
19.06.2018
14:25:33
Google
Виталий
19.06.2018
14:26:35
Такое чувство будто сижу на канале по го, а не дланг)

Dark
19.06.2018
14:31:45
Pavel
19.06.2018
14:33:05
Да про дланг все и так понятно

В нем все хорошо, все инструменты есть. Надо просто сесть и закодить, а это самое трудное.

Кстати еще один вопрос хороший

Стоит ли делать микропакеты как JS или делать более крупные пакеты с подпакетами, примерно как в vibe.d

Я так понял что подпакеты это какая-то фишка dub и там все запутано

Dmitry
19.06.2018
14:48:27
Да вроде не особо запутанно, я сейчас имею дело с проектом, разбитым на подпакеты. Но они с непривычки просто могут быть менее понятны, так что с отдельнфми пакетами проще.

Виталий
19.06.2018
14:58:16
Народ, vibe.d умеет http/2 ?

Pavel
19.06.2018
15:19:31
Есть ПР https://github.com/vibe-d/vibe.d/pull/1160 но не доделан видимо

Pavel
19.06.2018
15:20:10
В любом случае лучше перед ним поставить nginx который умеет все что угодно и проксировать на vibe только динамические запросы.

Maxim
19.06.2018
15:27:35
И было бы ещё лучше общаться с nginx по fcgi или scgi)

Dark
19.06.2018
15:30:47
Хз почему так

Pavel
19.06.2018
15:31:25
Это терпимо, главное чтобы пакеты не влияли на размер/скорость итогового бинарника

Dark
19.06.2018
15:45:12
Кстати, как в CT чекнуть, что аргумент темплейта - структура?

Dmitry
19.06.2018
15:48:58
is(T==struct)

Google
Ievgenii
19.06.2018
16:42:10
Я так понял что подпакеты это какая-то фишка dub и там все запутано
Снова про ГО, но... У них интересно сделано. Ты можешь ввиде зависимости поставить не только репозиторий, а конкретную папку

Что тоже интересно

И интересно, что нет централизованного стореджа пакетов

Denis
19.06.2018
16:42:56
и у нас его нет, можно навернуть много разных

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

Ievgenii
19.06.2018
16:43:12
Позволяет вообще без проблем подключать внутри-фирмовые пакеты

Denis
19.06.2018
16:43:21
DUB тоже позволяет

Ievgenii
19.06.2018
16:43:48
Maxim
19.06.2018
16:54:44
А смысл?
протоколы проще, нет лишней мишуры

Ievgenii
19.06.2018
16:55:09
Admin
ERROR: S client not available

Maxim
19.06.2018
16:55:21
конечно

Denis
19.06.2018
16:55:47
Dmitry
19.06.2018
16:55:58
Как я понимаю в Раст главная фишка в том, что он позволяет гарантировать что потоки будут безопасными и без гонок. Вопрос а в Ди разве не так? У нас же есть тот же shared

Maxim
19.06.2018
16:57:05
а не гарантия того, что не будет утечек памяти и висящих указателей?

Dmitry
19.06.2018
17:04:17
Наверно ты прав

Dark
19.06.2018
17:04:30
Кстати, а как правильно делать UDA?

Dmitry
19.06.2018
17:19:24
Как я понимаю в Раст главная фишка в том, что он позволяет гарантировать что потоки будут безопасными и без гонок. Вопрос а в Ди разве не так? У нас же есть тот же shared
Так shared это не тот же, а наоборот, противоположность. В Расте система типов следит за тем, чтобы если один поток другому данные отдал, то сам уже их не меняет, т.е. они не дают иметь мутабельные разделяемые данные. Либо иммутабельные, либо не разделяемые, не общие. А shared это как раз то зло, от которого раст отгораживается, мутабельное и изменяемое.

Если не пользоваться shared, а следовать заветам std.concurrency, то будет уже ближе к Расту: либо шлешь иммутабельные данные, либо копируешь, не разделяя.

Но остается __gshared как хак, который может все испортить.

Google
Dmitry
19.06.2018
17:23:31
А от утечек памяти Раст не очень-то защищает: там чуть что везде счетчики ссылок используются, и заиметь где-то лишний указатель, который будет счетчик ссылок держать ненулевым, совсем не сложно. И будет эта память висеть.

Dmitry
19.06.2018
17:39:08
Ага, в чистом виде

Ievgenii
19.06.2018
19:47:28
dub add-path, dub add-local
Нужно будет попробовать

dub add-path, dub add-local
Нет, это совсем не то

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

Сам позаботиться о git pull во всех локальных репах ..

Dmitry
20.06.2018
06:10:10
Если мы пишем File file = File(“test.txt”, «r») То указатель на файл будет расположен на стеке. Содержимое файла в куче. Вопрос. А что будет если добавить кейворд new? Что и где тогда будет расположено?

Ievgenii
20.06.2018
06:20:40
Если мы пишем File file = File(“test.txt”, «r») То указатель на файл будет расположен на стеке. Содержимое файла в куче. Вопрос. А что будет если добавить кейворд new? Что и где тогда будет расположено?
При открытии файла - ты просто получаешь дискриптор ресурса (файл). Если ты из него начнешь читать, только тогда ты будешь получать его содержимое и тут все зависит где именно ты создаешь свой буфер, в который ты вычитываешь файл, в куче или на стеке...

Кстати, а как правильно делать UDA?
Не понятна суть вопроса.

Valeriy
20.06.2018
06:25:19
Кстати, а как правильно делать UDA?
https://dlang.org/phobos/std_traits.html hasUDA, getUDAs

Dark
20.06.2018
06:27:41
Не понятна суть вопроса.
Как правильно создавать UDA, что бы можно было его отличить.

Ievgenii
20.06.2018
06:29:11
Как правильно создавать UDA, что бы можно было его отличить.
На сколько я понимаю, UDA не создается. UDA - это способ вызова функции, а не ее описание

void test(int g){ int y = g;} 11.test(); // UDA test(11); // default calls

Ievgenii
20.06.2018
06:30:17
NullSanya
20.06.2018
06:30:18
которые @Test

Dark
20.06.2018
06:30:22

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