Файл: Стандартизация языков программирования.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 21.05.2023

Просмотров: 475

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Обеспечение потенциально более высокой эффективности программ. Даже если семантика языка далека от архитектуры целевой платформы компиляции, к нему могут быть примененимы формальные методики глобального анализа программ (хотя трудоёмкость написания даже тривиального транслятора может оказаться выше). Например, для языков Scheme и Standard ML существуют развитые глобально-оптимизирующие компиляторы (вплоть до суперкомпиляторов), результат работы которых может уверенно конкурировать по скорости с языком низкого уровня Си и даже опережать последний (хотя ресурсоёмкость работы самих компиляторов оказывается значительно выше). Одна из самых быстрых СУБД — KDB — написана на языке К. Язык Scala (унаследовавший математику от ML) обеспечивает на платформе JVM более высокую скорость, чем «родной» для неё язык Java. С другой стороны, Forth имеет репутацию одного из самых нетребовательных к ресурсам языков (менее требователен, чем Си) и используется для разработки приложений реального времени под самые маломощные ЭВМ; кроме того, транслятор Форта является одним из наименее трудоёмких в реализации на ассемблере.

Заранее известный (неограниченный или, наоборот, чётко очерченный) предел роста сложности программных компонентов, систем и комплексов, которые можно выразить средствами этого языка с сохранением показателей качества. Языки, не имеющие математического обоснования (а именно такие наиболее часто применяются в мейнстриме: C++, Java, С#, Delphi и др.), на практике ограничивают реализуемую функциональность и/или снижают качество по мере усложнения системы, так как им присущи экспоненциальные кривые роста сложности как касательно работы одного отдельно взятого человека, так и касательно сложности управления проектом в целом. Прогнозируемая сложность системы приводит либо к поэтапной декомпозиции проекта на множество более мелких задач, каждая из которых решается соответствующим языком; либо к языково-ориентированному программированию для случая, когда адресуемой языком задачей является как раз описание семантик и/или символьные вычисления (Lisp, ML, Haskell, Рефал, Регулярные выражения). Языки с неограниченным пределом роста сложности программ нередко относят к метаязыкам (что в непосредственном толковании термина не верно, но практике сводимо, так как всякий мини­язык, выбранный для решения некоторой подзадачи в составе общей задачи, может быть представлен в виде синтаксического и семантического подмножества данного языка, не требуя трансляции).


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

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

Заключение

Выделим некоторую общую тенденцию в развитии языков программирования: языки развиваются в сторону все большей и большей абстракции. И это сопровождается падением эффективности. Но это стоит того: повышение уровня абстракции влечет за собой повышение уровня надежности программирования. С низкой эффективностью можно бороться путем создания более быстрых компьютеров. Если требования к памяти слишком высоки, можно увеличить ее объем. Это, конечно, требует времени и средств, но это решаемо. А вот с ошибками в программах можно бороться только одним способом: их надо исправлять. А еще лучше — не совершать. А еще лучше максимально затруднить их совершение. И именно на это направлены все исследования в области языков программирования. А с потерей эффективности придется смириться.

Целью данного обзора была попытка дать представление о всем многообразии существующих языков программирования. Среди программистов часто бытует мнение о всеобщей применимости того или иного языка (C, C++, Pascal и т.п.). Это мнение возникает по нескольким причинам: недостаток информации, привычка, инертность мышления. Настоящий профессионал должен постоянно стремиться повышать свои профессиональную квалификацию. А для этого нужно не бояться экспериментировать. Разумеется, прежде чем приниматься использовать новый язык, нужно внимательно изучить все его особенности, включая наличии эффективной реализации, возможности взаимодействия с существующими модулями и т.п., и только после этого принимать решение. Конечно, всегда есть риск пойти не тем путем, но не ошибается лишь тот, кто ничего не делает.

Часто проводятся дискуссии вида <язык A лучше, чем язык B>. Прочитав этот обзор, можно убедится в бессмысленности таких споров. Максимум, о чем может идти речь — это о преимуществах одного языка над другим при решении той или иной задачи в тех или иных условиях. Вот здесь действительно иногда есть о чем поспорить. И решение подчас отнюдь не очевидно.