Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 23:40

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: К.Шереметьев Форт - язык для суперпрофессионалов
СообщениеДобавлено: Сб май 03, 2014 08:49 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
К.Шереметьев
Форт - язык для суперпрофессионалов
текст статьи найден здесь
Код:
Каждый профессионал в конце концов приходит к тому  набору  инструментов  и
приемов, который позволяет ему максимально эффективно и  качественно решать
любые задачи в своей области. Инструменты являются продолжением рук мастера,
и их выбор не может быть предоставлен случаю, как не может  скрипач  играть
на скрипке, купленной в ближайшем магазине.

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

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

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

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

Конечно, для тех, кто привык питаться жидкой кашицей  разжеванного другими,
лучший выход - в использовании  готовых  конструкторов  для  создания
различных систем. База данных? Пожалуйста, запрограммируем на dBase. Хитрый
запрос? На Прологе. Особая проекция рисунка? Autolisp тут как  тут.  Однако
конструктор - это конструктор и не более того.
Он позволяет быстро собрать то, для чего он предназначен. Именно
здесь он максимально эффективен, причем для
пользователя-непрограммиста. Но программисту-профессионалу здесь
делать нечего. Это путь тупиковый.

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

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

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

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

Его производительность увеличивается колоссально. Человек получает свободу.
А вкусивши свободы однажды, человек уже  отказывается  от  всего,  что  ее
ограничивает. "Я счастлив, что познакомился с  Фортом"  -  воскликнул  один
программист, поработавший с ним только два месяца.

Что же дает Форту такую мощь? Прежде чем  ответить  на  этот  вопрос,  надо
сначала ответить на другой, а именно: в чем суть работы  программиста?  Что
именно делает программист во время разработки программы?

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

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

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

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

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

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

Каждая команда новоиспеченного языка программирования  преодолевала главный
барьер  в  четко  очерченной  области,  ограниченной  параметрами  команды.
Логическим завершением этого подхода явилось создание строго типизированных
языков программирования, в которых прямо говорилось: "можно это, это и это,
все остальное низзя".

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

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

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

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

Приведем начало программы на Форте.


VARIABLE длительность     100 длительность !

: пауза    0 DO LOOP ;
: нота     длительность @   BEEP  1000 пауза ;

5000 CONSTANT длительность_паузы

В строке

VARIABLE длительность 100 длительность !

определяется слово "длительность",  которое  является  переменной,  и  этой
переменной присваивается значение 100. В Форте применяется  так  называемая
постфиксная запись, то есть операнды предшествуют команде,  поэтому сначала
пишется значение 100, потом переменная "длительность" и,  наконец,  команда
присвоить (восклицательный знак).

В строке

: пауза 0 DO LOOP ;

определяется слово  "пауза",  которое  является  процедурой,  и  состоит  в
выполнении пустого цикла. Определение процедуры начинается  с  двоеточия  и
заканчивается точкой с запятой.

В строке

: нота длительность @ BEEP 1000 пауза ;

определяется слово "нота",  которое  является  процедурой.  Его  выполнение
состоит в генерации звукового сигнала  заданной  длительности  и  небольшой
паузы после этого.

В строке

5000 CONSTANT длительность_паузы

определяется слово "длительность_паузы",  которое  является  константой  со
значением 5000.

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

: до    523 нота ;           : соль  784 нота ;
: до#   554 нота ;           : соль# 830 нота ;
: ре    587 нота ;           : ля    880 нота ;
: ре#   622 нота ;           : ля#   932 нота ;
: ми    659 нота ;           : си    987 нота ;
: фа    698 нота ;           : до2   1046 нота ;
: фа#   739 нота ;

: Д16   5 длительность ! ;      : П16  длительность_паузы  2 / пауза ;
: Д8   10 длительность ! ;      : П8   длительность_паузы  пауза ;
: Д4   20 длительность ! ;      : П4   П8 П8 ;
: Д2   40 длительность ! ;      : П2   П4 П4 ;
: Д    80 длительность ! ;      : П1   П2 П2 ;

: Медленно_минуты_уплывают_вдаль
       Д4 ми ля соль# ля си ля соль ля Д2 соль фа фа П2 ;
: Встречи_с_ними_ты_уже_не_жди
       Д4 ре соль фа# соль ля соль  ре фа Д ми П1  ;
: И_хотя_нам_прошлого_немного_жаль
       Д4 ми ля соль# ля си ля соль фа Д2 ми ре ля П2 ;
: Лучшее_конечно_впереди
       Д4 ми до2 си ля соль# ля си соль# Д ля П1 ;

: Голубой-вагон
       Медленно_минуты_уплывают_вдаль
       Встречи_с_ними_ты_уже_не_жди
       И_хотя_нам_прошлого_немного_жаль
       Лучшее_конечно_впереди  ;





Стиль Форта


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

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

Основными особенностями этого стиля являются:

- простота;

- лаконичность;

- самодокументируемость.


                           Простота

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

Требование простоты сводится к следующему правилу:

из всех реализаций идеи программы
выбирается наиболее простая.

Из этого правила вытекает следующий совет:

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

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


                        Лаконичность

Особенность человеческого восприятия  состоит  в  том,  что  человек  может
удерживать в сознании не  более  семи  объектов.  Эта  особенность  диктует
следующее требования стиля:

определения слов должны быть краткими.

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


                     Самодокументируемость

Это требование заключается в следующем:

имя слова должно выражать его семантику.

Здесь необходимо уточнить, что под семантикой слова понимается, что  именно
делает слово, а не как оно это делает.

Рассмотрим простой пример. Допустим, мы хотим иметь следующее слово:

: X    сдвиг-влево сдвиг-влево сдвиг-влево ;

Очевидно, что имя  X  не  удовлетворяет  требованию  самодокументируемости.
Однако неверно было бы заменить его следующим именем:

: тройной-сдвиг-влево    сдвиг-влево сдвиг-влево сдвиг-влево ;

так как это имя просто описывает действие этого слова. Более  удачным будет
следующее имя:

: быстрое-умножение-на-восемь    сдвиг-влево сдвиг-влево сдвиг-влево ;

Или,  если  программист  использует  обозначение  q  (quick)  для   быстрых
операций, можно использовать более короткое, но также понятное имя:

: q*8    сдвиг-влево сдвиг-влево сдвиг-влево ;


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


                                  4


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

Более того, существуют так называемые форт-процессоры, на аппаратном уровне
выполняющие стандартные слова  Форта.  Форт-процессор  компании  VME  Inc.,
например, обеспечивает производительность в 5-20 раз больше,  чем  Motorola
68020, Intel 80386 и VAX 11/780.

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

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

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

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

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: К.Шереметьев Форт - язык для суперпрофессионалов
СообщениеДобавлено: Сб май 03, 2014 09:11 
А почему не в "Юмор"?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: К.Шереметьев Форт - язык для суперпрофессионалов
СообщениеДобавлено: Сб май 03, 2014 09:25 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
А почему не в "Юмор"?

Потому что взято из Почему обречён язык Форт :shuffle; И это раздел статей всё-же. (даже раритетных)
Или такое давнишнее обсуждение (2001г) на форуме Балансера Forth - язык нового поколения :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: К.Шереметьев Форт - язык для суперпрофессионалов
СообщениеДобавлено: Сб май 03, 2014 10:05 
KPG писал(а):
...
Все эти "статьи" и "обсуждения" сводятся к
Цитата:
Они [пробные программы] показали как силу, так и слабость языка; силой языка является его гибкость и недвусмысленность; слабость заключается в том, что, как говорит разум, его использование лежит за пределами наших сил. /Дейкстра, 1962/
Обратите внимание на год.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: К.Шереметьев Форт - язык для суперпрофессионалов
СообщениеДобавлено: Сб май 03, 2014 10:39 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
KPG писал(а):
...
Все эти "статьи" и "обсуждения" сводятся к
Цитата:
Они [пробные программы] показали как силу, так и слабость языка; силой языка является его гибкость и недвусмысленность; слабость заключается в том, что, как говорит разум, его использование лежит за пределами наших сил. /Дейкстра, 1962/
Обратите внимание на год.

Это не показательно т.к. на Форте сделано n-ое число сложных комерческих программных продуктов (ссылки на них есть на местном форуме) и в частности ещё один ForthCAD-3D (Форт, наверное, свой "французкий" использован:)

P.S. Может причины ещё в "чём то" и "проблемы" личного восприятия Форт языкового подхода слишком индивидуальны?


Последний раз редактировалось KPG Сб май 03, 2014 10:45, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: К.Шереметьев Форт - язык для суперпрофессионалов
СообщениеДобавлено: Сб май 03, 2014 10:44 
KPG писал(а):
Это не показательно т.к. на Форте сделано n-ое число сложных комерческих программных продуктов
Это, как раз показательно. Какой другой язык оправдывается таким жалким образом? Или Вы знаете язык (не считая чисто учебных и эзотерических), на котором не было написано ничего "сложного" и "коммерческого"?
KPG писал(а):
Может причины ещё в "чём то" и "проблемы" личного восприятия Форт языкового подхода слишком индивидуальны?
Дейкстра именно это и имел в виду.


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB