Добавлен: 22.04.2023
Просмотров: 77
Скачиваний: 2
На данный момент повышение производительности систем не является настолько простой задачей. С одной стороны, с ростом частоты процессора и уменьшения размера транзисторов повышается и рассеиваемая процессором мощность — что требует дополнительных затрат на поддержание процессора в рабочем режиме. С другой стороны, если проблему охлаждения тем или иным образом можно решить, то проблему теоретического минимального размера транзистора решить не представляется возможным без фундаментального изменения технологии производства.
Таким образом, дальнейшая миниатюризация становится всё более трудоёмкой и дорогостоящей[8].
Эти причины и привели в 2000-х годах к популяризации многопроцессорных систем, а как следствие, и к обострению проблемы параллельного программирования. Важно заметить, что эта проблема на данный момент всё ещё не является решённой в полном смысле слова, так как причиной её появления служит сама архитектура современных машин.
В заключении хотелось бы попытаться предсказать, как будет выглядеть следующее поколение языков программирования — однако сделать точное предположение в такой области будет крайне затруднительно, так как уже сейчас ведутся работы в нескольких направлениях. Поэтому ограничимся лишь описанием наиболее важных проблем, которые возникнут перед авторами. На данный момент очевидно, что решение проблемы параллелизма вычислений на этапе программирования должно быть найдено. При поисках решения разработчикам придётся столкнуться не только с трудностями реализации таких средств на современных компьютерах, но и с тем, что сама природа человеческого мышления линейна — то есть сам программист не способен мыслить параллельно.
Необходимо также отметить, что решение проблемы абстрактности человеческого мышления в современных языках программирования является сдерживающим фактором для организации эффективных параллельных вычислений — так как не только человеческое мышление, но и сам инструментарий программиста во многом ориентирован на работу со строгой последовательностью действий, что усложняет разработку и отладку программ при работе с параллельными потоками вычислений. Вышесказанное приводит к мысли о том, что организации взаимодействия программиста и машины также потребует переработки. С самого зарождения синтаксис языков программирования эволюционировал по пути улучшения структурированности, читаемости и понятности программы для программиста. Однако, на данный момент улучшением синтаксиса добиться наглядности и удобства работы с параллельными программами пока не удаётся. Вероятно, решение будет найдено в уже существующих концепциях.
Так, например, ещё в 1974 году в Массачусетском технологическом институте был разработан MIT Static Dataflow Machine — аппаратная реализация машины с статической архитектурой потока данных.
В ней управление вычислениями проводилось при помощи самих данных, а не с помощью потока управления — то есть, была решена одна из основных проблем текущей архитектуры — наличие счётчика инструкций. Эта идея не получила развития в связи со сложностью реализации и программирования в 80-х годах и была постепенно забыта, однако с появлением графических ускорителей идея была вновь использована. Многие графические чипы последних лет используют в том или ином виде элементы архитектуры с потоком данных.
Другим направлением может стать разработка средств визуального программирования, которые уже применяются сегодня в некоторых специализированных областях программирования. Примерами успешных решений можно считать: LabView, Algorithm Builder и HiAsm — однако, каждый из этих инструментов сильно привязан к своему набору решаемых задач, что не позволяет говорить о необходимом уровне универсальности, сопоставимым, например с языком C.
Учитывая описанные выше проблемы, можно предположить, что будущее языков программирования будет связано с увеличением значимости средств автоматизации программирования. Такого рода инструментарий уже сейчас применяется в некоторых специализированных областях, так, например, при разработке интеллектуальных систем и систем принятия решений.
В дальнейшем такого рода технологии, вероятно, позволят переложить большую часть работы программиста на машину — что в свою очередь вновь повысит уровень абстракции, снижая эффективность и повышая качество программ.
Глава 2. Языки высокого уровня
2.1 Фотран
Фортран самый первый из языков высокого уровня (разработан Бэкусом в начале 1950-х годов) и широко распространенный язык, особенно среди пользователей, которые занимаются численным моделированием. Это объясняется несколькими причинами:
- существованием огромных фондов прикладных программ на Фортране, накопленных за эти годы, а также наличием огромного количества программистов, эффективно использующих этот язык;
- наличием эффективных трансляторов Фортрана на всех типах ЭВМ, причем версии для различных машин достаточно стандартизированы и перенос программ с машины на машину обычно не составляет больших трудностей;
- изначальной направленностью Фортрана на физико-математические и технические приложения; в частности, это проявилось в том, что в течение долгого времени он оставался единственным языком со встроенным комплексным типом переменных и большим набором встроенных функций для работы с такими переменными.
За прошедший период сформировалась новая методология и философия программирования. С начала 70-х годов Фортран подвергался заслуженной критике. В 1977 году был принят новый стандарт языка Фортран-77. На создание нового стандарта ушло много времени, но сейчас уже можно считать, что его разработка завершена и новый стандарт Фортран-90 начал входить в практику пользователей Фортрана. Только на машинах типа IBM PC существует несколько трансляторов например, Watfor, Lap-Fortran и т. д. Но наибольшее распространение на машинах этого типа получили различные версии транслятор Fortran-77. Выпущенный в 1990 году транслятор MS-Fortran 5.0 практически полностью соответствует стандартуFortran-90. Большинство крупных научно-технических прикладных программ написано на Фортране потому, что он обладает переносимостью и устойчивостью, а также благодаря наличию встроенных математических и тригонометрических функций. Дополнительной, неотъемлемой частью любой прикладной программы на языке Фортран является расширенная графическая библиотека, позволяющая использовать различные графические данные и изображения.
2.2 BASIC и Паскаль
Бейсик (BASIC - Beginner’s All-Purpose Symbolic Instruction Code – «универсальный симв олический к од инструкций для начинающих»). Прям ой п от ом ок Ф ортрана и д о сих п ор самый п опулярный язык пр ограммир ования для перс ональных к омпьютер ов. П оявился Бейсик в 1963 г оду (назвать автора был о бы трудн о, н о осн овная заслуга в ег о п оявлении нес омненн о принадлежит американцам Дж ону Кемени и Т омасу Курцу). Как и любые преимущества, пр ост ота Бейсика об орачивалась, ос обенн о в ранних версиях трудн остями структурир ования; кр оме т ог о, Бейсик не д опускал рекурсию – интересный прием, п озв оляющий с оставлять эффективные и в т о же время кор откие пр ограммы.
Разраб отаны м ощные к омпилят оры Бейсика, к от орые обеспечивают не тольк о б огатую лексику и выс ок ое быстр одействие, н о и в озм ожн ость структурн ог о пр ограммир ования. П о мнению нек от орых пр ограммист ов, наиб олее интересными версиями являются GWBASIC, Turbo-Basic и Quick Basic.
В св ое время п оявление Quick Basic ознамен овал о р ождение вт ор ог о пок оления систем пр ограммир ования на языке Бейсик. Он пред оставлял в озможн ость м одульн ог о и пр оцедурн ог о пр ограммир ования, с оздания библиотек, к омпиляции г от овых пр ограмм и пр очее, чт о вывел о ег о на ур овень таких классических язык ов пр ограммир ования, как Си, Паскаль, Ф ортран и др.
Б олее т ог о, в связи с отсутствием официальн ог о стандарта языка Бейсик, ег о реализация в виде Quick Basic стала фактическим стандарт ом. Безусловными лидерами среди различных версий Бейсика были Quick Basic 4.5 и PDS 7.1 фирмы Microsoft, п оявившиеся в к онце 80-х г од ов.
Язык пр ограммир ования Паскаль был разраб отан пр офесс ор ом кафедры вычислительн ой техники Швейцарск ог о Федеральн ог о института техн ологии Ник олас ом Вирт ом в 1968 г оду как альтернатива существующим и все усложняющимся языкам пр ограммир ования, таким, как PL/1, Algol, Fortran.
Интенсивн ое развитие Паскаля привел о к п оявлению уже в 1973 г оду его стандарта в виде пересм отренн ог о с о общения, а числ о транслят ор ов с этог о языка в 1979 г оду перевалил о за 80. В начале 80-х г од ов Паскаль еще более упр очил св ои п озиции с п оявлением транслят ор ов MS-Pascal и Turbo-Pascal для ПЭВМ. С эт ог о времени Паскаль стан овится одним из наиб олее важных и шир ок о исп ользуемых язык ов пр ограммир ования. Существенн о то, чт о язык давн о вышел за рамки академическ ог о и узк о пр офесси онального интереса и исп ользуется в б ольшинстве университет ов выс ок оразвитых стран не т ольк о как раб очий инструмент п ольз ователя. Важнейшей ос обенностью Паскаля является в опл ощенная идея структурн ог о пр ограммир ования. Друг ой существенн ой ос обенн остью является к онцепция структуры данных как одн ог о из фундаментальных п онятий.
Осн овные причины п опулярн ости Паскаля заключаются в следующем:
- пр ост ота языка п озв оляет быстр о ег о осв оить и с оздавать алг оритмически сл ожные пр ограммы
- развитые средства представления структур данных обеспечивают удобств о раб оты как с числ ов ой, так и с симв ольн ой и бит ов ой инф ормацией
- наличие специальных мет одик с оздания транслят ор ов с Паскаля упростил о их разраб отку и сп ос обств овал о шир ок ому распр остранению языка
- оптимизирующие св ойства транслят ор ов с Паскаля п озв оляют с оздавать эффективные пр ограммы. Эт о п ослужил о одн ой из причин исп ольз ования Паскаля в качестве языка системн ог о пр ограммир ования
- в языке Паскаль реализуются идеи структурн ог о пр ограммир ования, что делает пр ограмму наглядн ой и дает х ор ошие в озм ожн ости для разраб отки и отладки
2.3 Си и Си++
Сотрудник фирмы Bell Labs Денис Ритчи создал язык Си в 1972 году во время совместной работы с Кеном Томпсоном, как инструментальное средство для реализации операционной системы Unix, однако популярность этого языка быстро переросла рамки конкретной операционной системы и конкретных задач системного программирования. В настоящее время любая инструментальная и операционная система не может считаться полной если в ее состав не входит компилятор языка Си. Ритчи не выдумывал Си просто из головы – прообразом служил язык Би разработанный Томпсоном. Язык программирования Си был разработан как инструмент для программистов-практиков. В соответствии с этим главной целью его автора было создание удобного и полезного во всех отношениях языка.
Си является орудием системного программиста и позволяет глубоко влезать в самые тонкие механизмы обработки информации на ЭВМ. Хотя язык требует от программиста высокой дисциплины, он не строг в формальных претензиях и допускает краткие формулировки.
Си – современный язык. Он включает в себя те управляющие конструкции, которые рекомендованы теорией и практикой программирования. Его структура побуждает программиста использовать в своей работе нисходящее проектирование, структурное программирование и пошаговую разработку модулей.
Си – мощный и гибкий язык. Большая часть операционной системы Unix, компиляторы и интерпретаторы языков Фортран, Паскаль, Лисп, и Бейсик написаны именно с его помощью.
Си – удобный язык. Он достаточно структурирован, чтобы поддерживать хороший стиль программирования и вместе с тем не связан жесткими ограничениями. В некотором смысле язык Си – самый универсальный, т.к. кроме набора средств, присущих современным языкам программирования высокого уровня (структурность, модульность, определенные типы данных), в него включены средства для программирования практически на уровне ассемблера. Большой набор операторов и средств требуют от программиста осторожности, аккуратности и хорошего знания языка со всеми иго преимуществами и недостатками.
Язык C++ появился в начале 80-х годов. Созданный Бьерном Страуструпом с первоначальной целью избавить себя и своих друзей от программирования на ассемблере, Си или различных других языках высокого уровня.
По мнению автора языка, различие между идеологией Си и C++ заключается примерно в следующем: программа на Си отражает “способ мышления” процессора, а C++ - способ мышления программиста. Отвечая требованиям современного программирования, C++ делает акцент на разработке новых типов данных наиболее полно соответствующих концепциям выбранной области знаний и задачам приложения. Класс является ключевым понятием C++. Описание класса содержит описание данных, требующихся для представления объектов этого типа и набор операций для работы с подобными объектами.
В отличие от традиционных структур Си и Паскаля, членами класса являются не только данные, но и функции. Функции – члены класса имеют привилегированный доступ к данным внутри объектов этого класса и обеспечивают интерфейс между этими объектами и остальной программой. При дальнейшей работе совершенно не обязательно помнить о внутренней структуре класса и механизме работы встроенных функций. В этом смысле класс подобен электрическому прибору – мало кто знает о его устройстве, но все знают, как им пользоваться.