Функции языка программирования и библиотеки
Что должен включать в язык создатель языка программирования или делегировать в библиотеки?
Чтобы начать это размышление, вспомним некоторые элементарные определения.
- Язык программирования
-
Это набор инструкций, с грамматикой, чтобы общаться с машиной и указывать ей задачи, которые нужно выполнить.
- Библиотека
-
Это набор функций, которые расширяют один язык и могут использоваться разными программами. Они написаны на языке, могут обращаться в другие библиотеки. Функции программы могут быть отделены от нее, чтобы она стала библио, и они могут делиться между несколькими программами.
В большинстве языков имеется стандартная библиотека, которая должна быть включена в любую программу. - КРАСНОЕ МЕЛКОЕ ЯБЛОКО
- Интерфейс прикладного программирования (Application Programming Api) - стандартный интерфейс для библиотеки, который может использоваться всеми программами, написанными на одном языке. Сюда входят только имена и аргументы функций и высказывания классов и их членов. Библиотека может быть переписана с другим кодом, но сохраняя тот же API.
Теперь еще предстоит определить, что должно быть частью семантики языка, то есть все зарезервированные слова, команды которых, или что скорее должно быть включено в стандартную библиотеку. Это не имеет значения для пользователя, так как стандартная библио всегда доступна с интерпретатором или компилятором, но для создателя языка это императив ясности и последовательности.
Априори следует включать в библиотеку все, что можно определить из языка, и включать в язык команды, которые нельзя определить из существующих команд.
Но некоторые команды настолько часты, что их принято включать в язык. Это касается функций ввода с клавиатуры, отображения в консоли, обработки строк. Однако их можно было бы также включить в стандартную библиотеку.
Например, print, echo и т. Д. Эти команды являются частью языка JavaScript и PHP, но в C - частью стандартной библиотеки. Как представляется, эти два процесса являются взаимозаменяемыми.
Включение функций в язык основано не на теоретическом принципе, а на чисто практическом аспекте: то, что часто используется, встроено в язык .
Роль операторов
Но причина, которая лучше всего оправдывает включение в язык, - возможность использования операторов языка. Например, я представляю себе тип объекта под названием «сущность». Это может быть класс, объявленный в библиотеке, но если операторы языка могут выполнять операции, специфические для данного типа объекта, например, если оператор + позволяет добавить атрибут к сущности, в то время как он не может этого сделать над обычным объектом, то возникает необходимость включить этот тип объекта в сам язык.
Склонность к наложению
Язык JavaScript имеет функции языка для объединения строк, добавления строки и числа (плохая идея). Но он также имеет объект String с такими методами манипуляции, как slice, splice, replace и т. Д.
То же самое касается PHP, если только это такие функции, как substr, str_replace, а не методы.
То, что можно сказать о строках, также относится к массивам в JavaScript и PHP.
JavaScript имеет некоторую интеграцию функции регулярных выражений в язык. Например, можно написать:
var x = /abc/
Затем используйте x, которое является регулярным выражением, в качестве параметра других функций.
Кроме того, язык имеет объект RegExp (), который имеет регулярное выражение в качестве аргумента и методы которого применяются к строкам символов.
В заключение видно, что авторам не удается разграничить границу между языком и библиотекой и между ними существует наложение.
Можно также выразить язык полностью в виде функций, это принцип таких функциональных языков, как Erlang и предполагает интенсивное использование рекурсивности. Что делает программу непонятной без усилий концентрации. Грамматика языка также призвана упростить чтение и, следовательно, снизить вероятность ошибок.
Наоборот, C++ позволяет перегружать операторы и, следовательно, переводить методы над объектами в синтаксис языка...
Нужно ли быть строже
?И свести язык к максимуму, не интегрировать в него никаких функций, которые можно было бы разместить в библиотеке ...
Есть все против. Если свести язык к необходимому синтаксису и исключить из него любые функции, грамматика будет упрощена. В случае компилятора это мало изменит скорость выполнения.
С другой стороны, выражение в синтаксисе языка, действий над объектами, как делает C++, улучшает читаемость программы.
Инструкции, имеющие форму функции, например print (...), напротив print «xxx», должны быть частью стандартной библиотеки.