Home
golang
golang@conference.jabber.ru
Среда, 13 апреля 2016< ^ >
Deirz установил(а) тему: Go Programming Language.
|| Изучаем: https://gobyexample.com/
|| Тур: http://tour.golang.org/
|| Как писать код: http://golang.org/doc/code.html
|| Как писать эффективный код: http://golang.org/doc/effective_go.html
|| FAQ: http://golang.org/doc/faq
|| 99% ответов о языке Go тут: http://golang.org/ref/spec
|| Сторонние либы: http://godoc.org/ https://github.com/avelino/awesome-go
|| Логи: http://chatlogs.jabber.ru/golang@conference.jabber.ru/
|| This chatroom does not adhere to any codes of conduct, be they implied or explicitly stated by someone. Your feelings can and WILL be hurt without a warning.
Конфигурация комнаты
Участники комнаты

GMT+3
[00:10:40] Magiq вышел(а) из комнаты
[00:19:07] <mantyr@jabberon.ru> https://golang.org/src/container/ring/ring.go тут на 35 строке часом не ошибка ли?:) if r.next == nil { надо заменить на if r.prev == nil {
[00:20:34] <kpmý> это неважно
[00:20:45] <mantyr@jabberon.ru> 70 строка… не понимаю в чём смысл такого дао… p = p.next
[00:21:10] <mantyr@jabberon.ru> А… кажется дошло:) Ну китайцы..
[00:21:47] <kpmý> ну ты не расстраивайся, молодежь сейчас в алгоритмах не прокачана
[00:22:05] <kpmý> это не нужно миру
[00:22:18] <mantyr@jabberon.ru> Короче такой кольцевой буфер всё равно надо защищать снаружи… внутри никаких защит нет.
[00:22:54] <mantyr@jabberon.ru> Алгоритмы как раз нужны, но обёртка у них просто нынче другая:) Сервис, красивость и всё такое:)
[00:24:24] <kpmý> математика сейчас нужна но обёртка у неё другая, кубики, пирамидки, шарики
[00:24:47] <kpmý> сделай кольцевой буфер на базе канала, не будь псом
[00:29:22] unixlike вышел(а) из комнаты
[00:36:08] kpmý вышел(а) из комнаты
[00:37:57] begemot_sun вышел(а) из комнаты
[00:39:05] mks2 вышел(а) из комнаты
[00:44:55] <mantyr@jabberon.ru> Не, то что мы тут обсуждали требует произвольный доступ к любому элементу по его индексу.. канал же… ну только вход и выход:)
[00:52:53] kms вышел(а) из комнаты
[00:54:26] Deirz вошёл(а) в комнату
[03:46:13] <mantyr@jabberon.ru> https://github.com/ark-lang/ark
[03:47:27] <mantyr@jabberon.ru> Странные люди, всё чаще стали писать языки программирования на Golang'е… один другого страннее...
[03:48:42] <mantyr@jabberon.ru> Три тысячи коммитов… нда…
[03:57:34] Deirz вышел(а) из комнаты
[04:42:59] plumbum вышел(а) из комнаты
[04:44:31] krab вошёл(а) в комнату
[05:36:54] <mantyr@jabberon.ru> Не спать всю ночь что бы к утру приготовить вкусный и апетитный здоровенный кекс - легко:)
[06:50:54] krab вышел(а) из комнаты: Left Vacuum-IM
[06:55:13] krab вошёл(а) в комнату
[08:10:53] krab вышел(а) из комнаты: Left Vacuum-IM
[08:14:40] cheshir вошёл(а) в комнату
[08:34:21] begemot_sun вошёл(а) в комнату
[09:19:52] mks2 вошёл(а) в комнату
[09:35:00] avz вошёл(а) в комнату
[09:44:49] mantyr@jabberon.ru вышел(а) из комнаты
[09:50:22] Magiq вошёл(а) в комнату
[10:02:23] avz вышел(а) из комнаты
[10:28:03] plumbum вошёл(а) в комнату
[10:36:58] ftrvxmtrx вошёл(а) в комнату
[10:37:53] kpmý вошёл(а) в комнату
[10:39:06] ermine вошёл(а) в комнату
[11:31:09] Laz вошёл(а) в комнату
[11:39:22] <Laz> для системы типов там индукцию применяют
[11:39:40] <Laz> базис индукции - всё говно, кроме пчёл
[11:46:17] cheshir вышел(а) из комнаты: Replaced by new connection
[11:46:18] cheshir вошёл(а) в комнату
[12:10:05] kpmý вышел(а) из комнаты
[12:15:11] kms вошёл(а) в комнату
[12:32:24] <Deirz> система типов для доменной области может требовать странных вещей. Наверно и не стоит делать дополнительные базовые типы для этого
[12:32:48] <Deirz> *универсальные базовые типы
[13:12:51] Deirz вышел(а) из комнаты
[13:12:58] Deirz вошёл(а) в комнату
[13:22:39] cheshir вышел(а) из комнаты
[13:23:06] cheshir вошёл(а) в комнату
[13:48:39] <Magiq > пытаюсь умножить и ошибка mismatched types int and string
[13:48:57] <Magiq > притом что я пробую на play.golang умножить число и флоат и оно умножается
[13:49:07] <Magiq > invalid operation: total.Get() * t.coef (mismatched types int and float64)
[13:49:22] <Magiq > http://play.golang.org/p/6ar73GGTCg
[13:49:51] <Magiq > почему на сайте в голенге я могу умножить число на флоат а локально нет?
[13:53:20] <Laz> локально тоже можешь
[13:53:22] <Laz> ошибку прочитай
[13:53:28] <Laz> > mismatched types int and string
[13:56:51] <Magiq > ошибка копипасты
[13:56:55] <Magiq > mismatched types int and float64
[13:57:29] <Laz> а на сайте оно где работает?
[13:57:30] <Magiq > http://stackoverflow.com/a/23658470 вот ответ на мой вопрос
[13:58:05] <Magiq > просто числовая константа и переменная с числом по разному себя ведут
[13:58:13] <Laz> ответ такой, что надо свой код пастить
[13:58:21] <Laz> тогда будет та же ошибка
[13:58:29] <Magiq > total.Get() * t.coef
[13:58:31] <Laz> When you write 5 directly in the source-code that's called a constant.
[13:58:40] <Laz> на самом деле оно называется литерал
[13:58:43] <Magiq > переформулирую
[13:59:19] <Magiq > Почему с литералом числовым и плавающей точкой умножение допустимо, а через вызов функции и/или переменной нет
[13:59:45] <Laz> потому что когда компилятор видит нетипизированный литерал, он преобразует его в константу подходящего типа
[14:00:08] <Laz> в случае с умножением на флоат подходящим типом будет тоже флоат
[14:00:28] <Laz> гм
[14:00:45] <Magiq > http://play.golang.org/p/-dMzcwTWpl
[14:00:48] <Magiq > держи
[14:00:50] <Magiq > special for you
[14:01:07] <Laz> спасибо
[14:01:11] <Laz> так и в чём вопрос?
[14:01:17] mantyr@jabberon.ru вошёл(а) в комнату
[14:01:47] <Magiq > почему литерал не типизирован?
[14:01:57] Deirz вышел(а) из комнаты
[14:02:13] Deirz вошёл(а) в комнату
[14:02:44] <Laz> потому что ты его тип не указал
[14:02:50] <Laz> точнее
[14:02:54] <Laz> литерал-то типизированный
[14:03:03] <Laz> в данном случае это целочисленный литерал
[14:03:10] <Deirz> числовые константы как-бы нетипизированы
[14:03:13] <Laz> он может константы разных типов представлять
[14:03:46] <Deirz> они принимают тот тип, который нужен выражению
[14:03:51] <Deirz> числовой тип, конечно
[14:04:48] <Laz> мг
[14:04:51] <Laz> да, точно
[14:05:13] <Magiq > почему тогда оно в переменной не может применить тот тип который нужен выражению
[14:05:27] <Laz> потому что язык со строгой типизацией
[14:06:04] <Magiq > а числовой литерал без типа это строгая типизация?
[14:06:33] <Laz> вполне
[14:06:41] <Laz> нетипизированная константа не меняет свой тип
[14:06:46] <Laz> у неё его вообще нет
[14:07:58] kpmý вошёл(а) в комнату
[14:08:43] <Magiq > чем числовой литерал отличается от значением 4 в переменной?
[14:08:56] <Laz> всем
[14:09:10] <Laz> лучше скажи, что у них общего
[14:16:18] <Magiq > результат принта обоих будет одинаковый
[14:16:41] <Magiq > fmt.Printf("%v %v", 4, a)
[14:16:54] <Magiq >  сойдет ?)
[14:17:56] <Laz> ну, знаешь
[14:18:13] <Laz> у touch 1 и rm /etc/passwd тоже вывод одинаковый
[14:18:22] <Magiq > операция сравнения дает true
[14:19:17] <Magiq > еще говорить?
[14:19:49] <Laz> не, спасибо
[14:19:51] <Laz> я всё понял
[14:20:19] <Magiq > https://blog.golang.org/constants
[14:20:23] <Magiq > статья по теме
[14:20:48] <Magiq > Many mysterious bugs, crashes, and portability problems are caused by expressions that combine integers of different sizes and "signedness"
[14:26:42] <Laz> всё правильно говорят
[14:26:51] <Laz> мы даже вопросы про эту херню задаём на собеседовании
[14:30:08] <Magiq > The answer is that an untyped constant has a default type
[14:30:25] <Magiq > so much pain
[14:31:41] <Magiq > после таких статей мне кажется что другие языки я еще меньше знаю
[14:31:56] <Magiq > Laz зачем такие вопросы задавать?
[14:32:14] <Laz> чтоб определить уровень кандидата
[14:32:16] <Magiq > вопрос из ряда олимпиадных задач
[14:32:20] <Laz> какой?
[14:32:39] <Magiq > определить уровень зубрежа?
[14:32:47] <Laz> какой вопрос не понравился?
[14:32:55] <Laz> который мы на собеседовании спрашиваем?
[14:32:58] <Laz> ты его видел вообще?
[14:33:12] <Magiq > мы даже вопросы про ___эту херню____ задаём на собеседовании
[14:33:25] <Magiq > зачем вы херню спрашиваете?
[14:33:33] <Laz> мы спаршиваем __про херню__
[14:33:36] <Laz> потому что она есть в языке
[14:34:20] <Magiq > а что вы еще спрашиваете?
[14:34:27] <Deirz> untyped constants - довольно важная фича
[14:34:38] <Laz> кстати, да
[14:34:39] <Deirz> можно писать например 5 * time.Second
[14:34:52] <Laz> можно про них и у гоферов спрашивать
[14:35:00] <Laz> я писал про собеседование на С, есичо
[14:35:25] <Magiq > у меня после таких приколов
[14:35:30] <Deirz> на си ввиду более слабой типизации всё более равномерно
[14:35:32] <Magiq > чувство что я некудышний программист
[14:35:55] <Laz> я именно про expressions that combine integers of different sizes and "signedness"
[14:36:02] <Laz> там можно дичайше фрикануть
[14:37:05] <Deirz> kpmý, бтв утонуло сообщение в истории, но я писал тебе, что универсальные примитивы данных для доменной области делать не нужно
[14:37:22] <Deirz> потому что вся суть доменной области - в её специализации
[14:37:44] <Laz> ещё есть вопросы про размер структурки
[14:38:36] <Laz> и про продвижение ещё, да
[14:38:50] <Laz> и когда перешли на плюсы, некоторые ответы поменялись
[14:38:56] <Laz> это был фейл :)
[14:39:15] <Magiq > почему fmt.Printf("%T", 4) выдает int
[14:39:20] <Magiq > если 4 untyped
[14:39:41] <Laz> потому что присваивается дефолтный тип
[14:39:57] <Magiq > кому присваивает?
[14:40:06] <Laz> я думаю, компилятор
[14:40:37] <Magiq > на вопрос кому можно ответить существительным в дательном падеже
[14:40:47] <Laz> терму `4'
[14:40:48] <Magiq > ты имел ввиду компилятору?
[14:41:14] <Laz> не, я вопрос неправильно прочитал
[14:42:31] <Magiq > что такое терм `4' ?
[14:43:02] <Laz> честно говоря, не силён в этой теме
[14:43:26] <Laz> это выражение языка
[14:44:06] <Magiq > судя по всем все гараздо проще, функция принимает константу и создает локальную переменную, а локальная переменная после присвоения конечно же становиться типизированной
[14:44:34] <ftrvxmtrx> ```
An untyped constant has a default type which is the type to which the constant is implicitly converted in contexts where a typed value is required, for
instance, in a short variable declaration such as i := 0 where there is no explicit type. The default type of an untyped constant is bool, rune, int,
float64, complex128 or string respectively, depending on whether it is a boolean, rune, integer, floating-point, complex, or string constant.
```
[14:44:46] <ftrvxmtrx> спеку почитай
[14:45:22] <Magiq > это не отвечает на вопрос почему принт выводит тип
[14:46:33] <ftrvxmtrx> это может и не отвечает. почитай спеку и попробуй найти ответ там
[14:46:53] <ftrvxmtrx> лучше спеки на этот вопрос всё равно никто не ответит
[14:48:19] <Magiq > я уже на него ответил
[14:48:27] <Magiq > и вопрос на ответ не в спеке а в блоге
[14:48:41] <Magiq > ссылку я приводил выше
[14:49:04] <Deirz> какой ты недовольный
[14:49:14] <Deirz> кончай бухтеть, начинай думать
[14:49:34] <Deirz> чтобы понять константы, ты должен думать как константа
[14:50:07] <Deirz> что сделал бы Роб Пайк, если бы ему нужно было ввести константы в язык?
[14:52:55] <kpmý> Deirz: завал на работе, позже почитаю лог.
[14:56:50] <Magiq > почему в go нету optinal parametrs
[14:57:02] <Magiq > насколько я понимаю это не противоречит концепции го
[14:57:11] <Magiq > или я что то путаю?
[14:58:24] <Magiq > we do not want this kind of feature
[14:58:30] <Magiq > pierre.gotab
[15:11:22] <Laz> опциональные параметры не нужны
[15:11:26] <Laz> используй структуры
[15:12:12] <Deirz> вот правда, не нужны
[15:14:29] <mantyr@jabberon.ru> Странно, но func name(params …string) не считается за опциональные параметры… но по сути они таковыми и есть, только одного типа.
[15:14:55] <Laz> по сути это []string
[15:15:04] <Laz> только с хитрым синтаксисом
[15:15:16] <mantyr@jabberon.ru> Главное что ты можешь вызывать функцию и ничего ей не передавать:)
[15:15:34] <mantyr@jabberon.ru> Я такое часто использую.
[15:16:25] <Laz> обмазываешься сайд-эффектами?
[15:17:45] <Deirz> т.е. ты используешь func name(params …string) чтобы вызывать name() или name(value) ?
[15:17:58] <Deirz> и никогда не вызываешь name(value1, value2) ?
[15:18:15] <mantyr@jabberon.ru> Deirz, более того, я могу делать так func (key string, params …string)
[15:18:57] <Laz> воще огонь
[15:18:59] <mantyr@jabberon.ru> Даже если я вызову name(value1, value2) код внутри функции, если не предполагает обработку сразу нескольких объектов - обработает только нужное их количество.
[15:19:31] <Laz> это очень удобно
[15:19:45] <Laz> особенно с точки зрения проверки правильности
[15:20:09] <mantyr@jabberon.ru> Например я делаю так conf.Get("key"), conf.Get("key", "section"), conf.Get("key", "section", "file"), если какой-то из параметров не задан - берётся заранее определённый по умолчанию. Key же обязательный… если его не будет - не скомпилируется.
[15:20:47] <Laz> а если лишнего задать?
[15:20:52] <mantyr@jabberon.ru> Но надо окуратно таким подходом пользоваться, описывать в комментах какое поведение у такой функции есть.
[15:21:01] <mantyr@jabberon.ru> Если лишние задать - они просто проигнорируются.
[15:21:14] <Deirz> ммм, джаваскриптом пахнуло
[15:21:24] <Laz> ага
[15:21:34] <Laz> var param = param || "eat shit";
[15:21:40] <Laz> или как там оно выглядит
[15:24:32] <mantyr@jabberon.ru> :)
[15:32:01] <kpmý> отличный способ заменить геттеры/сеттеры такой шнягой
func (o *Object) PropertyName(setValue ...type)type{
   if len(setValue)>0{o.value = setValue[0]}
   return o.value
}
[15:33:18] <mantyr@jabberon.ru> Эм… не знаю кому нужна такая функция с хз каким результатом, но да, концепт такой, только у тебя форматирование нарушено в условии:)
[15:33:19] <azovcvb> Это как-то слишком в стиле приплюснутого.
[15:34:16] <Laz> где там что приплюснуто?
[15:34:29] <azovcvb> Непонятное число аргументов в функции же.
[15:34:33] <Laz> это больше на пропертей из петона и сешарпа же
[15:35:02] <Laz> похоже
[15:35:32] <mantyr@jabberon.ru> Такие функции требуют комментария и лучше бы там по смыслу было это понятно.
[15:36:00] <Laz> что-то у тебя каждая вторая функция требует комментария
[15:36:07] <Laz> нахрен надо
[15:36:11] <Laz> пусть смотрят код
[15:36:46] <mantyr@jabberon.ru> Почему каждая вторая? Ты на мой гитхаб чтоли залез?:)
[15:37:28] <kpmý> mantyr@jabberon.ru: где ты там увидел хз какой результат, поясни
[15:38:07] <Laz> [15:20:08] <mantyr@jabberon.ru> Но надо окуратно таким подходом пользоваться, описывать в комментах
[15:38:13] <Laz> [15:34:49] <mantyr@jabberon.ru> Такие функции требуют комментария
[15:38:22] <Laz> я вот про это вот
[15:38:29] <kpmý> надо строить оккурат
[15:39:10] <Deirz> для людей, у которых всё ок
[15:54:06] <mantyr@jabberon.ru> Похоже надо будет golang supervisord делать… а то щас дал настройки для запуска софта одной девушке-заказчице и кажется я её добил:)
[15:55:32] <Laz> дык есть уже супервизоры
[15:55:33] <Laz> и не оди
[15:55:35] <Laz> н
[15:55:45] <Laz> но если сделаешь нормальный - свисни
[15:56:02] <Laz> только сделай, чтоб им можно было управлять
[15:56:17] <mantyr@jabberon.ru> Ещё можно было бы сделать такую штуку. Запускаешь приложение впервые - оно прописывается в supervisord под определённым именем и дальше уже не нужно вручную никуда тыркать эти настройки… но это для своего сервера удобно, для клиентских где нифига нет - надо просто - запустил и чтоб оно ушло в демонизацию… желательно через PHP админку:)
[15:56:38] <mantyr@jabberon.ru> Как именно ты хочешь управлять супервизором - давай составим описание.
[15:57:03] <Laz> примерно так же, как это делает twiddler
[15:57:08] <Laz> только чтоб было покруче
[15:57:18] <mantyr@jabberon.ru> Не видел такой. Опиши словами чего ты хочешь от supervisord управления.
[15:57:42] <Laz> https://github.com/mnaberez/supervisor_twiddler
[15:58:16] <mantyr@jabberon.ru> Меня устраивает питоновский supervisord, по сути там supervusorctl (start|stop|reload|restart) program
[15:58:27] <Laz> статовать процесс, остановить процесс, получить статус процесса, получить логи процесса
[15:58:32] <Laz> плюс обратная связь
[15:58:41] <Laz> сигналы, что процесс стартовал, процесс помер
[15:58:45] <Laz> и поток логов
[15:59:33] <mantyr@jabberon.ru> Понятно, ничего нового короче:)
[15:59:37] <Laz> ну да
[15:59:51] <Laz> вот у супервизора не хватает обратной связи
[15:59:59] <Laz> плюс логи он отдаёт криво
[16:00:08] <mantyr@jabberon.ru> Обратная связь - в данном случае что?
[16:00:15] <Laz> сигналы, что процесс стартовал, процесс помер
[16:00:17] <Laz> и поток логов
[16:00:37] <mantyr@jabberon.ru> Куда сигналы-то отправляются?
[16:00:47] <Laz> заинтересованным лицам
[16:04:37] <mantyr@jabberon.ru> КГБ?:)
[16:05:10] <mantyr@jabberon.ru> Звонок в компетентные органы - не подскажите где почитать документацию к вашему API сорма? Хочу отправлять вам сигналы о действиях приложения:)
[16:06:25] <cheshir> это все уже изобрели давно
[16:06:31] <Deirz> отправляешь POST запрос на google.com с кодом ошибки и текстом "бомба террористы путин"
[16:06:33] <cheshir> называется операционная система ))
[16:07:51] <cheshir> для логов есть фс, для уведомлений можно какой-нить брокер прикрутить, ну или D-Bus )
[16:10:53] Magiq вышел(а) из комнаты
[16:11:45] Magiq вошёл(а) в комнату
[16:14:26] <mantyr@jabberon.ru> syslog:)
[16:14:42] <mantyr@jabberon.ru> Или в метрики отправлять соощения:)
[16:21:11] ftrvxmtrx вышел(а) из комнаты
[17:05:17] <kpmý> Deirz: короче, про типы, у меня возник затык в своё время, я просто не нашёл никакой готовой и примитивно-простой коньцепции для описания пользовательских типов. Когда глянул, как обычно реализуется наследование, полиморфизм и прочие виртуальные методы, обосрался от оценки временных затрат и общей негибкости и кондовости. Вот и подумал, почему до сих пор нет удобного базиса для построения системы типов.
[17:07:05] <Deirz> ты для конкретного проекта хотел сделать или в общем случае?
[17:07:20] <Laz> > примитивно-простой коньцепции для описания пользовательских типов
[17:07:22] <kpmý> я вот читал про какой-то дьявольский язык, там во-первых система типов программируемая (аля плюсотемплейты), а во-вторых из коробки много кастомных типов типа EMAIL, PHONE, и так далее
[17:07:23] <Laz> > наследование, полиморфизм и прочие виртуальные методы
[17:07:26] <Laz> ну ты определись уже
[17:08:06] <Deirz> rebol чтоль?
[17:08:11] <Deirz> и его наследник red?
[17:08:45] <Laz> а концепция такая
[17:08:51] <Laz> есть какое-то значение
[17:08:58] <Laz> ты к нему прицепляешь метку типа
[17:09:02] <Laz> получаешь типы
[17:09:11] <kpmý> Laz: классическое пирамидовидное ооп для компилятора довольно простое, там просто игра с offset и фингерпринтом
[17:09:22] <kpmý> то есть оно простое, но оно захардкожено в компилятор
[17:09:30] <Laz> это чтоб в рантайме эту байду проверять
[17:09:33] <kpmý> а я хотел теоретическоую часть
[17:09:38] <Deirz> ооп специфично само по себе
[17:09:40] <Laz> в компильтайме типы надо к термам цеплять
[17:09:54] <Laz> не знаю, что такое "пирамидовидное ооп"
[17:10:35] <kpmý> ну это когда нет интерфейсов
[17:10:53] <kpmý> нет ромбовидных схем наследования, короче
[17:10:59] <Laz> нет интерфейсов?
[17:11:05] <Laz> какая-то херовая тема :)
[17:11:53] <kpmý> интерфейсов, примесей, и прочей множественной хуйни. Шар и Куб всегда наследники Фигуры, и между собой не связаны
[17:12:20] <Deirz> https://go-review.googlesource.com/#/c/9251/ ого лол
[17:12:25] <Deirz> катимся в жавку
[17:12:35] <Laz> блин
[17:12:53] <Laz> интерфейсы, примеси и прочее к типам как таковым не относятся
[17:13:02] <Laz> это какие-то приколы из каких-то там недоязычков
[17:13:42] <Laz> это чо, структурки в рантайме создавать можно?
[17:13:54] <kpmý> из метаинформации)
[17:14:05] <Laz> жесть какая
[17:14:25] <kpmý> Class.instanceOf()
[17:15:02] <Laz> не, инстансоф - это другое вроде
[17:15:08] <kpmý> ой, да)
[17:15:09] <Laz> тут ты сам тип создаёшь же
[17:15:27] <kpmý> getInstance
[17:15:38] <Laz> ну гетынстанс
[17:15:46] <Deirz> kpmý, зачем тебе наследование вообще?
[17:15:58] <Deirz> от фигуры наследоваться ещё
[17:16:35] <Laz> внатуре
[17:16:41] <Laz> является ли круг квадратом
[17:16:45] <Laz> или они оба треугольники?
[17:17:13] <Laz> сами придумали себе проблемы, сами их решают
[17:17:45] <kpmý> простейший случай это event handler
[17:18:31] <kpmý> когда надо описать абстрактную структуру message с полем id, а потом от неё сделать наследников с разными данными на разные события
[17:18:51] <kpmý> при этом функция-хендлер сможет принимать только message и наследников
[17:19:38] <kpmý> в пщ так не получится ведь интерфейсы влияют только на поведение и приведение типов работает по набору методов
[17:19:48] <Deirz> так погоди
[17:19:55] <Deirz> тебе нужно получить набор хендлеров
[17:20:07] <Deirz> с единым интерфейсом
[17:20:09] <kpmý> не, хендлер один, а сообщения разные
[17:20:19] <kpmý> сообщения это просто структурки
[17:20:53] <kpmý> но это как пример
[17:20:56] <Deirz> а, сообщения разные
[17:21:27] <Deirz> а ограничение на наследников нужно, чтобы не слали посторонние типы?
[17:21:51] <kpmý> так вот, чтобы перейти от набора примитивных типов (bool, int) хотя бы к самым простым структурам, уже нужно какое-то обоснование системы типов.
[17:22:03] <Laz> нужны конструкторы типов
[17:22:07] <Laz> суммы и произведения
[17:22:10] <kpmý> Deirz: ага, классический ооп
[17:22:28] <Laz> классический ООП - это чо такое?
[17:22:33] <Deirz> наследование тут используется как костыль
[17:22:39] <Laz> у кэя вот наследования нет
[17:22:44] <Laz> это парень, который придумал ООП
[17:22:46] <mantyr@jabberon.ru> Подскажите нормальный хостинг с HDD  в украине:)
[17:22:49] <Deirz> используется сайд-эффект наследования
[17:22:53] <kpmý> классический ооп возник как развитие типа union в сишке
[17:23:00] <Laz> wut
[17:23:26] <kpmý> ну пацаны поняли, что типизация разнородных структур это важно
[17:23:33] <Laz> есть вот примитивные типы (bool, int)
[17:23:43] <Laz> и есть конструкторы A*B и A+B
[17:23:50] <Laz> где A и B - тпы
[17:23:51] <Laz> типы
[17:23:58] <kpmý> типы вообще?
[17:24:14] <Laz> типы из твоего множества типов
[17:25:39] <Laz> и сиди клепай всё, что тебе вздумается
[17:26:11] <Laz> а, ещё один нужен
[17:26:14] <Laz> A->B
[17:26:18] <Laz> для функций
[17:27:10] <Deirz> вот кстати
[17:27:29] <Deirz> суммы типов только с тегами нормальные делают?
[17:27:42] <Deirz> просто int | float бывает в природе?
[17:28:18] <Laz> без тегов?
[17:28:24] <Laz> в смысле что ты не можешь определить, что там?
[17:28:36] <Laz> это тогда получится сишный юнион
[17:30:03] <Deirz> нет, без символических тегов
[17:30:21] <Deirz> ну тип Amount float | Exist bool
[17:30:36] krab вошёл(а) в комнату
[17:30:53] <Laz> а
[17:31:11] <Laz> ну это просто конструкторы
[17:31:29] <Laz> гм...
[17:35:43] 5UN5H1N3 вошёл(а) в комнату
[18:03:07] cheshir вышел(а) из комнаты
[18:04:06] <kpmý> я подумал, что к понятию типа можно зайти со стороны онтологии и ограничений
[18:04:38] <kpmý> int например ограничен такими-то значениями
[18:07:48] <kpmý> некоторые типы вытекают из реальности, например, тип значения констант. Написал 3, будет int, написал "hello, world" будет строка, или массив символов, для бедных)
[18:08:47] <Deirz> онтологии и ограничения - это просто фреймворк для описания типов
[18:08:57] <Deirz> как и любой фреймворк ебёт тебя в жопу
[18:09:21] <kpmý> ну хаскеллисты вообще теоркат взяли себе за основу системы типов
[18:09:37] <kpmý> если я правильно понял
[18:09:42] <Deirz> я не знаю, что это
[18:10:07] <kpmý> математический подход к понятию категорий
[18:11:01] <kpmý> надо философию развернуть)
[18:12:27] <kpmý> по идее, когда компилятор ебашит структуры в бинарь, у него есть только примитивные типы и арифметика
[18:13:54] <Deirz> у него байтики повсюду
[18:14:21] Laz вышел(а) из комнаты
[18:19:43] Magiq вышел(а) из комнаты
[18:25:09] plumbum вышел(а) из комнаты
[18:42:22] kpmý вышел(а) из комнаты
[18:45:15] <mantyr@jabberon.ru> Вопросик… как определить текущий каталог где запущен бинарник?:) runtime.Caller(1) который многие используют не подходит… он какого-то бока показывает каталог от файла исходного кода:) Типо такого… /mnt/files/www/fl/news/wp-content/plugins/search_tag/golang/src/bitbucket.org/mantyr/fl_news_golang/z_init.go
[18:45:34] <Deirz> что
[18:45:35] <Deirz> бля
[18:46:01] <Deirz> кто использует runtime.Caller?
[18:46:17] <mantyr@jabberon.ru> Ну… нашёл год назад на стековерфлове:)
[18:46:35] <Deirz> прочитай внимательно, что они хотят
[18:48:20] <mantyr@jabberon.ru> И что же они хотят?:)
[18:49:20] <mantyr@jabberon.ru> Ладно, пока заменил на ".", потом разберусь как это вытащить по нормальному.
[18:50:16] radioqt вошёл(а) в комнату
[18:51:07] <Deirz> ну ты прочитай внимательно вопрос на SO
[18:51:52] <radioqt> пщ
[18:51:53] <xep> пщ!
[18:54:22] <mantyr@jabberon.ru> Да я его так с ходу не найду этот вопрос:) Да и занят я щас несколько:)
[19:08:49] 5UN5H1N3 вышел(а) из комнаты
[20:00:53] dzendmitry вошёл(а) в комнату
[20:17:25] Deirz вышел(а) из комнаты
[20:18:00] Deirz вошёл(а) в комнату
[20:25:47] krab вышел(а) из комнаты: Left Vacuum-IM
[20:28:40] plumbum вошёл(а) в комнату
[20:48:44] krab вошёл(а) в комнату
[21:23:07] mks2 вышел(а) из комнаты
[21:34:49] mantyr@jabberon.ru вышел(а) из комнаты: Replaced by new connection
[21:48:15] radioqt вошёл(а) в комнату
[21:48:16] avz вошёл(а) в комнату
[21:57:18] radioqt вышел(а) из комнаты
[22:32:28] radioqt вышел(а) из комнаты
[22:49:42] Magiq вошёл(а) в комнату
[23:20:03] avz вышел(а) из комнаты
[23:20:50] Magiq вышел(а) из комнаты
[23:21:31] Magiq вошёл(а) в комнату
[23:26:53] ermine вышел(а) из комнаты
[23:35:28] kpmý вошёл(а) в комнату
[23:37:40] kpmý вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!