Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Классическая игра в аркадном стиле для любителей ретро-игр. Защитите космический корабль с Печенькой (и не только) на борту, проходя уровни.

Космический арканоид

Арканоид, Аркады, Веселая

Играть

Топ прошлой недели

  • Animalrescueed Animalrescueed 43 поста
  • XCVmind XCVmind 7 постов
  • tablepedia tablepedia 43 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
9
user10516742
user10516742
Лига программистов

Почему JS (и TS) это плохой язык⁠⁠

6 месяцев назад

Я знаю, что на эту тему уже было сказано много, но настал мой черед. На JS я пишу больше 10 лет, так что терпел я достаточно :)

Когда мы говорим “джаваскрипт”, мы подразумеваем много разных вещей:

  • Стандарт EcmaScript

  • Среда исполнения (NodeJS, браузер)

  • Экосистема (библиотеки, фреймворки, тулинг)

Иногда есть смысл поговорить об этих вещах по отдельности, но сегодня мы обсудим их все сразу, и назовем это просто “джаваскрипт”. А именно, я объясню, почему джаваскрипт это плохой язык.

Что значит плохой?

А что значит “плохой” (или хороший)? Кто-то из великих сказал: “есть 2 типа языков, те которые не ругают, и те на которых пишут”. Джаваскрипт буквально олицетворяет вторую категорию: его ругают почем свет стоит, и при этом он самый популярный язык программирования в мире.

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

Если последнее утверждение кажется вам неочевидным (как же так, hello world на JS можно написать в 1 строку, а на условном Go в 5-10), то нужно уточнение — программисты не слишком часто пишут хеловорды на работе. Чаще всего человеку, волею судеб столкнувшемуся с JS нужно работать с графическим интерфейсом, либо писать серверный код, и размеры таких приложений в большинстве своем превышают тысячу строк кода.

JS не масштабируется

Не даром слоган TS — “JavaScript that scales”. Во всяком случае, был. Этот язык был спроектирован много лет назад для решения задач, которые совершенно не похожи на сегодняшние. Написать скрипт, максимум, в несколько сотен строк кода это совершенно не то же самое, что поддерживать огромный проект с десятками сложнопереплетенных сущностей, где цена отказа это большие деньги.

Да, разработчики EcmaScript и движков вроде V8 большие молодцы, что развивают язык. Так, например, в нем со временем появились импорты и async-await, но, во-первых, там есть нюансы (об этом чуть позже), а, во-вторых, этого недостаточно. Помимо этого нужна как минимум статическая типизация, линтинг и форматтер. Если мы говорим про фронтенд среднего и выше размера, то добавьте сюда: минификацию, обфускацию, сжатие картинок, транспиляцию под старые браузеры и, черт знает, что еще. Вам может особенно “повезти”, если вы разрабатываете под какую-то нестандартную платформу вроде Chrome или VSCode расширения, где на вас упадут дополнительные ограничения с которыми вы останетесь один на один. И часто проблема решается написанием каких-то кастомных скриптов для сборки вашего кода каким-то нетривиальным способом.

Короче, из коробки JS годится лишь для написания очень маленьких вещей, а как только ситуация меняется, начинаются маневры, и поверх основной технологии (собственно, языка), начинают наслаиваться дополнительные, и все это (из-за основной причины, отсутствия нужных инструментов в самом языке), ходит ходуном и шатается от ветра как карточный домик.

Итого, JS “из коробки” не масштабируется — факт. Для масштабирования требуется сильное усложнение системы путем добавления в нее компонентов неочевидного качества. И дело даже не в комьюнити - разработчики сторонних инструментов большие молодцы, что решают насущные проблемы, но они просто не могут решить их по настоящему качественно, потому они сами вынуждены писать на джаваскрипте. Это рекурсия и порочный круг.

Фронтенд это боль

Как вы могли понять из предыдущего абзаца, проблема “JS не предоставляет из коробких нужных инструментов” удесетеряется в случае, если вы пишете не для сервера, а под браузер. Это забавно, учитывая, что JS был создан для фронтенда, а бэкенд на нем, в итоге, писать проще.

Это не значит, что надо тащить JS на бэкенд, он все еще остается плохим языком, просто на фронтенде страданий еще больше. К тому же, злая ирония такова, что на бэкенде, где JS еще можно как-то стерпеть, есть из чего выбрать (например, Go), а вот на фронтенде выбора нет. Более того, выбор может пасть на JS (и вполне адекватно, к сожалению) даже когда вы пишете мобильное и/или десктопное приложение, например, на React Native или Electron. Как сложилась такая ситуация, отдельная история, но это факт, и с ним надо мириться.

Ситуация с фронтендом настолько ужасна, что самый популярный и стабильный фреймворк React заставляет вас писать на языке jsx (tsx), который является абстракцией над JS и HTML. Альтернативы еще хуже, например, Svelte также добавляет свой html-js-подобный язык с различными магическими директивами.

В итоге этот “динамический” язык не работает без кучки компиляторов, каждый из которых имеет свои конфиги, свою экосистему плагинов (каждый из коротых в любой момент может может сломать обратную совместимость, не обновиться вовремя, стать depracated и прочее).

Веб нельзя ломать

Логика разработчиков JS проста — миллионы сайтов и приложений работают на джаваскрипте, следовательно, из джаваскрипта ничего нельзя удалить. В итоге в него все добавляют и добавляют, как следствие, на нем можно писать в десяти разных стилях и одна проблема решается дюжиной разных способов. Как думаете, как это влияет на качество и удобство разработки? Правильно, влияет очень плохо. Два проекта даже на React могут выглядеть совершенно по разному, не говоря уже о проектах с разными фреймворками. Они даже синтаксически (из-за бесконечного юзания различных настроек и сахаров) легко могут отличаться.

Но это по беды. Так как ни одно минимально работающее приложение на JS невозможно без огромной пачки зависимостей (будь то рантайм или для тупо сборки), то будьте готовы к тому, что пакеты не дружат друг с другом. В одном пакете CommonJS импорты, в другом ES6 импорты, в третьем еще какая-нибудь херня. Или ситуация, что пакет который вам нужен внезапно не поддерживает нужный вам формат импортов.

Я остановлюсь тут, но, мне кажется, подобных причин для поломки, которые следуют из того факта, что “веб нельзя ломать” можно выдумать еще много.

TypeScript не помог

Опять же, не поймите неправильно. Ребята из Microsoft большие молодцы, что решают насущную проблему, и без них было бы намного хуже. Однако, их решение, во-первых, не решает проблему полностью а, во-вторых, добавляет своих проблем.

Начнем с того, что у вас в системе +1 компонент - компилятор тайпскрипта. У него (ну разумеется) есть свой конфиг. Версия вашего компилятора должна матчится с вашими зависимостями.

Далее, TypeScript не дает никаких гарантий. Вообще. Как же так? Компонент в систему добавили, +1 язык выучили, а undefined все еще is not a function? Причина в том, что TS был разработан для gradual adoption, то есть плавной интеграции с JS. Разработчики предположили (и правильно предположили), что просто взять и переписать весь джаваскрипт в мире на TS не получится, и любой TS-код будет взаимодействовать с небезопасным JSом. Как следствие, очень и очень часто в своем TypeScript проекте вы будете видеть тип any который как бы говорит “хз что это, делай с этим что хочешь но на свой страх и риск”. Классная типизация, да?

Выводы

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

  • Иногда брать JS/TS можно и нужно, ситуации бывают разные, но это за пределами статьи

  • Если вы не писали на Go, советую попробовать, вы удивитесь, насколько жизнь может быть приятнее (как бонус еще и конская производительность)

Дополнительно

Я посвятил три года изучению языков программирования и написал свой. Он совсем не похож на JS потому что он потоко-ориентированный (dataflow/flow-based) и в нем все работает параллельно by default. В его архитектуру я заложил все, чтобы работать с ним было легко и приятно. К сожалению, сейчас у меня нет времени заниматься им, но мне будет приятно, если вы на него посмотрите.

https://github.com/nevalang/neva

Мои Telegram Каналы

Еще у меня есть 2 tg канала где я пишу про запуск своего проекта и программирование с помощью LLM.

  • https://t.me/ai_coder_channel

  • https://t.me/build_saas_in_public

Показать полностью
[моё] Javascript Typescript Golang Языки программирования Мнение Текст Длиннопост
29
3
JohnDuval007

Какая нынче Java интересная пошла⁠⁠

7 месяцев назад
Какая нынче Java интересная пошла

Выпадает такая реклама на Пикабу :)

Как я погляжу, "современная" Java стала PHP :)

Идиотизм Реклама Реклама на Пикабу Языки программирования
0
0
leha2414

Помогите с редактированием hex файла⁠⁠

7 месяцев назад

помогите с редактированием hex файла.заменить soir ukraine .когда редактирую в ponyprog2000.и прошиваю(атмега8) то перестает запускатся.зависает на экране с надписью.или это сложно ?

Показать полностью 2
Программирование Радиоэлектроника Радиолюбители Языки программирования Длиннопост
20
georgiyozhegov
georgiyozhegov
Лига программистов
Серия Программирование

Используем C в Ассембли⁠⁠

7 месяцев назад

Разрабатывая стандартную библиотеку для своего языка, столкнулся с проблемой: как связывать код написанный на C с ассембли. Первый подход – компиляция C в ассембли и ручное копирование кода – оказался не самым удобным. Две проблемы этого способа это несовместимость синтаксиса GCC и Nasm и постоянное дублирование кода при малейших изменениях.

Решение

Теперь расскажу о способе, который является оптимальным – линковке объектных файлов.

Пример

Приведу пример из моего языка программирования – функция для печати целых чисел.

debug.c

Важно, что функция объявлена с модификатором extern, то есть доступна глобально.


Также, в него нужно включить заголовочный файл, в котором будут объявлены все сигнатуры функций.

debug.c

debug.h

Теперь, создаём объектный файл.

gcc -nostdlib -no-pie -fno-stack-protector -c debug.c -o debug.o

Флаги -no-pie и -fno-stack-protector нужны для совместимости с ассембли.

main.asm

Компилируем и компонуем с объектным файлом стандартной библиотеки

nasm -f elf64 main.asm -o main.o

gcc -nostdlib -no-pie main.o debug.o -o main

Получаем одиночный бинарный файл, в котором включены и стандартная библиотека и главный файл.

Если вам хочется узнать больше о языках программирования, переходите в мой телеграм канал.


P.S: Тело функции

Показать полностью 5
[моё] Программирование Языки программирования Компиляция Компилятор Гайд Обучение Длиннопост
13
4
Вопрос из ленты «Эксперты»
zabetonirui.eto
zabetonirui.eto

Фриланс.ру энд фл.ru - что за абзац...⁠⁠

7 месяцев назад

По работе, необходимо периодически заказывать програмные решения для сайта, не особо обычные и не очень простые, типо реализовать вывод средств с баланса сайта через некую платёжную систему, пусть например, юкассу. Расписываю суть задачи, говорю, что сам в теме чуть меньше чем ноль, но организация пусть и ИП, но далеко не детский сад, 150+ человек в штате на производстве, плюс имя довольно изветнное в РФ. Сразу не афиширую кто мы. Ставлю задачу, абстрактное ядро описываю, говорю что заплатим нормально, и сыпятся заявки, с контактами в телегу, вазап, почту. Хотя по правилам полощадок, уводить разговор в другие мессенджеры это не правильно. И. Что самое непонятное, пишет тело, мол я готово. Иначе не скажешь, 15200, на задачу за которую просить, как я понимаю меньше 50-80 тыс руб, это ну цирк. Ок, думаю, прогер молодой, акк смотрю 9 лет, но за 9 лет, 9 работ, и всякая ерунда. Типо шаблоны WP, лендинги, парсинги... Я с дуру соглашаюсь, и даже говрю что заплатим 30400 но... Я не совсем ДУРУ... Делаю копию сайта на техдомене, удаляю оттуда все важные данные, не буду углублятся, кто понял, тот понял...
И.... И. Вот без этого И.... с моногоиточием, я не могу. Даю телу доступы, в четверг утром, 28 числа. И жду, сегодня, смотрю логи, и, нет подключений ни по http в админку, ни по ftp. Я этому телу вначале пишу мол, а вы работаете, или нет, на что получаю ответ, да, да, мол, разбираюсь. Хм. после этого говрю мол а что вы делаете, я не вижу ваших подключений... На что получаю скрин из админки сайта, мол, вот он я, пашу аки конь. И... Первую запись в лог. Через 2 минуты после моего вопроса. И на этом я решаю с этим телом работу прекратить. Ну детский сад...
Но всё же, что это такое? Я бы понял если бы искали дурней, кто дадут доступы к сайту, и там можно будет что то украсть или навредить, с целью получения чего то там, но это вот что?...
И остальные, кто с ходу говорит, давайте общатся в телеге, мол тут не удобно? Это что...??? Если сами полощадки, не рекомендуют это.
В общем... Прошу отклика, как нормалньо работать с fl.ru и freelance.ru, может тут и оффициальные акки есть? Или может ну на**й эти помойки? А тогда что в замен?

Да и вообще, я так понимаю айтишиников тут не мало, может поговорим на эту тему?

Показать полностью
[моё] Спроси Пикабу Айтишники IT Программирование Создание сайта Разработка Веб-разработка Программист Языки программирования Кодеры Разработчики Flru Вопрос Текст
6
1
itstorytelling
itstorytelling

25.03.1940 - День рождения Жана Ишбия [вехи_истории]⁠⁠

7 месяцев назад
🗓 25.03.1940 - День рождения Жана Ишбия [вехи_истории]

🗓 25.03.1940 - День рождения Жана Ишбия [вехи_истории]

Жан Ишбия – французский инженер-программист, сыгравший ключевую роль в разработке языка программирования Ada. Его работа внесла огромный вклад в развитие надежных и безопасных программных систем, особенно в авиационной, военной и космической отраслях.

В 1977 году Министерство обороны США провело конкурс на создание нового языка программирования для военных нужд. Именно под руководством Ишбия компания CII Honeywell Bull разработала язык Ada, который отличался строгой типизацией, поддержкой многозадачности и высокой надежностью. Он стал официальным стандартом для оборонных систем и широко использовался в критически важных приложениях.

✍️ Пишите в комментарии, про какой язык программирования вам бы было интересно увидеть историю)

YouTube | RuTube | Telegram | Pikabu

Показать полностью 1
[моё] Ученые Технологии Наука История (наука) Языки программирования Личность История IT
0
Alekseqq

С# Unity⁠⁠

7 месяцев назад

Поссоветуйте курсы на С# для Unity

[моё] Языки программирования Unity Gamedev Обучение Разработка Помощь Текст
4
1
Вопрос из ленты «Эксперты»
YOUTUBE.FRIDRICH
YOUTUBE.FRIDRICH

Какой язык программирования самый лёгкий для новичка?⁠⁠

7 месяцев назад

С какого языка начать программировать , если я в этом ничего не понимаю?

Вопрос Спроси Пикабу Текст Языки программирования
17
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии