Это копия, сохраненная 7 мая 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Пщ едва не единственный язык который на уровне синтаксиса позволяет синхронизировать подпрограммы, разве только не Pony или Erlang. Это в 2018 году-то
Дженерики нужны, дженериков нет. Просто смирись.
Обработка ошибок получается охуенно через http://github.com/pkg/errors | в приложениях обычно можно просто паниковать на ошибках.
HTTP-сервер для убер максимального маня-хайлоада: https://github.com/valyala/fasthttp
В 1.8 или 1.9 уже можно "нормально" сортировать через sort.Slice()
Не нужно пиздеть про толстые бинарники, их размер значительно уменьшается одним маленьким Makefile.
Вкатываемся в эпоху докера, микросервисов и адово кошерной сетевухи.
Илюша, https://github.com/tucnak
Молча)
Какие перспективы? Что на нем пишете, сколько зарабатываете?
жаваскрыпт мидл кун
Влюбился в этот ваш голанг с первой строчки, уже неделю угораю пройдет или это навсегда/надолго?
Какие перспективы? Что на нем пишете, сколько зарабатываете?
жаваскрыпт мидл кун
фикс спойлера
Где нормальная шапка со списком литературы?
Зачем она нужна? Я куратор этого треда, я сам список литературы. Короче, нахуй литературу.
Но реально решает задачи, уровень технологий там зашкаливает. Пони и эрланг хороши, но Го по практичности просто берёт и выносит остальных ногами вперёд :-)
Ну и зачем ты такими заявлениями даешь лишний повод думать о Гоферах, как о дебилах, отрицающих книги?
>Пщ едва не единственный язык который на уровне синтаксиса позволяет синхронизировать подпрограммы, разве только не Pony или Erlang.
И clojure, и х-ль с экстеншнами, и так далее, и тому подобное.
Алсо,
>на уровне синтаксиса
Как будто что-то хорошее.
Ты с говнарями спориь собрался? Этот гуглепаскаль только отбитый даун использовать будет. Благо, вакансий по говну нет. Так-о.
язык умер алло
Я так и знал, что эта параша сдуется.
На хх*
Нода это совсем дрисня. Даже ее создатель сказал, что она не нужна, когда есть любой другой язык программирования Го.
Нода дрисня, а не дрысня.
> Даже ее создатель сказал, что она не нужна, когда есть любой другой язык программирования Го.
>>19982
После JS-хуиты любой нормальный язык кажется божьим откровением, а если он еще и прост как три копейки, что даже шлемазл с поврежденным мозгом разберется, так вообще.
Жс нормальный язык, в последних версиях он просто ахуителен. Нода топ 1 платформа для разработки. В то время как жс от стандарта к стандарту становится лучше, создатели го игнорируют сообщество и за столько лет не добавили ни менеджер пакетов и ни дженерики.
> Жс нормальный язык
Я мог бы обоссать тебя, но вместо этого просто кину тебе пример твоего "нормального" читаемого языка
https://github.com/mui-org/material-ui/blob/v1-beta/docs/src/modules/components/AppDrawer.js
> Нода топ 1 платформа для разработки
Для JS-разработчиков.
Вот когда NY Subway начнут использовать вот тогда.
Посту*
>Announcing Go Support for AWS Lambda
https://aws.amazon.com/blogs/compute/announcing-go-support-for-aws-lambda/
Нишевой язык для того, чтобы транслировать в него Python. Если хочешь — это байт-код Пайтона. И не более.
что-то среднее
Трансляторы есть уже давно:
http://www.opennet.ru/opennews/art.shtml?num=46912
Всё остальное — быдлохуита навроде COM DCOM ActiveX MFC POUWERЪ TOYEZЪ.
Но ведь у процессора кеши не резиновые...
Чем меньше скачков по оперативной памяти — тем лучше.
Google, Pitfalls of Object Oriented Programming
Поддвачну. Привык к функциям которые работают с переданным параметром. А в го функции воруют, убивают, ебут гусей, а возвращают вообще ошибку.
Net
Нет дженериков? Ок, нет. Не сделали. И что теперь? Диллема дженериков хорошо описана и создатели языка многократно аргументировали свою позицию. Они не против дженериков per se, просто с учётом всех факторов они посчитали что лучше не делать их вообще. Это не мешает. Если бы это было фатальным недостатком, то Го не получил бы тот успех который он получил.
-Илюша
Go используют как минимум с 2012 года сотни компаний. И в большинстве случаев остаются довольны.
Если для тебя 5-6 лет это недостаточно большой интервал чтобы делать статистические суждения, ты мало представляешь себе жизненный цикл поддержки кода (который итерирует чаще чем раз в 5 лет).
-И
>Go используют как минимум с 2012 года
Ну тогда при выборе языка точно не стоит смотреть на качества этого языка - раз его используют с 2012 года (минимум!), то нужно брать!
>Абсолютно похуй на все эти мелкие недостатки — как вы это не можете понять.
Мы не намерены это понимать. Дженерики спрашивают на собеседованиях → обязан выучить дженерики. Всё, закончили с этим!
У меня там есть как минимум два аккаунта с положительной кармой — это раз. Я не сижу на хабре с 2015 года — это два.
-И
Что ты имеешь против мейка? На самом деле в этом конкретном случае достаточно build-optimized.sh, но я предпочитаю запускать make и всё.
И сюда тоже запостирую:
https://www.opennet.ru/opennews/art.shtml?num=47869
>Наиболее сильно теряют свои позиции Java (-3.06%), Go (-0.76%) и C++ (-0.70%).
Запомните это сочетание: джава, го и сиплюсплюс.
Спасибо. Проиграл еще раз.
Я думаю это была шутка.
Щас бы терять позиции, когда все остальные растут. Хайп на говно прошел - он уже схлопывается, так толком и не успев взлететь.
>Хайп на говно прошел - он уже схлопывается
Но все же никуда он не денется, ниша пщ в целом востребована, разве что появится нормальная альтернатива как с пхп->питоноруби.
Как перекомпилировать hello world на виндоус? Я устанвил этот ваш GO с официального сайта на Linux Ubuntu 64 bit. Вообщем, hello world на нем работает. Но я хочу, чтобы работал под Windows 64 bit. Как это сделать? На команду 6g ругается, что не найдена.
БЛЯТЬ! ЕБАННА В РОТ! АССЕМБЛЕР ПАДАЕТ ТОЖЕ, ВСЕ ТЕПЕРЬ ОН НАХУЙ НИКОМУ НЕ НУЖЕН! ПИШЕМ МИКРОКОНТРОЛЛЕРЫ НА ПЫХЕ
Какая блять пыха? Не видел, там SCRATCH РАСТЕТ! Перекатываемся на него аки колобки.
Нужно указать при компиляции флаги GOOS и GOARCH и в них указать необходимую архитектуру ОС, короче погугли
>env GOOS=windows GOARCH=amd64 go build
Получилоась, работает! Спасибо, братишка, век багов не видать!
Круто, на гитхабе где-то есть библиотеки, которые автоматически собирают бинарники под все доступные ос
Да можно, ну лучше это делать на с#, как посоветовали свыше
https://github.com/avelino/awesome-go#gui
Ты очумел
1) статическая типизация
2) малое потребление памяти
3) джанго/питон 4000rps, golang 40.000 rps
Естественно, когда маленький сайт, то не нужно а когда почта.маил.ру/дропбокс, etc, где миллионы пользователей, то нада
Мечты жс-неосилятора нормальных языков
>статическая типизация
Это его недостаток для веба. Дальше?
>малое потребление памяти
окей. Одно достоинство. Скрипт может отожрать 100mb, но при нынешних 32ГБ памяти этого хватит на обслуживание 300 пользователей одновременно. Сервер ляжет скорее от чего-то другого, чем от недостатка памяти.
>джанго/питон 4000rps, golang 40.000 rps
Что такое rps? Запросов в секунду? Тогда это влажные мечты кукаретика. В реальности будет всего сотня, а дальше ляжет база.
Прикручиваешь кути и он сразу может в гуи
>>22037
1. Спорно, это недостаток только для макак.
2. "Маам, маам, смотри, мой жс/пхп/питон/хуитон говнопроект жрет всего 16 гигов под нагрузкой и течет как похотливая сучка"
ну если ты кроме хоум пейдж и вонючих интернет магазинчиков ничего больше не разрабатыва/не видел, это не значит, что нет систем с большим количеством рпс.
>16 гигов под нагрузкой
Я вижу, что ты ничего не разрабатывал, иначе знал бы об ограничении памяти для каждой инстанции.
func Command(name string, arg ...string) *Cmd
-что означает многоточие?
- что означает ежик и Cmd через пробел?
- это можно копировать в код и использовать?
Многоточие - переменное число переменных
ежик - это указатель
*Cmd - возвращемое значение ( в Го возврат пишется после функции)
Какого хуя присвоение := Это паскаль ебаный блядь? Хули нельзя было нормально сделать?
type userStruct struct {
}
Классов нет. Есть структуры.
Если тебе надо объединить структуру с методами, то используется связывание.
Типа так
func(user *userStruct)Method() {
user.UserName = "User"
}
и как в классе создать защищенный от наследования или изменения параметр (protected, private)?
private параметры пишутся с маленькой буквы
type userStruct struct {
privateName string
PublicName string
}
Ну и впизду тогда.
Без классов есть более гибкий и быстрый срр,
А для нормального ООП -- что угодно, начиная с рнр7 для веба и, допустим, Ява для остального.
Нахуй надо-то? Пытаюсь понять.
Можно создать аналоги классов.
Язык похож на си, но проще по синтаксису, и меньше требует, чем джава
Разве это поддерживается на уровне компилятора? Из примеров я делаю вывод что НЕТ http://www.golangprograms.com/go-language/struct.html
Да, поддерживается. Всё что с маленькой буквы доступно только в пределах пакета. "Наружу" для доступа экспортируются только симболы с большой буквы. Это удобно на самом деле: по названию симбола можно сразу сказать будет ли видно его снаружи или нет. Т.е. это касается не только полей структур, а вообще всех сущностей пакета: переменная, постоянная, функция/метод, структура, интерфейс.
-И
Скоропалительные выводы, как это мило.
Зарепортил неймфажество и щитпостинг.
>>21800
>разве что появится нормальная альтернатива
Вообще, когда появились раст и свифт, я думал, что сейчас начнется эра новых сиплюсплюсов с лямбдами и монадами, но как-то пока велосипедов в этой области меньше, чем хотелось бы - нет чего-то аналогичного по простоте легкости пщ. Ну, впрочем ерланг\еликсир в каком-то смысле оно самое и есть.
Короче, насчет ниши - согласен, но вот этот хайп "вау гугл нарисовал такую няшную аватарку давайте перепишем все бекенды на пщ" уже прошел\проходит. В евангелистах остались только шизики вроде опа, лол.
Бегемоты - круто.
Так ты соврешенно зря "угарал", не разобравшись, в чем, собственно, логика. Ассемблер был, есть и будет всегда; тот факт, что он в рейтинге падает - следствие прогресса в разработке компиляторов, это ожидаемо и нормально. То же касается, например, и си. А го дарт, ещекакаямаркретолушнаяхуйнянейм - еще не взлетевший язык, и если он в фазе взлетания вместо стабильного роста сдает позиции, то конец немного предсказуем.
Всем, в принципе, известная. кроме тебя Высоконагруженные бэкенды, сетевуха, CLI.
Cloudflare гоняют преимущественно код на Go, а у них 10% всего трафика в интернете.
Докер и вся экосистема вокруг него тоже построена на Go.
Кубернетес и разные базы данных, типа cockroach.
Т.е. для написания узкоспециализированной прокси. Я бы сказал это к веб-разработке отношения не имеет. Докер сдох.
>Т.е. для написания узкоспециализированной прокси
Нет, я тебе перечислил для чего, не нужно передергивать.
>Докер сдох.
Нет, это не так.
Ерланг\еликсир – языки с охуэнно узкой нишей даже относительно пщ, плюс динамические, плюс вм, плюс функциональные. Это все совсем не то.
C похожих языков есть Д, но гц у него тормозное текущее говно из-за того что язык перегружен плюсовыми фичами которое пщ и подметки не годится. И есть ещё пони-last-hope, который вроде бы хорош но целесообразность memory-safety концепций все ещё под вопросом да и хуй знает выберется ли оно вообще когда нибудь из альфы.
В общем для сетевухи у пщ сейчас конкурентов нет и в ближайшее время не предвидится.
мимо-пщ-хейтер
>Это все совсем не то.
Так я и имел в виду, что вместо переписывания всех бекендов на пщ их теперь переписывают на эликсире, а пщ остается там, где и должен.
>>22685
>есть ещё пони
Таки есть? Оно вообще шевелится? Что-то про него совсем ничего не слышно.
На ладан дышит, после того как их контора пытающаяся продавать язык обанкротилась создатель языка сьебал в microsoft research, остальные core-разработчики в основном вяло пилят компилятор и пытаются сделать так чтобы он не сегфолтится на каждый чих.
Тезисно:
- Роберт Пайк - пидор
- Разрабы самого go в целом - долбоебы каких мало
- Комьюнити go - самое макаконасыщенное после комьюнити js
- Язык изобилует уебанскими решениями, которые дауны яростно отставивают
GOPATH мог быть придуман только долбоебом. Мудацкое, неудобное и бесполезное решение. Все бы хорошо если бы оно было опциональным. Но, нет оно жестко захардкожено, потому что ятакскозал! Даунята активно защищают такой подход. Если тут комуто GOPATH нравится - подойдите ближе к сцене, я поссу на ваши лица.
gofmt - Революционный удобный тул!! - заорете вы. Пиздец вы дауны - отвечу я. Автоформат есть в любой IDE к любому языку вот уже 30 лет. Но вот жестко захардкодить уебанские, неправильные, неудобные настройки додумались только гоферы-даунята.
Открывающиеся скобки только на той же строке - Ебаный кромешный пиздец. Есть общеизвестный факт: так скобки ставят только билюбознательныекак минимум люди. Натуралы ставят скобки на новой строке потому что преимущества такого подхода очевидны. Но так как авторы go - поголовно состоят в ЛГБТ сообществах и соответственно любят хуйцы, то они блять ЗАХРАДКОДИЛИ скобки как им нравится. Хочешь писать как натурал? А хуй тебе - код не скомпилится.
Путь к репам прям в коде - например import "github.com/go-chi/chi". Ну и ебланы. А если завтра гитхаб накроется? Менять исходники? Дебики блять. Ну ладно, гитхуб напрядли накроется, но более малоизвестных хостинг - изи
В остальном пока язык устраивает, http сервер, роутинг, sql из коробки + язык дизайнился под бекенд, для моего проекта хватает.
>>19525
>жаваскрыпт мидл кун
Угарнул. Сеньйор джиес примерно равен джуниору в нормальных областях. А теперь оцени свой уровень.
Вообще специализация удел насекомых. Если человек знает один язык\технологиях, то он - макака вне зависимости от зп.
>>21438
>два аккаунта с положительной кармой
Положительная карма на хабре - зашквар. Адекватные люди все с отрицательное. Хабромакаки в основном братьев по разуму плюсуют
Тезисно:
- Роберт Пайк - пидор
- Разрабы самого go в целом - долбоебы каких мало
- Комьюнити go - самое макаконасыщенное после комьюнити js
- Язык изобилует уебанскими решениями, которые дауны яростно отставивают
GOPATH мог быть придуман только долбоебом. Мудацкое, неудобное и бесполезное решение. Все бы хорошо если бы оно было опциональным. Но, нет оно жестко захардкожено, потому что ятакскозал! Даунята активно защищают такой подход. Если тут комуто GOPATH нравится - подойдите ближе к сцене, я поссу на ваши лица.
gofmt - Революционный удобный тул!! - заорете вы. Пиздец вы дауны - отвечу я. Автоформат есть в любой IDE к любому языку вот уже 30 лет. Но вот жестко захардкодить уебанские, неправильные, неудобные настройки додумались только гоферы-даунята.
Открывающиеся скобки только на той же строке - Ебаный кромешный пиздец. Есть общеизвестный факт: так скобки ставят только билюбознательныекак минимум люди. Натуралы ставят скобки на новой строке потому что преимущества такого подхода очевидны. Но так как авторы go - поголовно состоят в ЛГБТ сообществах и соответственно любят хуйцы, то они блять ЗАХРАДКОДИЛИ скобки как им нравится. Хочешь писать как натурал? А хуй тебе - код не скомпилится.
Путь к репам прям в коде - например import "github.com/go-chi/chi". Ну и ебланы. А если завтра гитхаб накроется? Менять исходники? Дебики блять. Ну ладно, гитхуб напрядли накроется, но более малоизвестных хостинг - изи
В остальном пока язык устраивает, http сервер, роутинг, sql из коробки + язык дизайнился под бекенд, для моего проекта хватает.
>>19525
>жаваскрыпт мидл кун
Угарнул. Сеньйор джиес примерно равен джуниору в нормальных областях. А теперь оцени свой уровень.
Вообще специализация удел насекомых. Если человек знает один язык\технологиях, то он - макака вне зависимости от зп.
>>21438
>два аккаунта с положительной кармой
Положительная карма на хабре - зашквар. Адекватные люди все с отрицательное. Хабромакаки в основном братьев по разуму плюсуют
>GOPATH мог быть придуман только долбоебом. Мудацкое, неудобное и бесполезное решение. Все бы хорошо если бы оно было опциональным. Но, нет оно жестко захардкожено, потому что ятакскозал!
В смысле захардкожен? Всегда можно переопределить.
>>23528
>Открывающиеся скобки только на той же строке
Кажись, в джаве аналогично принято ( конечно можно по-своему, но желательно именно так). А ты открой питон, еще сильнее забугуртишь.
>>23528
>Путь к репам прям в коде
Не совсем так. Он у тебя по этому пути скачается, а дальше будет просто лежать в GOPATH/src/github.com/go-chi/chi
Да, если твой проект зависит от другой библиотеки, ты залил его на гит, а потом путь поменялся, то будут проблемы.
>В смысле захардкожен? Всегда можно переопределить.
Лол. В смысле он есть и проекты должны лежать в нем. А я хочу чтобы рабочий проект на go лежал в одной папке, а личный в другой, а в третьем проекте у меня только часть на go и я хочу чтобы она лежала вместе с проектом. Ну т.е. стандартный кейс.
>Кажись, в джаве аналогично принято ( конечно можно по-своему, но желательно именно так). А ты открой питон, еще сильнее забугуртишь.
Мне плевать как у джава-петушни принято. В своих проектах я пишу как считаю нужным, в рабочих пишу как принятов в проекте. Да и в джаве это лишь рекомендация, а уебанских рекомендаций я не придерживаюсь, в своем коде на джаве ставлю скобки на новой строке.
Питон прекрасный язык, и к тому же не си-подобный, так что там со скобками нет проблем. PEP8 можно спокойно игнорировать если не нравится.
>Не совсем так
Да, ты прав. Но всеравно так себе идея, выглядит уж точно не красиво
>выглядит уж точно не красиво
По-моему дело не в том, что "не красиво", а в том, что когда тебе понадобится по какой-то причине сменить вендора (ну, например скачивать пакеты в CI со своего локального зеркала репа), ты как бы немного соснешь хуйца и пойдешь городить костыли. Самое смешное, блядь, что уже дохульон лет, как это проблема решена (хотя бы у той же джавапетушни с мавеном), уже найдено корректное, блядь, решение проблемы зависимостей и сборки проекта - но нет, нахуя нам это, давайте лучше сделаем гопатх и урлы в коде. Это просто пиздец. И с дженериками один-в-один та же ситуация. Черви-пидоры просто.
другойанон
А что посоветуешь на каждый день из своего списка?
Ненужно.
Хочу сделать на Go систему на основе блокчейна для поддержки свободной журналистики: факт-чекинг, пруф-ридинг и поддержка свободных журналистов посредством оплаты востребованных публикаций через любую валюту. Вопрос: стоит ли для этих задач брать именно Go? Мне кажется, что это отличный выбор, но может быть есть инструменты получше для блокчейн сервиса.
На Go.
Итак, такой вопрос, почему по супер развивающемся языку, всего 1700 вопросов в неделю а по тому же питону 6000?
https://stackoverflow.com/tags
го выстрелил в последние три года, а статистика ведется со времен основания сайта.
> вопросов в неделю
Неправильно ты маняврируешь, нужно говорить что го такой простой и понятный что по нем и спрашивать нечего.
Так и есть, лол.
> хорош го
Асинхронные чятики, сервера обрабатывающие потоки мелких сообщений.
> не использовать
Там где неприемлим гц, там где охуенно нужны дженерики и прочий хайлевел.
Пытаюсь развернуть проект, чтобы посмотреть, как взаимодействует реакт с го, в будущем проекте пригодится
https://github.com/olebedev/go-starter-kit
установил golang, прописал gopath, тестовая прога получилась (hello world), в общем, когда прописываю make install получаю хуйню, как на пике. Гуглеж ничего не дал, все зависимости, насколько могу судить, установлены.
Yarn установлен глобально, glide установлен глобально, просто, почему-то, не хочется видеть @yarn и @glide и иже с ними.
Если просто прописываю yarn install && glide install, все проходит, но, опять же, make server выдает хуиту.
Гуглеж не помог, в чем может быть дело?
Спасибо.
Не нужна тебе, Вовка, такая машина
И что будет, если ввести make glide ?
Смотри, rule of thumb: Если твой софт будет крутиться на сервере или в виде демона или в виде консольной утилиты, то его стоит писать на Go. Если твой софт требует GUI, то подумай, может быть ты можешь сделать интерфейс на основе веба, тогда браузер станет интерфейсом для твоей программы.
Поясни подробнее за `go get ./...` фронтендеру, который первый день с го работает.
Не помогло, мейк то же выдает.
Попытался новую версию ноды -- чот не то.
Такое чувство, что какой-то ВАЖНЫЙ компонент при установке го или мейка пропустил.
https://medium.com/@patdhlk/how-to-install-go-1-8-on-ubuntu-16-04-710967aa53c9
Это корректный мануал? За исключением GOROOT
Тебе же явно пишет, что проблема не в го
Поставь glide
Когда поставишь, проверь, запускается ли он командой glide
С гуй приложениями все понятно. А что насчёт серверных приложений? Го байтоебский же язык. Какого типа приложения можно писать с помощью го?
В консоли напиши glide
Он запустился?
Надо делать микросервис с REST API
- пакетный менеджер или GOPATH + go install наше все?
- управление версиями компилятора или /usr/bin/go норм?
- фреймворк для tdd или стандартного t за глаза?
go это новый php, проще говоря стало дохуя вакансий на нем и платят хорошо. Стало быть любить го не нужно.
> >47 хромосому.
>go
>дохуя вакансий
>платят хорошо
У тебя уже есть главная тулза - поздравляю.
Ты можешь опровергнуть эти высказывания?
>go это новый php
Ебнутый? Ты хотя бы сравни эти два языка. PHP - высокоуровневой язык с сильным ООП. Го - низкоуровневной. В нем даже классов нет. Это как Си. В вебе нет места Си.
Я не сравниваю языки с техническое точки зрения, я сравниваю степень говноедства основной массы пользователей.
ну хуй знает. А зачем тебе остальные подстроки, полученные в результате сплита?
О чем с дебилом говорить то? Его нужно просто обоссывать.
Есть ли для этого адеватный паттерн/пример/туториал_для_чайника ?
bump
Да не бомбит у меня!
Тут на блокчейн платформе для распределённых приложений раздрают токены всем гитхаб юзерам, которым больше года: https://github.com/GenesisCommunity/go-genesis.
Уже эфир обгоняет.
Что думаете, ананасы?
что терминатор 5 - параша
[code="go"]
func (c Container) Put(elem interface{}) {
c = (c)[0]
}[/code]
(c)[0] <- что это за хуйня, блять?
Из-за приоритета операторов.
Взятие индекса имеет больший приоритет, поэтому чтобы сначала разыменовать, а потом взять индекс добавляются скобки.
Я запускаю из кода процесс
cmd := exec.Command("fbi", "-d", "/dev/fb0", "-T", "1", "-noverbose", "-a", "yoba.png")
if err := cmd.Run(); err != nil {
// panic(err)
}
Как мне получить id этого процесса чтобы потом убить его?
cmd.Proccess.Pid возвращает какое-то левый id.
Это только с Start() работает? С Run() не работает.
2018/02/07 09:53:41 failed to kill: os: process already finished
Ну ты в глаза долбишься? Почитай документацию-то или хотя бы ошибку.
Run() запускает и синхронно дожидается выполнения. Ошибка тебе говорит о том что ты пытаешься прибить процесс который уже закончился. А он ясен хуй закончился, потому что ты вызвал метод, который дожидается завершения процесса.
Хорошо, тогда такой вопрос. Я вызываю определенный процесс с помощью Run(). После запуска он висит и в определенное время мне нужно его убить. Как это сделать?
Ну он работает. fbi - это утилита, которая передает во фреймбуффер картинку. Покуда процесс работает картинка будет отображаться. В определенный момент мне нужно сменить картинку, для этого я собираюсь убить процесс со старой картинкой и запустить с новой.
Да как не имеет-то? Я в коде запускаю стороннюю программу. Получаю ее PID. Потом с помощью sudo kill <PID> пытаюсь ее убить, а у меня это не получается потому что PID левый, а запущенная программа продолжает работать. Go мне дал PID какой-то хуйни, а не того процесса, который я запустил. А ты говоришь не имеет отношения.
Блять, какой же ты тупой. Перечитай еще раз все что тебе уже написали и уебывай.
https://www.kraxel.org/cgit/fbida/tree/fbi.c
На, читай исходники, мудила. Смотри как он форкается.
Спасибо.
> В определенный момент мне нужно сменить картинку, для этого я собираюсь убить процесс со старой картинкой и запустить с новой.
exec.Command("killall", "fbi")
?
Вообще подход довольно днищенский. Нормальный человек бы взял биндинги к либе и сделал обработку картинки внутри процесса.
да че там, давай уж сразу, pkill f
Пока так и делаю. Но между завершением предыдущего процесса и запуском нового на дисплее проскакивает консоль. Поэтому хочу сначала вывести новую картинку поверх старой, а потом закрыть старую.
Поэтому хочу сначала вывести новую картинку поверх старой, а потом закрыть старую.
exec.Command("killall", "--older-than","1ms","fbi")
Убивает все fbi старше чем
1ms - одна милисекунда.
То что нужно!
Сайт не отправил данных.
ERR_EMPTY_RESPONSE
Почему так?
Тред, можно ли с помощью Go реализовать что-то типа графической оболочки и связующего элемента для БД?
Есть БД с заказами, работниками, запросами, процедурами, триггерами и хотелось бы это все завернуть с помощью Go.
Можно ли так, подскажите соурсы или альтернативы реализации.
Спасибо.
Десктоп нужно, на веб-интерфейсе уже делают люди.
Будет отлично еще вариантов услышать, посмотрю каждый.
https://github.com/avelino/awesome-go#gui
посмотри в списке, может что приглянется.
Под десктоп я бы делал, так по приоритету (больше -> меньше)
Native gui (C# WPF / Cocoa Obj-C) -> C++ Qt / Imgui -> Electron -> Все остальное.
Ну если, ты только с Go дружишь, можешь попробовать go-imgui (ибо go-qt уже посоветовали). Ну если честно, то go и гуй, это такое себе (вот через пару лет, можно будет глянуть, а пока мало либ).
>Пилить круды? Настоящий хайлоуд? Системное проганье?
Вот это точно, на счет остального не знаю. Круды пилятся легко, для хайлоада подходит потому как язык компилируемый и довольно шустрый. На счет системного проганья - сам проверил, сделал несколько встраиваемых систем с использованием го. На самом деле нормальные люди пилят на си, но я не люблю си ибо он стар, неуклюж и сложен. На го все то же делается гораздо проще и быстрее.
K8s, etcd
Я крудописер, делаю MVP, если что-то выстреливает, то потом становится тормозным гавном потому что языки интепретируемые, смогу ли я легкостью рельсы перескачить на го? Ну так чтобы пару либ и всё работало из коробки, минимум приседаний.
На счет рельсы ничего сказать не могу, но вот
>чтобы пару либ и всё работало из коробки
это про него. В первом веб-приложении, что я запилил на го я использовал всего две либы: для MySQL и для маршрутизации, остальное из коробки. MVC-модель составил сам, написал несколько функций для удобства и получился очень компактный фреймворк.
> си ибо он стар, неуклюж и сложе
Сейчас системное прогонье нужно делать на Rust. В сравнении с ним Go слишком медленный.
>Вебня
Нет. Как раз для веба Rust подхожит совсем плохо. Слишком низкоуровневой. Впрочем, и Go не намного лучше. На вебе правят бал совсем другие.
ООП не нужно. Плюс оно там есть.
>Не нужно пиздеть про толстые бинарники, их размер значительно уменьшается одним маленьким Makefile.
Анон, просвяти про флаги для билда
Вообще-то разговор про раст был. Там все есть.
> Готред всплывает со дна только с залетным жирдяем решившим постебаться с говноедов от скуки
> Индекс популярности пщ стремительно падает даже на фоне мертворубей
> Работодатели неспособные найти пщ кодеров готовы сами переучивать хоть скрпитодетей на го
Что-то пошло не так? Гуглу нужно ещё хайпануть малехо?
Вакансий стало довольно много, поэтому и хантят. А то что вниз пошло, ну пошло и пошло. В последнее время много нового появилось, и раст и свифт. Так что неудивительно что фрагментация увеличивается.
Так-так, что тут у нас? ааа, это же ТАЙОБЕ. Где всегда растет какая-нибудь ху* VB .NET, PL/SQL, SQL - programming language =), так ладно html5 еще не завезли туда.
Опаньки, внезапно падают web-oriented языки, серьезно?
Javascript - падает. Это вообще, смешно. У нас наверное все конференции теперь про VB .NET, а вовсе не про React/Angular/Vue/Aurelia/ Node/Express/Koa/Hapi/Docker/Heroku/AWS и еще 10к веб-технологий и веб-сервисов.
Я еще могу понять Си растет, ибо IoT, ROS, Robotics, Embedded devices, Smart Homes, Python extensions (CPython). Но еп... JS падает, ну нах...
> указать не main пакет
> линкер собрал exe без головы
> голый объектный модуль
> Мастдай определил его как 16 бинтый DOS файл и попытался запустить.
Как то так.
Вот предположим мне надо написать сервис, который будет по одному URL отдавать одну из 400к строк. Особой выборки нет, просто по очереди отавать строку за строкой. и все это где-то 450 запросов в секунуду. Планирую взять какой-нибудь fasthttp. Строки может все в память прочту или использую MySQL просто он уже развернутый есть
само собой я не прошу за меня строить, но может ты скажешь чего почитать, куда посмотреть
ЙОБА-индекс то еще чудо чудес, нашел чем мериться.
Го подкупает техническими решениями которые он предоставляет, а не верой в совершенный код (особенно для веб/сетевого макакинга).
Более того его стоит любить только за то, что он плюнул в лицо ООП и не ушел в ФП (где народ тискает у другу друга за лямбды генерируя новый молодежный спаггети-код). То есть, стоит любить за старый добрый процедурный кодинг.
И пока народ натирает на всякие асинк-авейты (или калбэчит в подворотнях), гофер пишет не парясь как есть и сразу получает все асинхронно (как на самом деле и должно быть).
Ну и так же не забываем что нет никаких вирт машин и прочих чуда чудес невидимого мира (JIT-компиляции например).
В реале у го есть еще один большой скрытый плюс - когда он появился, отпала необходимость писать на джаве или упаси на node.js или питоне.
Он реально смог вклиниться в нужное место и никуда уже не пропадет (так как технически необходим, а не дань какой-то очередной моде, которая ничего и не решает сейчас на рынке)
>Что-то пошло не так? Гуглу нужно ещё хайпануть малехо?
Так вроде скоро начнут dart всем заливать в уши? Не?
Го это про другое - чисто технический выбор для нагруженных, многоядерных/процессорных систем с асинхронщиной.
Идеальный язык для веб-разработки на сегодня.
>Так вроде скоро начнут dart всем заливать в уши?
>Идеальный язык для веб-разработки на сегодня.
Проиграл в голос сейчас. До вашей деревни все с лагом в пять лет доходит, да?
Вроде какой-то выпук и вроде старался, но нифига не понятно. Что сказать то хотел?
Поясни тогда, почему Go в 2 раза медленнее пишет в файл , чем java?? Попробовал записать 200.000.000 цифр
генераторы кода.
например захотел ты, чтобы твоя функция была универсальной к любым параметрам (которые ты задумал).
Вместо того, чтобы писать сто раз:
f Add(int a, int b)
{
return a +b;
}
f Add(float a, float b)
{
return a +b;
}
f Add(short a, short b)
{
return a +b;
}
f Add(double a, double b)
{
return a +b;
}
___
можно просто написать в том же (C++):
template<typename Type>
Type f(Type a, Type b)
{
// ну и здесь ты напр. обрабатываешь, какие-то эксклюзивные ситуации связанные с конкретным типом.
return a + b;
}
генераторы кода.
например захотел ты, чтобы твоя функция была универсальной к любым параметрам (которые ты задумал).
Вместо того, чтобы писать сто раз:
f Add(int a, int b)
{
return a +b;
}
f Add(float a, float b)
{
return a +b;
}
f Add(short a, short b)
{
return a +b;
}
f Add(double a, double b)
{
return a +b;
}
___
можно просто написать в том же (C++):
template<typename Type>
Type f(Type a, Type b)
{
// ну и здесь ты напр. обрабатываешь, какие-то эксклюзивные ситуации связанные с конкретным типом.
return a + b;
}
Ты проебываешь типобезопасность. Вместо статической проверки типов на этапе компиляции, ты получаешь проверку в рантайме, которая может покрашится.
С какого перепуга будет крашется? (если конечно ты сам в условиях панику не добавишь, но паника это не "крашится")
Что за новый тренд, не могут осилить перегрузку функций (ну конечно же, очередное "ненужно")
Что выглядит убого.
Ухты, вопрос из девяностых!!!
Чтобы на однотипное действие, с разной сигнатурой функций - было одно имя.
Банально, рассмотрев перегруженные функции в API ты сразу можешь бегло понять с чем эта функция работает вообще, а не ломать голову, как там автор ее назвал.
Зачем тебе гуи в 2018? Возьми браузер и пили свои формочки под каким-нибудь ангуляром (или что сегодня там в моде).
Вопрос решается передачей объекта с конфигом или как в го, набором функций с разными именами.
Когда у тебя одна и та же функция решает разные задачи в зависимости от типов аргументов, это так же плохо, как использовать одну переменную для совершенно разных задач.
package main
import (
"bufio"
"strconv"
"os"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
f, err := os.Create("file.txt")
check(err)
defer f.Close()
w := bufio.NewWriter(f)
for i := 0; i<= 100000000; i++ {
w.WriteString(strconv.Itoa(i)+"\n")
}
w.Flush()
}
package main
import (
"bufio"
"strconv"
"os"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func main() {
f, err := os.Create("file.txt")
check(err)
defer f.Close()
w := bufio.NewWriter(f)
for i := 0; i<= 100000000; i++ {
w.WriteString(strconv.Itoa(i)+"\n")
}
w.Flush()
}
Только программисты, и го тому яркий пример.
>Вопрос решается передачей объекта с конфигом
Больше магии и разовых объектов для простых функций, о да. Снова разрабы решили не париться и переложили бойлерплейт на плечи программистов, а те и рады.
>Когда у тебя одна и та же функция решает разные задачи в зависимости от типов аргументов
Ты понимаешь вообще для чего перегружают функции? Ты мой пост прочитай, где ты увидел что я про разные задачи говорю?? Сам придумал условия, сам опровергнул?
Просили привести пример. Примера нет. Нет и предмета разговора.
Передача явного параметра удобней чем рысканье по докам в попытках разобраться какую из 30 версий метода вызывают.
Java:
FileWriter actually uses its own fixed-size 1024 byte buffer. The BufferedWriter on the other hand, show that it uses and 8192 byte buffer size (default), which can be configured by the user to any other desired size.
В го по умолчанию 4096, ну если даже буффер на 2 помножить, то скорость не меняется
Оно работает в рантайме. Нет нужды проверять в рантайме то, что прекрасно можно проверить в компайл-тайме. Когда ты последний раз копипастил slice tricks?
Перегрузка функций - условно-абсолютное зло и антипаттерн, как и, например, гото. Это просто плохая идея. Не путай перегрузку функций с параметрическим полиморфизмом ("дженерики" на языке быдла).
Единственный оправданный кейс для перегрузки - изменение поведения в зависимости от числа переданных аргументов.
Спасибо
>Передача явного параметра
Чего???
>в попытках разобраться какую из 30 версий метода вызывают.
Ох лол
Ты уже покажешь реальный пример, где перегрузка решает проблему лучше альтернативных вариантов, или так и будешь ололокать?
>Просили привести пример. Примера нет. Нет и предмета разговора.
Пример чего? Перегруженный функций? Ты совсем упоротый?
Да, будь добр. Покажи проблему и как она решается при помощи механизма перегрузки.
>Единственный оправданный кейс для перегрузки - изменение поведения в зависимости от числа переданных аргументов.
Ляпнул и сразу наружу весь свой опыт "программиста" вывалил.
Или джава-джун, который видел только как джависты компенсируют отсуствие дефолтного значения у аргумента, или же скрипто-макака, где толком не было реальной работы с типами.
Что же вас в раст то тянет, в системный то язык, с таким опытом??
Если уж на то пошло, то в расте нет и дефолтных значений. Есть только Default трейт, который один хер требует явной передачи параметра. varargs в целом удобная фича, когда она используется в стиле ...rest.
Каких альтернативных вариантов? Ну раз ты такой способный, на:
Что лучше:
save(User)
save(id, name)
save(ContainerUsers)
save(WebForm)
или же:
saveFromUser(User)
storeFromNativeData(id, name)
preserveFromUserList(ContainerUsers)
persistenceFromWebForm(WebForm)
Так что тут лучше смотрится? Одно-именный метод, выполняющий из разных "структур данных" но одно сохранение, или же маскарад наименований, которые делают одно и тоже, но не факт что называются одинаково (и не факт что будут начинаться с "save")
Ну парни вообще отличились, что я могу сказать. С вечным желанием сделать что-то необычное, показать свою уникальность - они, конечно, справились. Но нужно ли это "не такое как все" изящества на рынке - конечно нет. Люди продукты пилят, а не стараются перед друг другом отличиться.
Это имхо, а так конечно же сейчас больше зависит от того, сколько хайпа может зависти на тот или иной язык.
fn<T: Into<User>> save(user: T)
То что ты не знаешь как нормально можно решить проблему и при этом сделать её расширяемой, не означает что предложенное тобой говнорешение хорошее.
Я специально добавил разные структуры данных, которые не могут быть использованы с обобщением (раз уж пугает слово "дженерики") ибо алгоритм работы разный, так же эти данные не могут быть "обернуты" в полиморфизм.
Так что уноси свое говно, перегрузка важная вещь и реально делает код удобнее в использование (если ты не джун-диверсант) реально бывают случае, когда добаляется новый тип данных и нам нужно только перегрузить функцию (где под капотом скармливаем нативному методу типа save(id, name)).
>Так что уноси свое говно
Надеюсь ты понял, что обобщение тут не работает, это понимание придет со временем, когда начнешь по-настоящему программировать, а не учить один лишь синтаксис у языков, чтобы казаться умным.
Мань, в твоем случае надо лезть в модуль где твой save лежит и добавлять частный случай. В том варианте который показал я ты просто где тебе нужно пишешь реализацию для своего типа данных.
Например
impl Into<User> for (i32, String)
чтобы скармливать в метод кортежи вида
save((32, "shit"))
Хватит маневрировать, я показал как удобно читается API с перегрузкой, с разными структурами данных. И что это будущее наступило еще в годах восьмидесятых. Нам глубоко пофигу - частный там случай или нет, нам важно куда-то "заперсистить" имеющиеся у нас данные и мы лишь выбираем подходящую сигнатуру (зная заведомо что наш сервис-объект отвечает за сохранение).
Понятно что если ты увидишь
saveFromUser(User)
persistenceFromWebForm(WebForm)
Первое что будет в голове - "эти два метода делают одно и тоже или нет??" - и вот тут ты полезешь в доку, чтобы перестраховаться, ведь перегрузка ненужна.
И хватит меня троллить (хотя не исключаю факта что ты просто тупой), в жизни не думал что буду кому-то объяснять - какой удобный кейс - эта перегрузка
>в жизни не думал что буду кому-то объяснять - какой удобный кейс - эта перегрузка
Если ты реал программист, а не синтаксический червь, расскажи, где вам такое в уши заливают, что вот перегрузка зло, исключения зло, ...все зло, а писать когда как в 70-е круто и модно?
Тебе уже объяснили, что твой костыль хуевый и решается нормально другими средствами.
По факту в приведенном тобой примере метод сохранения делает одну полезную вещь: кладет какие-то данные, предположим, в базу. При написании нормального ортогонального кода, ты отделяешь все юз кейсы, связанные с конвертацией данных, для того, чтобы метод сохранения непосредственно данных не зависел от того, что ты решил добавить новую форму.
-> /b
>>43075
Ты совершенно не понял, о чем речь. Можешь перечитать пост, можешь не перечитывать. Кстати, это тред про го, а не про раст.
>>43084
Вот это тот самый ужас, о котором я говорил. Скриптоманькам, впрочем, не привыкать. Кроме того, уровень владения английским как бы намекает на уровень владения навыками программирования.
>>43104
Перегрузка и исключения (aka "гото") - это как раз артефакты из 70-ых. С тех пор прошло много времени.
Поддвачну вот этот пост и отмечу, что это буквально первая вещь, которой учат в любой книжке или курсу по написанию программ.
Тебе показали для чего перегрузка нужна, а не как нужно апи писать.
Если тот "сэйвер" не имеет состояния, он как раз выполнен в лучших традициях современного программирования ("анемичная модель предметной области").
Но, опять же, тебе показали для чего нужна перегрузка с разными структурами данных, хера ты там додумываешь какое-то свое поведение какому-то псевдо-коду и рассуждаешь потом, что это плохо, ты вменяемый вообще?? (если настолько упорот, замени save на build и будет тебе билдер, но опять же, не маневрируй, тебя тут учат именно перегрузке)
А теперь важное (реально теорема и доказательство)
Перегрузка не нарушает никаких таинственных знание по проектированию, банально компилятор делает тоже самое - добавляет к именам функций некий свой хэш (зависит от указанных типов в аргументах) типа "save$isl()" или "save$kjLL()" (теперь имя функции это не только его прямое имя но и типы аргументов - то есть сигнатура)
доказательство
Никак это не может повлиять на проектирование (и быть антипаттерном каким-то) потому, что абсолютно без разницы - определяется ли метод по одному только имени - или же по сигнатуре (имени и типам в аргументов)
>метод по одному только имени - или же по сигнатуре (имени и типам в аргументов)
То есть (разжую для самых самых) в твоем расте или в го идентификатором функции является это:
saveFromSome(int, float)
а в нормальных языках это:
save(int, float)
И никак это ни на что не влияет. НИКАК
Вероятно один гофер делает полезного кода больше, чем мартыхи наворачивающие один фреймворк на другой усложняя проект на пустом месте.
Яркий пример - гофер тупо проинжектит через main все зависимости в небольшом проекте, а какой-нибудь джавист определенно возьмет целый спринг и потом будет копаться в нем и побеждать всей командой.
Если одним программистом можно заменить целую команду месителей грязи - то я бы ему платил +15-30% $
Ладно мань. Накопишь опыта, поймешь что не так в твоем видении мира. Пока что ты предъявил говнокод в качестве обоснования фичи, которую сейчас не тащат в современные языки. Мы тут все прекрасно знаем как работает перегрузка и многие ей пользуются в тех же скриптовых языках повсеместно. Но это не значит что от этого она стала хорошей идеей.
Чини детектор, обиженный.
>>43212
>это хороший стиль проектирования, потому что под капотом компилятор делает то же самое
Гениальная цепочка рассуждений, тут только в /me отправлять. Ты, конечно, молодец, что уже в школе интересуешься всем, за хайпом следишь и все такое, но этого недостаточно, чтобы не быть школотроном.
Использует, но это слишком сложно для адептов говнофичей.
>Накопишь опыта
>в твоем видении мира.
Тебе привели железные доказательства того, что два различных идентификатора функции НИКАК НЕ ВЛИЯЕТ НИ НА ЧТО (только на восприятие, если ты неопытный программист и не понимаешь что такое сигнатура функции)
Так что хватит маневрировать, не позорься. Просвещайся, пока мне не лень тебя кормить.
> С тех пор прошло много времени.
Лол блять. Все эти ваши охуенные абстракции до сих пор внутри живут на сишке и этих goto. Ебаные макаки везде.
>до сих пор внутри живут на сишке
Ты не поверишь, но сишка до сих пор компилируется в машинный код, машинный код до сих пор исполняется на процессорах, процессоры до сих пор из транзисторов, ну и вообще там до сих пор электрончики туды-сюды прыгают, прикинь? Ты не понимаешь значение слова "абстракция", но для байтослесаря это нормально, так что не парься; байтослесарь - не программист.
Тебя уже даже в других тредах детектят и обоссывают, лол, кто бы говорил про "не позорься". мимо
Лол, как раз наоборот. Человек, пишущий на высокоуровневых языках не программист.
Помню в юности, встретил такого "программиста", он мне рассказывал, что даже ассемблер это все фигня, а реал тру пишут на машинном коде и я развесив уши слушал и верил.
Как же приятно встретить таких специалистов тут.
Лол, спрятался и тихо сам собой бугуртит, слили уже тебя, иди в другой тред лови фантомов.
Уже давно ходит тема, что использование = ис бед бай дизайн из-за того, что оператор сравнения есть ==, я думаю лет там через 10 все переменные будут чисто через : юзаться
Жирный, уйди.
чтобы компилятор различить объявление от присввоения. Хуй знает почему нельзя было сделать автоматически, наверное чтобы неявностей по типу очепятался-проебал пересенную/содержимое было меньше
Блять, ну вы и мудаки.
:= это оператор для объявления переменной с автовыводом типа. Присвоение делается через =
Мань ну ты че?
Потому что в приведенном мною примере используется shadowing. Если бы там было простое присвоение, ты бы получил ошибку компилятора о том, что ты пытаешься стринг в инт пихнуть.
Это не скриптопараша. Здесь ты типы указываешь явно. А значит и смену типа ты тоже указываешь явно.
Ну так будет, но это немного не тот случай.
Даже в Java планируют отказаться от статической типизации к 12й версии, потому что это уже давно устарело.
Шизик, ты почему режим не соблюдаешь? Опять какой-то бред несешь.
Хоть чел и толстит, но все же, я тоже стал задумываться - нафига статическая типизация. Нет, конечно, строгая типизация нужна (чтобы не складывать строки с числами), но нафига статическая?
>Якобы она помогает ловить самые страшные ошибки и прям еще на этапе компиляции.
Блин, да так и так тесты писать. Типа нужно больше в тестах страдать? Да нет, зачастую в динамических языках тесты еще короче, за счет динамизма исполнения (и не нужно байткод или рефлексию теребить ради динамизма). И если ты пишешь функции через if/switch, где сразу отбрасываешь все кроме нужных типов, то вообще заморачиваться не нужно (да и никто никогда в этих юнит тестах особо и не заморачивается). И да, на всякие null ситуации статик-господам тоже нужно делать проверку (прям кусочек динамической радости в их суровом псевдо-статичном мире).
>Якобы помогает в больших проектах.
О да, 5000 классов и интерфейсов в жаба-проекте этому способствуют, конечно. Как ты в динамическом языке через страдания будешь разбираться с типом, так и в статике играть в угадайку, что за очередная имплементация из сотни объектов провалилась там через интерфейс.
В общем, без хорошей документации в большой проекте и так и так сложно будет.
И так, тесты все равно писать, документацию писать... То что мы получаем? Только убогую задержку. Пока очередная жесть компилиться - скрипт уже выполнился. Пока оно компилиться и потом еще перезапускает сервер, ты уже через "альтаб" все проверил (или просто повернул голову на второй монитор, особенно если какой-нибудь пхп с лайф-кодом).
А этот костыль в виде обобщенного программирования (дженериков)? Если на контейнерах еще ниче смотрится, то во всем остальном это какой-то длиннющий, адовый синтаксис (в джаве вообще фиг в строку уместишь этот рай из угловых скобок и длинных типов).
PS.
Ну еще и эта мода с автовыводом типов - без IDE вообще не разобраться что там вернулось с функции, так что визуально получается та же динамическая причуда, но со страданиями (бегаешь мышкой по коду и гладишь каждую переменную, хотя ты вроде как взял язык со статик типизацией).
Хоть чел и толстит, но все же, я тоже стал задумываться - нафига статическая типизация. Нет, конечно, строгая типизация нужна (чтобы не складывать строки с числами), но нафига статическая?
>Якобы она помогает ловить самые страшные ошибки и прям еще на этапе компиляции.
Блин, да так и так тесты писать. Типа нужно больше в тестах страдать? Да нет, зачастую в динамических языках тесты еще короче, за счет динамизма исполнения (и не нужно байткод или рефлексию теребить ради динамизма). И если ты пишешь функции через if/switch, где сразу отбрасываешь все кроме нужных типов, то вообще заморачиваться не нужно (да и никто никогда в этих юнит тестах особо и не заморачивается). И да, на всякие null ситуации статик-господам тоже нужно делать проверку (прям кусочек динамической радости в их суровом псевдо-статичном мире).
>Якобы помогает в больших проектах.
О да, 5000 классов и интерфейсов в жаба-проекте этому способствуют, конечно. Как ты в динамическом языке через страдания будешь разбираться с типом, так и в статике играть в угадайку, что за очередная имплементация из сотни объектов провалилась там через интерфейс.
В общем, без хорошей документации в большой проекте и так и так сложно будет.
И так, тесты все равно писать, документацию писать... То что мы получаем? Только убогую задержку. Пока очередная жесть компилиться - скрипт уже выполнился. Пока оно компилиться и потом еще перезапускает сервер, ты уже через "альтаб" все проверил (или просто повернул голову на второй монитор, особенно если какой-нибудь пхп с лайф-кодом).
А этот костыль в виде обобщенного программирования (дженериков)? Если на контейнерах еще ниче смотрится, то во всем остальном это какой-то длиннющий, адовый синтаксис (в джаве вообще фиг в строку уместишь этот рай из угловых скобок и длинных типов).
PS.
Ну еще и эта мода с автовыводом типов - без IDE вообще не разобраться что там вернулось с функции, так что визуально получается та же динамическая причуда, но со страданиями (бегаешь мышкой по коду и гладишь каждую переменную, хотя ты вроде как взял язык со статик типизацией).
У меня к тебе пару вопросов:
1) Какой максимальный объем проекта, который ты писал? В строках кода.
2) Писал ли ты когда-нибудь на хаскеле или другом подобном языке, где система типов гораздо более мощная, чем то говно, которое есть в жаве
>1) Какой максимальный объем проекта, который ты писал? В строках кода.
С линейкой не бегаю, да и как считать когда у тебя на пол страницы портянка из доков (особенно в интерфейсах) или в чужом проекте (наверное любители помериться ЧСВ придумали какую-то линейку для системы контроля версий, но я не в курсе)? Скажу, что пишу более 12 лет (прям работаю, а не там в школе бэйсик в тетрадке рисовал или дома игрался), проекты были разные и очень большие и видел всю энтропию с которой обрастает любой код (зачастую из-за проблем документации и каких-то разъясняющих моментов для всей команды).
Так что тут вопрос скорее в том, как решать проблему возрастающей сложностью и то что статические типы не особо тут и помогают (так как на большой проект у тебя будет херова туча абстрактных сущностей, которые ты тупо в голове не удержишь чтобы даже понять, а в динамик языке у тебя всегда по сути будут либо контейнеры (перечисления), либо дата-структуры (данные), либо примитивы - чаще строки, булев и целые числа).
>2) Писал ли ты когда-нибудь на хаскеле или другом подобном языке, где система типов гораздо более мощная, чем то говно, которое есть в жаве
Чем тебе более "мощная" система типов спасет? Как я уже говорил, проблема и не в типах, а в возрастающей сложности. Единственное что тут может спасти - это обобщаться сложность (абстрагировать, упрощать, сводить к общему). Есть ли в хаскеле инструменты или парадигмы ФП позволяющие делать это? В ООП есть (это особо ярко видно когда в методах почти декларативно (можно сказать - на боле высоком уровне) делаются вызовы какие-то объектов и таких вызовов не много и иногда даже нет управляющих конструкций)
...один момент.
Я не хочу сказать, мол вот что-то есть в ООП, а в ФП этого нет и типа плохо, "зафасадить" можно в любой парадигме это и так понятно. Я как раз спрашиваю есть ли какие-то свои другие инструменты в ФП? Потому что если нет, то ничем это от того же ООП не будет отличаться (куева туча сущностей и сидишь собираешь пазл по этим типам)
Тебе определенно стоит изучить ФП. Расписывать не буду - раз у тебя 12 лет опыта, то ты гуглом пользоваться, наверное, умеешь. Сейчас со стороны прям очевидно, что у тебя достаточно узкий кругозор не хочу обидеть, извини, если что.
мимо
Дваждую. Это как пытаться объяснить нахуя нужен дворак, человеку который привык пользоваться кверти.
>Пока очередная жесть компилится - скрипт уже падает в райнтайме
Пофиксил.
Срач динамика vs статика - это надежды против гарантий, почему последнее в разработке крупных систем предпочтительнее, надеюсь, объяснять не нужно. Наличие null в текущем виде - очевидный проеб для современного языка, дизайнеры того же свифта оказались более обучаемыми.
Я вообще охуеваю от того, что эта тема так часто поднимается. Разве не очевидно, что если что-то можно спихнуть на надежный кудахтер, который не ошибается и не устает - то это сделать нужно? Никто же не спорит, что ci/cd - это пиздато. Перенос проверок из райнтайма в компайлтайм - то же самое.
Более того, тесты придуманы не для того, чтобы проверять типы, чем должен заниматься компилятор.
Тесты придуманы для того, чтобы проверять логическую корректность кода, дизайнить интерфейс до его реализации и для дублирования логики другими словами, опять таки для увеличения надежности.
Ну так объясни. Я прекрасно имею представление о ФП, я просто не понимаю, что ты хочешь там выдать за серебряную пулю?
На самом деле ни ООП и тем более ни ФП (без обид, но многие ФП-сторонники и не щупали больших проектов) не имеет инструментария для решения задач такого уровня.
Реальный пример решения сложности (как пример из реального мира, а не мира бизнес приложений) - это то как пишут игры. Зачастую пишут или берут движок, скажем на С++, а бизнес логику выносят в какой-то скрипто-декларативный язык (иногда на привычные языки, типа питона). И получается что реальная значимая вещь (бизнес-логика игры, описания уровней и прочие) пишется уже на другом уровне, где даже типы то не важны, а важна вся эта логика (где бы эта логика могла даже затеряться из-за статик типизации и необходимости заворачивать что-то в очередные паттерны)
Можно ли так сделать (обобщить/абстрагировать) это в ФП до такого уровня - да конечно можно, можно и в ООП. Но возвращаясь к нашей теме - статическая типизация тут роли не играет вообще и никак не поможет.
PS Если ты реально хочешь проникнуться в мою мысль, а не просто с пеной у рта отстаивать свое мировоззрение, приведу один пример:
в какой-то игре (по-моему майнкрафт, деталей не помню) был баг, который обнаружили игроки. Смысл его заключался в том, что если убить какого-то осла с лутом, под каким-то зельем и определенными вещами в луте, переходя через какой-то портал (ну буквально чуть ли не в определенной фазе луны) - то с юнита(осла того) выпадал двойной лут.
И суть этого бага в том, что в реально сложной системе, где реально туча взаимосвязанных по логике сущностей (где есть магия, зелья, порталы, ослы...) - появляются совсем другие по уровню ошибки, где проблема с типами уходит в самую дальнюю полку (да вообще теряется просто, так как такая сложная система просто до блеска покрывается тестами и если была бы динамическая типизация, то проверкой на типы, в таких тестах было бы самое простое и малозначимое для всей системы).
Так что статическая типизация, это скорее старый хак для удобного использования памяти (аллокации её) и не более, так как в сложных системах, проблема типов уходит далеко на второй план. А если кому-то в 2018 еще нужна помощь в том, чтобы компилятор их ругал когда они передают строку, а не число в метод - то это уже какой-то аутизм (ну серьезно если это число в строке, то метод бы сам привел к нужному ему типу и вычислил или же отругал в противном случае если аутист не проверенные данные и просунул невалидное число).
Не хочу холиварить, но за 12 лет опыта, можно проанализировать весь опыт и понять - что писать приложение быстро и просто - куда важнее долбежки в типы, рефлексию, дженерики и паттерны (некоторые).
Ну так объясни. Я прекрасно имею представление о ФП, я просто не понимаю, что ты хочешь там выдать за серебряную пулю?
На самом деле ни ООП и тем более ни ФП (без обид, но многие ФП-сторонники и не щупали больших проектов) не имеет инструментария для решения задач такого уровня.
Реальный пример решения сложности (как пример из реального мира, а не мира бизнес приложений) - это то как пишут игры. Зачастую пишут или берут движок, скажем на С++, а бизнес логику выносят в какой-то скрипто-декларативный язык (иногда на привычные языки, типа питона). И получается что реальная значимая вещь (бизнес-логика игры, описания уровней и прочие) пишется уже на другом уровне, где даже типы то не важны, а важна вся эта логика (где бы эта логика могла даже затеряться из-за статик типизации и необходимости заворачивать что-то в очередные паттерны)
Можно ли так сделать (обобщить/абстрагировать) это в ФП до такого уровня - да конечно можно, можно и в ООП. Но возвращаясь к нашей теме - статическая типизация тут роли не играет вообще и никак не поможет.
PS Если ты реально хочешь проникнуться в мою мысль, а не просто с пеной у рта отстаивать свое мировоззрение, приведу один пример:
в какой-то игре (по-моему майнкрафт, деталей не помню) был баг, который обнаружили игроки. Смысл его заключался в том, что если убить какого-то осла с лутом, под каким-то зельем и определенными вещами в луте, переходя через какой-то портал (ну буквально чуть ли не в определенной фазе луны) - то с юнита(осла того) выпадал двойной лут.
И суть этого бага в том, что в реально сложной системе, где реально туча взаимосвязанных по логике сущностей (где есть магия, зелья, порталы, ослы...) - появляются совсем другие по уровню ошибки, где проблема с типами уходит в самую дальнюю полку (да вообще теряется просто, так как такая сложная система просто до блеска покрывается тестами и если была бы динамическая типизация, то проверкой на типы, в таких тестах было бы самое простое и малозначимое для всей системы).
Так что статическая типизация, это скорее старый хак для удобного использования памяти (аллокации её) и не более, так как в сложных системах, проблема типов уходит далеко на второй план. А если кому-то в 2018 еще нужна помощь в том, чтобы компилятор их ругал когда они передают строку, а не число в метод - то это уже какой-то аутизм (ну серьезно если это число в строке, то метод бы сам привел к нужному ему типу и вычислил или же отругал в противном случае если аутист не проверенные данные и просунул невалидное число).
Не хочу холиварить, но за 12 лет опыта, можно проанализировать весь опыт и понять - что писать приложение быстро и просто - куда важнее долбежки в типы, рефлексию, дженерики и паттерны (некоторые).
Типичная необучаемая обезьяна. Скриптопараша в игровых движках нужна, для того, чтобы
1) Максимально сократить срок получения результата для вещей, которые подбираются опытным путем. Нет нужды пересобирать все двигло для обновления логики поведения моба. За 12 лет ты мог заметить что кресты пиздец как долго собираются
2) Логику часто пишут геймдизы и прочие люди, которые вообще в рот ебали это ваше программирование. Еще для них придумали блюпринты. Может ты тоже будешь на блюпринтах теперь кодить? Быстро и просто, никакой долбежки!
Как же тебя разорвало. Пример с играми, был просто примером из реального мира, о том как решают проблемы со сложностью и о том как та самая типизация там и ненужна вообще (и даже мешает - пример с долгой компиляцией С++).
Нечто подобное делается и в крупных приложениях, достигая декларативного эффекта, но пример оттуда был бы какой-то абстрактный (поэтому я показал пример на играх).
То есть, мы обсуждаем проблему типизации и о том как она не нужна (и даже теряется в крупных проектах, так как требование к тестам увеличивается и так), а ты мне отвечаешь как делают игры - как тут можно вообще диалог вести, когда ты даже не держишь нить разговора?
>Более того, тесты придуманы не для того, чтобы проверять типы
Лол, проиграл чуток с этого мастера знаний. Тесты придуманы чтобы проверять программу на ошибки (корректность работы программы), а что там стало причиной ошибки, дело третье.
>Ну так объясни.
Я же сказал, что не буду объяснять. Если тебе интересно, то ты и без меня можешь сам во всем разобраться, текста на эту тему написаны гигабайты. Ни о какой серебряной пуле я не говорил, и никакого "своего мировоззрения" я не обозначал и отстаивать не собираюсь; к апологетам type-oriented programming я тем более никакого отношения не имею. Я сказал ровно то, что постом выше написано.
Если у тебя есть какие-то конкретные вопросы, я постараюсь помочь, но катать пасты на изъезженные темы мне элементарно лень.
Очередная вера в то, что проблема типов самая яркая проблема в программирование.
То что программа падает в рантайме не самое страшное для динамического языка, у динамического языка выше шанс появления плавающих ошибок - то есть, чтобы писать корректно на динамическом языке - скилл должен быть выше.
Гордиться тем, что компилятор показывает, что ты где-то всрал тип данных (корректность данных для динамического языка) - ну просто верх скила разработки, да?
>Я же сказал, что не буду объяснять.
В разговор то зачем влез тогда?
>Если тебе интересно, то ты и без меня можешь сам во всем разобраться
В чем разобраться то? Я говорю нет там инструмента, мол фигня полная, и типы не решают (кроме аутизмо-проблемы). Да и вроде (точно не помню) само ФП к типам никого отношения не имеет, матанская парадигма, далекая от мира железок в пк.
>текста на эту тему написаны гигабайты.
Ох, какой манямир. Тут ты меня на лопатки положил буквально.
Вы все такие из ФП маневровые? :)
>скилл должен быть выше
Сильное заявление. Ну ты понял, превозмагатель.
Корреляции со скилом не вижу. Мы всё же не в 60 году на перфокартах программируем, когда один раз написал и ждешь неделю. Программу ты запустишь и проверишь на работоспособность в большинстве случаев. Ошибка выявленная на этапе компиляции вылезет ещё до запуска программы. Это экономит время. Время - деньги. Всё просто. Потому, кстати, nullable references и были названы ошибкой на миллиард. Хорошо, что всего через 50 лет в современных языках и это проверяется на этапе компиляции. Значит ли это что нужно обмазываться типами как сумасшедший и пытаться выявить все возможные ошибки на этапе компиляции? Нет. Разумно использовать возможности компилятора для облегчения себе работы? Да.
>Очередная вера в то, что проблема типов самая яркая проблема в программирование.
Это где я такое писал? Про "яркость" проблемы ни слова не было, было про то, что статика > динамика.
>Гордиться тем, что компилятор показывает ... верх скила разработки,
Это где я такое писал? Ты частенько приписываешь мне что-то левое, на что в сообщении не было даже намека, это что-то в твоем динамическом мирке опять попуталось?
Особенно проиграл с "верх скила разработки". Намакачил такой везде нужные типы данных в динамикодрисне, обмазал тестами и побежал одноклассникам хвастаться, это же ебовый скилл, не то, что у статикодебилов, да? Лолблядь.
Ты какую-то хуйню несешь. С тобой пытались нормально поговорить, а ты реагируешь, как школьник. Алсо, я не из ФП, а ты долбоеб 1с-ник.
Подпиши "Капитан Очевидность". Алсо, можешь почитать какую-нибудь книку про тестирование - столько золотых цитат для себя откроешь, что охуеешь просто.
>скилл должен быть выше
>Ошибка выявленная на этапе компиляции вылезет ещё до запуска программы
А должно быть так: Ошибка выявленная на этапе тестирования.
Видишь в чем разница? И каких результатов может достичь тестированием в противовес одной только компиляции (на которую все так надеются и готовы даже время свое разменять)?!
Вот понимание этого и есть "скилл должен быть выше", так что юзай пока языки со статической типизацией.
>>46058
>Это где я такое писал?
Тебе не нужно это писать, это же выводы по твоим словам. Если же я ошибся, поправь меня, скажи, почему мне тогда стоит пожертвовать гибкостью динамического языка, мета-программированием, высоким уровнем полиморфизма типов - ради статической типизации (а именно компиляции, так как динамическая типизация не должна исключать строгую типизацию).
То есть статическая типизация это ключевой (яркий) момент в выборе языка? Нет?
>Особенно проиграл с "верх скила разработки".
С точки зрения типов, динамическое программирование это работа с "высокополиморфными" типами данных. Понятно, что тут уже компилятор тебе не поможет и на плечи программиста ложиться дополнительные условия - более качественное покрытие тестов, более качественное написание документации и предоставляемой информации по всем типам с которыми работает функция.
Конечно это скил выше.
Скажи ещё, что прокомментировать каждую строчку = скил. Нет, братишь, это проёб времени. Ты под скилом какие-то левые вещи подразумеваешь, отношения к непосредственно программированию не имеющие. Писать документацию я могу и джуниора посадить. Ух у него скил вырастет! Здоровый сука!
Представь ты берешь на работу программиста и открываешь его код. Ты видишь отсутствие или огрызки документации, отсутствие или частичное покрытие тестов (или некачественное их покрытие).
Какое сразу мнение о нем будет как о программисте?
Конечно это часть работы программиста и даже понимание того что это часть твоей работы - это уже плюс в скилл.
Тесты - гарант качества твоего кода (хотя бы что оно вообще работает), а дока - это описание работы твоего кода (для остального коллектива, ты же не один программист. Да и даже для тебя через год)
Аналогия (если совсем туго) - электрик провел проводку - но не сделал принципиальной схемы подключения, это часть его работы? - да. Является ли это показателем уровня его профессионализм? - да. Даже если он там красиво подключил все и все правильно подключил.
>электрик провел проводку - но не сделал принципиальной схемы подключения
>писать документацию я могу и джуниора посадить.
И электрик посадит джуна принципиальную схему рисовать, лол.
>Попробуй писать код понятный без коментариев. Вот там и будет скил, малыш.
Ох, ты походу еще не знаешь что такое формат для автогенерации кода типа javadoc или phpdoc..., ты думаешь я о каких-то комментариях пишу, типа к коду обычные такие, да? Ахах, жесть. Вот вам и скилл
>Тебе не нужно это писать, это же выводы по твоим словам
А ты сосешь хуй, это же выводы по твоим словам.
>Если же я ошибся, поправь меня, скажи, почему мне тогда стоит пожертвовать
Как из того, что ты "ошибся" (я не писал, что типизация - самая главная проблема погроммирования), следует убеждение тебя же в превосходстве статический типизации? Как ты код с такой логикой пишешь?
>пожертвовать гибкостью динамического языка, мета-программированием, высоким уровнем полиморфизма типов
Да ничем ты не жертвуешь, все то, что в динамикодрисне ты делал неявно, в статике ты просто делаешь явно на уровне кода. Что параметрический полиморфизм, что аннотации к типам. Ты ведь когда пишешь код, в голове держишь инфу, что вот эта переменная должна быть строкой, а вот эта - булом? Нет, блядь, я документацию на это напишу, но аннотации мне поставить трудна, не допущу, чтобы грязный комплухтер облегчил мне жизнь. А нужно зарефакторить код или дописать - так начинаем рыться в доках, чтобы восстановить в голове как там чо, не дай бог нам типизация в этом деле поможет.
Гарантии > надежды. Твоя "гибкость" - это гибкость ошибаться. Именно поэтому тебе стоит пожертвовать этой "гибкостью".
>Понятно, что тут уже компилятор тебе не поможет и на плечи программиста ложиться дополнительные условия
Школьный хоркор. Без ci/cd тоже нужно больше руками делать, выкинем его, покажем одноклассниками свою скилловость.
У меня просьба, можешь без пиздежа написать, сколько на каком языке профессионально погромировал за деньги и какова была твоя роль?
Miscrosoft = Typescript
Google = Dart
Facebook = Flow
Может быть они знают чего-то, чего не знаешь ты?
Ты не понял. Динамическая типизация - это для элиты. Для скиловых ребят. А всякие макаки пишут на статике. Дураки потому что, которым не суждено подняться до уровня великих динамических программистов. Ну правда же мам? Мам, ну правда же!
Ну так и есть же - статика для глупых. Размен времени написания кода и теребоньканьем компилятора, ради отлова базовых ошибок.
Пока питоно-макака завершает проект, какой-нибудь джава господин накручивает еще одну фабрику на фабрику фабрик.
Не даром го послал все нафиг и сделал быструю компиляцию и ложил болт на джинерики (что в действительности является говно-хаком в мире Статики<Фигатики>).
>>46168
А нафига с говно-ФП носились в 2010?? Нахуя с асинхронной херней носятся, которая оправдана только для хайлода и чатиков (зато каждый школьник теперь знает как это важно в его пет-проекте). Просто хайп на хайпе. Появиться еще что-то, будут так же 5-10 лет теребонькать.
Пишу абстрактную фабрику абстрактных фабрик абстрактных билдеров абстрактных сущностей. И хули ты мне сделаешь, омежка?
Джава-боярин
>Ты очень тупой и иррациональный.
Жесткое утверждение, хм...
>Либо у тебя просто слишком мало знаний,
Пошли сомнения, возможно...
>либо ты сейчас по факту всерьез отрицаешь научный метод, математику и логику.
Ох, тут нужно больше авторитетов озвучить, даже может имена ученных, чтобы казаться еще более внушительным и убидительным.
Диагноз: НЕБОМБИТ
>Пишу абстрактную фабрику абстрактных фабрик абстрактных билдеров абстрактных сущностей. И хули ты мне сделаешь, омежка?
>Джава-боярин
Ничего страшного в этом нет, главное не стыдить себя за это.
>теребоньканьем компилятора, ради отлова базовых ошибок.
Чего его теребонькать - он сам в фоне работает. Я так понимаю что линтерами ты тоже не пользуешься. Но что взять с убогого?
И да, ради отлова ошибок опечаток и прочего дерьма. Я же не дурак на каждый чих прогонять тесты.
>Пока питоно-макака завершает проект
Проект на вечер. Ну вот тут всё и стало понятно. Динамикодрисня отлично подходит для написания write-only скриптиков. Файлики там перекинуть, лэндинг с анимцией. О какой-либо работе в команде и поддержке речи не идёт. Что там наворотили эти макаки хуй поёмешь. Проще заново надристать за пару вечеров, да ещё и бабоса с заказчика поиметь.
Тот случай, когда все еще пригорает, но мозгов хватает только докопаться до кокографии (и это на двачах то...). Спрячься уже, хватит растекаться по треду
>Я же не дурак на каждый чих прогонять тесты.
В том то и был месседж, что тесты ты можешь прогнать, скажем, в конце работы и все, а компиляция каждый раз обязательна и в большом проекте она всегда ощутима, даже на ваших джавах (на го может тоже, не видел крупного проекта на го).
Что мы имеем, для реально крупного проекта - ты так и так пишешь тщательно тесты, причем настолько тщательно, что тесты становятся настолько сложными, что проверка типов компилятором кажется уже детской забавой. На самом деле, проще покрыть в тестах типы один раз, чем на каждый раз ждать 3-7 секунд (плюс еще старт самого приложения).
>Динамикодрисня отлично подходит для написания write-only скриптиков.
Как раз таки нет, лет наверное 10-15 назад (а может и раньше), скрипты вообще ощущались как новой вехой в программирование (даже были писаки про новый уровень программирование, после высокоуровневого). Получалось то, что от кода требовалось больше гибкости за меньшие усилия и вот скрипты как раз под это все удачно заходили.
Но в реале, в ИТ правит маркетинг и глупость (и юность), поэтому люди теперь готовы долбаться в обобщенное программирование (дженерики), в рефлексию, даже ковырять байткод, и все ради того, чтобы сделать шаг назад и юзать компилятор.
Я понимаю что где-то кто-то залил в уши про эту статику, но если прям реально взвесить - проверку типов или мета-программирование, то ответ будет очевиден (к сожалению, думать своей головой в ИТ не принято).
Ты так и не ответил, сколько на каком чзыке профессионально занимался разработкой.
Мудила, расскажи как ты пишешь тесты для интерфейсов. И как ты потом это говно рефакторишь.
>Ты так и не ответил
Ты спрашивал?
Работа:
С++ - 4 года
Java - 8 лет
Халтура и петпроеты (если не глупый, то поймешь что пересекаются):
php - 5-6 лет (сейчас нет),
python - 5-6 лет (по сей день)
go - 2 года (по сей день)
ну js под фронт когда надо, не помню когда в веб залез, наверное лет 9-10
А вообще трудно считать, если в пхп я там много писал, то в го сейчас больше ковыряюсь чем прям пишу (как, наверно, многие тут)
Чини детектор, макака.
> Of course, deleting an old function works only when all the uses can be found, or when users understand that they are responsible for keeping up with changes, as was the case in a research system like Plan 9. For exported APIs, it's usually much better to leave the old name and old behavior intact and only add a new name with new behavior. Rich Hickey made the point in his “Spec-ulation” talk in 2016 that this approach of only adding new names and behaviors, never removing old names or redefining their meanings, is exactly what functional programming encourages with respect to individual variables or data structures. The functional approach brings benefits in clarity and predictability in small-scale programming, and the benefits are even larger when applied, as in the import compatibility rule, to whole APIs: dependency hell is really just mutability hell writ large. That’s just one small observation in the talk; the whole thing is worth watching.
Предлагаю любому, кто впредь что-то кукарекнет про "ФП хайп нинужна!11", тыкать носом в эту пасту. Надеюсь, не нужно объяснять, кто есть ее автор.
https://www.youtube.com/watch?v=oyLBGkS5ICk
Мудак который не осилил теоркат, поэтому придумал своих ебаных терминов для кривого решения уже решенных задач?
Зарепортил не осилившего английский школьника.
А, теперь понятно, джавадебил настрадался и решил, что все языки со статической типизацией такие же деревянные, как и джава, и что в этом виновата типизация.
Вообще-то это про package management и versioning вы тут все принципиально не читаете то, что написано?, но сама базовая идея, конечно, та же самая. Классы, правда, обычно не версионируются.
В общем случае - нет. Некорректно вообще сравнивать какую-то абстрактную производительность в вакууме какого-то абстрактного "скомпилированного" и абстрактного же "скрипта".
Только вот в Джаве от статической типизации откажутся в 12й версии. Сначала сделают её опциональной, а потом и вовсе задепрекейтят. А годауны будут продолжать сосать.
Ты не поверишь, но солид применим не только к классам, там вообще речь о модулях. А модулем можеть быть даже небо, даже Аллах.
Я потому и сказал, что базовая идея та же (их, этих базовых идей, в программировании вообще не так уж и много). А статья гофера и рилток кложуриста - про конкретную проблему с пакедж менеджерами и версионированием зависимостей.
Про SOLID уже полвека как все вроде бы знают, а версионированных апи библиотек что-то не особо видно.
Сайт мертв, пакет удален.
Только хотел поковырять изоморфность.
Предполагаю, что начали отпочковываться хайпанутые, которые обычно держаться на хайпе 2-3 года, а как только язык становиться мейнстримом, бегут куда-то (но это не критично).
> от статической типизации откажутся в 12й версии
Cсылку на roadmap, пиздабол. То что у тебя в голове голоса от чего то отказываются, не считается. На 10/11 еще с планами не определились.
Не трожьте его, он думает что он тролль.
> gofmt
Ты понимаешь слово "унификация"?
> Открывающиеся скобки только на той же строке
Ну тут обосрались, до сих пор хейчу их за это...
> Путь к репам прям в коде
Ну это толсто. У тебя на компе директории так называются "github", "gitlab", whatever you want. С гитхаба ты тянешь, тем же go get или др. PM-амими. (go dep, vgo). А боишься, что Github отключат, так поставь себе gogs, не будь нищенкой.
Во-первых, не очень популярно (выше уже обсуждали, что он второй год как теряет позиции, еще не успев взлететь). Во-вторых - гугл же, маркетинг, вот это все. Языки становятся популярными только благодаря маркетологам больших корпораций.
>Поясните мне кто-нибудь почему это говно так популярно?
Назови еще один компилируемый язык со сборщиком мусора и стабильной версией.
>Процедурное программирование в 2к18?
Никто не мешает писать в декларативном или ОО.
>Где замыкания?
Они внезапно есть. Как и анонимные функции, и функции высшего порядка.
>Назови еще один компилируемый язык со сборщиком мусора и стабильной версией
Rust же
>Они внезапно есть. Как и анонимные функции, и функции высшего порядка
глянул на их фп. После Scala выглядит как говно
>А ну всё спасибо до свидания
а ну извините наизусть все нюансы не знаю. там да нету сборщика мусора, но ты и условия поставил в которые только Go может и вписывается. А нахуя эта компилируемость тебе нужна, если JVM выебет го по скорости все равно
>простой
Нет.
>легкочитаемый.
Ну, для тех, кто не видел ничего, кроме крестов, - да, легкий синтаксис может казаться культурным шоком и божьим откровением. А я бы вот не стал называть "легкочитаемым" язык без параметрического полиморфизма, например. Вообще, это хуево, когда язык оценивают иррационально, по таким вот субъективным характеристикам - "читаемый", "легкий", "приятный", "лого прикольное))" - потому что хрошие показатели по этим характеристикам есть заслуга маркетологов, а не инженеров.
>Назови еще один компилируемый язык со сборщиком мусора и стабильной версией.
Ты не поверишь, но java, scala, clojure, kotlin, swift, ocaml, haskell, erlang, elixir... ничего не забыл?
Черт. Это фиаско, братан. Вирт не простит.
Илюша, please.
dropbox переписали хранилище с го на rust потому что при высоких нагрузках сжирает всю память
Будем честны.
1 Не переписали хранилище, а одну из подсистем.
2 Переписали потому что хотелось поиграться с новой технологией.
Дебил, да хоть кресты c Boehm GC.
>В свифте rc.
>В свифте нет сборщика мусора.
У тебя диссоциативное расстройство личности, или что?
Да нет, gc по сути умнее. При arc тупо есть счетчик ссылок для каждого объекта, и как только он опускается до нуля - объект пидорят из памяти. Никаких тебе проходов по графу, ничего такого.
>Ну это не стандартный gc, это более умная вещь.
Охуеть вообще, тебя кто, вшивого, в интернет выпустил?
Если не жрёт кучу ресурсов и не парализует работу приложения во время сборки мусора, то это не считается за сборщик мусора, понял, питух?
Ебать, да ты упоротый, раз компьютер сцаенс по гугловой выдачи строишь.
>понятия гарбадж нет, он не копится
Ой тупооой.
>ARC differs from tracing garbage collection in that there is no background process that deallocates the objects asynchronously at runtime.[3] Unlike garbage collection, ARC does not handle reference cycles automatically. This means that as long as there are "strong" references to an object, it will not be deallocated. Strong cross-references can accordingly create deadlocks and memory leaks. It is up to the developer to break cycles by using weak references.[4]
И причём тут циклы? Это не мусор. Это результат проёба программиста.
Читать умеешь, зачем ты цитируешь то, что подвтерждает мои слова? Если на объект есть сильная ссылка, то это не гарбадж, объект ипользуется кем-то.
Ты ведь понимаешь, что в твоей же цитате разделяют ARC и GC? Английский знаешь?
>ARC differs from tracing garbage collection in that there is...
Затем, что там прямо говорится - ARC отличается от трассирующей [сборки мусора бла бла. Да, это та же сборка мусора, про которую спрашивали в начале нити, да, она воплощена в алгоритме, а не в автономной сущности (сборщик мусора - объектов с обнуленным счетчиком), да это более слабая стратегия сборки мусора (циклы, блокирующая обработка, невозможность кастомизации), так что не знаю чем здесь гордиться.
Нет, сначала расставим все по местам. Раз уж ты написал
>это та же сборка мусора, про которую спрашивали в начале нити
ткну тебя носом в то, с чего начался спор. Вот этот пост >>48120
>Назови еще один компилируемый язык со сборщиком мусора и стабильной версией.
>swift
Заметь, там сборщик мусора. Вот теперь конец.
Слишком другой.
он прекрасен!
Давай сначала ты в анонах путаться перестанешь.
int c = getchar();}
Нужно посимвольно считывать строку до \n
>Не нужно пиздеть про толстые бинарники, их размер значительно уменьшается одним маленьким Makefile.
Какие make-опции нужны, чтоб уменьшить?
>Go 1.10 (February 2018)
>Go 1.9 (August 2017)
>Go 1.8 (February 2017)
>Go 1.7 (August 2016)
>Go 1.6 (February 2016)
>Go 1.5 (August 2015)
Даже не знаю.
Следующая будет 1.11 или 2.0?
Выпускают каждые пол-года. Шо есть, то и вываливают.
Я подозреваю, что просто напохуй на говне и палках сделали, чтобы заработало побыстрее, а потом случилось "Нет ничего более постоянного, чем временное", а хомяки растащили как есть.
Ты должно быть особо тупой индивидуум, если не понимаешь разницу между PYTHONPATH и GOPATH.
Ты, должно быть, хипстор-смузихлёб, если даже не умеешь в абстракции.
>уже найдено корректное, блядь, решение проблемы зависимостей и сборки проекта - но нет, нахуя нам это
Это в принципе исчерпывающее описани говна.
Говно это сплошные nih костыли и хуевые решения проблем, которые уже 10-20-30-40 лет как решены.
Эти долбоебы выдумали свой ассемблер, который как бы не ассемблер, но как бы и не ir в духе llvm. То есть они предумали ir для каждой архитектуры в отдельности, чтоб было проще компилировать из одних сырцов в разные аритектуры, но не смогли в единый ir.
И так во всем: не смогли в параметрический полиморфизм (но захардкодили его для каналов), структурные типы, тюпли вместо возврата нескольких аргументов, тип-суммы, нормальный менеджер зависимостей, оптимизирующий компелятор.
Это говно годится в принципе только для примитивного веба, что-то сложнее приводит к пиздецу вроде
https://medium.com/@arschles/go-experience-report-generics-in-kubernetes-25da87430301
И главное в дугих языках это все давно уже решено. Ну, впрочем, вперед, хайптрейн.
>https://medium.com/@arschles/go-experience-report-generics-in-kubernetes-25da87430301
Просто пиздец. Шел 2018 год...
Вчера нашел тему на хабре, где шизик на полном серьезе говорит, что Go лучше, т.к. в нем нет тернарного оператора и нормальной обработки исключений, из-за чего сложнее писать говнокод. Пиздец просто, только выиграли, нахуй.
Я сначала захотел сделать пул воркеров, чтобы если один замрёт - остальные продолжили обрабатывать сообщения, но потом понял, что таким макаром могут зависнуть вообще все воркеры, особенно, если блокирующий случай часто повторяется.
Начал инвестигейтить вопрос - и такое ощущение, что стартовавшую горутину извне убить вообще нереально, если она сама не очнётся. Все эти tomb'ы, pkg/context и прочие ориентриованы на то, что горутина сама в какой-то момент проверит, и, если ей пришёл сигнал сдохнуть - самовыпилилась.
Что за хуйня, анон? Я действительно не могу убить застакавшийся процесс (ну бывает такое, да)? Как вообще стоит поступать в таких ситуациях?
Я пока придумал два варианта:
1) Поднять x go-демонов и процесс-супервизор, который будет за ними следить. Демоны будут слушать сообщения и рапортовать о взятых и завершённых задачах (например, в простенькую базеечку), а он, если какой-то демон долго не отвечает, будет фигачить туда sigkill и запускать обработчик заново. Точно сработает, но тогда я как бы лишаюсь основного плюса го, "легкой" конкурентности/многопоточности, прямо в среде прилжения - с тем же успехом, я и на богомерзком php напишу то же самое.
2) Спавнить ещё один go'шный процесс через какой-то гипотетический аналог fork, прокидывать туда данные через сокет и пусть он их обрабатывает; Если замрёт и не ответит через указанное время - sigkill ему, ибо нехуй. Это выглядит немного получше, так как сами демоны получаются более легковесными да и fork, если есть, сократит время бутстрапа. Ну и можно гошные плагины заиспользовать, вроде, механизм похож. Минусы примерно те же самые, приходится городить какой-то хак, вместо того, чтобы язык помогал мне решать мою задачу.
3) Запускать отдельную горутину-супервизор, которая считает время исполнения каждой задачи - и если она больше таймаута - отсылает туда cancel и, не дожидаясь завершения обработчика, порождает новый. По логике, "старый" обработчик когда-то отвиснет и, или сразу отпадёт, или закончит выполнение и отпадёт всё равно. Это тот вариант, на котором я остановился, потому что он тупо проще (заиспользовал, кстати, go-playground/pool). Вижу такие минусы: во-первых, "зависающие" горутины копятся; во-вторых, нарушается порядок выполнения задач (мне пришли две задачи, А и Б. Воркер взял задачу А, завис на полчаса. Через минуту супервизор понял, что происходит неведомая хуйня и стартанул нового воркера, который взял и успешно обработал задачу Б. А через двадцать девять минут воркер один отлагал и закончил с задачей А. В итоге, последовательность обработки событий была нарушена).
ЧЯДНТ?
P.S. Гуру, которые мне сейчас скажут, что нужно просто писать код без дедлоков и прочих радостей: бывают проекты, на которых работает туева хуча разработчиков, и я не хочу, чтобы построенный мной сервис застакался оттого, что какой-то молодец написал
```
mutex.Lock()
defer mutex.Lock()
```
в своём обработчике.
Я сначала захотел сделать пул воркеров, чтобы если один замрёт - остальные продолжили обрабатывать сообщения, но потом понял, что таким макаром могут зависнуть вообще все воркеры, особенно, если блокирующий случай часто повторяется.
Начал инвестигейтить вопрос - и такое ощущение, что стартовавшую горутину извне убить вообще нереально, если она сама не очнётся. Все эти tomb'ы, pkg/context и прочие ориентриованы на то, что горутина сама в какой-то момент проверит, и, если ей пришёл сигнал сдохнуть - самовыпилилась.
Что за хуйня, анон? Я действительно не могу убить застакавшийся процесс (ну бывает такое, да)? Как вообще стоит поступать в таких ситуациях?
Я пока придумал два варианта:
1) Поднять x go-демонов и процесс-супервизор, который будет за ними следить. Демоны будут слушать сообщения и рапортовать о взятых и завершённых задачах (например, в простенькую базеечку), а он, если какой-то демон долго не отвечает, будет фигачить туда sigkill и запускать обработчик заново. Точно сработает, но тогда я как бы лишаюсь основного плюса го, "легкой" конкурентности/многопоточности, прямо в среде прилжения - с тем же успехом, я и на богомерзком php напишу то же самое.
2) Спавнить ещё один go'шный процесс через какой-то гипотетический аналог fork, прокидывать туда данные через сокет и пусть он их обрабатывает; Если замрёт и не ответит через указанное время - sigkill ему, ибо нехуй. Это выглядит немного получше, так как сами демоны получаются более легковесными да и fork, если есть, сократит время бутстрапа. Ну и можно гошные плагины заиспользовать, вроде, механизм похож. Минусы примерно те же самые, приходится городить какой-то хак, вместо того, чтобы язык помогал мне решать мою задачу.
3) Запускать отдельную горутину-супервизор, которая считает время исполнения каждой задачи - и если она больше таймаута - отсылает туда cancel и, не дожидаясь завершения обработчика, порождает новый. По логике, "старый" обработчик когда-то отвиснет и, или сразу отпадёт, или закончит выполнение и отпадёт всё равно. Это тот вариант, на котором я остановился, потому что он тупо проще (заиспользовал, кстати, go-playground/pool). Вижу такие минусы: во-первых, "зависающие" горутины копятся; во-вторых, нарушается порядок выполнения задач (мне пришли две задачи, А и Б. Воркер взял задачу А, завис на полчаса. Через минуту супервизор понял, что происходит неведомая хуйня и стартанул нового воркера, который взял и успешно обработал задачу Б. А через двадцать девять минут воркер один отлагал и закончил с задачей А. В итоге, последовательность обработки событий была нарушена).
ЧЯДНТ?
P.S. Гуру, которые мне сейчас скажут, что нужно просто писать код без дедлоков и прочих радостей: бывают проекты, на которых работает туева хуча разработчиков, и я не хочу, чтобы построенный мной сервис застакался оттого, что какой-то молодец написал
```
mutex.Lock()
defer mutex.Lock()
```
в своём обработчике.
Бля, три варианта, не два. Первые два просто придумал, третий написал.
>стартовавшую горутину извне убить вообще нереально
Стандартная практика: передаёшь ей в параметрах quit <-chan struct{}{} и через for-select слушаешь этот канал и делаешь return, посылая туда пустую структуру, когда тебе надо.
Чувак, ну я же об этом и говорю, стандартная практика именно такая, но она подразумевает, что я сам должен через for-select "услышать" сигнал остановки и отреагировать на него. А теперь представь, что горутина заблокирована: там или time.Sleep(time.Second * 1000000), или бесконечный цикл, или дедлок с бесконечным ожиданием никогда не открывающегося мьютекса. В этом случае горутина реально зависнет и ничто не сможет её "отвесить", ни изнутри (ибо блокирующая операция), ни снаружи (похоже, что в го нет способа прерывать потоки насильно).
Мне как и анону выше не хочется упускать шанс поиздеваться на goвном, но тут по-моему ты сам немного тупишь. У тебя гоблоки бегают на тред-пуле - конечно ты не можешь запускать там блокирующие операции, ибо от этого все треды быстро заблокируются.
Goморутины, начавшись, не могут остановиться, если сами того не захотят.
гомункл
Goбилен с goдом.
>и такое ощущение, что стартовавшую горутину извне убить вообще нереально
наслаждайся кооперативной многозадачностью
Есть вот такая идея -- сделать агрегатор цен на видеоигры с фильтрацией по физическая|диджитал копия. API cервер и пауков на Go, фронт на react. Что можете посоветовать посмотреть из фрэймворков?
p.s. Если кто-то захочет помочь запилить проектик в коопе, то замечательно <strike>телега: @GrigoriyMikh</strike>
Н И Ч Е Г О
И
Ч
Е
Г
О
Зачем нужны фреймворки в го, тебе стандартной библиотеки и самых легких роутов не хватает?
Бери https://github.com/kataras/iris (он сейчас считается самым популярным) и не слушай уебанов, которые сейчас понабегут и начнут советовать написать всё с нуля.
Fasthttp - это, конечно, хорошо. Но какой в этом смысл, если ты пользуешься токсичными фреймворками?
мне вот https://github.com/labstack/echo приглянулся. Очень минималистичный интерфейс для написания rest api. Чем iris интересен?
А про пауков,что скажешь? Есть какие-нибудь годные фреймворки?
А миддлвары самому писать?
Просто идиоматичный и популярный фреймворк. Все основные фичи вида middleware, авторизации и прочего уже есть в виде отдельных пакетов, меньше руками писать. Тестами покрыт, стабилен.
Остальное - вкусовщина.
Про echo тоже хорошие вещи слышал, если нравится - бери.
> Все основные фичи вида middleware, авторизации и прочего уже есть в виде отдельных пакетов, меньше руками писать
чем лучше Gin ?
Кардинально - ничем. Уже игрался с ним - впечатления нормальные.
В го-мире, как я понимаю, существует много web-фреймворков (Iris, Gin, Echo, тысячи их), которые предоставляют приблизительно один набор фич и очень похожую модель работы с ними.
Поэтому выбирай тот, который тебе нравится + имеет нужны фичи из коробки (тот же basic auth, работу с JWT, т.п.)
Отдельный момент - это популярность, смотри, чтобы фреймворк не загнулся оттого, что единственному контрибьютору надоело.
Еще один невьебенный роутер на го, еще одна невьебенно удобная хуйня с тонной говно рантайма что бы вы могли сделать очередное говно подделие которое насилует сетевуху во все щели. Раньше новые люди в програмировании слушали рок и писали на голых или крестанутых сях с чувством с толком и с умом а теперь куча всяких имбицилов-хиптеров получив язык для обезьяны пишут на ебаном го слушают руский реп и порятся в очко.
А ты шаришь
Это копия, сохраненная 7 мая 2018 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.