Я смотрю, Node.js - модная сегодня фишка, производящая изрядно много шороху.
Как человек, последние два с половиной года плотно страдающий жабоскриптом, не могу пройти мимо.
Что говорят люди?
Основные
доводы ЗА:
- писать всё на одном языке
- асинхронность это круто
Основные
доводы ПРОТИВ:
- жабоскрипт язык говёненький
- асинхронность там фуфлыжная и у всяких специально обученных ерлангов сосёт с присвистом
Что думаю я?
Я, конечно, склоняюсь к "против".
Во-первых, жабоскрипт, как язык, действительно - позорище (
см. Крокфорд). С учётом того, как его чережжопу используют на клиенте - даже страшно подумать, что будет происходить на сервере
Во-вторых, асинхронность сильно переоценена. Можно ещё раз посмотреть
рекламу нод-джса (парень ужасный рассказчик, конечно) и поразиться бредовости приводимых примеров - ах йопта, ждать пока повернётся блин на диске! Странно, что он ещё про сброс конвейера процессора при ошибке предсказания не упомянул. Давайте начистоту: единственные известные нам задачи, которые требуют асинхронности - удалённый запрос по сети или заведомо продолжительная расчётная задача. Всё остальное должно работать настолько быстро, что задержки либо несущественны, либо являются аццким злом, с которым надо бороться, а не "учиться сожительствовать".
В-третьих, никто на самом деле не любит асинхронность. Она путает код, её тяжело понимать, контролировать и дебажить. Для успешной борьбы с ней
разрабатывались (и
продолжают разрабатываться) изощрённые средства. А тут предлагается сделать её нормой жизни и внедрить её даже туда, где она нафиг не упёрлась. Зачем? Просто так, по приколу, понравилось коллбэками в аджаксе жонглировать? Ну-ну.
Но Node.js пришёл не один - за ним поползла ещё куча модулей и проектов. Происходит нечто похожее на развитие PHP: поганенький язык внезапно оказался популярным и его стали допиливать постфактум. Особенно интересным, на мой взгляд, является
CoffeeScript. Суть проекта - исправление довольно унылого синтаксиса жабоскрипта и даже отчасти семантики. То есть из языка попытались выкинуть все эти bad parts, о которых говорил Крокфорд, и заодно внедрить опыт современных скриптовых языков (преимущественно Ruby).
Идея не нова: жабоскрипт раздражал всех уже давно. И, кроме того, вследствие своей стандартизованности и изученности, хорошо подходил для компиляции В НЕГО. Но
предыдущие попытки распространение получили ограниченное - одни только накладные расходы от таскания за собой стандартной библиотеки жабо или питона уже внушают некоторую тревогу. CoffeeScript же - вещь в себе, результат компиляции дополнительных зависимостей по факту не имеет и, извините за выражение, парадигму JS-разработки не искажает.
Результат, с одной стороны, не может не радовать, потому что фигурные скобки в 2010 - нечто уже основательно устаревшее.
С другой стороны, ориентация на Ruby - означает и все дряные элементы рубистско-перловской культуры: анти-инженерный принцип TIMTOWTDI, код, выглядящий в духе "бессвязный бред шизофреника" с неочевидными подводными камнями, вместо решения задач - поиски наиболее хиповых способов их решения и т.п.
Итак, что же делать? Непонятно. С одной стороны, приход JS в стан серверных скриптовых языков никому нахрен не нужен. С другой стороны, использовать CoffeeScript для генерации прикладного клиентского кода довольно заманчиво - даже несмотря на его ковбойские замашки. В идеале, желательно, чтобы проект кто-нибудь взял под крыло и навёл в нём порядок. Тогда, может, толк и будет. А пока - всё очень экспериментально.