Разное

Преимущества машинно независимых языков программирования: Машинно – независимые языки — Информатика, информационные технологии

СРЕДСТВА
РЕСУРСНОЙ ПОДДЕРЖКИ.
 

Программное
обеспечение ЭВМ. Языки программирования

   Языки
программирования делятся на два класса —
МАШИННО-ЗАВИСИМЫЕ
и МАШИННО-НЕЗАВИСИМЫЕ.
Под машинно-зависимыми языками понимают
языки, алфавит, синтаксис и семантика
которых зависят от системы команд
процессора конкретно используемой ЭВМ.
Машинно-независимые языки — языки свободные
от такой зависимости.

   Типичным
представителем машинно-зависимого языка
является язык АССЕМБЛЕРА. Это язык, в
котором набору команд процессора
поставлены в соответствие мнемонические
обозначения команд. Например, на ЭВМ фирмы
DEC команда сложения содержимого двух
регистров R1 и R2 в двоичном коде имеет вид:
0110010001010010, а на языке ассемблера  
ADD R1,R2 (СЛОЖИТЬ R1,R2). Таким образом, язык
ассемблера освобождает пользователя от
записи программы в двоичных кодах.
Собственно программа АССЕМБЛЕР
представляет собой компилятор, который
переводит текст программы в мнемокодах в
текст программы в двоичных кодах команд
процессора. Отсюда и следует зависимость
языка Ассемблера от системы команд
процессора конкретной ЭВМ.

   В
настоящее время используется язык МАКРОАССЕМБЛЕРА,
являющийся расширением языка Ассемблера. В
этом языке можно назначить обозначение
последовательности операторов (МАКРООПРЕДЕЛЕНИЕ).
Это обозначение называется МАКРОСОМ. В
исходном тексте программы можно указывать
только макрос, т.к. при переводе Ассемблером
текста макрос заменяется
последовательностью операторов из
макроопределения. Язык Макроассемблера
упрощает запись программы, если в программе
много одинаковых фрагментов.

   Машинно-независимые
языки программирования по назначению и
возможностям можно представить следующими
группами: УНИВЕРСАЛЬНЫЕ, ПРОЦЕДУРНО-ОРИЕНТИРОВАННЫЕ,
ПРОБЛЕМНО-ОРИЕНТИРОВАННЫЕ и ОБЪЕКТНО-ОРИЕНТИРОВАННЫЕ.

   Под
универсальными языками программирования в
настоящее время принято понимать языки
предназначенные для решения самого
широкого класса задач. Типичным
представителем этой группы языков является
язык C (Си). В языке C сочетаются достоинства
современных высокоуровневых языков с
возможностями языка Ассемблера.

   Процедурно-ориентированные
языки предполагают использование
последовательности операторов, задающей те
или иные действия. Эта последовательность
оформляется в виде законченного текста -
процедуры (или как теперь часто говорят
модуля). К процедурно-ориентированным
языкам относятся BASIC, PASCAL, FORTRAN, MODULA и другие (кстати,
язык C тоже имеет все черты процедурно-ориентированного
языка).

   Проблемно-ориентированные
языки, как следует из названия
предназначены для снижения трудозатрат на
программирование задач какого-либо
определенного класса. Например, для
коммерческих задач — COBOL, для разработки и
реализации информационных систем — целый
спектр языков xBASE, для задач искусственного
интеллекта — PROLOG и другие. Следует отметить,
что одна и та же программа может быть написана
на языках разных групп, но на
соответствующем проблемно-ориентированном
языке текст программы будет записан
наиболее кратко.

   В
объектно-ориентированных языках первичным
является не отношение, а ОБЪЕКТ. Объект
объединяет структуру данных и доступные
только ему механизмы их изменения. Типичным
представителем языка такого тип является
язык C++.

       
ОБ ЭФФЕКТИВНОСТИ ТРАНСЛЯЦИИ.

   Любой
транслятор (компилятор или интерпретатор)
является автоматом перевода текста на
некотором языке в соответствующую
последовательность команд процессора ЭВМ.
От длины и структуры этой
последовательности существенно зависит
скорость выполнения программы
пользователя. Например, программу
написанную на каком-либо языке
программирования можно перевести на язык
команд процессора двумя различными
компиляторами К1 и К2. Более эффективным
следует считать тот компилятор, после
обработки которым исходной программы,
последняя выполняется быстрее.

   Эффективность
транслятора определяется следующим образом.
Исходный текст программы пользователя
компилируется и определяется длина
программы (объем занимаемой памяти) в
командах процессора (на рисунке M). Точно
такую же      программу
в командах процессора составляет опытный
профессионал-программист. Длина этой
программы на рисунке обозначена
m. Эффективность транслятора определяется
коэффициентом трансляции, который
вычисляется как k=M/m. Очевидно, что чем
больше коэффициент, тем менее эффективен
транслятор. У современных компиляторов
коэффициент трансляции лежит в пределах от
1,5 до 2.

 
      


    


Проверьте усвоение 
Предыдущий раздел  Следующий раздел 
Оглавление


 


Машинно – независимые языки — МегаЛекции


 

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

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

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

 

Проблемно – ориентированные языки

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

Проблемных языков очень много, например:

Фортран, Алгол – языки, созданные для решения математических задач;

Simula , Слэнг — для моделирования;

Лисп, Снобол – для работы со списочными структурами.

Об этих языках я расскажу дальше.

 

Универсальные языки

 

Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т.д. Первый универсальный язык был разработан фирмой IBM, ставший в последовательности языков Пл/1. Второй по мощности универсальный язык называется Алгол-68. Он позволяет работать с символами, разрядами, числами с фиксированной и плавающей запятой. Пл/1 имеет развитую систему операторов для управления форматами, для работы с полями переменной длины, с данными организованными в сложные структуры, и для эффективного использования каналов связи. Язык учитывает включенные во многие машины возможности прерывания и имеет соответствующие операторы. Предусмотрена возможность параллельного выполнение участков программ.


Программы в Пл/1 компилируются с помощью автоматических процедур. Язык использует многие свойства Фортрана, Алгола, Кобола. Однако он допускает не только динамическое, но и управляемое и статистическое распределения памяти.

 

Диалоговые языки

 

Появление новых технических возможностей поставило задачу перед системными программистами – создать программные средства, обеспечивающие оперативное взаимодействие человека с ЭВМ их назвали диалоговыми языками.

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

Необходимость обеспечения оперативного взаимодействия с пользователем потребовала сохранения в памяти ЭВМ копии исходной программы даже после получения объектной программы в машинных кодах. При внесении изменений в программу с использованием диалогового языка система программирования с помощью специальных таблиц устанавливает взаимосвязь структур исходной и объектной программ. Это позволяет осуществить требуемые редакционные изменения в объектной программе.

 Одним из примеров диалоговых языков является Бэйсик.

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

Непроцедурные языки

 

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

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

Табличные методы легко осваиваются специалистами любых профессий.

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

 

 

РАЗВИТИЕ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

Ассемблер

Язык Ассемблера – это символическое представление машинного языка. Он облегчает процесс программирования по сравнению с программированием в машинных кодах.

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

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

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

Умея разобраться в распечатке языка ассемблера, дает возможность облегчить поиск ошибок в программах, т.к. некоторые языки являются компиляторами (см. п. 1.2.).

 

Лисп

Один из самых старых языков программирования Фортран был создан в 50-х гг. нашего века. Фортран и подобные ему языки программирования (Алгол, ПЛ/1) предназначались для решения вычислительных задач, возникающих в математике, физике, инженерных расчетах, экономике и т.п. Эти языки в основном работают с числами.

Второй старейший язык программирования Лисп (List Information Symbol Processing), Дж. Маккарти в 1962 г. скорее для работы со строками символов, нежели для работы с числами. Это особое предназначение Лиспа открыло для программистов новую область деятельности, известную ныне, как «искусственный интеллект». В настоящее время Лисп успешно применяется в экспертных системах, системах аналитических вычислений и т.п.

Обширность области возможных приложений Лиспа вызвала появление множества различных диалектов Лиспа. Это легко объяснимо: применение Лиспа для понимания естественного языка требует определенного набора базисных функций, отличных, например, от используемого в задачах медицинской диагностики.

Существование множества различных диалектов Лиспа привело к созданию в начале 80-х гг. Common LISP Комитета, который должен был выбрать наиболее подходящий диалект Лиспа и предложить его в качестве основного. Этот диалект, выбранный Комитетом в 1985г., получил название Common LISP . В дальнейшем он был принят в университетах США, а также многими разработчиками систем искусственного интеллекта, в качестве основного диалекта языка Лисп.

Язык программирования Лисп существенно отличается от других языков программирования, таких, как Паскаль, Си и т.п. Работа с символами и работа с числами как с основными элементами требует разных способов мышления.

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

Профессор Массачусетского технологического института Дж. Самман заметил, что математическая ясность и предельная четкость Лиспа – это еще не все. Главное – Лисп позволяет сформулировать и запомнить «идиомы», столь характерные для проектов по искусственному интеллекту.

 

Фортран

Одним из первых и наиболее удачных компиляторов стал язык Фортран, разработанный фирмой IBM. Профессор Дж. Букс и группа американских специалистов в области программирования в 1954 году опубликовало первое сообщение о языке. Дословно, название языка FORmulae TRANslation –преобразование формул.

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

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

Модификация языка Фортран, появившиеся в 1958 году, получила название Фортран II и содержала понятие подпрограммы и общих переменных для обеспечения связи между сегментами.

К 1962 году относится появление языка, известного под именем Фортран IV и ставшего наиболее употребительным в настоящее время. К этому же времени относится и начало деятельности комиссии при Американской Ассоциации Стандартов ( ASA ), которая выработала к 1966 году два стандарта – языки Фортран и базисный (основной) Фортран ( Basic FORTRAN ). Эти языки приблизительно соответствуют модификациям IV и II, однако базисный Фортран является подмножеством Фортрана, в то время, как Фортран II таковым для Фортрана IV не является. Язык Фортран до сих пор продолжает развиваться и совершенствоваться, оказывая влияние на создание и развитие других языков. Например, Фортран заложен в основу Basic – диалогового языка, очень популярного для решения небольших задач, превосходного языка для обучения навыкам использования алгоритмических языков в практике программирования. Разработан этот язык – Beginner’s All –purpose Symbolic Instruction Code – группой сотрудников Вычислительного центра Дармутского колледжа, штат Нью-Хемпшир созданный в 19…. . Но это уже следующий язык.

 

Бейсик

Как знаменитые гамбургеры, бейсбол и баскетбол, Бейсик — это продукт Новой Англии. Как я говорил, созданный в 1964г., как язык обучения программированию. Бейсик является общепринятым акронимом от»Beginner’s All-purpose Symbolic Insruction Code» (BASIC)Многоцелевой Символический Обучающий Код для Начинающих».

Вскоре как обучаемые, так и авторы программ обнаружили, что Бейсик может делать практически все то, что делает скучный неуклюжий Фортран. А так как Бейсику было легко обучиться и легко с ним работать, программы на нем писались обычно быстрее, чем на Фортране. Бейсик был также доступен на персональных компьютерах, обычно он встроен в ПЗУ. Так Бейсик завоевал популярность. Интересно, что спустя 20 лет после изобретения Бейсика, он и сегодня самый простой для освоения из десятков языков общецелевого программирования, имеющихся в распоряжении любителей программирования. Более того, он прекрасно справляется с работой.

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

Несмотря на отдельные недостатки Бейсика, никто не будет отрицать, что Кемени и Куртс достигли основной цели: сделать программирование доступнее для большего числа людей.

Исторически Бейсик обычно реализовался как интерпретатор (знакомым изомером является сам интерпретаторный Бейсик). Причинами перехода от любительского уровня к профессиональному являются многочисленные расширения классической версии языка: возможность отключения нумерации строк, многостроковые структурированные программные конструкции, структуры типа «запись», поименованные подпрограммы с параметрами и локальные переменные.

Более того, с появлением транслятора QuickBasic фирмы Microsoft разработчики получили возможность строить на Бейсике приложения из раздельно откомпилированных модулей, некоторые из которых могут быть написаны на других языках. Теперь, как и в случае других ведущих языков программирования, разработчик имеет выбор из нескольких промышленных библиотек подпрограмм, которые содержат готовые решения для распространенных задач программирования.

 

Рефал

Несомненно надо рассказать и о некоторых языках программирования созданных у нас на родине. Один из таких языков является Рефал, разработанный у нас в России (СССР), в 1966г. ИПМ АН СССР. Этот язык прост и удобен для описания манипуляций над произвольными текстовыми объектами.

Рефал широко применяется при разработке трансляторов с алгоритмических языков как универсальных и проблемно – ориентированных, так и автокодов. Кроме использования в задачах трансляции, Рефал имеет такие важные сферы применения, как машинное выполнение громоздких аналитических выкладок в теоретической физике и прикладной математике; проектирование «умных» информационных систем, осуществляющих нетривиальную логическую обработку информации; машинное доказательство теорем; моделирование целенаправленного поведения; разработка диалоговых обучающих систем; исследования в области искусственного интеллекта и т.п.

Программирование на Рефале имеет специфику, связанную, прежде всего, с тем, что Рефал является языком функционального типа в отличие от обычных операторных языков типа Алгол, Фортран и т.д.. Если программа на операторных языках – ни что иное, как совокупность приказов-операторов, то программа на Рефале представляет собой по существу описание связей и отношений между определенными понятиями.

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

Определенной спецификой обладают и переменные типа «выражения» – имеется в виду их способность удлиняться при отождествлении. Правильное использование переменных этого типа также позволяет значительно повысить эффективность Рефал – программы.

 

3.6.  Пролог и Пролог ++

 

Пролог — это язык, предназначенный для поиска решений. Это декларативный язык, то есть формальная постановка задачи может быть использована для ее решения. Пролог определяет логические отношения в задаче, как отличные от пошагового решения этой задачи.

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

 Все свойства языка по-прежнему доступны программистам. Следовательно, Пролог ++ можно отнести к группе гибридных языков, представителями которой считаются Object Pascal и C++. Расширение Пролог ++ поддерживает все свойства, присущие обычно объектно-ориентированным языкам: концепции объектов и классов, единичное и многократное наследование, разбиение на подклассы и передачу сообщений. Поддерживаются также некоторые усовершенствованные свойства, существующие в таких языках, как C++ и Smalltalk, включая общие и частные методы.

Интересным свойством является поддержка в языке программирования с управлением данными. Эта техника, которая может быть еще названа программированием, «управляемым событиями», используется в большинстве языков объектно-ориентированного программирования, особенно в тех, которые разработаны для машин с интерфейсом, управляемым «мышью».

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

 Сам язык основан на концепции передачи сообщений. Программа на Прологе ++ строится вокруг множества объектов Пролога ++, которые обмениваются сообщениями. В этом смысле Пролог ++ ближе к чистому объектно-ориентированному языку, такому, как Smalltalk, чем C++ или Object Pascal. Определения объектов строятся исходя из вызовов

 Open_Object [имя_объекта] и Close_Object [имя_объекта], а методы определяются практически так же, как в других объектно-ориентированных языках. Для задания наследования можно явным образом указать, какой метод какого объекта должен наследоваться, что является необходимым для многократного наследования.

 

Лекс

 

Лекс – генератор программ лексического анализа. Лексический анализ – это распознавание лексем во входном потоке символов. Предположим, что задано некоторое конечное множество слов (лексем) в некотором языке и некоторое входное слово. Необходимо установить, какой элемент множества (если он существует) совпадает с данным входным словом. Обычно лексический анализ выполняется так называемым лексическим анализатором. Лексический анализатор – это программа. Лексический анализ применяется во многих случаях, например, для построения пакетного редактора или в качестве распознавателя директив в диалоговой программе и т.д. Однако, наиболее важное применение лексического анализатора – это использование его в компиляторе. Здесь лексический анализатор выполняет функцию программы ввода данных.

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

Лексический анализатор распознает тип каждой лексемы и соответствующим образом помечает ее. Например, при компиляции Си-программы могут быть выделены следующие типы лексем: число, идентификатор, оператор, ограничитель и т.д.

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

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

 

C и

 

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

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

 

Особенности языка Си

Язык Си имеет свои существенные особенности, давайте перечислим некоторые из них:

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

 

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

 

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

 

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

 

3.8.2. Недостатки языка Си:

 

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

 

Язык Си предъявляет достаточно высокие требования к квалификации использующего его программиста. При изучении Си желательно иметь представление о структуре и работе компьютера. Большую помощь и более глубокое понимание идей Си, как языка системного программирования, обеспечат хотя бы минимальное знание языка ассемблер. Уровень старшинства некоторых операторов не является общепринятым, некоторые синтаксические конструкции могли бы быть лучше. Тем не менее, как оказалось Си – чрезвычайно эффективный и выразительный язык, пригодный для широкого класса задач.

 

3.9. Си++

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

Название Си++ — изобретение лета 1983-его. Более ранние версии языка использовались начиная с 1980-ого и были известны как «Cи с Классами«. Первоначально язык был придуман потому, что автор хотел написать событийно управляемые модели для чего был бы идеален Simula67, если не принимать во внимание эффективность. «Cи с Классами» использовался для крупных проектов моделирования, в которых строго тестировались возможности написания программ, требующих (только) минимального пространства памяти и времени на выполнение. В «Cи с Классами» не хватало перегрузки операций, ссылок, виртуальных функций и многих деталей. Си++ был впервые введен за пределами исследовательской группы автора в июле 1983-го. Однако тогда многие особенности Си++ были еще не придуманы.

Название Си++ выдумал Рик Масситти. Название указывает на эволюционную природу перехода к нему от . «++» — это операция приращения в . Чуть более короткое имя + является синтаксической ошибкой, кроме того, оно уже было использовано как имя совсем другого языка. Знатоки семантики находят, что Си++ хуже, чем ++. Названия D язык не получил, поскольку он является расширением и в нем не делается попыток исцелиться от проблем путем выбрасывания различных особенностей.

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

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

 

В качестве базового языка для Си++ был выбран , потому что он:

· многоцелевой, лаконичный и относительно низкого уровня:

· отвечает большинству задач системного программирования:

· идет везде и на всем:

· пригоден в среде программирования UNIX.

В есть свои сложности, но в наспех спроектированном языке тоже были бы свои, а сложности нам известны. Самое главное, работа с позволила «Cи с Классами» быть полезным (правда, неудобным) инструментом в ходе первых месяцев раздумий о добавлении к Simula-подобных классов.

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

 

· есть миллионы строк на , которые могли бы принести пользу в Си++ при условии, что их не нужно было бы полностью переписывать с на Си++;

· есть сотни тысяч строк библиотечных функций и сервисных программ, написанных на которые можно было бы использовать из или на Си++ при условии, что Си++ полностью совместим с по загрузке и синтаксически очень похож на ;

· есть десятки тысяч программистов, которые знают , и которым, поэтому, нужно только научиться использовать новые особенности Си++, а не заново изучать его основы;

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

 

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

 Си++ был развит из языка программирования и за очень немногими исключениями сохраняет как подмножество. Базовый язык, подмножество Си++, спроектирован так, что имеется очень близкое соответствие между его типами, операциями и операторами и компьютерными объектами, с которыми непосредственно приходится иметь дело: числами, символами и адресами. За исключением операций свободной памяти new и delete, отдельные выражения и операторы Си++ обычно не нуждаются в скрытой поддержке во время выполнения или подпрограммах.

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

Особое внимание, уделенное при разработке Си++ структуре, отразилось на возрастании масштаба программ, написанных со времени разработки . Маленькую программу (меньше 1000 строк) вы можете заставить работать с помощью грубой силы, даже нарушая все правила хорошего стиля. Для программ больших размеров это не совсем так. Если программа в 10 000 строк имеет плохую структуру, то вы обнаружите, что новые ошибки появляются так же быстро, как удаляются старые. Си++ был разработан так, чтобы дать возможность разумным образом структурировать большие программы таким образом, чтобы для одного человека не было непомерным справляться с программами в 25 000 строк. Существуют программы гораздо больших размеров, однако те, которые работают, в целом, как оказывается, состоят из большого числа почти независимых частей, размер каждой из которых намного ниже указанных пределов.

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

 

3.9.1. Замечание по проекту языка Си++

 

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

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

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

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

ЗАКЛЮЧЕНИЕ.



Рекомендуемые страницы:

Воспользуйтесь поиском по сайту:

7.14. Какие у машинных языков достоинства и недостатки? 7.15. Что такое язык ассемблера? 7.16. В чем преимущества алгоритмических языков перед машинными?

7.14. Какие у машинных языков достоинства и недостатки?

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

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

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

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

7.15. Что такое язык ассемблера?


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

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

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

7.16. В чем преимущества алгоритмических языков перед машинными?

Основные преимущества таковы:

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


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

Машинно-зависимый язык — Большая Энциклопедия Нефти и Газа, статья, страница 1

Машинно-зависимый язык

Cтраница 1

Машинно-зависимые языки ориентированы на конкретную ЭВМ, имеют непосредственный доступ к аппаратным средствам ЭВМ и чаще всего используются для составления программ, входящих в состав операционной системы.
 [1]

Машинно-зависимые языки, в свою очередь, делят на машинные и машинно-ориентированные.
 [2]

Различают машинно-независимые и машинно-зависимые языки высокого уровня. Вторые пригодны при применении определенных серий МПК. Для программирования устройств, построенных с использованием комплекта серии КР580, разработан язык высокого уровня PL M-80, относящийся к классу машинно-зависимых языков высокого уровня.
 [3]

Класс машинно-зависимых языков представлен ассемблером. Язык ассемблера делает доступными все программно-управляемые компоненты ПЭВМ. Поэтому он применяется для написания программ, явно использующих специфику конкретной аппаратуры. Ассемблер — это наиболее трудоемкий язык программирования, и из-за его низкого уровня не удается построить средства отладки, которые существенно снизили бы эту трудоемкость.
 [4]

К машинно-зависимым языкам относят машинный и машинно-ориентированный языки. Машинный язык в качестве символов использует коды представления информации в ЭВМ.
 [5]

В группу машинно-зависимых языков программирования входят машинные и машинно-ориентированные языки.
 [6]

Язык ассемблера является машинно-зависимым языком. Это значит, что он отражает особенности архитектуры конкретного типа микрокомпьютеров. Программа, написанная на языке ассемблера для одного типа микрокомпьютеров, как правило, непригодна для другого, если оба типа не совместимы по своей архитектуре. По этой причине глубокое понимание языка ассемблера требует предварительного детального знакомства с архитектурой соответствующего микрокомпьютера. Универсального языка ассемблера, подобного БЕЙСИКу, не существует. Рассматриваемый здесь язык совпадает с подробно изложенным в [13] языком ассемблера, используемым в мини-компьютерах СМ-3 и СМ-4, совместимых по архитектуре с ДВК.
 [7]

Причем не хотелось бы как употреблять машинно-ориентированный или машинно-зависимый язык, так и описывать программы для машины в абстрактных понятиях, оставляющих открытыми вопросы представления. В попытках найти компромисс между этими крайними соображениями уже был создан язык Паскаль, и десять лет работы с ним [1.3] привели нас к языку Модула-2. В нем сохраняются основные понятия Паскаля и добавляются некоторые улучшения и расширения. Язык Модула-2 уже был успешно реализован на нескольких машинах, и это подтвердило достаточную близость его понятий к реальным машинам и возможность легкого объяснения как самих понятий, так и их представления. Язык достаточно близок и к другим языкам, следовательно, уроки, из него извлеченные, применимы и к ним.
 [8]

В отличие от АЛГОЛа ФОРТРАН содержит элементы, свойственные машинно-зависимым языкам. В частности, это проявляется в том, что программа записывается на специальных бланках со строгой фиксацией расположения отдельных операторов, а также соблюдением их стандартного расположения на перфокартах.
 [9]

Фортран в отличие от Алгола содержит элементы, свойственные машинно-зависимым языкам. В частности, это проявляется в том, что программа записывается на специальных бланках со строгой фиксацией расположения отдельных операторов, а также в стандартном расположении их на перфокартах. Подробнее программирование на Фортране изложено в гл.
 [10]

Фортран в отличие от Алгола содержит элементы, свойственные машинно-зависимым языкам. В частности, это проявляется в том, что программа записывается на специальных бланках со строгой фиксацией расположения отдельных операторов, а также в стандартном расположении их на перфокартах. Подробнее программирование на Фортране изложено в гл.
 [11]

Следует, однако, отметить, что каждый язык Ассемблера является машинно-зависимым языком и отражает аппаратурные особенности ( в частности, состав программно-доступных регистров) той микроЭВМ, для которой он создан. Поэтому программа на этом языке, подготовленная для одного типа микропроцессора, не может быть использована в ЭВМ с другой системой команд. Кроме того, программирование на Ассемблере представляет собой трудоемкую задачу.
 [12]

Автокоды, являясь машинно-ориентированными языками программирования, вместе с машинными языками образуют группу машинно-зависимых языков, поскольку в их основе лежит система счисления определенной ЦВМ.
 [13]

При решении задач системного программирования ( разработка системного математического обеспечения ЭВМ) предпочтение следует отдать машинно-зависимым языкам, в частности макроязыку, поскольку только в этом случае можно максимально использовать все возможности вычислительной машины.
 [14]

При этом эффективность программы, для составления которых используются машинно-независимые языки, обычно ниже, чем в случае использования машинно-зависимых языков программирования.
 [15]

Страницы:  

   1

   2




СРЕДСТВА
РЕСУРСНОЙ ПОДДЕРЖКИ.
 

Программное
обеспечение ЭВМ. Языки программирования

   Языки
программирования делятся на два класса —
МАШИННО-ЗАВИСИМЫЕ
и МАШИННО-НЕЗАВИСИМЫЕ.
Под машинно-зависимыми языками понимают
языки, алфавит, синтаксис и семантика
которых зависят от системы команд
процессора конкретно используемой ЭВМ.
Машинно-независимые языки — языки свободные
от такой зависимости.

   Типичным
представителем машинно-зависимого языка
является язык АССЕМБЛЕРА. Это язык, в
котором набору команд процессора
поставлены в соответствие мнемонические
обозначения команд. Например, на ЭВМ фирмы
DEC команда сложения содержимого двух
регистров R1 и R2 в двоичном коде имеет вид:
0110010001010010, а на языке ассемблера  
ADD R1,R2 (СЛОЖИТЬ R1,R2). Таким образом, язык
ассемблера освобождает пользователя от
записи программы в двоичных кодах.
Собственно программа АССЕМБЛЕР
представляет собой компилятор, который
переводит текст программы в мнемокодах в
текст программы в двоичных кодах команд
процессора. Отсюда и следует зависимость
языка Ассемблера от системы команд
процессора конкретной ЭВМ.

   В
настоящее время используется язык МАКРОАССЕМБЛЕРА,
являющийся расширением языка Ассемблера. В
этом языке можно назначить обозначение
последовательности операторов (МАКРООПРЕДЕЛЕНИЕ).
Это обозначение называется МАКРОСОМ. В
исходном тексте программы можно указывать
только макрос, т.к. при переводе Ассемблером
текста макрос заменяется
последовательностью операторов из
макроопределения. Язык Макроассемблера
упрощает запись программы, если в программе
много одинаковых фрагментов.

   Машинно-независимые
языки программирования по назначению и
возможностям можно представить следующими
группами: УНИВЕРСАЛЬНЫЕ, ПРОЦЕДУРНО-ОРИЕНТИРОВАННЫЕ,
ПРОБЛЕМНО-ОРИЕНТИРОВАННЫЕ и ОБЪЕКТНО-ОРИЕНТИРОВАННЫЕ.

   Под
универсальными языками программирования в
настоящее время принято понимать языки
предназначенные для решения самого
широкого класса задач. Типичным
представителем этой группы языков является
язык C (Си). В языке C сочетаются достоинства
современных высокоуровневых языков с
возможностями языка Ассемблера.

   Процедурно-ориентированные
языки предполагают использование
последовательности операторов, задающей те
или иные действия. Эта последовательность
оформляется в виде законченного текста -
процедуры (или как теперь часто говорят
модуля). К процедурно-ориентированным
языкам относятся BASIC, PASCAL, FORTRAN, MODULA и другие (кстати,
язык C тоже имеет все черты процедурно-ориентированного
языка).

   Проблемно-ориентированные
языки, как следует из названия
предназначены для снижения трудозатрат на
программирование задач какого-либо
определенного класса. Например, для
коммерческих задач — COBOL, для разработки и
реализации информационных систем — целый
спектр языков xBASE, для задач искусственного
интеллекта — PROLOG и другие. Следует отметить,
что одна и та же программа может быть написана
на языках разных групп, но на
соответствующем проблемно-ориентированном
языке текст программы будет записан
наиболее кратко.

   В
объектно-ориентированных языках первичным
является не отношение, а ОБЪЕКТ. Объект
объединяет структуру данных и доступные
только ему механизмы их изменения. Типичным
представителем языка такого тип является
язык C++.

       
ОБ ЭФФЕКТИВНОСТИ ТРАНСЛЯЦИИ.

   Любой
транслятор (компилятор или интерпретатор)
является автоматом перевода текста на
некотором языке в соответствующую
последовательность команд процессора ЭВМ.
От длины и структуры этой
последовательности существенно зависит
скорость выполнения программы
пользователя. Например, программу
написанную на каком-либо языке
программирования можно перевести на язык
команд процессора двумя различными
компиляторами К1 и К2. Более эффективным
следует считать тот компилятор, после
обработки которым исходной программы,
последняя выполняется быстрее.

   Эффективность
транслятора определяется следующим образом.
Исходный текст программы пользователя
компилируется и определяется длина
программы (объем занимаемой памяти) в
командах процессора (на рисунке M). Точно
такую же      программу
в командах процессора составляет опытный
профессионал-программист. Длина этой
программы на рисунке обозначена
m. Эффективность транслятора определяется
коэффициентом трансляции, который
вычисляется как k=M/m. Очевидно, что чем
больше коэффициент, тем менее эффективен
транслятор. У современных компиляторов
коэффициент трансляции лежит в пределах от
1,5 до 2.

        

    


Машинно-зависимый язык — Большая Энциклопедия Нефти и Газа, статья, страница 2

Машинно-зависимый язык

Cтраница 2

I и II используют только с конкретными типами ЦВМ, и поэтому их называют машинно-зависимыми или машинно-ориентированными. Машинно-зависимые языки громоздки, состоят из множества мелких операций, трудны для чтения и понимания. Программы на этих языках обычно хорошо понятны только разработчику. Эти программы нужно заново составлять при переходе на другой тип ЦВМ.
 [17]

В структуре языка Ассемблера используются машинные команды, мнемокоды и макрокоманды. Машинно-зависимые языки, в частности язык Ассемблера, используются в основном в качестве языков системного программирования. Они позволяют получать высококачественные по быстродействию и используемой памяти программы. Однако использование Их требует досконального знания вычислительной машины.
 [19]

В структуре языка Ассемблера используются машинные команды, мнемокоды и макрокоманды. Машинно-зависимые языки, в частности язык Ассемблера, используются в основном в качестве языков системного программирования. Они позволяют получать высококачественные по быстродействию и используемой памяти программы. Однако использование их требует досконального знания вычислительной машины. Процедурно-ориентированные языки программирования относятся к машинно-независимым. Они являются основными языками описания алгоритмов и имеются в математическом обеспечении по существу всех современных вычислительных машин. Операционная система ЕС ЭВМ позволяет использовать при программировании такие языки, как Алгол, Фортран, Кобол и ПЛ / 1, относящиеся к этой группе. Будучи почти независимыми от конкретной вычислительной машины, они приближаются по синтаксису к естественным языкам.
 [21]

Для чего вам может понадобиться писать программу на машинно-независимом языке вместо того, чтобы писать ее на машинно-зависимом. Почему машинно-зависимый язык может оказаться более подходящим для написания определенных типов программ.
 [22]

Почему машинно-зависимый язык может оказаться предпочтительней для написания программ определенного типа.
 [23]

Для написания программ используют языки низкого и высокого уровней. Языки низкого уровня — машинно-зависимые языки, так как при программировании любого класса задач на этих языках непосредственно учитываются особенности построения и функционирования ЭВМ, на которой будет решаться данная задача. В отличие от машинного языка языки низкого уровня называют машинно-ориентированными языками. Преимуществом использования этих языков является то, что по сравнению с программами на машинном языке программы на машинно-ориентированном языке получаются более короткие. Примером широко используемого машинно-ориентированного языка является язык АССЕМБЛЕР.
 [24]

Различают машинно-независимые и машинно-зависимые языки высокого уровня. Вторые пригодны при применении определенных серий МПК. Для программирования устройств, построенных с использованием комплекта серии КР580, разработан язык высокого уровня PL M-80, относящийся к классу машинно-зависимых языков высокого уровня.
 [25]

Кроме классификации команд, основанной на понятии формата ( RR, RX, RS, SS, SI), существует классификация команд по содержательным признакам. Так, имеется группа команд, оперирующих с целыми числовыми значениями, представленными в двоичном формате с фиксированной точкой, группа команд для выполнения действий над целыми числовыми значениями, представленными в упакованном десятичном формате, группа команд,

9.2. Какие у машинных языков достоинства и недостатки?

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

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

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

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

9.3. В чем преимущества алгоритмических языков перед машинными?

Основные преимущества
таковы:

  • алфавит
    алгоритмического языка значительно
    шире алфавита машинного языка,
    что существенно повышает наглядность
    текста программы;

  • набор операций,
    допустимых для использования,
    не зависит от набора машинных операций,
    а выбирается из соображений удобства
    формулирования алгоритмов решения
    задач определенного класса;

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

  • требуемые операции
    задаются с помощью общепринятых
    математических обозначений;

  • данным в
    алгоритмических языках присваиваются
    индивидуальные имена,
    выбираемые программистом;

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

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

9.4. Какие компоненты образуют алгоритмический язык?

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

Алгоритмический
язык (как и любой другой язык) образуют
три его составляющие:
алфавит,
  синтаксис   и   семантика.

Алфавит — это
фиксированный для данного языка набор
основных символов,

т.е. «букв алфавита», из которых
должен состоять любой текст на этом
языке — никакие другие символы в тексте
не допускаются.

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

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

Императивное программирование: преимущества и недостатки парадигмы

Императивное программирование (от латинского imperare = команда) — старейшая парадигма программирования. Программа, основанная на этой парадигме, состоит из четко определенной последовательности инструкций для компьютера.

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

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

Это самые известные императивные языки программирования:

  • Fortran
  • Java
  • Pascal
  • ALGOL
  • C
  • C #
  • C ++
  • Ассемблер
  • BASIC
  • COBOL
  • Python
  • COBOL

  • Ruby

Различные императивные языки программирования, в свою очередь, могут быть назначены еще трем подчиненным стилям программирования — структурному, процедурному и модульному.

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

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

.

Декларативное программирование: преимущества и недостатки

В наши дни стиль декларативного программирования используется во множестве случаев, даже если не в чистом виде. Однако этот метод подходит не для всех случаев.

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

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

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

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

.

Что такое компьютерный язык | Типы Компьютерный язык

Введение :

Язык является основным средством связи между компьютерными системами, и наиболее распространенными являются языки программирования. Как мы знаем, компьютер понимает только двоичные числа, то есть 0 и 1, для выполнения различных операций, но эти языки разработаны для различных типов работы на компьютере. Язык состоит из всех инструкций по отправке запроса в систему для обработки задачи.Начиная с первого и теперь четвертого поколений компьютеров, для связи с компьютером использовалось несколько языков программирования. Здесь мы подробно рассмотрим компьютерный язык и его типы.

Описание компьютерного языка :

Компьютерный язык включает в себя различные языки, которые используются для связи с компьютером. Некоторые из языков, например язык программирования, который представляет собой набор кодов или инструкций, используемых для связи с машиной.Машинный код также считается компьютерным языком, который можно использовать для программирования. А также HTML, который является компьютерным языком или языком разметки, но не языком программирования. Точно так же существуют разные типы языков, разработанные для различных типов работы, выполняемой при взаимодействии с машиной. Но все доступные сейчас языки подразделяются на два основных типа языков, включая язык низкого уровня и язык высокого уровня.

Язык низкого уровня :

Языки низкого уровня — это машинные коды, в которых инструкции передаются на машинном языке в виде 0 и 1 для компьютерной системы.Он в основном предназначен для работы и обработки всего аппаратного обеспечения и архитектуры набора команд компьютера. Основная функция языка низкого уровня — работать, управлять и манипулировать оборудованием и компонентами системы. Существуют различные программы и приложения, написанные на языках низкого уровня, которые могут выполняться напрямую без какой-либо интерпретации или перевода. Самые известные и базовые из всех языков программирования «C» и «C ++» до сих пор в основном используются на языках низкого уровня. Язык низкого уровня также разделен на две части: машинный язык и язык ассемблера.

  • Машинный язык — один из низкоуровневых языков программирования, который является языком первого поколения, разработанным для связи с компьютером. Он написан в машинном коде, который представляет двоичные цифры 0 и 1 внутри строки Computer, что упрощает понимание и выполнение операций. Как мы знаем, компьютерная система может распознавать электрические сигналы, поэтому здесь 0 означает выключение электрического импульса, а 1 означает включение электрического импульса. Это очень легко понять на компьютере, а также увеличивает скорость обработки.

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

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

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

Язык высокого уровня:

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

.

независимых от платформы языков — Stack overflow на русском

Переполнение стека

  1. Около
  2. Продукты

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. Вакансии
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. Реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

Загрузка…

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *