John
А есть еще кто-то из Харькова?
John
хм, интересно... на всякий случай спрошу, есть ли посиделки в Харькове
Anonymous
Что делать хотите на посиделках?
Michael
Anonymous
похоже на боярышник
Андрей
Не похоже. Они же дохнут, а ржут
Michael
мсье знают толк
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Здравствуйте всем, хотел рекомендации спросить (гуглил) о NLP библиотеках в Go и имеет ли оно вообще смысл в Go делать, или ж отдать себя в руки закорузлой Java?
Mike
Mike
правда для синтаксического стэнфодского парсера приходилось сабпроцессом джаву вызывать, довольно неприятно
Dmitriy / დიმიტრი
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Dmitriy / დიმიტრი
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Mike
а вот хз, тоже интересно. ну она в целом неплоха, она умеет натравиться на файл и результаты сдампить деревом лиспообразным в другой файл
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Мож попробовать портировать на Go. Впринципе, вектора есть , матриц не хватает, но можно допилить 😂
Mike
Ахах, ну мне в своё время стало влом их код читать))
Mike
но с таким подходом лучше просто писать на кложуре а их ипортить)
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
вот вам и ML на Go, когда везде встаёт задача матрицы делать.
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Блин, а когда матрицы появятся в стандартной библиотеке?
Mike
да напиши свои, пфф
Mike
матрицы-то легко сделать
Илья
https://www.youtube.com/watch?v=fd4EPh2tYrk
Mike
просто зачем ебаться с кучей алгоритмов МЛ в го, когда они все на питоне уже давно есть
Mike
причем быстро работающие и на видюхе считающиеся
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Да не в этом вопрос. Просто этот стандартный примитив "матрица" нихера не имплементирован.
Mike
ну такое, а в каком языке он есть в стдлибе?)
Mike
(ок, ок, в матлабе есть)
Anonymous
Чем двумерный массив от матрицы отличается?
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Все ок. Мимо темы языка. Go - тащить тучу запросов, а не считать херню всякую 😉
Илья
https://github.com/chewxy/gorgonia
Илья
если что, видео выше в тему вашего разговора, как раз
Илья
про ML и go
Anonymous
Наверняка это всё через cgo будет работать
Aleksandr
Всем привет
Aleksandr
Может кто подсказать по следующему вопросу
m := make([]int, 0, 10)
func(a []int) {
a = append(a, 12)
}(m)
fmt.Println(m)
Aleksandr
почему при должном cap append создает новую область памяти для массива в slice
Aleksandr
Aleksandr
slice => struct {pointer*array, len, cap}
Aleksandr
когда делаем append и есть место под новые элементы len<cap тогда добавляем к уже имеющемся иначе пересоздаем, так же насколько помню
Aleksandr
у тебя же m показывает старый массив?
Aleksandr
m[:] - нет
Aleksandr
fmt.Println(m) - что выводит?
Aleksandr
пустое значение
Aleksandr
https://play.golang.org/p/rduCHkJBxq
Aleksandr
у тебя два слайса - m и a
Aleksandr
логично, что памяти забирается под два?
Aleksandr
нет, они указывают на общий массив
Aleksandr
m остается старым, a становится новым
Aleksandr
https://play.golang.org/p/PyMiOPa2Bd
Aleksandr
так append возвращает указатель на новый массив в случае если не может дополнить массив, он создает новый где cap = oldcap*коэффициент
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Блин, крутой вопрос!
Anonymous
Сережа
я знаю почему
Сережа
потому что append так работает
Anonymous
))))
Сережа
в вашем же го туре так написано
Сережа
https://tour.golang.org/moretypes/15
Сережа
The resulting value of append is a slice containing all the elements of the original slice plus the provided values.
Сережа
а вообще нет поцоны
Сережа
в вашем godoc написано, что все так
Сережа
https://godoc.org/builtin#append
Aleksandr
https://play.golang.org/p/MHX-u-MR9H
Сережа
пацан который говорил что потому что передаешь по значению прав
Сережа
у тебя в анонимную функцию передается значение слайса (это указатель на память, длина и емкость)
Aleksandr
я это описывал
Aleksandr
slice => struct {pointer*array, len, cap}
Сережа
длина и емкость менятся у переданного по значению и не покидает функцию
Aleksandr
понял, len скопирован
Сережа
m := make([]int, 0, 10)
func(a *[]int) {
*a = append(*a, 12)
}(&m)
fmt.Println(m)
Сережа
какой я говнокодер