Перейти к содержимому

3

В 1956 г. на Дартмундской конференции (США) Дж.Маккарти впервые предложил термин "искусственный интеллект" (ИИ). И хотя до сих пор не утихают страсти вокруг этого термина и развившегося научного направления в его рамках, исследователи единодушны в использовании языков программирования для данной области. Значительное число работ по ИИ (особенно американских ученых) реализовано на одном из старых языков программирования ЛИСПе. Этот вновь проявленный интерес к нему объясняется его эффективностью при решении задач искусственного интеллекта.

Название язык получил от английских слов LISt Processing (LISP), что означает "обработка списков". Своими корнями ЛИСП уходит в математическую логику. В 20-30-х годах такие математики, как Т.Сколем, К.Гедель и А.Черч, привнесли новые идеи в логику, которые позже воплотились в ЛИСПе. Вообще первым языком для обработки списков был не ЛИСП, а IPL (аббревиатура от английских слов "Information Processing Language" - язык для обработки информации), разработанный Г.Сайманом, А.Ньюэллом и Дж.Шоу в середине 50-х годов.

В 1956-1959 гг. Дж.Маккарти вместе со студентами Массачуссетского технологического института (МТИ) разработал новый изящный язык для работы со списками, которому и дал имя ЛИСП. Причем многие студенты внесли существенный вклад в эту разработку. В частности, Д.Эдвардс запрограммировал процесс очистки памяти от ненужных массивов, так называемой сборки мусора (garbage collection), являющийся фундаментальным понятием в ЛИСПе да и в других языках.

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

Впервые ЛИСП, также как и ФОРТРАН, был реализован на вычислительной машине IBM704.

Программы и данные ЛИСПа существуют в форме символьных выражений, которые характеризуются в виде списковых структур. ЛИСП имеет дело с двумя видами объектов: атомами и списками. Атомы - это символы, используемые для идентификации объектов, которые могут быть числовыми или символьными (понятия, материалы, люди и т.д.). Список - это последовательность из нуля или более символов, заключенных в круглые скобки, каждый из которых является либо атомом, либо списком. ЛИСП манипулирует списками путем использования трех примитивных функций: CAR, CDR, CONS, из которых получаются все другие функции обработки списков. В функции CAR в качестве значения аргумента используется первый элемент списка; значением аргумента в функции CDR является оставшаяся часть списка после удаления первого элемента, а функция CONS собирает вновь то, что CAR и CDR разбили на части. Интересно отметить, что слова "CAR" и "CDR" остались в ЛИСПе на память от первой реализации языка на ламповом компьютере IBM704. Они являются сокращением английских слов, означающих "содержимое адресной части регистра" и "содержимое уменьшаемой части регистра", соответственно терминами, характерными для машин первого поколения.

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

Хотя языку уже под 30 лет и он имеет некоторые недостатки, включая бесконечные скобки (любимый акроним разработчиков ИИ - "масса идиотских скобок"), он остается популярным на всех этапах создания систем ИИ, в частности экспертных систем. Одна из причин этого заключается в его общности и концептуальной простоте, другая - в часто упоминаемой щедрой среде поддержки. Но его зрелость и завершенность находятся в противоречии с его стандартизацией. в настоящее время существует несколько диалектов языка, каждому из которых присущи своя степень возможностей и свои характеристики. Такими диалектами являются COMMONLISP, ZETALISP, INTERLISP, INTERLISP-D, MACLISP и др.

В 60-е годы предпринимались попытки аппаратной реализации ЛИСПа, но на уровне техники того времени эти попытки оказались безуспешными, и только в начале 70-х годов с бурным развитием техники интегральных схем появилась возможность решения этой задачи. В 1974 г. в МТИ была начата разработка ЛИСП-компьютера, в котором аппаратно реализовывался язык лисп. Этапами создания ЛИСП-компьютера явились разработки CONS-компьютера и CADR-компьютера. Появлению ЛИСП-компьютера в немалой степени в конце 70-х годов способствовали разработки экспертных систем в рамках решения проблем ИИ, когда ЛИСП-компьютеры применялись в качестве рабочих станций для конструирования и развития экспертных систем.

С 1982 г. ЛИСП-компьютеры выпускаются серийно многими фирмами: Tektronix, LISP Machines Inc., Symbolics, Texas Instruments, Xerox. В этих машинах реализованы различные версии ЛИСПа. В настоящее время ведутся работы по созданию ЛИСП-компьютера с параллельной обработкой.

В нашей стране впервые интерпретатор ЛИСПа был создан для вычислительной машины БЭСМ-6 в конце 60-х годов, затем появилась система LISP-1204 для ЭВМ ODRA-1204, разработанная на основе трех диалектов: LISP-1.5, ЛИСП для БЭСМ-6 и INTERLISP. В 1975 г. интерпретатор ЛИСПа (в основу положен интерпретатор для БЭСМ-6) разработан для ЕС ЭВМ, а в начале 80-х годов язык ЛИСП (на основе INTERLISP) реализован на много процессорном вычислительном комплексе "Эльбрус". В последние годы среди отечественных реализаций языка нужно отметить реализации FRL/ЛИСПа.

//Вычислительная техника и ее применение, N3'89

19

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

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

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

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

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

//Математический энциклопедический словарь.

2

Имя языка программирования АПТ (APT) происходит от начальных букв полного названия "Automatically Prodrammed Tools", что в переводе означает "Автоматические программируемые станки".

Язык АПТ ровесник ФОРТРАНа и так же, как последний, используется поныне. АПТ - первый язык программирования для применения в специализированной области, первый язык программирования операций обработки деталей на станках с числовым программным управлением (ЧПУ). Он разрабатывался в Массачусетском технологическом институте (МТИ) по контракту с ВВС США. Группу разработчиков возглавлял математик Дуглас Т. Росс.

Работа по созданию языка началась в июле 1956 г.; в мае следующего года разработаны основы синтаксиса и семантики языка, близкие к английскому языку. В 1959 г. о языке АПТ было впервые сообщено на конференции в МТИ и в этом году, по-видимому, он впервые был применен в производственных условиях. В 1960 г. на машине IBM 704 был реализован улучшенный вариант языка - АПТ 2, а в последующие годы получила распространение версия языка - АПТ 5.

АПТ это не только язык станков с ЧПУ, но также и программа, которая выполняет расчеты по определению положений режущего инструмента в соответствии с операторами языка.

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

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

Геометрические операторы (их часто называют операторами определения) определяют геометрические элементы, которые составляют деталь.

Операторы движения применяются для описания траектории перемещения режущего инструмента.

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

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

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

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

В 70-е и 80-е годы появились новые подходы к составлению управляющих программ для обработки деталей на станках с ЧПУ: применение в процессе программирования интерактивной машинной графики; речевое (голосовое) программирование (ввод операторов программы ЧПУ в компьютер производится технологом устно) и др.

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

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

Создатель языка Д. Росс в дальнейшем стал инициатором использования ЭВМ в проектных работах. Под его руководством начиная с 1959 г. разрабатывался язык AED (ALGOL Extended for Design - АЛГОЛ, расширенный для проектирования), предназначенный для создания программ компьютерного проектирования деталей, сборка которых затем производилась на программно управляемых станках. Написанные им работы "Принципы AED для универсального компьютерного проектирования" и "Теоретические основы систем компьютерного проектирования" (в соавторстве с Дж. Родригесом) получили признание многих разработчиков САПР/АПП.

Символичным является присуждение в 1975 г. Д. Россу Обществом цифрового управления награды Жозефа Мари Жаккарда (французского изобретателя 19 века, который первый использовал перфорированную ленту для управления ткацкими станками).

В число версий языка АПТ, специально предназначенных для конкретных приложений, входят языки APTURN (для операций токарной обработки), APTMIL (для фрезеровальных и сверлильных операций), APTPOINT (для операций, выполняемых "от точки к точке").

Язык АПТ послужил основой для создания подобных языков во многих странах. В 1970 г. в США фирмой IBM по контракту с ВВС был разработан язык ADAPT (Adaptation of APT - Адаптация АПТ). Язык не такой мощный как АПТ, но зато может применяться для программирования как позиционных, так и контурных задач.

Язык UNIAPT - его имя происходит от названия фирмы-разработчика - United Computing Corp. of Carson (США, шт.Калифорния), - представляет собой попытку приспособить язык АПТ для использования на мини-ЭВМ. Эта попытка увенчалась разработкой усеченной версии АПТ, реализуемой на мини-ЭВМ серии PDP, что позволило многим мелким предприятиям обзавестись системой автоматизированного программирования.

Язык SPLIT (Sundstrand Processing Language Internally Tranlated) был создан фирмой Sundstrand. Этот язык, приспособленный для работы со станками данной фирмы, может применяться для программирования станков, имеющих до пяти управляемых осей.

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

Система COMPACT-II, разработанная в 1969 г. фирмой MDSI (Manufacturing Data Systems Inc.) (США, шт.Мичиган) по многим своим параметрам подобен языку SPLIT. Эта универсальная система, работающая в режиме разделения времени на компьютерах серий IBM и PDP.

Технолог-программист дистанционно со своего терминала вводит программу в ЭВМ, которая, в свою очередь, выдает перфоленту для ЧПУ. Язык COMPACT-II - один из распространенных языков программирования станков с ЧПУ. Еще один АПТ-подобный язык - PROMPT (интерактивный язык программирования операций обработки деталей) был разработан фирмой Weber N/C Systems Inc. (США, шт.Висконсин). Он используется с разнообразными типами станков: токарные станки, обрабатывающие центры, штамповочные прессы, установки для газовой резки.

В ФРГ были созданы АПТ подобные системы такие как EXAPT, MINIAPT, TELEAPT. Разработка одного из распространенных языков EXAPT (Extended Subset of APT - расширенное подмножество языка АПТ) началась в 1964 г. и была закончена в 1967 г. Одним из важных свойств языка является способность автоматически вычислять оптимальные скорости подачи и резания.

Язык EXAPT, реализованный на ЭВМ серии IBM, имеет три версии: EXAPT I - для позиционных задач типа сверления, а также для фрезерования по прямым линиям; EXAPT II - для токарной обработки и EXAPT III - для контурных операций.

На базе АПТ были разработаны модификации языка и в других странах: во Франции - IFAPT в 1970 г. и SUPFAPT в 1977 г., в Англии - NELAPT в 1973 г., в Италии - MODAPT в 1977 г., в Японии - FAPT, MAZAPT, MICROAPT в 1973 - 1978 гг.

В нашей стране на основе языка АПТ и языка АЛГОЛ-60 в конце 60-х годов были построены системы САПС, реализованные на ЭВМ серии "Минск" и предназначенные для 2,5 координатной обработки.

В конце 70-х годов САПС получили свое развитие в системах АПТ ЕС и АПТ СМ, реализованных на ЭВМ серии ЕС ЭВМ и СМ-4 соответственно.

//Вычислительная техника и ее применение №11'91.

9

История языка АПЛ (APL) начинается с 1956 г. (ранее, чем АЛГОЛа и ФОРТРАНа), когда Кеннет Э. Айверсон, сотрудник Гарвардского университета (впоследствии сотрудник фирмы IBM и профессор названного университета), заявил о разработке, которая была закончена в 1961 г. Впервые язык был описан в 1962 году в книге Айверсона "A Programming Language" ("Некий язык программирования"), начальные буквы названия книги и дали имя новому языку.

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

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

Впервые модифицированная версия АПЛ, названная АПЛ/360, была реализована в 1966 г. К. Айверсоном, А. Фалькоффом и группой сотрудников фирмы IBM на вычислительной системе IBM/360. Затем появились другие реализованные подмножества языка (в частности, АПЛ/700 - в машинах фирмы Burroughs), но все они опирались в той или иной степени на первоначальную реализацию 1966 г.

Какие отличительные особенности выделяют язык АПЛ среди других языков, почему с момента первых машинных реализаций не угасает интерес к нему программистов ?

Во-первых, АПЛ - это один из наиболее мощных диалоговых языков, предназначенных для ЭВМ 3-го и 4-го поколений, надо сказать, что он и разрабатывался как диалоговый язык и был воплощен, как только была разработана экспериментальная система разделения времени на IBM/360.

Во-вторых, простота представления данных и отсутствие спецификаций при определении переменных. Основной структурой данных в языке АПЛ является однородный массив, содержащий числа или литеры.

В-третьих, простая обработка структур данных - в языке одинаково просто работать как с единичными элементами, так и с массивами произвольных размеров и структуры. Например, сложение матриц А и В в языке АПЛ записывается просто А+В, в то время как в языках, подобных ФОРТРАНу и АЛГОЛу, для выполнения этой операции потребуется организация двух вложенных циклов (в АПЛ нет понятия цикла) и нескольких операторов. Наличие в АПЛ мощных средств работы с массивами создает особый стиль программирования и определяет силу этого языка.

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

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

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

В конце 70-х гг. в нашей стране был реализован модифицированный вариант языка АПЛ, получивший название APLVIDEO. Трудности разработки APLVIDEO были аналогичными, что и при первых реализациях, - отсутствие отечественных терминалов с cоответствующей клавиатурой, адекватной соответствующей символике Айверсона. В своем первоначальном варианте система функционировала на ЕС-1022 с пишущей машинкой ЕС-7077 в качестве терминала, в дальнейшем появился дисплейный вариант системы на базе группового коммутатора и 15 терминалов "Видеотон-340".

Черты необычности и своеобразия АПЛ не нашли своего воплощения в языках, созданных позднее (за исключением языка SETL), хотя язык оказал влияние на архитектуру некоторых вычислительных систем, в частности, векторные машинные команды в ЭВМ STAR-100 фирмы Control Data являются аппаратной реализацией операций над массивами в языке АПЛ.

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

//Вычислительная техника и ее применение №11'88

10

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

В МИРе использовался язык программирования АЛМИР-65, являющийся русифицированным развитием АЛГОЛа-60. Язык позволял устанавливать практически любую разрядность вычислением оператором "РАЗР"р. В программе устранена необходимость описания типов величин (целые, вещественные). Тип величин определяется автоматически типом присваиваемого значения. В качестве операторных применялись обычные круглые скобки, что повышало наглядность программы.

В АЛМИРе введены операторы печати списка величин или выражений, таблиц и графиков. Вывод значений автоматически сопровождался именами величин или выражениями. Такие операторы вывода существенно упрощают программирование.

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

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

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

В 1969 г. появилась ЭВМ МИР 2. В ней впервые был применен дисплей со световым пером, а также память на магнитных картах. Язык АНАЛИТИК явился расширением АЛМИРа. В АНАЛИТИКе применимо модульное построение программ с использованием стандартных фрагментов и процедур. АНАЛИТИК позволяет выполнять аналитические преобразования в буквенном виде: алгебраические действия, взятие производных и интегралов. Интересно на АНАЛИТИКе организовались вычисления с переменной разрядностью. АНАЛИТИК реализован также в ЭВМ МИР-3 и СМ-1410. Дальнейшее развитие языка пойдет по пути введения операций обработки текстов.

10-летний опыт работы на МИРах показал высокую эффективность средств общения с этими ЭВМ. Обучение языку программирования и методике работы на ЭВМ требует всего 6-10 часов. Простейшие задачи студенты начинают самостоятельно программировать и решать в течение первого часа знакомства с языком и пультом управления.

Языки АЛМИР-АНАЛИТИК структурного типа и близки к естественному языку, что делает их удобными для описания алгоритмов без графических схем. Программы на этих языках не только хорошо читаются, но и способствуют оперативному творческому мышлению. Для публикаций в нашей литературе можно записать программы только русскими буквами. На практике показано, что составление программы на АЛМИРе и затем ее перевод на ФОРТРАН или ПАСКАЛЬ требует гораздо меньше времени, чем ее составление на этих языках сразу. Например, программа быстрого двумерного преобразования Фурье была составлена на АНАЛИТИКе и отлажена за 3 дня и за 1 день переведена на ФОРТРАН. Такой же программист эту программу на ФОРТРАНе отрабатывал несколько месяцев. Определенную роль здесь играет то, что языки АЛМИР-АНАЛИТИК являются диалоговыми.

Отсутствие в АЛМИРе ограничений на порядок чисел позволяет находить решения с очень большими или очень малыми значениями. На ЕС или СМ ЭВМ такие результаты приводят к переполнению или к исчезновению порядка (в случаях, когда он выходит за приделы +-75). На МИРе решались задачи с ответами порядка 10-1200.

Опыт показывает, что овладевшие алгоритмизацией и программированием на языках АЛМИР-АНАЛИТИК впоследствии переходят на ФОРТРАН, ПАСКАЛЬ и другие самостоятельно без какой-либо подготовки, используя только справочные сведения по языку.

21

Название свое "АЛГОЛ" (ALGOL) получил от сокращения слов ALGOritmic Language, что в переводе означает "алгоритмический язык", хотя в начале он назывался ИАЛ (IAL - The International Algebraic Language).

Работы по созданию алгоритмического языка были начаты в 1955 -- 1956 гг. в США Ассоциацией по вычислительной техники (АСМ) и в Европе немецким Обществом прикладной математики и механики (GAMM). В 1958 г. ACM и GAMM подготовили совместный предварительный отчет о языке, который получил название АЛГОЛ-58.

На конференции в Париже в январе 1960 г. после широкого обсуждения представители семи стран - США, ФРГ, Англии, Франции, Дании, Нидерландов и Швейцарии утвердили улучшенную версию языка, названную АЛГОЛ-60. Двумя годами позже на конференции в Риме были сформулированы поправки и дополнения к описанию языка, но свое название (АЛГОЛ-60) он не изменил. Большие заслуги в создании и пропаганде АЛГОЛа принадлежат Д. Бэкусу, П. Науру и другим ученым.

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

Какие же отличительные черты характеризуют АЛГОЛ?

  1. АЛГОЛ во многих отношениях рассматривается как улучшение такого языка, как ФОРТРАН.
  2. Как язык программирования он был определен независимо от какой-либо машинной реализации.
  3. Ученые получили удобное средство для описания алгоритмов и обмена ими между пользователями.
  4. При создании АЛГОЛа был продемонстрирован новый стиль языкового описания, это первый язык, имеющий строго определенный синтаксис. Идея формально-синтаксической системы записей для языков программирования была введена Бэкусом в 1959 г. (систему стали называть БНФ - Бэкуса нормальная форма).
  5. Появление АЛГОЛа привнесло новые идеи в разработку языков программирования, наиболее существенные из них относятся к блокам и процедурам. АЛГОЛ стал первым языком программирования с блочной структурой. АЛГОЛьные программы представляют собой независимые друг от друга блоки операторов. Имена переменных, процедуры, выполняемые и невыполняемые операторы относятся только к конкретному блоку. Блоки могут быть вложенными друг в друга.

АЛГОЛ оказал значительное влияние на последующие развитие языков высокого уровня, причем выделяют три направления этого влияния. Первое характеризуется расширением языка в области структур и операций (пример -- язык СИМУЛА), второе -- большей степенью формализации и обобщения языка и его описания (пример -- язык АЛГОЛ-68). В третьем -- сохранились стиль и размеры описания АЛГОЛа, но введены новые концепции, которые еще в большей степени сочетают простоту и всеобщность (пример -- язык ПАСКАЛЬ ). На основе АЛГОЛа были разработаны многие диалекты, причем некоторые из них (МАД и ДЖОВИАЛ) в развитии отклонились от своего истока и стали независимыми языками.

В СССР в 1965 г. на базе АЛГОЛ-60 и средств языка КОБОЛ был создан язык АЛГЭК, ориентированный преимущественно для программирования экономических задач. Компилятор с этого языка в первые реализован на ЭВМ "Минск-22". В 1964 -- 1966 гг. также на базе АЛГОЛа был разработан язык АЛГЭМ, предусматривающий собой сокращенный вариант АЛГОЛа-60 с введением величин типа "строчный", строчными выражениями и функциями, составными переменными и массивами. Компилятор с языка реализован также на ЭВМ "Минск-22".

В 1967 г. группой ГАМС (Группа по Автоматизации программирования для Машин Среднего типа), Созданной комиссией многостороннего сотрудничества академий наук социалистических стран, на базе АЛГОЛа-60 была разработана версия АЛГАМС. В дальнейшем эта версия была реализована на ЕС ЭВМ, а в 1976 г. был принят стандарт на язык АЛГАМС (ГОСТ 21551-76).

АЛГОЛ оказал влияние на проектирование архитектуры многих вычислительных систем, в частности, серии компьютеров В5000. К сожалению, АЛГОЛ имеет несколько слабых мест, и главное из них - бедные средства ввода-вывода.

Язык АЛГОЛ-68 разработан в 1968 г. (в переработанном виде - в 1975 г.) с развитыми средствами ввода-вывода, но из-за конкуренции с другими языками он не получил широкого применения.

Анализируя пройденный АЛГОЛом путь, необходимо заметить, что, не смотря на повсеместное использование языка в европейских странах, в США он не нашел широкого распространения. Объясняется это прежде всего коммерческими соображениями: пользователи, затратив значительные средства на ФОРТРАНовское программное обеспечение (незадолго до появление АЛГОЛа), стали противниками каких-либо изменений в своей программистской практике. Этому в немалой степени также "способствовали" успехи и признание компьютеров фирмы IBM, взрастившей ФОРТРАН.

19

Язык программирования высокого уровня Ада назван в часть Августы Ады Байрон, графини Лавлейс и дочери английского поэта лорда Байрона. Она была ассистентом, коллегой и сторонницей Чарльза Беббиджа, математика и изобретателя вычислительной машины, названной аналитической машиной. С помощью Ч. Беббиджа в 1830 г. она написала практически законченную программу на аналитической машине для вычисления чисел Бернулли. Поэтому графиню можно назвать первым в мире программистом на вычислительной машине.

Ада, язык, носящий имя графини, был разработан по инициативе и при содействии министерства обороны США. Исследования, предпринятые в начале и середине 70-х годов, показали, что можно получить огромную экономию средств на программное обеспечение (около 24 млрд. долл. за период 1983 -- 1999 гг.), если министерство обороны воспользуется единым языком программирования для решения всех своих задач вместо примерно 450 языков программирования и несовместимых диалектов, используемых программистами.

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

Хотя побудительные мотивы создания нового языка программирования первоначально были чисто экономическими, на него оказало заметное влияние и желание иметь язык программирования, направленный на решение важных проблем разработки программного обеспечения. Требования к новому языку содержали такие технические особенности, как простота и полнота языка, надежность, правильность и переносимость программ, простота поддержки, возможность разработки больших программ, программирование в реальном масштабе времени и обнаружение и исправление ошибок. В поддержку тенденции перевода на мультикомпьютеры и отказа от больших ЭВМ в требованиях также содержалось и параллельное программирование, т.е. возможность писать программы, компоненты которых могли бы выполняться параллельно на различных ЭВМ или на одной ЭВМ квазипараллельно. Для разработки языка, удовлетворяющего перечисленным требованиям, был организован международный конкурс. Семнадцать фирм подали свои предложения, четыре из них были отобраны как полуфиналисты. Интересно, что все полуфиналисты в качестве основы для своих языков взяли язык Паскаль. Победителем конкурса стал язык программирования, разработанный группой ученых под руководством Ж. Ишбиа фирмы CII Honeywell Bull. Претерпев некоторое число изменений, этот язык был назван Ада. Через некоторое время доработанный язык Ада становится стандартом ANSI; дальнейшие изменения в языке были направлены на его упрощение и устранение несоответствий. Язык Ада был принят как стандарт ANSI в феврале 1983 г.

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

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

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

Характеристики языка Ада:

Абстракции Переменные объектов
Методы объектов
Переменные классов
Методы классов
Да
Да
Нет
Нет
Ограничение доступа Для переменных
Для методов
Общедоступные, обособленные
Общедоступные, обособленные
Модульность Виды модульности Пакет (Спецификация-тело)
Иерархия Наследование
Обобщенные блоки
Метаклассы
Нет
Да
Нет
Типирование Строгое типирование
Полиморфизм
Да
Нет
Параллельность Многозадачность Да (определяется в языке)
Устойчивость Устойчивость объектов Нет

// Н. Джехани. Язык программирования АДА.; Гради Буч. Объектно-ориентированное проектирование.

При использовании связки Abills 0.34 + freeradius + chillispot, последний разглашает правильный пароль при попытке ввода неправильного. Подробности на форуме поддержки Abills.

4

GNU gcc 4.1 в Ubuntu Feisty поставляется с включенной защитой стэка по умолчанию.

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

Заметил, что один сервер отдаёт дату устаревания куки в странном формате, свиду напоминающем "исправленый" формат даты, предложенный в RFC 850:


Server: Apache
X-Powered-By: PHP/5.1.6
Set-Cookie: e63_session_time=1171220096; expires=Tue, 09-Oct-2007 18:54:56 GMT; path=/; domain=.e-sochi.ru
Set-Cookie: e63_session=ba835067ae0a5518c660812b3a203102; expires=Tue, 09-Oct-2007 18:54:56 GMT; path=/; domain=.e-sochi.ru
Set-Cookie: e63_session_id=deleted; expires=Sat, 11-Feb-2006 18:54:55 GMT; path=/; domain=.e-sochi.ru
Set-Cookie: e63_pass=deleted; expires=Sat, 11-Feb-2006 18:54:55 GMT; path=/; domain=.e-sochi.ru
Set-Cookie: E63_UIN=e63_45cf6680b5d93; expires=Tue, 09-Oct-2007 18:54:56 GMT; path=/; domain=.e-sochi.ru

Интересно, насколько распространено применение такого формата даты в нете ? К сожалению, найти приложение, которое высталяет куки с префиксом E63_, не удалось.