Показать сообщение отдельно
  #2 (permalink)  
Старый 06.08.2012, 15:53
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Node.js — не язык. JS — язык, а node — обвязка кучи всякого API над V8 (гугловый интерпретатор JavaScript'а).

Далее, исполняемый язык — какой-то странный термин. Подозреваю, Вы имели в виду "интерпретируемый".

Сообщение от ejik
И правильно ли я понимаю, если язык исполняемый, то на запущеном сервере меняя соурс коды написаные, то это сразу будет видно на страницах которые отображает сервер, без перекомпиляции и перезапуска?
Нет, неправильно. Большинство современных интерпретируемых языков в целях увеличения производительности при обработке интерпретатором компилируются в некоторое внутреннее представление (см. JIT), так что интерпретатор вполне может быть нечувствителен к изменениям исходного кода. Node.js, например, именно таков.

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

Node.js же постоянно работает, не завершая исполнение после обработки запроса. Точнее так: в ноде есть собственный сервер, который умеет принимать запросы. Вы можете назначить обработчик события нового запроса, в котором обрабатывать его. Где-то в недрах node есть event-loop, который постоянно ждёт новых событий (например, новых запросов) и делегирует их нужному event-listener'у.

Таким образом, хоть JS и интерпретируемый, это не отменяет необходимости перезапускать node после обновления исходного кода.
Ответить с цитированием