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

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

Разберёмся, насколько глубоко стоит изучать программирование в школе? Что нужно знать по программированию ученику и учителю? И нужно ли знакомить учащихся с различными стилями программирования на разных языках программирования в школе?

В нескольких исследованиях было показано увеличение производительности учащихся на первых компьютерных курсах с задержками, которые увеличились с 40% до 88%. Эта среда рекомендуется для начинающих программистов. Он был создан Майклом Кёллингом из Университета Кента в Англии и при поддержке группы исследователей из Университета Ла-Тробе в Австралии. Текстовый редактор, показанный на рисунке 5, позволяет взаимодействовать с исходным кодом.

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

Основные проблемы выбора языка

  1. Учитель не знает языка программирования, или у него нет опыта
    Из любой ситуации всегда есть выход. Можно изучить хотя бы минимум, чтобы подготавливать учеников к олимпиадам, или хотя бы заинтересовать учеников, показав им направление, о котором они не знали или слышали только краем уха. Достаточно зародить интерес, а дальше они сами. Ведь необязательно знать всё и вся. Если у вас не получается самостоятельно решить задачи, помочь ученику, вы можете найти тех, кто лучше вас разбирается и готов помочь вам с вашими учениками. Для самого учителя будет плюсом и дополнительной мотивацией, включая финансовую, если ученик будет занимать высокие места на олимпиадах.

    Или можно продолжать дальше избегать интересных вещей из мира IT-технологий, мира программирования. Но тогда нужно иметь ввиду, что со временем приходят молодые кадры (гики), которые выросли на компьютерных технологиях. Которые с детства почти каждый день получали опыт, помогающий им решать задачи различного уровня. В итоге, как бы грустно ни звучало, Вас подвинут.

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

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

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

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

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

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

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

  3. Нет наставника, который может помочь в решении сложных задач
    Когда нет наставника, приходится изучать всё самому в большем объёме. Например, вместо того чтобы начать изучать язык программирования Python или СИ, изучать алгоритмистику, вы затрачиваете время на решение таких вопросов: какой выбрать язык, чем языки программирования отличаются, какой язык программирования выбрать для преподавания школьникам. Вам непонятны конструкции языка, или вы не можете найти решения ошибки. Время идёт, а результата в изучении, программировании, преподавании нет.

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

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

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

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

  4. ФГОС, ГИА и ЕГЭ по информатике
    Не смотря на то, что в учебниках по информатике есть только один язык программирования Pascal и всё примеры приводятся на нём, я заметил общую тенденцию перехода на Python преподавателей информатики для обучения основам программирования. И всё больше и больше появляется олимпиад, которые предоставляют возможность решать задачи на Python. На Информатикуме олимпиадные задачи можно будет решать на Питоне.

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

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

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

    Для примера, если ученик учил Бейсик, а в задаче код на Питоне, то он его практически не сможет прочитать, и наоборот. Но если ученик учил Паскаль, а в задаче Питон, то ученик почти влёгкую сможет прочитать и решить. Поэтому лучше учить языку определённого семейства синтаксисов, как Паскаль — Си — Питон или C#, Java и т.д.

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

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

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

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

У всех нас общая задача: правильно мотивировать, дать основы и поставить на рельсы начинающих. А дальше человек уже сам, по своим рельсам, будет изучать и делать всё, что необходимо. Нет смысла обучать школьников всем технологиям «от и до». Технологии в IT меняются быстро. Изменяются подходы, появляются новые языки программирования, новое железо и т.д.

Будь то в хакерских пространствах или через социальные сети, форумы и блоги. Для него «то, что он не может сделать, это лишить себя пути, каким бы он ни был», но он утверждает, что групповое и личностное обучение «веселее, как клубы», где можно быть студентом, а также учителем-добровольцем. Мой совет: лучший способ учиться - чему-то научить кого-то.

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

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

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

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

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

Например, одним из лучших языков программирования для старта считался и считается Pascal, так как он был придуман специально для обучения основам программирования. Но есть «но»: язык устарел, его никто из компаний не использует в коммерческих целях. Для небольшого сравнения возьмём Python. Он был создан более 20 лет назад и по сей день используется и в обучении основам программирования, и в коммерческих целях. На нем можно разрабатывать серверные и десктопные программы, сайты и веб сервисы, мобильные приложения и программировать роботов. Самое главное, что на рынке труда Python-программисты получают широкую востребованность, и она будет расти еще много лет, ведь язык Python используют крупные корпорации в своих коммерческих проектах.

Но всегда есть большой риск того, кто начинает сталкиваться с чем-то неудачным, и учиться не так, - говорит он. Программа с ощутимыми объектами. Наконец, узнайте, что программирование может расстраивать. Причина - гарантия того, что коды всегда будут иметь некоторую ошибку. В английской школе дети, обучающиеся в программе, жаловались: Мне пришлось повторить 20 раз, - сказал один из них; «Мы должны были повторить пять раз, и это было очень неприятно», - сказал другой. Ошибка программирования, однако, не является привилегией того, кто учится.

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

Можно, конечно, начать изучение программирования с Pascal, но после основ всем придётся учить новый язык, с другим синтаксисом, с новыми правилами. Паскаль даёт свои плюсы в обучении и, возможно, даже стоит самые основные понятия показать на Паскале. Но нет смысла обучать всему «от и до» на языке Pascal и его библиотеки. Лучше это время потратить на изучение языков и технологий, которые сейчас используются и будут использоваться ближайшие 10-20 лет.

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

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

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

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


Программирующая Программа - первый компилятор

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



М. Р. Шура-Бура, А. А. Ляпунов, С. С. Камынин

Еще один момент в пользу преподавания программирования заключается в том, что он может применяться детьми. Для Вилете «поскольку дети могут распознавать символы и взаимодействовать с цифровыми ресурсами, они могут взаимодействовать с роботом», но, как и все остальное в жизни, требуется один шаг за раз. Сначала они начинаются просто, затем углубляйтесь и углубляйтесь в роботизированную среду, которая включает в себя проектирование, строительство, автоматизацию и управление роботом. Долгое время мы разрабатывали простые сборочные мероприятия с 4-летними детьми, сегодня можно начинать рано, - говорит он.

Первым в мире транслятором языка высокого уровня является ПП (Программирующая Программа), он же ПП-1, успешно испытанный в 1954 году. Транслятор ПП-2 (1955 год, 4 в мире транслятор) уже был оптимизирующим и содержал собственный загрузчик и отладчик, библиотеку стандартных процедур.

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

Доказательство этого есть в проекте Минас-Жерайс, который уже служил 2-летним студентам. Каждый возраст - это контекст, другое педагогическое действие. Для него будущее обучения именно в этом: стимулировать сосуществование и творчество. Школа будущего должна побуждать ученика создавать, делать и исследовать то, что создано.

Школы пропагандируют образование в области образования для детей и подростков

Технология станет инструментом этой акции, - говорит он. Взрыв технологии показывает важность наличия хотя бы понятия о том, как все работает; и на этом рынке отсутствуют люди. Билл Клинтон, Эл Гор, Арианна Хаффингтон, Майк Блумберг, Стив Балмер, среди прочих, также заявили о поддержке.

Сотрудники отдела программирования исследовали реализуемость операторных схем и определили основные типы операторов, соответствующие решаемым задачам: Ai - арифметические операторы, Pi - логические операторы, управляющие счетом, Fi - операторы переадресации, позволяющие переходить к следующему значению индекса.

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

Типы операторов соответствовали подавляющему большинству решаемых тогда задач, а именно - вычислительным задачам. Выделялись арифметические операторы Аi, ведущие вычисление по формулам, логические операторы Рi, осуществляющие управление счетом, операторы переадресации Fi, позволяющие переходить к следующему значению индекса (и обратные им операторы восстановления), все же неарифметические вычисления объединялись в так называемые нестандартные операторы Hi, для которых спецификацией был их машинный код. Специального подъязыка описания данных, зачатки которого появились в более поздних ФОРТРАНе и Алголе, не существовало.

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

Программирующая программа ПП-2, была создана под руководством М. Р.Шура-Буры в 1955 году для машины Стрела-1, основывалась на ПП-1 как прототипе. В ПП-2 были усовершенствованы алгоритмы трансляции и было уделено заметное внимание оптимизации программ - экономии выражений, оптимальному сочетанию переадресации и восстановления (иначе говоря, наилучшей реализации вычисления индексных выражений), оптимальному отведению памяти для так называемых рабочих ячеек. Это был, по-видимому, первый оптимизирующий транслятор.



Стрела-1. Принцип взаимодействия узлов ЭВМ

ПП для БЭСМ развивала входной язык программирующих программ. Она объединяла схему и спецификацию операторов в одном тексте, был введен первый структурный оператор - оператор цикла (соответствующий современным циклам с параметром).

ПП-2 послужила идейной основой двух проектов - ПП для Стрелы 4 и ПП для Стрелы 7. Первая из них представляла собой зачаток настоящей системы программирования: помимо собственно транслятора она содержала систему сборки модулей и некоторые средства отладки. Транслятор получал такие фрагменты объектной программы, которые потом назовут модулями, а система сборки создавала программу из оттранслированных модулей и библиотечных программ.

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

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

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

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

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

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

Алгол

А. А. Берс, А. Ф. Рар «Становление Новосибирской школы программирования. Мозаика воспоминаний»:

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

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

Как любил говаривать ван Вейнгаарден: «не пишите такие программы» и «ёсли у вас есть язык, то на нем надо уметь выражаться».

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

Сейчас в объектных языках всё очень хорошо: вы должны с помощью этого значения привести объект в определенное состояние. Приведя, вы можете из этого состояния вычитывать это значение столько раз, сколько вам надо, и получите, что оно обозначало. То есть вот эта композитная программа очень красиво позволяла писать синтаксические выражения, очень связного характера. И поскольку языки программирования всегда тащили за собой английский жаргон, причем не язык, а именно жаргон… Тут еще одна вещь была, на мой взгляд, существенной - это работа над созданием русских национальных вариантов Алгола 68. Ершов и я, мы стремились к тому, чтобы все можно написать и без латинских букв, чтобы программы можно было бы практически читать вслух, - вещь недоступная для предыдущих языков. А синтаксис вообще удалось перевести как математический стих - все правила сохранили, и мнемонический смысл, и точную форму.

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


Единственный отечественный язык программирования, получивший общемировую известность, это язык Рефал . Однако распространённость этого языка мала. Первая версия Рефала была создана в 1966 году Валентином Турчиным в качестве метаязыка для описания семантики других языков. Впоследствии, в результате появления достаточно эффективных реализаций на ЭВМ, он стал находить практическое использование в качестве языка программирования. В настоящее время основными диалектами языка являются Рефал-2 (1970-е), Рефал-5 (1985) и Рефал+ (1990), отличающиеся друг от друга деталями синтаксиса и набором дополнительных средств, расширяющих первоначальный вариант.

Язык программирования Рефал

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

Рефал - язык бестиповый. В его основе лежит понятие объектного выражения как универсального типа данных. Все аргументы и результаты всех функций являются объектными выражениями.

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

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

Язык определения функций Рефала, основанный на понятиях образца и результатного выражения чрезвычайно прост и компактен. Его минимальная версия получила название Базисный Рефал. Диалект Базисного рефала под названием Рефал-2 был реализован на многих типах отечественных ЭВМ и долгое время играл роль де-факто стандарта языка Рефал.

Язык Рефал-5 содержит Базисный Рефал в качестве подмножества. Расширения языка Рефал-5 качественно меняют стиль программирования.

В настоящее время существует две реализации языка Рефал-5: одна выполнена Д. Турчиным, другая - Н. Кондратьевым и Арк. Климовым. Обе имеют практически один и тот же входной язык, но отличаются рядом особенностей реализации. Вторая известна также под названием Рефал-6, однако следует помнить, что это название не языка, а его реализации.

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

1997 год. Рефал прочно занимает свою нишу, не опасаясь никаких конкурентов. Например, он успешно используется физиками Обнинска, многими математическими центрами в России. Одно из основных применений Рефал – разработка трансляторов с языков программирования, когда сам Рефал используется как метаязык. В ИПМ на нем был очень быстро написан высокоэффективный транслятор Cern Fortran.

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

Язык программирования Алмо

Язык системного программирования (машинно-ориентированный язык), задумывался как язык-посредник при трансляции с различных языков. Для каждой аппаратной платформы достаточно было написать транслятор Алмо - и появлялась возможность работать с множеством языков программирования, которые имели трансляцию в Алмо. Были созданы реализации языка для основных отечественных машин того времени (М-20, БЭСМ-6, Минск 2, Урал 11) и трансляторы с Алгола-60 и ФОРТРАНа в Алмо, причем все трансляторы также были написаны на Алмо и “раскручены” на всех этих машинах. Язык Алмо имел в своей основе некоторую абстрактную машину, отражавшую особенность существовавшего тогда класса машин, и в этом отношении Алмо-подход предвосхищал появившиеся позже Р-код, М-код и прочие подобные подходы. Машинная ориентированность явно прослеживалась в языке - регистровые объекты, постфиксная запись выражений, оперирование с битами машинных слов и т.д.

Система программирования Сигма

Г. Г. Степанов:
… название языка - Сигма - неожиданно очень удачно стало соответствовать сути разработанного языка, которую можно описать как «Символьный Генератор и Макроассемблер».
Всего в истории языка Сигма было три его реализации: на М-20, на БЭСМ-б и на самом языке Сигма. Первая, конечно самая памятная, т.к. это была мол первая работа в области системного программирования (да и вообще первая работа). Вторая была выполнена на лучшей, по моему мнению, отечественной машине БЭСМ-6. Третья опиралась на вторую, была раскручена сама через себя и могла генерировать программы как для БЭСМ-6, так и для СМ-4 и ЕС ЭВМ.



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

Универсальный машинно-ориентированный язык программирования Эпсилон

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

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

А. Ф. Рар:

Заявленной целью разработчиков языка было предоставить удобный рабочий инструмент системным программистам…
Мы стремились достичь разумного компромисса между такими требованиями, как простота и удобство языковых средств, простота трансляции и возможность получения эффективной программы…
Отладка эта состояла в классической раскрутке (bootstrapping): Эпсилон-текст транслятора я пропускал через написанный вручную Эпсилон-транслятор, а получившийся новый транслятор проверял на нормальных Эпсилон-программах. Раскрутка эта дала заодно ответ на… вопрос: «[насколько] программы, полученные путем Эпсилон-трансляции, проигрывают по сравнению с программами, написанными вручную?» Оказалось… всего в 1,35 раза.

Система программирования Бета

Проект Бета был основан на предположении о конвергенции основных алгоритмических языков, как и методов трансляции и оптимизации. Первоначально основными входными языками считались Алгол 68 и ПЛ/1. Язык Паскаль появился на свет одновременно с началом работ над проектом Бета и вскоре был включен в список его входных языков как основной входной язык «пробной реализации» БЕТА-системы.

Центральным звеном проекта Бета был Внутренний язык, который должен был стать единым языком-посредником в БЕТА-системе «наибольшим общим делителем» входных языков и «наименьшим общим кратным» выходных машин. Кроме этой своей роли промежуточного языка, позволяющего уменьшить число путей в схеме m -языковой n -машинной трансляции с m * n до m + n, внутренний язык должен был также явиться средой оптимизирующих преобразований, т.е. он еще должен был быть достаточно богат, чтобы на нем было возможно представить результаты оптимизации; например, экономию совпадающих подвыражений в операторе a [ i, j, k ] := b [ i, j, k ] + c [ i, j, k ].

Одновременно предполагалось опробовать слишком много новшеств: многоязычие на входе, многомашинность на выходе; новые языки (например при начале работ существовали только неполные экспериментальные трансляторы с Алгола 68) и новые методы оптимизации для новых прикладных областей - и всё это в рамках научно-исследовательского института, полупроизводственная работа силами сотрудников, ориентированны на получение научных результатов.

Автокод МВК Эльбрус - Эль-76



Из книги В.М. Пентковского об автокоде «Эльбрус».
В советское время не стеснялись программировать на русском

Изначально этот язык был назван - автокод Эльбрус, затем был переименован в Эль-76. Несмотря на то, что Эль-76 является языком достаточно высокого уровня, есть основание называть его «автокодом». Эльбрус просто не имел языка более низкого уровня, т.е. «ассемблера». Т.е. язык минимального уровня Эльбрус - это Эль-76, остальные языки уже строились над ним. Это - замечательная иллюстрация высокого научного и инженерного уровня отечественных ИТ в то время.

Эль-76 - язык программирования, использующий русскую лексику. Разработан в середине 70-х годов в СССР. Эль-76 предназначен для многомашинных вычислительных комплексов типа «Эльбрус». Объединяет в себе особенности машинного языка, непосредственно управляющего работой устройств ЭВМ, и изобразительные средства языка высокого уровня (во многом аналогично Алголу-68). Эль-76 поддерживает методику структурного программирования, т.е. композиции программы из процедур, линейных последовательностей операторов, циклов, альтернативных сочленений с выбором альтернативы по условию или по номеру альтернативы и параллельно выполняемых ветвей. Язык имеет специальные средства описания поведения программы в особых случаях - т.н. ситуации и структурные переходы. Основной особенностью Эль-76 является возможность хранения в памяти ЭВМ информации о типе переменной величины вместе с ее значением и ее изменения в ходе выполнения программы.

Рапира



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

Если интересно (и если есть время):

Приводится полное описание синтаксиса языка и краткие сведения о семантике его основных конструкций. По документу 3533847.00042-01 35 01 из архива академика А.П.Ершова: Описание языка

1. Общие сведения

1.1. Рапира является диалоговым языком высокого уровня, предназначенным для обучения программированию и решения на ЭВМ небольших прикладных задач. Язык ориентирован в первую очередь на школьников среднего и старшего возраста (11-17 лет), но может использоваться и другими категориями пользователей.

1.2. Рапира, наряду с Робиком, является входным языком системы программирования «Школьница». Как и для языка Робик, операции надпрограммного уровня в Рапире выполняются системными средствами, не относящимися к языку.

1.3. Первая версия Рапиры была разработана в 1978-1979 годах и использовалась в учебной работе со школьниками и студентами. В ходе разработки системы «Школьница» язык был полностью переработан.

1.4. Рапира представляет собой концентрическое семейство языков с последовательно расширяемым набором возможностей. Каждый концентр можно рассматривать как замкнутый язык-оболочку.

В этом документе приводится краткое описание основных особенностей внешнего концентра канонической (школьной) версии Рапиры.

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

2. Лексика и общая структура программы

2.1. Лексическая структура Рапиры почти не отличается от лексики Робика, описанной в документе 3533847.00058-01¤35¤02. В Рапире различаются те же лексические единицы: целые и дробные числа, тексты, слова, специальные символы. Форма этих лексем традиционна. Основные отличия Рапиры от Робика заключаются в следующем:

1. Допускается запись дробных чисел в экспоненциальной форме, например, 156.65E12 означает 156,65x1012.

2. Унарные + и - рассматриваются не как составные части лексемы, а как операции.

3. В Рапире используется в несколько раз больше специальных символов, в том числе - составных, чем в Робике

2.2. Общая структура программы и порядок исполнения отдельных предписаний на Робике и Рапире имеют много общего. Программа на Рапире - это последовательность директив, процедурных блоков и описаний имен. Порядок работы с директивами и процедурными блоками такой же, как и в Робике.

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

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

3. Имена и выражения

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

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

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

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

3.2. В Рапире различаются следующие виды значений имен:

  1. целые числа
  2. дробные числа
  3. тексты
  4. множества
  5. кортежи
  6. процедуры
  7. функции
  8. файлы
  9. модули
  10. рисунки
  11. кадры
  12. таблицы
  13. пустое значение
3.3. Пустое значение имеют все имена отличные от стандартных, которым в данной программе не было присвоено значений. В системе предусмотрено защищенное стандартное имя ПУСТО, которое всегда имеет пустое значение.

3.4. Над любыми парами имен в Рапире определена операция сравнения ТИПА, результат которой - ИСТИНА, если объявленные типы имен совпадают и ЛОЖЬ в противном случае.

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

3.5. Над числами в Рапире определены следующие операции:

Унарные арифметические: + и -;
бинарные арифметические: +, -, *, /, // (деление нацело), ** (возведение в степень);
операции сравнения: =, /=, <=, >=, <, >
Все операции имеют обычный математический смысл; допускается сравнение целых и дробных чисел на равенство: условие 35 = 35.0 считается истинным.

3.6. Над текстами определены следующие операции:

Конкатенация (слияние текстов), например,
«вело» + «сипед» = «велосипед» ;

ИЗ - проверка принадлежности символа тексту, например, условие
«м» ИЗ «микроскоп» истинно ;

Выборка (взятие символа из текста по индексу), например,
«велосипед» = «с» ;

[:] - вырезка (выделение участка текста по начальному и конечному индексам), например,
«крокодил» = «рок» ;

# - мощность (унарная операция, определяющая число символов в тексте), например,
#«самолет» = 7 .

=, /= - сравнение текстов.

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

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

«крокодил» -> Зверь; «ош» -> Зверь;

Имя Зверь получит значение «кошкодил». Присваивания

«кош» -> Зверь; «а» -> Зверь;

Являются недопустимыми из-за несовпадения длин заменяющего и заменяемого участков текста.

3.7. Составные структуры данных в диалоговой версии Рапиры представлены множествами, записями и кортежами. Каждая из этих структур может содержать произвольное число элементов. Элементом структуры может быть любой объект языка, независимо от вида.

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

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

Запись рассматривается как неупорядоченная совокупность именованных полей. Доступ к элементу записи возможен только через название поля.

Кортеж рассматривается как упорядоченная совокупность произвольных элементов. Доступ к элементу кортежа возможен по индексу.

Эта операция позволяет построить новую структуру из произвольного количества элементов, представленных значениями выражений. Для формирования нужной структуры необходимо перечислить через запятую все выражения, значения которых должны стать элементами структуры, и заключить их в специальные скобки, форма которых определяется видом структуры. Простые угловые скобки < > определяют формирование кортежа, фигурные скобки { } или (* *) - формирование множества, специальные скобки <$ $> - формирование записи. Кроме того, при формировании записи перед каждый элементом должно быть указано название поля, отделяемое от элементов двоеточием.

Например, выражение < 2, «поиск», 5.3, A > определяет формирование кортежа из четырех элементов: числа 2, текста «поиск», числа 5.3 и значения имени A. Выражение { 2, «слово», 2, 2 } определяет формирование множества из двух элементов: числа 2 и текста «слово». Выражение <$ Имя:«Сергей», Фамилия:«Иванов», Год_рождения:1950 $> определяет формирование записи из трех полей: Имя, Фамилия и Год_рождения.

3.9. Для всех структур определены следующие операции:

ИЗ - проверка принадлежности;

# - определение мощности (числа элементов);

И /= - сравнение на равенство и неравенство.

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

Два множества считаются равными, если они состоят из одних и тех же элементов, независимо от порядка их записи, например,

(* 1, 5, 5, <1, 2>, 1, *) = (* 5, <1, 2>, 1, *)

Два кортежа считаются равными, если они состоят из одних и тех же элементов, расположенных в том же порядке, например:

<1, 5, <1, 2» = <1, 2+3, <1, 1+1»

<1,2,3> /= <3,2,1>

Две записи с одинаковой структурой полей считаются равными, если одноименные поля имеют одинаковые значения, например:

<$ Имя:«Сергей», Фамилия:«Иванов» $> =
<$ Фамилия:«Иванов», Имя:«Сергей» $>

<$ Номер:5, Скорость:10 $> /= <$ Тип:5, Высота:10 $>

3.10. Кроме операций, перечисленных в п.п.3.4, 3.6 и 3.9, над множествами определены операции объединения (+), пересечения (*) и разности (-), имеющие обычный математический смысл.

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

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

Как и для кортежей, выборка может использоваться с обеих сторон от знака присваивания. Для вложенных записей определена многократная выборка, например: Х.Адрес.Квартира.

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

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

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

3.13. В Рапире, как и в Робике, предусмотрена защита имен. Частичная или полная защита может быть установлена и снята пользователем при помощи соответствующих разновидностей предписаний ВКЛЮЧИТЬ и ВЫКЛЮЧИТЬ, синтаксис которых описан диаграммой 6. Некоторые имена, например, имена процедур и функций во время их исполнения и имя переменной цикла внутри тела этого цикла, имеют абсолютную защиту, которая не может быть снята средствами, доступными пользователю.

3.14. Синтаксис выражения в Рапире описывается диаграммой 7. Как следует из диаграммы, выражение - это последовательность соединенных знаками бинарных операций констант, формирователей, простых имен и выражений в скобках, перед каждым из которых может стоять один или несколько знаков унарных операций, а после - произвольная последовательность операций выборки, вырезки и вызова.

Таким образом, структура выражения в целом традиционна для языков высокого уровня.

3.15. В Рапире приняты следующие приоритеты операций:

1. Выражения в скобках и составляющие выражения в формирователях;

2. Формирование структур;

3. Вычисление фактических параметров функций и индексных выражений;

4. Выборки, вырезки, вызовы функций;

5. Унарные операции;

6. Возведение в степень;

7. Операции *, /, // (умножение, пересечение, деление, деление нацело);

8. Бинарные + и - (сложение, конкатенация, объединение, разность множеств).

Описанный порядок в целом соответствует принятому в математике, за тем исключением, что пересечение множеств (*) получило в Рапире более высокий приоритет чем объединение (+).

3.16. Синтаксис условия в Рапире описывается диаграммой 8. Термин «условие» соответствует термину «логическое выражение», используемому в других языках. В Рапире логические значения не могут присваиваться именам, поэтому логические выражения допускаются только в определенных контекстах, например, в цикле ПОКА и в предписаниях ветвления.

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

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

Приоритеты операций в условиях:

1. Условия в скобках и выражения, входящие в состав условий;

2. Операции сравнения и проверки принадлежности;

4. Присваивание, ввод и вывод

4.1. Синтаксис предписаний присваивания, ввода и вывода в языке Рапира описывается диаграммами 9-11. Семантика этих предписаний почти не отличается от семантики аналогичных предписаний в языке Робик. Поэтому здесь перечисляются только основные различия между указанными предписаниями в этих языках.

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

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

При выводе текстов и при их вводе в режиме ВВОД ТЕКСТА окаймляющие кавычки не указываются. Тексты, вводимые в составе структуры и вводимые в режиме ВВОД ДАННЫХ, окаймляются кавычками.

Если режим ввода не указан, по умолчанию предполагается ВВОД ТЕКСТА.

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

4.5. В соответствии с концентрической структурой Рапиры переключение ввода и вывода на другие устройства может быть выполнено различными способами. Наряду с разовым переключением, осуществляемым так же, как в Робике, при помощи указания нужного режима в заголовке предписания (например: ВЫВОД НА БУМАГУ: А, В;), в Рапире возможно переключение всей выводимой или вводимой информации на одно или несколько устройств или файлов. Для этого применяется соответствующая форма предписаний ВКЛЮЧИТЬ и ВЫКЛЮЧИТЬ.
Например: ВКЛЮЧИТЬ ВЫВОД НА БУМАГУ;

5. Управляющие конструкции Рапиры

5.1. К числу управляющих конструкций Рапиры относятся три разновидности ветвления: ЕСЛИ, ВЫБОР-ИЗ, четыре разновидности цикла: ПОКА, ПОВТОР, ДЛЯ-ИЗ и ДЛЯ-ОТ, средства описания и вызова функций и процедур и предписание ВЫХОД для выхода из процедур.

В этом параграфе рассматриваются предписания ветвления и цикла, работа с процедурами и функциями обсуждается в следующем параграфе.

Синтаксис перечисленных конструкций описывается диаграммами 5, 12-15. Как видно на диаграммах, все эти предписания имеют рамочную структуру, что позволяет указывать в теле цикла и в альтернативах ветвления произвольное число предписаний без применения искусственных средств для их объединения.

5.2. Семантика простого ветвления (условного предписания) ЕСЛИ-ТО-ИНАЧЕ вполне традиционна.

ЕСЛИ А > В ТО
5 -> А; ВЫВОД: В;
ИНАЧЕ
5 -> В; ВЫВОД: А;
ВСЕ;

5.3. Как видно на диаграмме 12, предписание множественного ветвления (ВЫБОР-ИЗ) состоит из произвольного числа альтернатив, каждая из которых представлена условием, за которым следует одно или несколько предписаний, разделенных точкой с запятой. Условие отделяется от предписаний двоеточием, альтернативы разделяются знаком |. В конце может стоять конструкция ИНАЧЕ.

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

ВЫБОР ИЗ
Ветер <= 3: ВЫВОД: «слабо» |
Ветер <= 7: ВЫВОД: «умеренно» |
Ветер <= 70: ВЫВОД: «Тревога!»
ИНАЧЕ ВЫВОД: «Неверно задана скорость»
ВСЕ;

5.4. Вторая разновидность предписания ВЫБОР исполняется в таком же порядке, но проверяемое условие имеет вид: b0 = ba, где

B0 - значение переключательного выражения, записанного между словами ВЫБОР и ИЗ,

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

Значение переключательного выражения вычисляется один раз в начале исполнения предписания. В остальном семантика этого предписания соответствует п.5.3.

ВЫБОР Оценка ИЗ
5: ВЫВОД: «отлично» |
4: ВЫВОД: «хорошо» |
3: ВЫВОД: «средне» |
1,2: ВЫВОД: «плохо» |
ИНАЧЕ ВЫВОД: «ошибка»
ВСЕ;

5.5. Цикл ПОКА (диаграмма 13) имеет традиционную семантику: вначале проверяется условие, указанное в заголовке цикла. Если оно истинно, выполняются все предписания от знака:: (читается «повторять») до слова ВСЕ (тело цикла). Затем вновь проверяется условие и т.д. Если при очередной проверке условие оказалось ложным, исполнение предписания завершается. Если оно было ложным при первой же проверке, то тело цикла не исполняется ни разу.

1 -> X;
ПОКА X<10:: ВЫВОД: 2**X; X+1->X ВСЕ;

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

1 -> X;
ПОВТОР 10 РАЗ:: ВЫВОД: 2**X; X+1->X ВСЕ;

5.7. Цикл ДЛЯ-ОТ соответствует традиционному для большинства языков циклу типа прогрессии. Имя, указанное после слова ДЛЯ, является переменной цикла, выражение после слова ОТ определяет начальное значение, выражение после слова ДО - конечное значение, после слова ШАГ указывается шаг приращения. Если шаг не указан, он принимается равным единице. Значения всех трех выражений должны быть числами (целыми или дробными). Семантика цикла традиционна. Переменная цикла в теле цикла имеет абсолютную защиту. После окончания цикла она имеет пустое значение.

ДЛЯ X ОТ 1 ДО 10:: ВЫВОД: 2**X ВСЕ;

5.8. Цикл ДЛЯ-ИЗ предназначен для обработки текстов и составных структур, а также файлов соответствующих видов. При исполнении этого предписания переменная цикла поочередно принимает значения каждого элемента соответствующей структуры или файла (или каждого символа текста), после чего исполняется тело цикла. Как и в цикле ДЛЯ-ОТ переменная цикла в теле этого цикла имеет абсолютную защиту, а после его завершения получает пустое значение. Выражение, указанное в заголовке цикла после слова ИЗ, вычисляется один раз перед началом работы цикла.

Пример - подсчет количества букв «А» в тексте с именем Книга:

0 -> Сч;
ДЛЯ Буква ИЗ Книга:: ЕСЛИ Буква=«А» ТО Сч+1->Сч ВСЕ ВСЕ;
ВЫВОД: «В тексте Книга », Сч, " букв <А>";

6. Процедуры и функции

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

6.2. Как и в Робике, процедурный блок в Рапире является основной единицей локализации имен и хранения программного текста. В дополнение к этому он приобретает свойства основной единицы области действия описаний. Как видно на диаграммах 14-15, при описании формальных параметров и локальных имен в Рапире, в отличие от Робика можно указывать тип.

6.3. В заголовках процедур можно указывать способ передачи каждого из параметров. В Рапире используется три разновидности параметров, различающиеся по способу передачи: входные, выходные и возвратные. Эти способы обозначаются символами =>, <= и <=> соответственно. Если формальный параметр описан как входной, то соответствующий фактический параметр может быть любым выражением. Фактические параметры, соответствующие двум другим разновидностям формальных, могут быть только именами.

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

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

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

6.4. Исполнение функции или процедуры в языке Рапира может быть приостановлено при помощи предписания СТОП (с выходом в специальный режим диалога) или прервано при помощи предписания ВЫХОД.

В режиме приостановки процедуры пользователь может выполнить любое предписание Рапиры, причем все имена сохраняют смысл и значение, которое они имели в момент приостановки. После этого выполнение процедуры может быть продолжено при помощи директивы ПУСК или прекращено при помощи предписания ВЫХОД, использованного в качестве директивы.

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

[X](2, 3);

Позволяет вызвать одну из трех процедур A, B и C, в зависимости от значения имени X, которое должно быть целым числом от 1 до 3. Каждая из процедур должна быть описана с двумя входными параметрами.

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

7. Файлы и модули

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

С точки зрения пользователя, файл - это объект языка, значение которого хранится в ДЗУ и сохраняется при выключении или перевызове системы. Каждому виду значений, используемому в Рапире, соответствует своя разновидность файлов с таким же названием. Кроме того, в Рапире предусмотрены виды файлов, не имеющие прямых аналогов среди «внутренних» объектов языка: двоичные файлы и специальные файлы других входных языков системы «Школьница», к которым возможен доступ из Рапиры.

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

1. Всякий объект языка, включая процедуры, может быть целиком скопирован из оперативной памяти во внешнюю или наоборот с помощью предписаний ВЫВОД В ДВУ и ВВОД ИЗ ДВУ (диаграммы 10-11).

2. Символьный или графический ввод и вывод может быть переключен на определенный файл при помощи предписаний ВКЛЮЧИТЬ ВЫВОД В ФАЙЛ и ВКЛЮЧИТЬ ВВОД ИЗ ФАЙЛА (диаграмма 6). Однократный обмен с файлом может быть организован с помощью предписаний ВВОД ИЗ ФАЙЛА и ВЫВОД В ФАЙЛ (диаграммы 10-11).

3. Последовательная поэлементная обработка файлов, соответствующих структурным видам значений Рапиры, может быть организована с помощью предписаний ДЛЯ-ИЗ ФАЙЛА (диаграмма 13). В этом случае с точки зрения пользователя файл загружается в ОЗУ и обрабатывается поэлементно.

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

5. Управление файловой системой может осуществляться в процессе диалога с текстовым редактором системы «Школьница», используемым, в частности, для описания и редактирования процедур и функций Рапира. При помощи этого же редактора могут создаваться и редактироваться текстовые файлы.

6. Просмотр каталога файлов может быть выполнен и вне редактора, при помощи соответствующей системной директивы.

7.3. Файлы системы «Школьница» объединены в модули. Модуль - это совокупность файлов различных видов, в том числе - описаний функций и процедур, которые имеют общий набор глобальных переменных.

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

8. Некоторые отладочные средства языка Рапира

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

8.2. В процессе диалоговой работы может быть включена трассировка вызовов процедур и трассировка присваиваний (прокрутка). Включение и выключение этих механизмов осуществляется при помощи соответствующей разновидности предписаний ВКЛЮЧИТЬ и ВЫКЛЮЧИТЬ (диаграмма 6).

8.3. В языке предусмотрена возможность организовать проверку утверждений о программе, записанных в виде условий на языке Рапира. Такая проверка осуществляется с помощью предписания КОНТРОЛЬ, синтаксис которого описывается диаграммой 15. Если при исполнении этого предписания условие оказывается ложным, формируется выход по ошибке.

8.4. Наряду с контрольными точками в Рапире можно описать набор условий - инвариантов, проверка которых будет выполняться при каждом присваивании. Включение нового инварианта осуществляется по предписанию ВКЛЮЧИТЬ КОНТРОЛЬ, а выключение - по предписанию ВЫКЛЮЧИТЬ КОНТРОЛЬ. Если при некотором присваивании хотя бы один инвариант оказался ложным, формируется выход по ошибке.

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

8.6. В число отладочных средств входят и некоторые конструкции и механизмы Рапиры, описанные в предыдущих разделах, в частности:

1. Режим приостановки процедур;

2. Контроль типов имен (для диалоговой версии);

3. Защита имен по записи.

8.7. Отладочные средства, перечисленные в пунктах 8.2-8.4, а также проверка типов имен функционируют только в отладочном режиме, включаемом при помощи предписания ВКЛЮЧИТЬ ОТЛАДКУ

Язык Ада

Четырнадцатая линия парижского метрополитена. Поезд, в котором нет кабины машиниста. Движение поездов на этой линии полностью управляется Ада-программой. ТАНТК им. Г. М. Бериева - самолетов-амфибия с бортовым программным обеспечением на базе языка Ада.

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

Язык этот назвали в честь Августы Ады Лавлейс – женщины, которая считается первым программистом на Земле.

Адские мифы

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

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

Ада – язык, предназначенный исключительно для военных применений. Ада действительно была разработана при участии Министерства обороны США, однако отсутствуют какие-либо технические, административные или иные причины, препятствующие использованию Ады для разработки гражданских систем. Количество «гражданских» проектов, основанных на этом языке, сегодня сопоставимо с количеством «военных» проектов.

Ада – слишком большой и сложный язык, для того чтобы использовать его в небольшом проекте. Объем и сложность всех современных индустриальных языков практически одинаковы, и чтобы убедиться в этом, достаточно просто сравнить объем их описаний. Этот миф восходит к началу 80-х годов, когда Аду сопоставляли с Паскалем, Фортраном 77 или Бейсиком.


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

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

Существующие Ада-технологии неэффективны ; и трансляторы, и порождаемый ими код, отличаются низкой производительностью. Этот миф также восходит к первой половине 80-х годов, когда появились первые реализации Ады, фактически всего лишь доказывавшие «теорему существования Ада-транслятора, соответствующего стандарту». Достаточно провести ряд несложных экспериментов, запрограммировав некоторую модельную задачку на Аде, Паскале и Си/Си++, и сравнив (при сопоставимых параметрах компиляторов) затем скорость компиляции, объем порождаемого кода и скорость его выполнения, чтобы убедиться, что какой-либо специфической неэффективности, свойственной Аде, просто не существует. Можно также отметить, что система программирования GNAT при объеме исходных текстов более 40 Мбайт, на 90% реализована на Аде, и построение ее из исходных текстов (в его ходе она трижды сама себя компилирует) на современном ПК занимает не более получаса.

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


История создания языков программирования в нашей стране не исчерпывается перечисленным.Много интересных разработок на сегодняшний день можно считать «мёртвыми». Эти языки уходили вместе с техникой, в которой они «жили».
Вот перечень трансляторов сделанных в СССР (видимо неполный):
  • Algol-60
  • Algol-68
  • Forth
  • Fortran (для Эльбрусов сделали 2 компилятора)
  • Modula-2
  • Pascal
  • Simula-67
  • Snobol-4

Метки: Добавить метки