分解物質
> читать на хабре > чему-то удивлятся
分解物質
https://blog.golang.org/toward-go2
分解物質
分解物質
分解物質
и ещё https://dave.cheney.net/2017/06/18/simplicity-debt-redux
分解物質
Какая поддерживаемость, когда тебе надо править кучу копипасты
нет, надо править только один экземпляр, остальное копипасту автоматически сделает go generate
Max
нет, надо править только один экземпляр, остальное копипасту автоматически сделает go generate
Остается только вопрос зачем пришивать третью ногу сбоку когда можно было просто сразу включить в язык дженерики (хотя бы просто базовую подстановку типа в компайлтайме)
Max
лолчто
Он с gccgo попутал обычный го мб
Max
go generage появился после Go 1
Я про то и говорю
分解物質
так ведь Go 1.0 compatibility promise
Max
так ведь Go 1.0 compatibility promise
Что по твоему означает фраза "включить сразу"? По-твоему они там в своем гугле других языков не видели и не знали что без дженериков сейчас совсем печально?
Max
Если как он говорит они не нужны — зачем go generate было пилить? Оно же опять о типах, а не интерфейсах
分解物質
分解物質
а, ну так go generate же там кучу вещей делать умеет
分解物質
так получилось что с помощью него и шаблоны можно
分解物質
分解物質
Мерль
@KolesnichenkoDS в оригинальном питоне активно используются счётчики ссылок, так что я думаю часть функциональности в русте реализовать будет просто
Мерль
а, ну так go generate же там кучу вещей делать умеет
Умеет, но им никто не пользуются, кроме некоторый моментов типа ORM или сериализации), слишком громоздко
Anonymous
лолчто
что тебе не понятно?
Мерль
кстати почитав его, вы поимете что в go обычный cms и он гавно)
Для нужд вебчика он очень даже подходит. На больших кучах конечно всё плохо
Anonymous
Для нужд вебчика он очень даже подходит. На больших кучах конечно всё плохо
ну для веба спорно опять же, веб разный бывает, но для command line tools сойдет, но там и раст не плох)
Мерль
ну для веба спорно опять же, веб разный бывает, но для command line tools сойдет, но там и раст не плох)
Для веба в смысле request-response за минимальное время с минимальными stop world
Мерль
а cms дает минимальный stop world? xD
В случае Go (там он не совсем cms, всё таки) - да
Anonymous
в смысле не совсем?
Anonymous
В случае Go (там он не совсем cms, всё таки) - да
все алгоритмы gc, которыя я знаю (даже те супер новые из го) существуют уже лет по 20, там впринципе ничего нового не придумывали. И в gc алгоритмах есть очень интересный trade-off про latency и throughput. Если тебе говорят на конфе по гоу, что мы сделали новый гц, который работает в 1239123 раз лучше, то знай что в чем-то он работает хуже и это лишь маркетинг. Ну или изначально был сильный гавнокод, откуда и выигрыш
Danila Matveev
в смысле не совсем?
возможно даже совсем не у го действительно стабильно низкие отклики при небольшом футпринте, но за это он очень сильно платит пропускной способностью
Мерль
в смысле не совсем?
У них там делается только одна пауза, вместо одной (то есть initial mark делается конкуретно, кроме каких-то граничных сдучаев), а вторая фаза пометки объёктов сделана опять же как-то хитро протвикана, и представляет собой единственное место, когда stop the world собсно и происходит
Anonymous
initial mark точно делается под паузой, как и ремарк
Мерль
initial mark точно делается под паузой, как и ремарк
Они умудряются делать его конкурентно
Anonymous
это как? у тебя может сет поменяться 1000 раз
Мерль
Они умудряются делать его конкурентно
аааа наоборот inital mark у них останавливает мир а вот вторая блокировка убрана к чертям
Anonymous
initial mark в любом случае мир останавливает
Мерль
https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md
Мерль
Вооот
Danila Matveev
core.run(future)
Только он блокирует текущий поток на момент выполнения фьючи. Получается, кстати, что фьючи ленивые. Но как запустить её вычисление без блокировки? То что я пытаюсь сейчас сделать - есть сервис, выполняющий задачу по расписанию, и веб-сервер, который будет по запросу выдавать стейт сервиса. Сделал thread::spawn(service_task); server.run(); Но это выглядит коряво, потому что мне пришлось создать самому какой-то левый поток, который не управляется никаким пулом.
Мерль
pool.spawn_fn
Мерль
поверх cpupool
Danila Matveev
thx
Anonymous
https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md
Thus, at the end of the cycle, the garbage collector must re-scan grey stacks to blacken them and finish marking any remaining heap pointers.
Anonymous
нету говоришь)
Мерль
)
Anonymous
а. эт типа было до этого
Anonymous
ок
Danila Matveev
еще вопрос #rust в качестве примера веб-сервер, в котором требуется в базу слазить по-хорошему надо иметь отдельный пул для сервера и отдельный для запросов в бд и там и там могут быть фьючи как их объединить, чтобы они по-прежнему выполнялись в своих пулах? само собой без блокирующих ожиданий
Anonymous
ну отлично, на каждый write такая жесть делается)
Anonymous
пропускная способность привет)
Мерль
пропускная способность привет)
Ну не совсем привет, но она немного пострадала, да
Anonymous
ну я и говорю, trade-off
Мерль
разумеется
Мерль
Это как три стула Задержки, память и пропускная способность
Мерль
И сесть можно только на два <_<
Danila Matveev
на полтора
Alex
ребят, у CString как посчитать размер?
Anonymous
И сесть можно только на два <_<
да, но у той же шеноды на мои взгляд решение получше будет
Мерль
на полтора
Если сильно не повезёт, то на один
Мерль
Тут ещё надо понимать, что в Го объекты размещаются на стеке почти всегда
Мерль
Что ощутимо снижает нагрузку на сборщик
Danila Matveev
похоже к вопросам про раст надо ставить хэштег #rust иначе их не найти в обсуждениях го, жс, руби и прочего
Anonymous
а че у нас стек у тредов уже бесконечный?)
Alex
as_bytes().len() ?
а где len() объявлен?
Alex
я просто в справке к массивам вроде не нашел его )
Мерль
а че у нас стек у тредов уже бесконечный?)
А go умеет мигрировать горутины и наращивать им стек
Alex
он технически массив же
Danila Matveev
технически он отдельный примитив