1

Бинарники, RUST и JavaScript (Bun)

В комментариях рассказывал, что учил Rust, делая пошаговый эффективный setup сценарий для настройки Ubuntu в качестве веб сервера.
После чего планировалось его собрать в бинарник.

Я нашел нужные библиотеки, разобрался с базовыми принципами работы на Rust, и определил порядок действий и архитектуру проекта, но на этом и остановился, так как подвернулся коммерческий проект.

Так сейчас я вспомнил один факт!
У JavaScript - есть шикарнейшая среда выполнения Bun, предоставляющая еще и набор довольно интерсных инструментов.
Полностью о нём пока не стану рассказывать, суть не в этом, а в возможности компиляции кода в бинарник. При этом, нечто подобное есть и в последних версиях NodeJS в виде патчинга бинарника интерпретатора JavaScript кодом (упоминалось начиная с 16, если не ошибаюсь).
Но в Bun умеет в рантайм исполнения TypeScript без необходимости сборки проекта в JavaScript. А ещё говорят, что есть возможность оптимизации этого TS/JS в байткод.
Но я вижу, что Bun явно в проигрыше по памяти, а производительность и не ставил под сомнение, Rust шустрее.

Такой скрипт занимает 20Mb RAM, а сам по себе весит 57Mb

Такой скрипт занимает 20Mb RAM, а сам по себе весит 57Mb

Но!
Мне никогда и не требовалась производительность. У меня в приоритете скорость и удобство разработки.
А в NPM я помню, есть огромное разнообразие отличных библиотеки для CLI.
И упаковав это всё дело в бинарник весом ±60-120Mb — останется просто его закинуть на сервер, запустить, выбрать что нужно установить, И..(!)
Пойти пить чай на минут 15
(вместо 20-60 минут настройки сервера - мы тратим 5 минут и пьем чай 10-20, и это при наличии опыта, новичкам сильно больше сэкономит времени)

Обязательно сделаю такой инструмент, по идее он сможет привлечь не очень опытных Linux юзеров и собрать вокруг себя комьюнити. (правда из новичков)

А ещё, для шарящих — пробую Cursor в сравнении с Github Copilot и взял в работу проект, на котором будет расширение для браузера на React в WXT и бэкендом на AppWrite
Так что будет чего интересного рассказать и обсудить у меня в тг @cododelia (тыкабельно)

Web-технологии

545 постов5.8K подписчиков

Правила сообщества

1. Не оскорблять других пользователей

2. Не пытаться продвигать свои услуги под видом тематических постов

3. Не заниматься рекламой

4. Никакой табличной верстки

5. Тег сообщества(не обязателен) pikaweb

0
Автор поста оценил этот комментарий

если что про библиотеку - это я про стандартную библиотеку самого языка. Т.е. ничего стороннего, go из коробки самодостаточен. Но к нему куча внешних пакетов есть, которые сильно расширяют возможности в CLI. Но конкретных не подскажу, так как их простой дофига и все зависит от конкретной задачи: автодополнение в tty CLI, вывод таблиц в CLI, даже вывод видео в CLI - все это внешние пакеты, нужно гуглить под задачу каждый

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Благодарю

0
Автор поста оценил этот комментарий

От статьи и комментов старым Хабром повеяло, спасибо.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Комменты на хабре вроде не изменились XD

2
Автор поста оценил этот комментарий

Инструмент деплоя вебсервера сначала на Rust, затем на JS, потом выясняется что всё равно внутри него будет запускаться eval на баше, какое-то коммьюнити новичков вокруг этого костыля... Остановите безумие

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

ну поддержка bash скрипта на большое кол-во конфигов - будет безумием еще большим 😄
А практическая польза от него будет лично мне в первую очередь, так как разворачивать сервера будет занимать немного меньше времени, а я опробую новые инструменты)

Может кому-то ещё зайдет, как минимум сделав 10 инструкци по деплою VPN, WordPress, Restreamer запуском одной команды - явно отклик какой-то будет)

1
Автор поста оценил этот комментарий

В целом для вашей задачи и js на Bun прекрасно подойдет, если js вам уже знаком. Многопоточность тут вообе не нужна, как и куча чего другого, в чем плюсы будут за rust или go. Просто показалось, что вы рассматриваете какой-то язык для написания качественных бинарников для CLI, не один конкретный, а множество. И вот как язык для написания таких бинарников, которые и легко создавать, и легко компилить под что угодно, и библиотека языка прям создана для CLI, я бы рекомендовал golang. В нем нет ООП (его нет в JS/TS если так задуматься, просто пародия), только структуры, массивы/слайсы, и карты, плюс стандартный набор примитивных типов.

Но особый плюс go именно в горутинах и многопоточности, поэтому его рекомендую также и для потенциальных будущих ваших идей, где уже может пригодится такое. Просто js по архитектуре асинхронный, но однопоточный. Отдельные "потоки" там создаются через одно место, поэтому он для написания программ, где нужно параллельное вычисление плохо подходит.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Спасибо, рассмотрю всё же Go
Мне сам этот проект не нужен, его цель скорее расширение кругозора)
Библиотеку бы ещё в совет и было бы совсем красиво 👍🏻

показать ответы
1
Автор поста оценил этот комментарий

У меня в приоритете скорость и удобство разработки.

JS, конечно, удобный, но и однопоточный, и не создан для CLI. Я учил Rust где-то полгода, пару программ написал на нем и решил выкинуть его куда подальше, и записался в число rust-ненавистников. Так как мне нужен был язык для многопоточности то вернулся к старой моей хотелке - попробовать go. И в итоге влюбился. Вот он реально и простой, и достаточно быстрый, и удобный. При этом в js я варюсь с 2002 года где-то, т.е. приличный опыт, знаю его достаточно хорошо, но как язык для написания CLI прог через Bun считаю его не к месту, особенно если ещё и typescript сюда прикручивать.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Обязательно гляну GO, мне Rust показался избыточным и при этом в нем не хватает привычных OOP-like фич (не обязательно полноценный OOP, но наследование структур - хотелось бы), философия будто другая..
Но выбрал его лишь из-за Tauri и релиза 2.0 версии

А по поводу CLI хотел бы уточнить, какие кейсы имеются ввиду, где требуется многопоточность и эффективность вычислений.

В моем примере - идет сбор данных о предпочениях в настройке сервера (имя пользователя, пароль, docker, node, bun, python, poetry, git, zsh, fish, starhip, php, composer, caddy, nginx и тп) к установке и настройке, а затем собирает bash скрипт таким образом, чтобы сначала создать пользовтеля, установить нужные репозитории, установить все зависимости, прописать конфиги, и всё в автоматическом режиме без подтверждений.
Как пет-проект - штука еще и полезной может быть, главное чтобы бинарником закидывалась, иначе установка зависимостей для её запуска ломает концепт простоты
А так это вообще на bash сделать можно, но я глянул как сделаны подобные утилиты, и мне не понравилась перспектива поддержки spagetti code в едином файле.

Про Bun я подумал из-за простого процесса билда бинарника, и inquirer
Ну а bash команды в подпроцессе можно вроде на любом языке запускать 😃

Но если есть конструктивные замечания - буду только рад)

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества