Подтвердить что ты не робот

Почему так много веб-языков интерпретируется, а не компилируется?

Почему языки, такие как C, не используются для веб-разработчиков? Разумеется, скорость увеличения от компиляции будет полезна для сайтов большой нагрузки?

4b9b3361

Ответ 1

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

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

Ответ 2

Большинство веб-приложений обращаются к базе данных. Подавляющее большинство этих приложений тратят почти все свое время на связь с базой данных. Таким образом, для любого заданного запроса к приложению на сервере приложений крошечная обработка, а затем длинная пауза во время ожидания базы данных. Поскольку такой небольшой процент любого времени запроса тратится на фактический код сервера приложений, оптимизация этого кода путем записи его в C/С++ приведет к небольшому, вероятно, не заметному, улучшению времени отклика.

Итак, вместо того, чтобы сосредоточиться на C/С++ и сохранять каждый последний цикл процессора, имеет смысл беспокоиться о производительности разработчика. Разработчики очень дороги. И, как правило, они намного более продуктивны на языке сценариев или даже на Java, чем на C/С++.

Конечно, есть исключения из этого. И если некоторые запросы к вашему приложению имеют интенсивность процессора или памяти, они должны быть написаны на C/С++. Но для остальной части вашего приложения вам лучше сосредоточиться на оптимизации ваших алгоритмов, структур данных, обмене данными с базой данных и производительности разработчиков, чем в оптимизации вашего языка.

Ответ 3

Языки сценариев имеют следующие преимущества перед C:

  • Гораздо более быстрая разработка
  • Сегодня все те, которые относятся к этому вопросу, компилируются во время выполнения. В некоторых случаях это может сделать их быстрее, чем эквивалентная программа на C, поэтому производительность просто не является проблемой.
  • Стоимость обслуживания значительно меньше
  • Вы можете использовать методы Agile (например, модульные тесты), что приводит к значительному улучшению кода. Да, вы можете сделать это и в C, но это гораздо больше усилий.
  • Когда вы занимаетесь веб-разработкой, у вас есть огромные рамки, которые выполняют большую часть работы для вас.
  • Они гораздо более открыты для перемен. Новая функция может занять до нескольких минут.
  • Если что-то сломано, вы можете войти на свой сервер, запустить текстовый редактор в консоли и исправить проблему, иногда без перезапуска.

Ответ 4

C был использован для веб-приложений на ранней стадии - я написал в нем различные скрипты CGI.

Однако со временем более продуктивные языки (например, С# и Java, но не только те, которые, конечно же) оказались "достаточно эффективными" для веб-приложений. Обратите внимание, что как С#, так и Java компилируются в промежуточный код, а затем JIT-компилируются, достигая "грубой" производительности собственного кода. Почему мы хотели бы использовать C вместо?

Даже традиционно "подлинно интерпретируемые" языки, такие как PHP, часто компилируются во время выполнения в эти дни, насколько мне известно. (Мои знания PHP в особенности все в порядке, возможно, они всегда были скомпилированы... И точно также я уверен, что есть веб-платформы, которые все еще всегда интерпретируются.)

Ответ 5

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

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

Ответ 6

Отличный вопрос. Причина в основном связана с развитием сети. Подумайте об этом шагами:

1) Основной текст в "net" → 2) Добавлена ​​некоторая "разметка" в текст → 3) создаются теги "center" и "marquee"!!! какой прогресс!!! → 4) скрипты на клиенте!!! 5) → hmm... скрипты на сервере!!!

В то время как я сформировал этот ответ, чтобы быть немного тупой, это действительно так. Интеренет, и особенно "Интернет", был удивительным эволюционным процессом. Действительно, требования для более мощных языков (и более совершенных языков) были только более поздними.

Кроме того, посмотрите на инструменты. Я сделал свой PHP в блокноте (и некоторых других простых приложениях). Когда я впервые занимался веб-разработкой, моему компьютеру не хватило места для жесткого диска для поддержки Visual Studio 2008:)

Side Point Однако: там были приложения ".exe" (я думаю, " SunBiz" сообщения в 'exe' ) и некоторые скомпилированные приложения cgi на некоторое время, но их было намного меньше.

Ответ 7

В основном это потому, что быстро и просто менять их на лету. Скомпилированные языки требуют среды разработки, которая должна соответствовать серверу. С помощью script вы можете использовать инструмент ftp и отредактировать текст напрямую, а затем сохранить его. Эта способность делать это с любого компьютера любой ОС или типа многократно спасала мою жизнь (или правильно мою жизнь в Интернете).

Ответ 8

Попробуйте выполнить синтаксический разбор/манипуляцию в C an в Perl/PHP, и вы узнаете.

BTW: Почему так много людей заявляют, что производительность больше не проблема? Я бы не стал проблемой для небольших домашних страниц/блогов, но для работы с большими объемами веб-приложений по-прежнему нужно настраивать производительность (CPU/сеть/память) независимо от того, записаны ли они в java, php или ruby.

Ответ 9

Стоит отметить, что большинство языков сценариев (Python, Ruby и т.д.) легко соединяются - почти тривиально - с C. (Я просто написал некоторые C-расширения для программы Python, и я был впечатлен тем, насколько легко это был.) Если у веб-сайта или веб-приложения есть некоторые узкие места из-за использования "медленного" языка сценариев, обычно можно писать критически важные разделы на более быстром языке, таком как C. На самом деле, какие крупные приложения, такие как Google поиск, Facebook и т.д., - они пишут интерфейс на языке сценариев и делают тяжелую работу с другими языками, такими как C.

Ответ 10

Вот мои мысли по этому вопросу:

  • Для оригинальных приложений CGI необходим собственный ОС, который, конечно же, является ресурсом. Пытаться связать все с одним процессом также непросто с помощью собственного кода, поскольку, если что-то пойдет не так, приложение может легко сбить весь сервер. Эти вещи гораздо легче обрабатываются с помощью интерпретатора или виртуальной машины. Конечно, вы можете сделать то же самое с собственным кодом, но я предполагаю, что было бы намного сложнее реализовать фреймворк. В конце вы в конечном итоге реализуете нечто подобное интерпретатору или виртуальной машине.
  • Интерпретированные языки переносятся в разных операционных системах.
  • Конечно, огромная выгода - это продуктивный прирост, который вы получаете благодаря использованию современного языка.
  • Производительность, конечно, важна. Однако интерпретируемые или языки ВМ становятся все лучше и лучше в этом отношении (с такими технологиями, как компиляция JIT) и приближаются к производительности собственного кода. Также несправедливо сравнивать только время, затраченное на выполнение процесса. Вам нужно измерить всю последовательность: получение запроса с сервера, делегирование в соответствующее приложение, выполнение, возврат результатов на сервер. Будет ли собственное приложение быстрее во всех этих случаях?

Ответ 11

Итак, вместо того, чтобы сосредоточиться на C/С++ и сохраняя каждый последний цикл процессора, он делает больше смысла беспокоиться о разработчике производительность. Разработчики очень дорогая. И, как правило, они много более продуктивны в сценарии языка или даже на Java, чем они есть в C/С++.

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

Для большей части мира (т.е. не для Google/Amazon/eBay/и т.д.) один дополнительный сервер более чем компенсирует потерю производительности, которая может возникнуть в результате выбора языка.

Ответ 12

Многие чрезвычайно полезные функции динамических языков, такие как самоанализ и функции, такие как eval(), действительно сложны/невозможны? для реализации на языках, которые компилируются в собственный код.

Говоря это, большинство языков сценариев компилируются (на лету) на некоторый промежуточный код, который затем интерпретируется (Python, Ruby, Perl) или, возможно, даже JIT, скомпилированный в собственный код (JSP,.NET)

Ответ 13

Моя компания использует С++ (расширение ISAPI) для нашего webapp. Почти все делается в скомпилированных двоичных файлах. Мы также используем механизм JavaScript для частей системы, которые требуют создания сценариев (да, серверный JavaScript). Причиной для этого дизайна является скорость, но возраст также является фактором... это старая кодовая база. Кроме того, мы распространяем наш продукт для некоторых наших клиентов, чтобы они сами принимали участие, поэтому, скомпилировав его, мы защищаем наш исходный код (многие интерпретируемые языки тривиально декомпилируются, или, в случае с PHP и Perl, никогда не компилируются вообще).

Ответ 14

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

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

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

Это можно увидеть в недавнем распространении так называемых архитектур "микросервиса".

Ответ 15

Языки сценариев, в которых единственный вариант для веб-разработки давно. Теперь у нас есть другие альтернативы (Java,.NET..), поэтому ситуация не так уж плоха.

C как платформа не очень удалась для веб-разработки, так как было сложно создать модуль, который можно было загрузить и выполнить с сервера веб-приложений, но одной из первых структур для создания динамического веб-приложения были модули ISAPI для Microsoft IIS, где главным образом разработанный на С++ и скомпилированный.