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

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

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

Google

Ievgenii
19.06.2018
11:44:46

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

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
как будет антоним к "подмножеству"?
любой код на Го это валидный код на Фо

Ievgenii
19.06.2018
14:20:22
И тебе нужно разбераться уже в нем...

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

Pavel
19.06.2018
14:25:33

Google

qwerty
19.06.2018
14:25:49

Виталий
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)

Ievgenii
19.06.2018
16:41:06

Google

Ievgenii
19.06.2018
16:42:10
Что тоже интересно
И интересно, что нет централизованного стореджа пакетов

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:28:52

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

Ievgenii
19.06.2018
19:47:28
Это ты должен локально склонить репу
Сам позаботиться о git pull во всех локальных репах ..

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

NullSanya
20.06.2018
06:17:02

Valeriy
20.06.2018
06:17:05
Если ты прочитаешь его и запишешь в куче, то в куче

Ievgenii
20.06.2018
06:20:40

Valeriy
20.06.2018
06:25:19

Dark
20.06.2018
06:27:41

Ievgenii
20.06.2018
06:29:11
void test(int g){ int y = g;}
11.test(); // UDA
test(11); // default calls

NullSanya
20.06.2018
06:29:57

Ievgenii
20.06.2018
06:30:17

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

Dark
20.06.2018
06:30:22