Node.js — не язык. JS — язык, а node — обвязка кучи всякого API над V8 (гугловый интерпретатор JavaScript'а).
Далее, исполняемый язык — какой-то странный термин. Подозреваю, Вы имели в виду "интерпретируемый".
Сообщение от ejik
|
И правильно ли я понимаю, если язык исполняемый, то на запущеном сервере меняя соурс коды написаные, то это сразу будет видно на страницах которые отображает сервер, без перекомпиляции и перезапуска?
|
Нет, неправильно. Большинство современных интерпретируемых языков в целях увеличения производительности при обработке интерпретатором компилируются в некоторое внутреннее представление (см.
JIT), так что интерпретатор вполне может быть нечувствителен к изменениям исходного кода. Node.js, например, именно таков.
Вообще говоря, для любого языка работать так, как Вы хотите, сложно, т.к. придётся как-то определять, откуда продолжать выполнение после обновления файла с кодом (а там может находиться всё, что угодно), не говоря уже о возможных конфликтах состояния. Но можно останавливать интерпретатор после обработки запроса, а потом запускать заново (обычная схема для, например, php), что связано с некоторыми накладными расходами на инициализацию.
Node.js же постоянно работает, не завершая исполнение после обработки запроса. Точнее так: в ноде есть собственный сервер, который умеет принимать запросы. Вы можете назначить обработчик события нового запроса, в котором обрабатывать его. Где-то в недрах node есть event-loop, который постоянно ждёт новых событий (например, новых запросов) и делегирует их нужному event-listener'у.
Таким образом, хоть JS и интерпретируемый, это не отменяет необходимости перезапускать node после обновления исходного кода.