Александр
Так это через mgo надо сделать. Типо UpdateId(id, bson.M{$set: ...})
Kirill
я тут побомбить пришел
Kirill
wtf
Daniel
что не так?
Daniel
сискол дорогой? так он дорогой, без б
Kirill
поцчему _НАСТОЛЬКО_ дорого относительно остальных компонентов программы?
Daniel
а что еще дорогого делает твоя программа?
Kirill
просчитывает большой алгоритм
Daniel
если ей не надо все время лазать в оперативу, и достаточно кеша - это ни хера не дорого
Kirill
(да, знаю, что для математики гошка - плохой выбор, но упражняться с хаскелем и иже с ними сейчас времени не было)
Kirill
кеша не хватает
Daniel
дело не в том, хватает ли ей кеша, а в том, как часто его надо инвалидировать. в этом смысле гошка довольно хороша, насколько я знаю, компилирует код прозрачный для предсказателя ветвлений
Kirill
просчитывает большой алгоритм
большой - буквально. не очень большой, но ~2.5ksloc только алгоритма
🏁Александр
а что это за диаграмма выше? O_o
Daniel
а что это за диаграмма выше? O_o
pprof генерит с помощью graphviz
🏁Александр
щаз гляну
🏁Александр
может даже посмотрю что в приложении твориться O_o
Daniel
вообще-то - очень даже пора
Nik
А ктонить пробовал в https://github.com/eclipse/paho.mqtt.golang
Pawel
Я понимаю что Go это не язык заточеный под GUI, но хотелось сделать небольшое приложение с его использованием. Придется учить C++
вот я фигею сейчас дорогая редакция откуда взялось это абсурдное мнение, что Го как язык в силу каких-то особенностей хуже для десктопа чем низкоуровневая сишечка, монструозный сипипи и сверхдебилный js?
Yura
интерфейсы в Го? не, не слышал...
Они не дают наследование с виртуальными методами. Они дают только полиморфизм.
Pawel
Они не дают наследование с виртуальными методами. Они дают только полиморфизм.
внезапно наследование с виртуальными методами - это и есть динамический полиморфизм. если вы думаете, что это критически важно для ui, советую поизучать реакт и tEA
Yura
биндится и не надо
В мире не так многл энтузиастов, готовых с нуля новый gui фреймворк налабать. Да ещё и кросплатформенный. Еще и детей кормить нужно.
Yura
Большинство существующих фреймворков писались на зарплате. Кроме, может быть, gtk.
Yura
А за "еще один гуи для Го" заплатить не кому, потому что ни кому не надо (из тех, кто может заплатить).
Yura
Тебе нужен. Я бы не отказался. А бизнесу по хуй.
Yura
Тем более, что десктопные приложения всё меньше востребованы. Для мобилок есть устоявшиеся DevKit. Стартапам тупо не нужен Gui на Go.
Yura
Большому бизнесу так тем более.
Pawel
В мире не так многл энтузиастов, готовых с нуля новый gui фреймворк налабать. Да ещё и кросплатформенный. Еще и детей кормить нужно.
кросплатформенный десктоп - это только лишь исключительно Qt, gtk - отстой и только под линупсЫ. Если нужно в Qt, то Го конечно не подойдёт. Но вообще-то на Qt по разным причинам не так много десктопного софта в проц. отношении. Есть сегменты, в которых кросплатформенность на десктопе на фиг не нужна, как и UX, как и дизнайн и прочее гейство.
Yura
внезапно наследование с виртуальными методами - это и есть динамический полиморфизм. если вы думаете, что это критически важно для ui, советую поизучать реакт и tEA
Наследование с виртуальными методами - это динамический полиморфизм ПЛЮС переиспользование кода. И оно хорошо ложится на паттерны рисования контролов и реакции на системные события. Чтобы сделать этот "ПЛЮС" в гошечке внезапно нужно делать статические функции, принимающие на вход интерфейсы. И это тупо не привычно тем, кто уже набил руку на создании и поддержке нативных GUI фреймворков. Для этого нужно менять привычки, и проектировать код по другому.
.
Как используются кавычки `` в го? Можно ли их просто для строки использовать?
Aleksandr
Да
Daniel
радост в том, что внутри `` можно использоать "
Nurzhan
Но никак `` внутри таких же кавычек :(
Pawel
Наследование с виртуальными методами - это динамический полиморфизм ПЛЮС переиспользование кода. И оно хорошо ложится на паттерны рисования контролов и реакции на системные события. Чтобы сделать этот "ПЛЮС" в гошечке внезапно нужно делать статические функции, принимающие на вход интерфейсы. И это тупо не привычно тем, кто уже набил руку на создании и поддержке нативных GUI фреймворков. Для этого нужно менять привычки, и проектировать код по другому.
Чтобы сделать этот "ПЛЮС" в гошечке внезапно нужно делать статические функции, принимающие на вход интерфейсы. откуда такая инфа и с чего это вдруг функция, принимающая интерфейс, неудобна? Какие-то у вас странные критерии неудобства. И почему обязательно просто функция, а не метод? набил руку на создании и поддержке нативных GUI фреймворков. - нативных GUI фреймворков практичсеки не существует. А те, которые есть - замшелые от старости, с них песок сыпется, и выкинуть их на помойку не жалко от слова совсем. Есть фреймворки под .net, jvm и nodejs, но они не нативные. со всеми вытекающими.
Pawel
Каков рынок этого "гейства"? И что общего у этого рынка с рынком Go? И почему игроки этого рынка должны выбросить годами проверенные инструменты, и писать новый фреймворк на ненужном им Go?
потому что инструменты в C/C++ - они не очень, И языки эти для целей десктопа отвратительны, будем честны. И потому, что разработка в десктоп не сводится к рисованию контролов
Yura
Чтобы сделать этот "ПЛЮС" в гошечке внезапно нужно делать статические функции, принимающие на вход интерфейсы. откуда такая инфа и с чего это вдруг функция, принимающая интерфейс, неудобна? Какие-то у вас странные критерии неудобства. И почему обязательно просто функция, а не метод? набил руку на создании и поддержке нативных GUI фреймворков. - нативных GUI фреймворков практичсеки не существует. А те, которые есть - замшелые от старости, с них песок сыпется, и выкинуть их на помойку не жалко от слова совсем. Есть фреймворки под .net, jvm и nodejs, но они не нативные. со всеми вытекающими.
Напиши, как Go будет выглядеть конструкция "зову виртуальный метод А, одна из его реализаций зовет виртуальный Б, одна из его реализаций зовет виртуальный Ц" В питоне: class X: def a(self): self.b() class Y(X): def b(self): self.c() class Z(Y): def c(self): pass Z()a() Как это будет в Go? Сорри, но .net forms - тонкая прослойка над winapi - не зачет. Java почти всегда все сама рисует - т.е. контролы самой и рисовать приходится - не зачет. nodejs - обертки на существующими фремворками - не зачет.
Pawel
Сорри, но .net forms - тонкая прослойка над winapi - не зачет. чего-чего?
Заур
Qt creator
Заур
Такой жиррррный аргумент
Yura
потому что инструменты в C/C++ - они не очень, И языки эти для целей десктопа отвратительны, будем честны. И потому, что разработка в десктоп не сводится к рисованию контролов
Вы говорите про разработку на Go. А для этого она должна иметь тот низкий уровень, которого у нее нет. И, если честно, я не встречал хороших программистов на C++, которые хотели бы перейти на Go. Особенно, если их сфера деятельности не связана с сетевыми сервисами.
Pawel
Qt c++?
я выше написал, что если хочешь Qt, Го не нужен. Но Qt хотят не только лишь все. Мало кто хочет с ним страдать
Pawel
и они уже давно не пишут десктоп
Yura
хороших вообще очень мало на C++
Вот именно. А плохой и на Go фреймворк не напишет.
Yura
и они уже давно не пишут десктоп
Они пишут биржи, банки и игры.
Yura
ну вот у меня как раз связана. хороший десктоп фреймворк на Го - https://github.com/lxn/walk
Это здорово! Хорошо, что нашелся энтузиаст. Теперь все смогут пользоваться и помогать развивать.
Yura
ничего не понял что это такое и зачем это нужно. Если вы хотите сказать что петон лучше чем Го подходит для целей десктопа, то я не согласен с вами категорически. Разве что для хелувордных задач, которые хоть на баше решай.
Я лишь хотел сказать, что такая "цепочка" вызовов - абсолютно нормальная вещь в gui фреймворках. И питон тут ни при чем, просто на нем компактнее всего было это записать. Не надо цепляться, если не понял посыла. Я попросил написать цепочку из трех виртуальных вызовов на Go. Хочу посмотреть, как это будет выглядеть. Можешь?
Daniel
в go нет виртуальных вызовов
Yura
в go нет виртуальных вызовов
Вызов метода интерфейса можно считать виртуальным вызовом.
Daniel
нельзя
Yura
нельзя
Почему же это? Как ты определяешь "виртуальный" вызов, чем он отличается от "динамического полиморфизма" и от вызова метода интерфейса?
Daniel
у интерфейса нет метода
Daniel
интерфейс - это хинт для компилятора, чтобы при передаче параметра он мог проверить, то ли мы передаем. все
Daniel
а, еще при приведении типа в рантайме проверка осуществляется
Yura
у интерфейса нет метода
Ой да ладно. Прости, но это не хинт. В рантайме строится виртуальная таблица для методов. Посмтори реализацию.
Pawel
интерфейс - это хинт для компилятора, чтобы при передаче параметра он мог проверить, то ли мы передаем. все
он сказал то же самое, но на языке людей, страдающих от ракового ООП в мозгах
Yura
нет ни какой вирт. таблицы
Еще один. Почитай реализацию в Go. Я говорю только за Go.
Daniel
не очень важно, как оно там в рантайме
Daniel
важно, как оно при компиляции
Yura
В момент, когда сущность кастится в интерфейс, рантайм строит для нее таблицу методов.