Илья
и живет в проде, хотя я никуда не завозил
Daniel
nats лучше
Илья
но проблем с gc я там не наблюдал
Andrei 🦉
NATS вполне написан и работает
вы его использовали? я в первый раз сталкиваюсь
Daniel
а их там и нет
Илья
тестировали
а в чем проблемы были?
Daniel
не падает
Andrei 🦉
и как оно? реально готовая альтернатива кафки или сыровато пока?
snip
А nsq падает? При каких условиях?
Sergei
не падает
лучше расскажи как себя ведет когда падает
Daniel
:)
Илья
как пример нагруженного, большого проекта, centrifugo
Daniel
я не знаю, на самом деле
Sergei
потому что пока не падают - они все котики
Daniel
мы его тестили, но в прод так и не взяли
Daniel
nsq у нас и на тестах падал, под нагрузкой
Илья
а то, что есть слабые разработчики, которые, зачем то, пилят на go круды, а не генерят код из сваггер доки, это не проблемы языка
Andrei 🦉
а то, что есть слабые разработчики, которые, зачем то, пилят на go круды, а не генерят код из сваггер доки, это не проблемы языка
в чем противоречие между «пилить круд» и «генерить круд из сваггер схемы» о мой немогущий в логику друг?
Andrei 🦉
простите, не удержался
Илья
я вам не друг, коллега, у вас вечно бомбит
Daniel
тааааак
Eugenii
сильные обычно сами столы носят
Daniel
коллеги, не надо развивать эту тему, пожалуйста
Co(n)stantine👨‍🔬
Biscuit is a monolithic, POSIX-subset operating system kernel in Go for x86-64 CPUs. It was written to study the performance trade-offs of using a high-level language with garbage collection to implement a kernel with a common style of architecture. You can find the research paper about Biscuit here: https://www.usenix.org/system/files/osdi18-cutler.pdf https://github.com/mit-pdos/biscuit
Daniel
10 Conclusions Our subjective experience using Go to implement the Biscuit kernel has been positive. Go’s high-level language features are helpful in the context of a kernel. Examination of historical Linux kernel bugs due to C suggests that a type- and memory-safe language such as Go might avoid real-world bugs, or handle them more cleanly than C. The ability to statically analyze Go helped us implement defenses against kernel heap exhaustion, a traditionally difficult task. The paper presents measurements of some of the performance costs of Biscuit’s use of Go’s HLL features, on a set of kernel-intensive benchmarks. The fraction of CPU time consumed by garbage collection and safety checks is less than 15%. The paper compares the performance of equivalent kernel code paths written in C and Go, finding that the C version is about 15% faster. We hope that this paper helps readers to make a decision about whether to write a new kernel in C or in an HLL. чет я ожидал, что будет сильно хуже. а тут прям бери и пиши
Мерль
лень читать простыню, как они без ос запилили рантайм?
модифицировали гошный, добавив 1500 строк ассеблера
Nikita
модифицировали гошный, добавив 1500 строк ассеблера
интересно, надо будет на досуге почитать
Мерль
интересно, надо будет на досуге почитать
Статья довольно простая и подробная
Roman
Need a new kernel? Use a proper systems programming language: https://www.redox-os.org писать OS kernel на языке без статической безопасности, GC и относительно слабой оптимизацией компилятором это блин просто маразм как по мне..
Daniel
коллега, это все досужие рассуждения
Daniel
люди взяли и запилили
Daniel
и выводы их позитивные
Nikita
если там все через unsage.Pointer, то го от си ничем не отличается)
Мерль
я вот читаю — судя по всему на бенчмарках они сравнивали по сути производительнсть ассемблерной части бисквита с ядром на C и всё на unsafe.Pointer насколько я понимаю ну такое опять же, как гошный GC себя поведёт в долгом режиме работы — бабка надвое сказала В общем-то подобные ядра пишут и писали на любом языке, вплоть до js и lua к тому же они по сути сделали borrow checker а-ля руст для написания ядра с другой стороны работа всё-таки интересная, правда код, судя по всему, увидеть нельзя
Cat
мы его закрыли
это очень грустно
Мерль
про borrow checker там что нибудь написано?
Ну не совсем BC, но очень похоже на рустовские проверки 6.3 Static analysis to find s We have developed a tool, M AX LIVE, that analyzes the Biscuit source code and the Go packages Biscuit uses to find s for each system call. The core challenge is detecting statically when allocated memory can no longer be live, since many system calls allocate memory for transient uses. Other challenges include analyzing loops with non-constant bounds, and determining reservations for background kernel activities that are not associated with a specific system call.
Roman
hmmm
Roman
кстати мне сегодня во сне мысль пришла.. func Take(mutableInt int) { /*...*/ } func main() { var immutableInt immut int = 42 Take(immutableInt) // Compile-time error } поумолчанию, следуя правилам, мы не можем принять immut int как mut int потому-что immut->mut casting нелегально но... это-ж скалярный тип.. он же всё-равно копируется.. для него же можно сделать исключение и разрешить в данном случае данный cast. Т.е. разрешить casting скалярных иммут в мут (но только скалярных).
Daniel
Roman
😂
Roman
эднако это актуально только в случае mutability by default, в ином случае когда поумолчанию всё имутабельно такой проблемы быть не должно
Roman
по-моему уже проще запилить новый язык в блекджеком и растом
нет. 🙂 я не предлагаю Ownership & Borrowing, лишь compile-time mutability safety)
Roman
workflow не сильно изменится, а вот O&B меняет workflow коллосально
Vadim
Результаты бенчмарков Go 1.0 c Go 1.11 от Дейва Чейни. 🧔💪 https://gist.github.com/davecheney/311169ef04e27fe469ca91859af9cdff
Dmitri
_ <- chanOrders cannot use _ as value 😀
Все же пройди готур
Dmitri
Докер на всех системах есть 😅
На Андроиде, например, нету
Anonymous
на ios тоже
Илья
Взять любой роутер, например, chi
Roman
Go 2.0 не будет ещё очень долгое время, лет эдак 5
Roman
Go2 это лишь маркетинговое название Go 1.13 and beyond
Roman
хотя на самом деле, если они будут внедрять новые ключевые слова типа check тогда я думаю это нарушает обратную совмсетимость, однако это конечно спорный вопрос
Roman
потому-что сама спефицификация языка не ломается, но вот старый код может не скомпилиться по причине конфликтов имён символов с новыми ключевыми словами
Aleksandr
руками парсить r.Url.Path
Aleksandr
регулярка
Aleksandr
не мучай себя, если речь не идет о паре хэндлеров. возьми chi
Aleksandr
зачем?
Aleksandr
нормально. пиши в контекст, а не в r.Url.Path
Aleksandr
зачем?
Aleksandr
это запрос. запрос не надо менять.
Aleksandr
r.Url.Path - это урл запроса. Запрос менять не надо.
Veaceslav
Добрый вечер
Veaceslav
Мужики а что сейчас популярно из franework - ов на ГО ?
Veaceslav
По большей части для API нужен
Veaceslav
А кроме стандартных ?
🎉
По большей части для API нужен
https://github.com/MarlikAlmighty/examplefasthttp Если конечно понравится.
Veaceslav
А что на счёт GIN или Echo ?
Great
gin ещё довольно неплох, но стандартная всё равно лучше
🎉
Да сам напиши, это не сложно.
Michael
А кроме стандартных ?
https://github.com/gramework/gramework