Daniel
тогда я могу считаться за пьющего пару месяцев в году
Daniel
февраль и май
A
Ещё какая правда. Года 3 назад у нас работал, приходил с диким перегаром. На action script программировал
:))) это смерть флеша его так подкосила :))) я тоже бывший флешер, вот го понравился. Но смотрю авторам го чтобы денюжку зарабатывать надо все усложнять и дополнять его. Будет еще одна джава :)
Artem
2-3 в неделю не менее 1,5л пива
раз в неделю по 2-3 это не пьющий? ну и на неделе пару бутылок
Fastumkruk
февраль и май
Получается 2 раза в год пьющий
A
Ну мы не просто флешку делаем. Там несколько огромных по функционалу программ, прям реально. Во всяком случае для action script
Action script 3 вполне себе джава. Но с плеером увы не сложилось. А сам язык вполне себе. Но увы, флеш умер.
Roman
В таком случае получается: // Immutable pointer to mutable object var immut2mut const *Object = &Object{} immut2mut = &Object{} // violation! immut2mut.Field = 42 // fine immut2mut.Mutation() // fine /*--------*/ // Mutable pointer to immutable object var mut2immut * const Object = &Object{} mut2immut = &Object{} // fine mut2immut.Field = 42 // violation! mut2immut.Mutation() // violation! /*--------*/ var immut2immut const * const Object = &Object{} immut2immut = &Object{} // violation! immut2immut.Field = 42 // violation! immut2immut.Mutation() // violation! тоже самое касается контейнеров: // Immutable slice of immutable objects var immut2immut const [] * const Object immut2immut = append(immut2immut, Object{}) // violation! immut2immut[0] = Object{} // violation! p1 := immut2immut[0] p1.Mutation() // violation! /*--------*/ // Mutable slice of immutable objects var mut2immut [] * const Object mut2immut = append(mut2immut, Object{}) // fine mut2immut[0] = Object{} // fine p2 := mut2immut[0] p2.Mutation() // violation! /*--------*/ // Immutable slice of mutable objects var immut2mut const [] *Object immut2mut = append(immut2mut, Object{}) // violation! immut2mut[0] = Object{} // violation! p2 := immut2mut[0] p2.Mutation() // fine /*--------*/ // Mutable slice of mutable objects var mut2mut [] *Object mut2mut = append(mut2mut, Object{}) // fine mut2mut[0] = Object{} // fine p2 := mut2mut[0] p2.Mutation() // fine
кстати immutable method придётся тогда так декларировать: func (o * const Object) ReadOnly() {} чисто ради согласованности, хотя в случае receiver'а вообще-то бы было всё-равно. В случае с аргументами функции не всё-равно потому-что аргумент может быть mutable, а вот указатель receiver'а никак не может быть mutable
Alexey
Action script 3 вполне себе джава. Но с плеером увы не сложилось. А сам язык вполне себе. Но увы, флеш умер.
Умер, да. Но выбора нет 😒 нам важно работать на всех платформах, у джавы проблемы с iOS
Artem
иначе только хелловорлды
Artem
да я так..у к тому что кроссплатформенные приложения это такое
Alexey
Дык мы вроде и не говорим, о электроне. Поддержка 6-7 платформ знаешь ли стоит не дёшево)
Alexey
Да и это полный бред иметь под каждую платформу свою кодовую базу.
Roman
берешь такой и пишешь под каждую платформу свой апп
и понимаешь, что один баг придётся фиксить 7 раз, 7 разными людьми, в 7 репозиториях, на 7 языках и разных парадигмах 😐
Roman
мне есть что сказать. но чот лень. в следующий раз разведу об этом.
да тут не о чём говорить. Для этого нужны колосальные ресурсы чтобы вести такой проект качественно на всех платформах. Гораздо дешевле же использовать крос-платформенные технологии
Dorian
и понимаешь, что один баг придётся фиксить 7 раз, 7 разными людьми, в 7 репозиториях, на 7 языках и разных парадигмах 😐
Что за люди такие, что один и тот же баг сделали на разных языках и платформах? Клоны что ли?
Dorian
Похоже на заговор
Dorian
Баг в кодогенераторе.
Ну тогда пусть в кодогенераторе фиксят
Anonymous
баг на сервере, из-за которого приходится править клиенты
Dorian
Хуль вы лечите симптомы
Pavel
Ну тогда пусть в кодогенераторе фиксят
Уже ручные правки в сгенерированное внесли...
Anonymous
его уже пофиксили, а клиенты работают некорректно
Dorian
Ладно, я прикалываюсь. Понятно что пример был для красочности
Dorian
Вот переезд на новую версию апи – яркий пример
Dorian
Стопудов надо делать на 7 платформах, хоть можно и в разное время
Roman
слишком вы всё дословно воспринимаете)
Dorian
Я ж написал, что пошутил
Roman
Я ж написал, что пошутил
ну слава богу, в существование которого я не верю))
Dorian
Подскажите хорошее решение. Есть расчеты, запускаемые раз в минуту, день и т.д. влияющие на записи в базе. Не хочу запускать их в основном приложении, чтобы не занимать треды. И возможно хотелось бы некоторые расчеты собрать в кучу, а некоторые, из-за своей толстоты, отдельно. То есть у меня должно быть запущено условно три процесса – основное приложение, которое я сбилжу и запущу, скорее всего в контейнере; жирный процесс; куча мелких процессов. Как лучше организовать второе и третье архитектурно и программно?
Dorian
Самое лобовое это сбилдить на каждый процесс по бинарю и запустить каждый в своем контейнере, но может кто-то делал красивее?
Dorian
Сервер не сильно жирный и если все держать в рамках одного запущенного процесса, то толстые расчеты могут просто сожрать треды в начале каждой минуты и юзеры сидят ждут ответа по несколько секунд
Dorian
А если не распаралеливать расчеты, то они могут не влаить в минуту, например
Dorian
ну выстави GOMAXPROCS больше
Так я и не ограничиваюсь
Roman
Так я и не ограничиваюсь
можно развернуть эту мысль?
Dorian
можно развернуть эту мысль?
Ну если не выставлять эту переменную, то она по дефолту равра количеству тредов на хосте?
Dorian
логических ядер.
И я могу выставить больше?
Roman
но по факту, если нужны приоритеты - это только разные процессы
Roman
и выставление соответствующей sched_policy
Dorian
но по факту, если нужны приоритеты - это только разные процессы
Да, меня больше интересует как это организовать. Например сбилдить по апликейшену на группу процессов или один, но запускать с флагом, или есть уже готовый инструмент вроде exec
Dorian
>чтобы не занимать треды. а иначе что? какую проблему решаем?
Задержки ответов пользователям во время жирных расчетов
Dorian
runtime.Gosched() в помощь
Спасибо, сейчас ознакомлюсь
Roman
Спасибо, сейчас ознакомлюсь
втыкаем в коде расчётов, чтобы вернуть планировщику управление
Yury
Здарова ребят)) Подскажите пожалуйста Есть задача вывести элементы массивов из трёх горутин по очереди (1 с первого, 1 со второго и т.д) Вопрос где можно почитать нормально про работу каналов? В Гугле искал, там какие-то непонятные материалы. Сам пишу на питоне, решил го подтянуть, а тут работа с потоками, раньше не сталкивался.
Roman
https://vorpus.org/blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/
Yury
Не... Что-то не то
Yury
Мне именно с использованием горутин
Roman
https://youtu.be/B5xYBrxVSiE вот интересно на самом деле, что бы получилось, если бы мы взяли compile-time security из Rust и runtime из Go и чисто гипотетически совместили это в одном языке
Yury
https://play.golang.org/p/lYQo-iGx2E Изменить программу, чтобы с 1 до 9 печатала) Вот задача
Anonymous
https://play.golang.org/p/5fiE8v4VqfC с задачей справился
Yury
https://play.golang.org/p/5fiE8v4VqfC с задачей справился
Чёрт, все оказалось так просто!
MXLTN
Кто может подсказать альтернативу groupcache с изменяемыми данными
Savely
Просто так на синк.ВейтГрупп это не будет работать
Savely
Но с runtime.GOMAXPROCS(1) будет хотя бы всегда один порядок)
Slava
мы тут нашли баг в сборщике гошном
Slava
из-за которого у нас по 100мс стоп зе ворлд
Slava
вообще атас история
саша
С совмещением есть очень большие проблемы — концепции владения и заимствования не вписываются в GC.
По хорошему если пытаться в языке с GC давать такие же гарантии как в Rust'е, то все данные, за жизненый цикл которых отвечает GC должны быть иммутабельными. А если нужна мутабельность, то придётся обвешиваться мутексами с рефселами.
Slava
https://github.com/golang/go/issues/18155