Kirill
ну — мне пришлось адаптировать к sp
Kirill
да всё просто
Kirill
мне нужно было получить baremetal golang
Roman
„JavaScript on the server, they said. It’s gonna be fine, they said.“
Kirill
с lock-free concurrency и прочим
Kirill
потому что мне нужен был легко поддерживаемый baremetal язык
Kirill
сразу вычёркивай rust, c/c++ и всё остальное
Roman
а какая задача то?!
Kirill
а тебе всё скажи
Kirill
NDA сначала подпиши)
Roman
да мне детали не интересны, только сфера и сама проблема)
Roman
или это тоже секрет?
Kirill
сфера и проблема сразу палят дохрена)
Roman
понятно))
Kirill
будет интересно — пиши в личку, подпишем NDA, расскажу)
Kirill
всё просто
Kirill
¯\_(ツ)_/¯
Kirill
только NDA на английском, да
Roman
😀
Kirill
в самый раз, значит) пиши, есичо 🙃
Kirill
я толком на golang show ничего не мог рассказать, когда приходил
Roman
честно говоря звучит это конечно жутко, взять AP язык, убрать из него GC, runtime и всё то что его делает тем что он есть и использовать его для baremetal… ох..
Kirill
на самом деле, по большей части из-за nda
Kirill
Roman
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
не рассматриваю его, как язык, после последней пробы
Roman
Kirill
чё так?)
потому что максимально не зашел
Kirill
зато после этого я стал иногда на питон смотреть
Roman
я вот после нескольких лет в C++ понял, что в C++ никогда больше не вернусь))
Roman
C можно не рассматривать в 2018 в принципе
Roman
остаётся только Rust из более серьёзных SP языков
Roman
C++ это вечный легаси… bloated language
Roman
это ненужные header’ы которые всё никак не уйдут на пенсию..
Kirill
rust синтаксически мне не зашёл. реально отвратительно было
Roman
это 100500 библиотек которые каждая работают абсолютно поразному
Kirill
Roman
Go это и не страшная, и не баба, этот долбанная стая сусликов 😅
Kirill
Roman
надо уже начать гошные комиксы из повседневной жизни рисовать… как тот цикл закрытия закрытых соединений в отдельных горутинах (arangodb client)..
Kirill
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 тоже не работает
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