Структурированное программирование

    В начале 80-х годов XX века, в недрах проблемной лаборатории электронных вычислительных машин Московского государственного университета им. М.В.Ломоносова началась работа над необычным, по нынешним меркам, языком, а вернее системы, или даже сказать идеологии программирования.

    ДССП


    Результатом стала ДССП — диалоговая система структурированного программирования.

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

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

    Прототипом этого процессора послужила созданная в ПНИЛ ЭВМ МГУ в конце 60-х годов экспериментальная троичная цифровая машина «Сетунь 70».

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

    РАЯ


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

    Примеры


    F1 — вычисляет 3*X*X-4*X+2

    : F1 [X] C [X,X] 3 * [X,3*X] 4 - [X,3*X-4] * [3*X*X-4*X] 2 + [3*X*X-4*X+2] ;

    использование F1
    * 25 F1 . D вк 1777
    * -9 F1 . D вк 281


    F2 — вычисляет A2*X*X-A1*X+A0

    : F2 [A0,A1,A2,X] C E4 E3 [A0,X,A1,X,A2] * + [A0,X,A2*X+A1] * + [A2*X*X-A1*X+A0] ;

    использование F2
    * 1 2 3 4 F2 . D вк 57
    * 1 2 -3 4 F2 . D вк -39


    FG — факториал N, если N>0, иначе 0

    : FG [N] C BR+ FCT T0 [N! или 0] ;
    [FCT - факториал N]
    : FCT [N] C 1- C DO P D [N!] ;
    : P [F,K] E2 C2 [K,F,K] * E2 1- [F*K,K-1] ;


    использование FG
    * -5 FG . D вк 0
    * 5 FG . D вк 120


    НОД — наибольший общий делитель натуральных чисел M,N

    : НОД [N,M] RP ЦД D [НОД] ;
    [ЦД - от делимого и делителя к делителю и остатку]
    : ЦД [делимое,делитель] E2 C2 / [делитель,частное,остаток] E2 D [делитель,остаток] C EX0 ;


    использование НОД
    * 48 72 НОД . D вк 24
    * 225 650 НОД . D вк 25


    ДИАЛОГ: вопрос — ответы — резюме

    B8
    : ДИАЛОГ [] ВОПРОС ОТВЕТЫ-РЕЗЮМЕ [] ;
    : ВОПРОС [] CR ."Как Вы предполагаете использовать ДССП?
    1. Для вычислений
    2. Для управления
    3. Для обработки текстов" [] ;
    : ОТВЕТЫ-РЕЗЮМЕ [] RP AR [] ;
    [AR - получение ответа и выдача резюме]
    : AR [] CR ." Дайте номер ответа - " TIB BR #1 R1 #2 R2 #3 R3 ELSE R4 [] ;
    : R1 [] CR ."ДССП не ориентирована на вычисления" EX [] ;
    : R2 [] CR ."Вы на верном пути" EX [] ;
    : R3 [] CR ."ДССП поможет Вам!" EX [] ;
    : R4 [] CR ."Такой ответ не предусмотрен" [] ;
    B10


    использование ДИАЛОГ
    * ДИАЛОГ
    Как Вы предполагаете использовать ДССП?
    1. Для вычислений
    2. Для управления
    3. Для обработки текстов
    Дайте номер ответа - 7
    Такой ответ не предусмотрен
    Дайте номер ответа - 3
    ДССП поможет Вам!


    Реализации


    • Компьютеры и платформы: Intel 80x86, MC68020, R3000, VAX, PDP-11, INTEL 8080, SparcSUN.
    • Операционные системы: MSDOS, MSDOS-extenders, UNIX, RT-11, RSX, OS9, CPM

    Вместо заключения


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

    Однако все желающие могут опробовать свои силы в структурированном программировании:
    1. git clone git://github.com/ingeniarius/DSSP-32.git
    2. следуем инструкциям из INSTALL

    Сбор системы займет всё лишь несколько минут… Enjoy!

    Дополнительные материалы по ДССП



    P.S. Будем рады всем заинтересованным в поддержке и развитии этой необычной и интересной системы.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 46
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        А я вот нихрена не понял
        • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        В 80-х начали, в 2002 забросили… В общем, конечно, круто, но разве есть будущее у этого проекта?
        • +1
          Ну как видите начали же заниматься вновь :)
          Forth до сих пор развивается, а они похожи.
          Так что посмотрим…
          • 0
            Вы попробуйте :)
          • 0
            всё новое — хорошо забытое старое )
            • 0
              Так и есть
              • 0
                ммм… а что здесь новое и что здесь старое?
                • 0
                  имелось ввиду что о ДССП сейчас мало кому известно (старое и забытое), но при желании можно развить (поднять и отряхнуть так сказать) и получить нечто новое :) как то так…
                  • 0
                    Пока что это напоминает раскопки динозавров =)
                    Как ни крути, новым это сложно назвать.
              • +2
                язык весьма на forth похож
                • +1
                  Языки очень близки, но есть и отличия.
                  Свои слова.
                  ДССП позволяет любой порядок определения слов.
                  На язык сильное влияние оказала ранее разработанная «Сетунь-70».
                • 0
                  Объясните на пальцах.

                  Функция F1 должна вычислять значение по формуле 3*X*X-4*X+2

                  Реализация в ДССП выглядит, согласно статье, так

                  : F1 [X] C [X,X] 3 * [X,3*X] 4 — [X,3*X-4] * [3*X*X-4*X] 2 + [3*X*X-4*X+2];

                  Вопрос — что значит весь оверхед «C [X,X] 3 * [X,3*X] 4 — [X,3*X-4] * [3*X*X-4*X] 2 +» и для чего он нужен?
                  • +2
                    : — дальше будет определение
                    F1 — название
                    [X] — комментарий, в стеке предполагается наличие числа X
                    C — продублировать вершину стека
                    [X,X] — комментарий, в стеке теперь два числа X
                    3 — занести в стек число 3
                    * — перемножить стек (вершина с подвершиной) = 3*X
                    и т.д.
                    ; — конец определения
                    • 0
                      А хде у вас X*X считается? C 3 * => C* 3*?
                      По-идее * действует только на 2 операнда на стеке
                      • 0
                        а, туплю =)
                        (3*X-4)*X+2
                        • 0
                          3*x*x-4*x+2 = x*(3*x-4)+2
                          • +1
                            Об этом преобразовании (я так понимаю для уменьшения числа операций умножения) надо было в статье написать. А то вообще, не язык а загадка получается.
                    • –4
                      ффффтопку
                      долго долго бить за такой синтаксис
                      • 0
                        алсо напомнило вот это: forum.ixbt.com/topic.cgi?id=26:39074
                        • +4
                          Только не говорите этого FORTH-программистам ;)
                          • –1
                            то что синтаксис лучше Форта, это конечно большое достижение, но где сейчас Форт?
                            • +4
                              В embedded. И это вам не сайтики клепать на пехапе и не ГУИ рисовать в дельфях.
                              • 0
                                вы говорите так, будто это что-то плохое

                                зачем сравнивать зеленое с холодным? каждому языку свою нишу: пехапе — лидер области сайтиков, дельфи — бывший лидер в гуях, а куда метят сабжевые аббревиатуры?
                                • +2
                                  > вы говорите так, будто это что-то плохое

                                  Не надо форсить этот дурацкий мем, мы тут ведем техническую дискуссию, а не обмен словосочетаниями, не так ли?

                                  > зачем сравнивать зеленое с холодным?

                                  Ваш вопрос был о том, где сейчас Форт. Я и ответил, где же он. Еще вопросы будут?

                                  > а куда метят сабжевые аббревиатуры?

                                  Сабж нужен для развития мышления. Также, как математика, Лисп, etc.
                                  • 0
                                    >Ваш вопрос был о том, где сейчас Форт. Я и ответил, где же он. Еще вопросы будут?
                                    с первого ответа я поверил что форт крайне актуален в embedded и ни разу не подвергаю это сомнению. Но именно ВЫ сравнили ДССП с дельфи и пехапе, я же выразил сомнение в корректности сравнения.

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

                                    >для развития мышления
                                    брайнфак тоже неплохо расширяет сознание

                                    А если серьезно, не понимаю, как логика программируемого калькулятора поможет мне развить мышление
                                    • +1
                                      > Но именно ВЫ сравнили ДССП с дельфи и пехапе, я же выразил сомнение в корректности сравнения.

                                      Из каких моих слов можно вывести сравнение ДССП с дельфи и пхп? Это я Форт с ними сравнивал. Программирование встраиваемых систем (особенно hard realtime) требует очень сильной подготовки, чего не скажешь о веб-программировании и GUI (хотя и тут подготовка тоже не помешает, но барьер входа очень низкий все-таки).

                                      > математика актуальна всегда, лисп живет и здравствует уже пол века

                                      Лисп как раз таки не «мертвее обычного». ;) (ни в коем случае не следует расценивать это как «лисп не нужен»)

                                      > а ДССП умер вскоре после рождения

                                      В статье написано, что появился он в конце 60-х, а «помер» в 2002.

                                      > и сейчас непонятно зачем его пытаются воскресить

                                      Это мешает вам жить?

                                      > А если серьезно, не понимаю, как логика программируемого калькулятора поможет мне развить мышление

                                      А как алгебра помогает развить мышление? Как помогает формальная логика, теория типов или еще там что?
                                      • 0
                                        >барьер входа очень низкий все-таки
                                        а вы не думали, что на высоту этого самого барьера синтаксис и философия языка оказывают самое непосредственное влияние?

                                        >Из каких моих слов можно вывести сравнение ДССП с дельфи и пхп?
                                        Я думал в этой теме обсуждается ДССП а не форт

                                        я не специалист в форте и судить о том, «где он сейчас» могу только так (g):
                                        12 100 для требуется forth
                                        191 000 для требуется delphi
                                        6 540 000 для требуется php
                                        nuff said

                                        >А как алгебра помогает развить мышление? Как помогает формальная логика, теория типов или еще там что?
                                        и каким образом алгебра относится к развитию мышления изучением ДССП?
                                        перефразируя ваше утверждение:
                                        ешьте горькое потому, что яблоки сладкие
                                        • 0
                                          > а вы не думали, что на высоту этого самого барьера синтаксис и философия языка оказывают самое непосредственное влияние?

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

                                          > Я думал в этой теме обсуждается ДССП а не форт

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

                                          > я не специалист в форте и судить о том, «где он сейчас» могу только так (g):

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

                                          > и каким образом алгебра относится к развитию мышления изучением ДССП?

                                          Как этот вопрос относится к теме разговора?

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

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

                                          Как вы вывели это из моего утверждения?
                        • +1
                          В статье говорится, что язык призван уменьшить количество ошибок, но я вот плохо понимаю как этому будет способоствовать такая запись.
                          Неужели это:
                          : F1 C 3 * 4 — * 2 +;
                          читается проще, чем, например:
                          F1 = lambda(x): 3*X**2 — 4*X + 2
                        • +2
                          Да, присоединяюсь к вопросу. Как язык с таким синтаксисом «призван уменьшить трудоемкость, повысить надежность и обеспечить широкую доступность программирования»?
                          • 0
                            К синтаксису быстро привыкаешь.
                            Вспомните калькуляторы МК на которых также записывали выражения в ПОЛИЗ.
                            И FORTH, и такие функциональные языки как Haskell тоже тому подтверждение.
                            Уменьшить трудоемкость, повысить надежность и обеспечить широкую доступность программирования в первую очередь за счёт подхода — структурированного программирования.
                            • +1
                              То есть, это «структурированное» программирование на самом деле есть функциональное, с каким-то дюже низким уровнем — чуть ли не напрямую идет работа со стеком… А работа со стеком никогда не была интуитивной и удобной для пользователя — постоянно нужно думать что у нас на вершине, какая глубина, в какой последовательности чего мы там засовывали. В функциональном подходе, эта проблема, конечно, сглажена, но всё же…

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

                              А тут — стек. Хорошо хоть отдельных регистров для сложения/умножения/деления нету.
                              • +2
                                Про стек верно.
                                Какие «плюшки» есть в ДССП по этому поводу:
                                1. Используется нисходящее программирование,
                                начинается с конченой цели и постепенно работа разбивается на всё более мелкие части, которые элементарно тестируются отдельно.
                                2. Есть именованные параметры.
                                • 0
                                  Может конечно я плохо читаю, но статья получилась скорее об этом самом РАЯ, чем о ДССП.
                                  Пошел гуглить СП.
                                  • 0
                                    Статья про структурированное программирование :)
                                    ДССП это что-то вроде gcc+ide только для РАЯ.
                          • –5
                            Это — особый костям для мазохиста?

                            По-моему это мазохизм, аналогичный lisp`у.

                            Либо мой умишко не охватывает всей красоты и волшебства.
                            • 0
                              перечитал еще раз этот рекламный буклет
                              язык позиционируется как более высокоуровневая альтернатива ассемблеру. на 60-й год это, безусловно, был бы прорыв, НО! прогресс ушел далеко вперед

                              также я не увидел сравнения вашего языка с парочкой конкурентов.
                              • 0
                                легкость освоения,
                                значительное повышение производительности труда программиста и качества создаваемых программ, развиваемость,
                                адаптивность,
                                мобильность. Все это конечно хорошо, но хотелось бы увидеть в цифрах, иначе это пустые слова
                              • 0
                                Ожидал увидеть структурный синтез программ :-(
                                • 0
                                  >Базовый язык ДССП — Развиваемый Адаптивный Язык (РАЯ)
                                  До шестого класса я считал Райбольницу как райскую больницу )))
                                  • 0
                                    Одному мне стиль изложения напомнил курсовые и диплом? Как будто выдрали куски текста из другого (других) источника и слегка сгладили стыки. Введение, примеры, заключение. Все быстро, поверхностно, при этом с ненужными подробностями и нифига не понятно, если не полезть по ссылкам. С таким же успехом можно было просто ссылки привести.

                                    Развиваемый Адаптивный Язык (РАЯ) — оказывается был (есть) не только язык Ада но и Рая :)

                                    «ДССП была призвана уменьшить трудоемкость, повысить надежность и обеспечить широкую доступность программирования путем систематического внедрения дисциплины структурированного программирования в сочетании с диалоговым режимом и нетрадиционной архитектурой системы, базирующейся на стеках, словаре и процедурном коде.» — А можно простыми словами, без академического зубодробительства, в чем оригинальность подхода, сферы использования, преимущества перед аналогами (если есть)?
                                  • 0
                                    Знаком с архитектурой Сетунь.Интересовался троичной логикой. Купил книгу о Сетуни и даже дал задание студентам
                                    спроекттировать троичные элементы на HDL. Тогда в 2005 году ещё.

                                    Сейчас я заинтересовался Forth стековыми языками для проекта:

                                    frm.hackafe.org/t/project-bracelet-esp/212

                                    В котором я планирую использовать операционную систему на Forth.

                                    Хотелось бы услышать ваши рекомендации по выбору ОS на Forth не требовательной к ресурсам но с SSL/TLS?

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