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

Возможность записи

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

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

Ортогональность и простота

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

Выражение
Под выразительностью я имею в виду возможность выразить определенное вычисление удобным способом.

Например:

C language:
count = count + 1;

сложнее написать, чем:

count ++;

Надежность

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

Проверка типа
Это проверка ошибок типа, выполняемая компилятором или во время выполнения интерпретатором.
Довольно простым примером является присвоение целочисленной переменной переменной результат деления, которое дает десятичное значение.

Как правило, желательна проверка типов во время компиляции; это как по причинам вычислительных затрат, так и потому, что вы хотите как можно скорее найти ошибки.

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

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

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

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

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

Стоимость

Стоимость языка зависит от многих факторов. Посмотрим краткий список.

Прежде всего, научить программистов пользоваться определенным языком. Эта стоимость зависит от простоты и ортогональности. Как правило, чем мощнее язык, тем он сложнее.

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

Со стоимостью среды разработки связана «стоимость компиляции»; некоторые компиляторы требуют затрат на использование и, в некоторых случаях, требуют определенного типа оборудования. Более того, почти все компиляторы проводят различные виды оптимизации, что, безусловно, может привести к увеличению времени компиляции, разному занимаемому пространству памяти и времени выполнения.

На секунду остановимся на стоимости исполнения. Разные языки, разное поведение исполнения. Например, язык, который выполняет много проверок типов во время выполнения, безусловно, будет дорогостоящим в использовании.
Сегодня многие программисты игнорируют проблемы эффективности выполнения для большинства приложений, но игнорирование их может привести к более высоким затратам в будущем и даже к сбою приложения. Так что будьте осторожны с тем, что и когда игнорировать. Например, пользователи не беспокоятся об эффективности, если приложение представляет собой виртуальный кошелек, а вместо этого становится большой проблемой, если они хотят перейти от игр со скоростью 30 кадров в секунду к 60 кадрам в секунду.

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

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

Достойные упоминания

Я цитирую вам другие критерии оценки языка, на которых, однако, я не буду вдаваться в подробности.
Переносимость, то есть легкость переноса кода из одной аппаратной реализации в другую. .
Этот фактор сильно зависит от стандартизации языка.

Наконец, общность и четкость: соответственно, размер набора проблем, для решения которых может быть применен язык (то есть применимость языка), а также полнота и точность определения языковая документация.