Roman
в C++ тоже имеются стат. анализаторы кода, но они в нём не поумолчанию... в C++ тоже есть smart pointers and stuff.. но так-же есть и new / delete...
Roman
Думаю кстати что в перспективе стоит задуматься о совмещении Rust и Go, где Rust занимается принятием / парсингом входящих сообщений а Go - их обработкой и бизнес-логикой. взять в пример GraphQL сервер: сервер на Rust, resolver'ы на Go зачем? На расте сложно и нудно писать асинхронный код для работы с бд и т.д. однако он позволит увеличить производительность, насколько честно говоря пока не знаю. В любом случае вызывать Go из Rust гораздо проще нежели наоборот (наоборот пока-что невозможно)
aadz
аниме!
Alexander
поговаривают, что в раст завезут async/await, тогда заживём
Roman
поговаривают, что в раст завезут async/await, тогда заживём
не заживём, он по прежнему будет непригоден для application programming из-за сложности
Alexander
я вот всё на него засматриваюсь, только задач себе подходящих найти не могу. Связка go + rust и так, чтобы это было не сильно геморно, станет серебряной пулей на бэкенде
Roman
application programming = software for users systems programming = software for software applications prog. = ttm (time-to-market), features, security systems programming = performance, resource-usage, safety Rust = systems programming Go = application programming
Alexander
ну камон, под раст портируют низкоуровневые либы для написания гуёв, тот же gtk3. И можно пилить графические аппликухи
Alexander
плюс, читал тут недавно, на нём игры пилить начали
Alexander
DICE юзает его в своей тестовой лабе
Roman
ну камон, под раст портируют низкоуровневые либы для написания гуёв, тот же gtk3. И можно пилить графические аппликухи
тот факт что для Go нет библиотек и фреймворков для написания гуев - не делает Rust идеологически более пригодным для application programming. JavaScript больше application prog. чем C++, но на C++ есть Qt, однако даже там завезли QML (superset of JavaScript/ECMA) однако JavaScript убог для более сложных аппликух, но увы, Go пока-что не про Gui, хотя вполне мог бы быть
Alexander
ну окай, пусть будет так
саша
application programming = software for users systems programming = software for software applications prog. = ttm (time-to-market), features, security systems programming = performance, resource-usage, safety Rust = systems programming Go = application programming
Внезапно большинство десктопных приложений пишутся именно на языках "системного программирования", ибо микролаги из-за GC
Nikita
чуваки, какую книжку посоветуете для быстрого освоения go? я из плюсов припёрся)
саша
легаси. Идеологически C++ и подобные ничерта не потеряли в applc. prog.
Проблема в том, что не легаси работает так плохо, что аж терпеть невозможно.
Alexander
Вот эту сам читал https://www.ozon.ru/context/detail/id/33524651/ Не стал бы её рекомендовать. Нудная
Roman
Тоже эту тему иногда просматриваю. Как думаешь, почему так? Просто руки ещё не дошли?
потому-что никто в это не инвестирует, возможно потому-что ещё рано. все до недавних пор писали гуи на C++, который ну абсолютно не про applications programming... это только сейчас начали появляться всякие Electron'ы (не надо мне заряжать про их убогость, я в курсе и согласен)
Alexander
Вот эта в процессе чтения https://www.ozon.ru/context/detail/id/139412056/ вроде нормально заходит
саша
Я знаю только одно нормальное десктопное приложение написанное на языке с GC, это эмулятор терминала Tilix написанный на D.
Nikita
спасибо
Nikita
вроде как эта неплохая https://www.ozon.ru/context/detail/id/34671680/
Nikita
Вот эту сам читал https://www.ozon.ru/context/detail/id/33524651/ Не стал бы её рекомендовать. Нудная
Nikita
Вот эта в процессе чтения https://www.ozon.ru/context/detail/id/139412056/ вроде нормально заходит
Alexander
на жаве жи
саша
а как жи IDEA ???!!!!
А с каких пор семейство иде от жидбрейнс стало семейством нормальных десктопных приложений?
Roman
Внезапно большинство десктопных приложений пишутся именно на языках "системного программирования", ибо микролаги из-за GC
GUI renderer = systems programming GUI application = application programming я не говорю что на Go нужно рендерить, нет, ни в коем случае! (мы об этом уже здесь говорили почему писать рендер на Go это очень плохая идея) а вот для самой логики приложения, для работы с сетью, для работы с файловой системой, с базами данных, с поверхностным number crunchung'ом и т.д. Go довольно хорош в идеале у нас рендер на Rust вызывающий Go код. Никаких микролагов, стабильные 60 фпс, но и относительно простое написание логики приложения. https://github.com/therecipe/qt это как-раз про C++/Qt рендер с Go логикой
.
А что думаете на счёт Elixir? Discord его активно использует
Alexander
эликсир хорош
саша
В том же VS Code если быстро печатать, то можно заметить инпут лаг.
Alexander
внешне по крайне мере
саша
Хотя рендер у него на цпп.
Alexander
хотя я у нашего эрлангиста спросил, он сказал, что нах*й не нужОн
Roman
Проблема в том, что не легаси работает так плохо, что аж терпеть невозможно.
проблема веб-аппликух обёрнутых в аппликухи типа Electron в устаревшем DOM'е (HTML/CSS это вообще про статические документы, а не динамические приложения) QML это как раз замена HTML/CSS/DOM, но пока-что только в C++/Qt
Roman
То есть при вводе текста лагов в такой схеме не будет замечено? Сомневаюсь.
ты пойми, рендер и логика/данные должны оперировать в разных потоках независимо друг от друга. Единственно лаги могут возникать когда рендер не может отрисовать картинку из-за того что логика его блокирует, но этого можно и нужно избегать
Eugene
а как думаете, чем плох swift по сравнению с go для бэкэнда?
саша
ты пойми, рендер и логика/данные должны оперировать в разных потоках независимо друг от друга. Единственно лаги могут возникать когда рендер не может отрисовать картинку из-за того что логика его блокирует, но этого можно и нужно избегать
Ну вот допустим у нас текстовый редактор. Там, чтобы символ появился на экране рендер должен отдать событие апликэйшн части, а апп должен рассказать рендеру что рисовать. Как в такой схеме избежать лагов? Только переписывать логику на языке без GC
саша
Скорее десктопные приложения нужно писать с архитектурой frontend-backend, где на бэкенде вся медленная бизнес логика, а на фронте быстрые обработчики событий.
Alexander
а как думаете, чем плох swift по сравнению с go для бэкэнда?
всем хорош, кроме одного - его помимо apple никто не юзает
саша
а как думаете, чем плох swift по сравнению с go для бэкэнда?
Там атомарный счётчик ссылок через атомарный счётчик ссылок ехал и треды нативные.
Roman
Ну вот допустим у нас текстовый редактор. Там, чтобы символ появился на экране рендер должен отдать событие апликэйшн части, а апп должен рассказать рендеру что рисовать. Как в такой схеме избежать лагов? Только переписывать логику на языке без GC
shared memory. рендер в отдельном потоке работает с повышенным приоритетом грубо говоря 60 раз в секунду наблюдая за изменениями в data model которая в shared memory. application logic может пропустить пару кадров например из-за GC, но не заблокирует этим render. Когда AL завершит свою обработку данных он просто разлочит новую модель и рендер среагирует на это читая новую модель
Roman
Скорее десктопные приложения нужно писать с архитектурой frontend-backend, где на бэкенде вся медленная бизнес логика, а на фронте быстрые обработчики событий.
я именно это и предлагаю, просто и backend и frontend в одном бинаре, но в разных потоках на разных платформах (Rust, Go) деля меж собой память процесса в качестве коммуникации
саша
А это много? 🤔
Для 60к/с - очень
Roman
Ну вот ты описал сценарий, где инпут лаг 2 кадра. Ну и нахера такие приложения нужны?
за отображение символов в текстовом поле может отвечать render, не обязательно бизнес-логика
Logan
сам Пайк об этом трубил во все стороны, хотя это конечно бред)
нужно быть фантастически смелым человеком, чтобы утверждать, что Пайк не знает, что он делает, да.
саша
в C++ разве умные указатели не решают проблем хотя бы частично?
Умные указатели - это вообще ортогональная тема.
Eugene
Умные указатели - это вообще ортогональная тема.
почему? вроде про new\delete имелось в виду про опасности?
саша
почему? вроде про new\delete имелось в виду про опасности?
Это единственная проблема, которую умные указатели решают, и то, если не забываешь их мувать при передаче кому-нибудь (unique_ptr).
саша
Владение и заимствование же решают эти проблемы фундаментально.
саша
И ещё кучу других.
саша
вроде умные указатели решают проблемы с утечкой памяти+проблемы с concurrency?
Они решают только проблему своевременного удаления объектов. О каких проблемах с concurrency вы говорите?
саша
Eugene
Не решают.
зачем тогда нужен shared_ptr и unique_ptr?
саша
зачем тогда нужен shared_ptr и unique_ptr?
shared_ptr решает проблему своевременного очищения "общих" объектов, unique_ptr решает проблему своевременного очищения объектов, на которые есть одна уникальная ссылка. При этом unique_ptr никак не гарантирует, что на объект есть только одна ссылка.
саша
тогда странно, что unique_ptr назван так
Ничего странного, он создан ДЛЯ объектов на которые должна быть только одна уникальная ссылка, при этом за исполнением контракта в C++ традиционно должен следить программист
Roman
нужно быть фантастически смелым человеком, чтобы утверждать, что Пайк не знает, что он делает, да.
я лишь его цитирую, он сам утвердил что Go это не про systems programming а про „cloud infrastructure“
aadz
смотря что понимать под systems programming
Roman
Владение и заимствование же решают эти проблемы фундаментально.
проблема в C++ в том, что можно этим good practice’ам следовать, а можно и нет… в Rust такого выбора нет (однако он всё-же есть в виде unsafe для работы с C, но его в обычном коде не используют, только в связном) Rust заставляет тебя думать правильно, C++’ам на тебя и твои баги н@срать))
Roman
гонки по данным?
а вот гонки никак не решают
Daniel
Вот вам не лень...
aadz
@aadz69
Угу. Скрипты на Bash - это тоже приложения для приложений, я даже иногда такие системные скрипты пописываю