Существуют ли статически типизированные языки веб-сценариев? [закрыто]

12

Кажется, есть два основных способа настроить серверную часть веб-сервера. Вы можете использовать стек LAMP с серверным кодом в чем-то вроде PHP или Python (или Ruby или JavaScript, которые не начинаются с P.) Эти языки сценариев имеют тенденцию быть динамически типизированными со всеми недостатками в производительность, корректность и поддержание работоспособности, которые обеспечивают динамически типизированные языки, но сервер легко обновить, поскольку вся логика генерации страниц хранится во внешних скриптах.

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

Так что это заставляет меня задуматься. Существуют ли какие-либо серверные скриптовые языки, которые используют статическую типизацию для лучшего из обоих миров?

Мейсон Уилер
источник
2
Вы думали об использовании Go ?
PSWG
10
TypeScript ?
Отредактировано
4
«все недостатки в производительности, правильности и сохранности, которые несут динамически типизированные языки». Эти утверждения являются в лучшем случае спорными, а в худшем - ошибочными (в настоящее время самые быстрые JIT предназначены для языков с динамической типизацией).
Хавьер
2
«Логика генерации страниц скомпилирована в сервер, что означает, что если вам нужно что-то изменить, вы должны отключить сервер и заменить его новой сборкой». Существует несколько серверных сред, которые могут передавать новый двоичный файл без прерывания обслуживания. то есть. Изящная перезагрузка uWSGI
Хавьер
1
Для JVM есть пара платформ, которые позволяют перекомпилировать и выполнять горячую замену на лету.
back2dos

Ответы:

8

ОБНОВЛЕНИЕ: более современные решения включают AtScript

Вы должны попробовать Google Dart .

Он имеет необязательную типизацию, что означает, что вы можете добавлять аннотации типов, которые будут проверяться в «проверенном», то есть в режиме разработчика, во время выполнения, но они не обязательны, и этот язык обеспечивает многие преимущества других динамических языков, таких как python. Тем не менее, редактор сделает вывод типа, чтобы попытаться помочь вам найти ошибки заблаговременно. Виртуальная машина dart работает быстро и может создавать моментальные снимки, которые могут ускорить запуск до 10 раз. Он также компилируется в javascript и работает быстро .

Основным недостатком здесь является то, что это несколько новая технология, поэтому для нее не так много библиотек, и, честно говоря, совместимость с javascript не так проста, как должна быть. Кроме того, язык все еще находится в разработке, поэтому время от времени происходят серьезные изменения.

Даниэль Родригес
источник
Я бы порекомендовал TypeScript. Как и дартс, но он совместим с JavaScript.
Knerd
4

Ваш вопрос основан на нескольких неверных предположениях.

Python и Ruby скомпилированы в байт-код перед выполнением. Процесс автоматический, но изменения приложения требуют полного перезапуска. Node.JS ведет себя так же, но компилируется в машинный код.

Код ASP.NET может быть предварительно скомпилирован и скопирован на сервер или динамически скомпилирован по требованию из исходного кода на сервере. IIS обрабатывает обе формы обновлений без нулевого времени простоя (первые запросы после обновления будут медленными.) Обновления с нулевым временем простоя возможны с Python и Ruby, но с таким большим количеством вариантов развертывания не следует воспринимать как должное.

Исходя из этого, я думаю, что вы будете довольны любым языком .NET.

mikerobi
источник
3
Язык сценариев - это когда вы можете записать несколько битов в файл и запустить его. Нет причин, по которым он не должен быть статически напечатан.
Флориан Маргейн
@FlorianMargaine Итак, C - это язык сценариев?
@delnan c ++ тоже.
Микероби
@mikerobi На самом деле «мой» тоже C ++ (и AFAIK преемник CINT), я просто облажался.
2
@mikerobi Если вы исследуете picoc, вы заметите, что в первую очередь он был написан на языке сценариев. Это не просто интерпретатор для c, это достаточно маленький интерпретатор, чтобы его можно было встроить в более крупные приложения и устройства и дать своим пользователям возможность писать небольшие сценарии на c. Некоторые языки могут быть лучше в написании сценариев, чем другие, но язык неплох в написании сценариев только потому, что он еще не использовался для этого (пока). В конце концов, язык - это всего лишь синтаксис и семантика, реализации могут сильно отличаться.
Яннис
0

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

Возможно, вы захотите взглянуть на некоторые настройки Erlang, такие как Cowboy, Webmachine и азота. С Dialyzer вы можете получить очень хорошую проверку типов на корректность, и вы можете перезагружать модули на лету во время выполнения, так как erlang был разработан, чтобы иметь возможность обновлять программное обеспечение на месте без прерывания работы существующих пользователей.

Кроме того, веб-машина (та, которую я использовал чаще всего) может быть довольно быстрой. Я видел, что веб-машины имеют средние ответы по конечным точкам API менее 10 мс на узле Amazon EC2!

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

Я не использовал это лично, но люди, которых я знаю, кто использует это, любят это.

Захари К
источник
3
Не путайте строгую и статическую типизацию. Haskell имеет сильные статические типы, Python имеет сильные динамические типы.
Микероби
0

ИМХО, лучше статически типизированный язык веб - сценариев D .

Как и интерпретированные скриптовые языки, он может компилировать скрипты на лету и с молниеносной скоростью.

Сам язык выглядит как строго типизированный сверхмощный JavaScript, гораздо более мощный, чем, например, Go.

Все элементы параллелизма скрыты, как в PHP, а шаблоны скомпилированы в нативный код.

Трудно найти лучшего, чем это ...

Рико Дечо
источник