Kirill
ну — мне пришлось адаптировать к sp
Roman
ну — мне пришлось адаптировать к sp
хмммм, но зачем пытаться делать из AP яызка - SP язык? 🤔
Kirill
да всё просто
Kirill
мне нужно было получить baremetal golang
Roman
„JavaScript on the server, they said. It’s gonna be fine, they said.“
Kirill
с lock-free concurrency и прочим
Roman
мне нужно было получить baremetal golang
я не могу понять причину.. почему просто не взять Rust? (ну или > C++11 на крайняк)
Kirill
потому что мне нужен был легко поддерживаемый baremetal язык
Kirill
сразу вычёркивай rust, c/c++ и всё остальное
Roman
а какая задача то?!
Kirill
а тебе всё скажи
Kirill
NDA сначала подпиши)
Roman
да мне детали не интересны, только сфера и сама проблема)
Roman
или это тоже секрет?
Kirill
сфера и проблема сразу палят дохрена)
Roman
понятно))
Kirill
будет интересно — пиши в личку, подпишем NDA, расскажу)
Kirill
всё просто
Kirill
¯\_(ツ)_/¯
Kirill
только NDA на английском, да
Roman
только NDA на английском, да
английский мне роднее русского
Roman
😀
Kirill
в самый раз, значит) пиши, есичо 🙃
Kirill
я толком на golang show ничего не мог рассказать, когда приходил
Roman
честно говоря звучит это конечно жутко, взять AP язык, убрать из него GC, runtime и всё то что его делает тем что он есть и использовать его для baremetal… ох..
Kirill
на самом деле, по большей части из-за nda
Roman
Roman
мне единственно что жаль так это то что Go плохо с системными языками кооперирует.. уже не раз тему про Rust + Go заводил
Roman
если б с этим всё было хорошо тогда бы цены ему не было
Kirill
это нужно уметь варить
Kirill
и варить это нужно без cgo
Kirill
тогда работать будет огненно
Roman
это нужно уметь варить
Filippo Valsorda вроде утвердил что это невозможно (т.е. возможно конечно, но только на поиграться, не для прода)
Kirill
пфффф
Kirill
и чо?
Kirill
сколько раз говорили "это невозможно"
Kirill
а потом их же unsafe и их же гошные асмы позволяют это делать
Kirill
у меня в проде это сделано
Kirill
под нагрузкой живёт хорошо
Roman
это самая advanced попытка связки Go и Rust которая мне известна, но и она не готова к проду
Kirill
насчёт раста даже говорить не буду
Kirill
не рассматриваю его, как язык, после последней пробы
Kirill
под нагрузкой живёт хорошо
потому что гошка даже не знает, что это уже сяшный код
Kirill
чё так?)
потому что максимально не зашел
Kirill
зато после этого я стал иногда на питон смотреть
Roman
я вот после нескольких лет в C++ понял, что в C++ никогда больше не вернусь))
Roman
C можно не рассматривать в 2018 в принципе
Roman
остаётся только Rust из более серьёзных SP языков
Kirill
я вот после нескольких лет в C++ понял, что в C++ никогда больше не вернусь))
выпусти человека из тюрьмы в сырой и мокрый подвал, так он в тюрьму всё равно не вернётся
Roman
C++ это вечный легаси… bloated language
Roman
это ненужные header’ы которые всё никак не уйдут на пенсию..
Kirill
rust синтаксически мне не зашёл. реально отвратительно было
Roman
это 100500 библиотек которые каждая работают абсолютно поразному
Kirill
rust синтаксически мне не зашёл. реально отвратительно было
и я не говорю, что там объективно синтаксис говно. это моё мнение, не для холиваров
Roman
rust синтаксически мне не зашёл. реально отвратительно было
Rust это как страшная баба, но с мозгами 🤓 Есть ещё и красивые бабы без мозгов (Ruby..?)
Roman
Go это и не страшная, и не баба, этот долбанная стая сусликов 😅
Kirill
Go это и не страшная, и не баба, этот долбанная стая сусликов 😅
огонь, с прогой не трахаться надо, стая запилит быстрее :p
Roman
огонь, с прогой не трахаться надо, стая запилит быстрее :p
порой люди пишут concr. код на Go так, что 100 сусликов жарят 1 индейку на 1 костре периодически меняясь при переворачивании индейки, а рычаг порой не защищён mutex’ом
Roman
надо уже начать гошные комиксы из повседневной жизни рисовать… как тот цикл закрытия закрытых соединений в отдельных горутинах (arangodb client)..
Roman
¯\_(ツ)_/¯ у меня в форке уже давно sync.Mutex — пустышка ;p
главно только индейку с костром не копировать, а то aliasing всё спалит… одну индейку сожгут, вторую недожарят, потом за третей полезут и паниковать начнут… ах… гоферы, тупые обдолбанные суслики
Kirill
если ты подумал, что у меня всё подряд копируется — ты неправ)
Roman
вот думаю, публиковать уже, али нет.. я про proposal
Roman
али мож ещё чего переписать, вроде уже всё что можно - продумал
Roman
сижу перечитываю уже раз сотый
Roman
говорят „сложный“, хотя там вроде всего новых 4 правила: - немутабельному типу нельзя присваивать значения (no assignment) - на них нельзя выполнять методы с не-const receiver'ом - мутабельный тип можно cast'нуть в немутабельный, но не наоборот. - const методы интерфейса нужно имплементировать функцией с const receiver’ом
Roman
simple & consistent IMHO
Roman
хотя, наверное надо таки эти 4 пункта в introduction более emphasize’нуть
MXLTN
как правильно называть тест на func (obj *MyStruct) DoSomething() {} ? что бы go test -cover распознал его как покрытый тестом?
MXLTN
TestDoSomething не работает
MXLTN
TestMyStruct_DoSomething тоже не работает
Roman
как правильно называть тест на func (obj *MyStruct) DoSomething() {} ? что бы go test -cover распознал его как покрытый тестом?
ээм, как связаны название теста и coverage кода?? coverage высчитывается по тому какие строчки кода были вызваны в процессе выполнения теста
MXLTN
понял(
Roman
TestDoSomething не работает
даже если тест называется TestDoSomething но сама DoSomething нигде при выполнении теста не вызывается - онa, естественно, не будет покрыта, в этом и весь смысл test coverage’а, показать вам что вы тестируете, а что нет.
MXLTN
понял. думал оно просто сотрит на то какие ф-ции покрыты
Roman
Опа! Походу я нашёл серьёзную проблему в proposal’е, implicit конвертация mutable в immutable оказывается обязательно нужна: func append(slice []Type, elems ...Type) []Type при данном пропосале должна быть переписана в: func append(slicе [] const Type, elems ...const Type) []Type append не должна изменять ничего кроме переданного слайса, на всё остальное она должна гарантировать иммутабельность однако, сломает весь существующий Go 1.x код, поскольку любой вызов append будет требовать explicit конвертацию в иммутабельные типы: v := []int {1, 2, 3} v = append(v, 4, 5) // Compile-time error // Must be: v = append(const(v), const(4), const(5)) // Compile-time error