Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Производительность языков программирования и выбор языка для разработки ПО


Команда Facebook сделала оценку влияния на производительность используемых языков программирования и представила критику используемого в качестве уровня представления данных языка php. Чем ниже значение на графике, тем лучше.

Сама команда Facebook использовала в качестве уровня представления данных язык php в силу разных причин, начиная от "исторически сложилось" и заканчивая "легко писать", "понятный интерфейс", "Легко найти разработчиков",...

Обзор интерпретируемых и компилируемых языков программирования

Некоторые языки преобразуется непосредственно в машинный код (прямые инструкции процессору) путем компиляции: Ассемблер, C,C++,Pascal.

Другие языки являются интерпретируемыми, то есть в процессе выполнения написанные на этих языках программы транслируются в машинный код. К интерпретируемым языкам программирования относятся Basic, JavaScript, Java и C#. Интерпретируемый язык обрабатывается во время выполнения. Каждая строка читается, анализируется, и выполняется. Обработка каждой команды в цикле требует время. Из-за дополнительных накладных расходов на интерпретацию программы код выполняется между 5 - 10 раз медленнее, чем скомпилированный код. Интерпретированные языки, как Basic или JavaScript являются самыми медленными. Их преимущество заключается в отсутствии необходимости перекомпилировать исходный код после любых изменений, что бывает очень удобно, когда вы только учитесь программировать.

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

Скомпилированные программы почти всегда будут работать быстрее, чем интерпретируемые, языки, такие как C и C++, как правило, самыми популярными для написания игр. Java и C# компилируются в интерпретируемый язык, который является очень эффективным. Поскольку виртуальная машина, которая интерпретирует Java и. NET Framework, который работает на C#, в большой степени оптимизирована, есть утверждение, что использование данных языков является высокопроизводительным, но все равно не так, как программы, написанные на языке С++.

Другой способ сравнения языков является сравнения уровня абстракции, то есть сравнение того, насколько близко язык к аппаратному обеспечению. Машинный код является языком с самым низким уровнем абстракции, Ассемблер находится прямо над ним. C++ выше, чем С, так как C++ обеспечивает большую абстракцию. Java и C # еще выше, чем C++, потому что они компилируются в промежуточный язык, называемый байт-код.

Программы на Ассемблере самые быстрые по исполнению, но самые медленные по написанию. Язык ассемблера считается читаемой версией машинного кода и выглядит следующим образом

Mov A,$45

Ассемблер привязан к конкретному ЦП или семейству родственных процессоров. Ассамблер требует много времени, чтобы научиться на нем писать. Такие языки, как C-подобные, сократили потребность в Ассемблере как языке программирования, за исключением случаев, когда ОЗУ ограничено или  необходим критичными ко времени код. Как правило, он используется в коде ядра операционной системы или в драйвере видеокарты.

Язык ассемблера является очень низко уровеневым. Большая часть кода просто перемещает значения между регистрами процессора и памяти. Если вы пишете пакет, рассчитывающий заработную плату, то вы хотите думать в терминах заработной платы и налоговых вычетов, не перемещений в ячейку памяти XYZ. Вот почему языки высокого уровня, такие как C++, C# или Java являются более продуктивными. Программист может думать в терминах предметной области (заработная плата, отчисления и начисления), а не аппаратных терминах (регистры, память и инструкции).

Язык С был разработан в начале 1970-х Деннисом Ритчи. Его можно было рассматривать как полезный и мощный инструмент широкого круга мми стан, но в программ на языке С можно было легко допустить ошибки, через которые программы становились уязвимыми со стороны системы безопасности. C является языком низкого уровня, и был описан как улучшение языка ассемблера. Синтаксис многих языков сценариев основан на С, например JavaScript, PHP и ActionScript.

Perl: сайты и утилиты. Очень популярны в мире Linux , Perl был одним из первых веб-языков и остается очень популярным сегодня. Он делает "быструю и грязную"  работу по программирование в Интернете.

Разработка сайтов с  помощью PHP. PHP был разработан как язык для веб-серверов и оказался очень популярен в сочетании с Linux , Apache, MySQL и PHP или LAMP для краткости. Код PHP интерпретируется, но предварительно скомпилированный код выполняется достаточно быстро. Он широко используется для разработки веб-сайтов, но не так широко используется для разработки приложений для настольных компьютеров. Разработан на основе синтаксиса C, также включает в себя объекты и классы.

Pascal Паскаль был разработан в качестве учебного языке за несколько лет до С, но был очень ограничен в обработке строк и файлов. Некоторые производители расширили язык, но он не стал абсолютным лидером, пока Borland, Turbo Pascal (для DOS) и Delphi (для Windows) не появился. Это были мощные реализации, которые добавили достаточно функций, чтобы сделать их пригодными для коммерческого развития. Однако Borland не выстоял против гораздо большей Microsoft и проиграл битву.

C++ - шикарный язык!
C++ или C+классы , как это было изначально объявлено, пришел около десяти лет после того, как  в C была успешно внедрена объектно-ориентированная модель программирования, а также функции, такие как исключения и шаблоны. Обучение C++ является большой задачей. Он, безусловно, самый сложный из языков программирования, но как только вы освоили его, вы не будете иметь никаких трудностей в освоении любого другого языка.

C# - Большая ставка от Microsoft
C# был создан по проекту архитектора Delphi Андерс Хейлсбергом, после того как он перешел разработчиком в Microsoft, который считал, что разработчики Delphi будет чувствовать себя как дома с такими функциями, как формы Windows.

C# синтаксис очень похож на Java, что не удивительно, так как Хейлсберг также работал на J++ после того как он переехал в Microsoft. Узнайте C#, и вы на пути к знанию Java. Оба языка являются полу-компилируемыми, так как вместо компиляции в машинный код, они компилируются в байт-код (C# компилируется в CIL, что аналогично байт-коду) , а затем интерпретируются.

Javascript - Программы в вашем браузере. Javascript - язык сценариев на основе синтаксиса C, но с добавлением объектов, в основном используется в браузерах . JavaScript интерпретируется намного медленнее, чем скомпилированный код, но работает хорошо в браузере. Изобретенный Netscape он оказался очень успешным , и после нескольких лет упадка переживает новую жизнь благодаря AJAX ; Асинхронный JavaScript и XML. Он позволяет обновлять части веб-страниц без перерисовки всей страницы.

ActionScript -  кричащий язык! ActionScript является реализацией JavaScript , но существует только в приложениях Macromedia Flash. Позволяет использование векторных основ графики, используется в основном для игр, воспроизведения видео и других визуальных эффектов и для разработки сложных пользовательских интерфейсов, работающих в браузере.

Basic для начинающих. Универсальная символическая система команд была создана, чтобы научить программированию в 1960-х годах. Microsoft сделали язык самостоятельным, включая VbScript для веб-сайтов и очень успешного Visual Basic. В последней версии, что является VB.NET, работает на той же платформе. NET, как C# и производит тот же CIL байт-код.

Как сравнить языки программирования?

1. По быстроте компиляции
  • Ассемблер (Assembly)
  • C
  • C++
  • Pascal
  • C#
  • Java

    2. Быстро интерпретируемые языки
  • Perl
  • PHP

    3. Медленно интерпретируемые языки
  • JavaScript
  • ActionScript
  • Basic

Что сделали facebook для оптимизации работы php-кодов?

Для оптимизации работы своих приложений facebook разработала решение HipHop - транслятор исходного кода, превращающий исходный php код в высокооптимизированный код на С++, который затем использует компилятор  g++ для его компиляции.

HipHop решение включает в себя:
- транслятор исходного кода;
- альтернативную реализацию среды выполнения php;
- множество наиболее распространенных расширений php, переписанных на С++ с целью увеличения производительности.

Ими же были разработаны решения HPHPi, экспериментальный интерпретатор PHP для отладки и быстрого прототипирования кода, и HHVM, экспериментальная виртуальная машина для исполнения и JIT оптимизации PHP-кода.

JIT-комиляция (Just In Time - точно во время) используется для увеличение скорости работы приложения за счет выполнения компиляции на лету байт-кода в машинный код за счет увеличения памяти для хранения результатов компиляции и затрат на время компиляции. Впервые JIT компиляция была использована в SmallTalk.

В языках программирования Java, PHP, C#, Lua, Perl, GNU CLISP исходный код транслируется в байт код.
Java, JavaScript, .Net Framework, PyPy (реализация Python) используют JIT-компиляцию.
PHP, Ruby, Perl, Python используют неполную или ограниченную JIT-компиляцию.

Как работает механизм JIT на Java?

При запуске команды
> java MyNewCLass

запускается JVM (виртуальная машина Java), в которой происходит вызов процедуры загрузки классов с параметром MyNewCLass. Затем загруженный класс передается интерпретатору, который исполняет байт-код (инструкции виртуальной машине). Если интерпретатор видит, что какаой-то метод используется часто, он вызывает JIT-компилятор, который транслирует методы в машинный код. Таким образом при исполнении программы используется смесь из интерпретируемых и транслируемых кодов.

Какой выбрать язык программирования для разработки?

Для оценки технических возможностей конкретных языков раммированприсутствует целый ряд нетехнических критериев, которые должны быть рассмотрены:

1.
Какой язык знают ваши разработчики?
2. Какими компетенциями обладают разработчики на местном рынке?

3.
Если вы аппаратная платформа уже выбрана, какой язык программирования хорошо поддерживается на этой платформе, или, наоборот, какоие ограничения платформы будут существенны для выбора языка программирования.ог
4.
Если выбрана база данных, какой язык программирования хорошо взаимодействует с этой базы данных, или, наоборот, как будет выбор языка ограничивать параметры выбора базы данных.
5.
Есть ли "стандартный язык ", используемый в вашей предметной области; наработанные функции, пакеты могут ограничивать ваш выбор языков.
6.
Если вы планируете взаимодействовать с другим приложениями, на чем они написаны? Часто преимуществом является работа на одном языке программирования.
7.
Оцените требование проекта с позиций скорости разработки, эффективности, надежности и гибкости. Можете оставить два из четырех критерия.

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


В избранное