Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вс дек 04, 2016 05:56

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Старая статья о разработке компилятора С++
Автор Сообщение
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
KPG писал(а):
Интересно как может выглядеть Lint по функциональности для Форта и какие сообщения об опасных или не очень местах будет выводить? Как можно формализовать для этого инструментарий?


Gudleifr поднимает правильные вопросы. Программы не будут писаться сами, и не может быть волшебного средства, с появлением которого Форт вдруг "резко разовьется" сам по себе. Сейчас для решения мелких проблем существует интерактивный режим, в котором можно вылавливать ошибки, связанные с неправильным помещением на стек, неверным вычислением адреса. Control-flow стек сам следит за целостностью структур управления. Дальше уже идет алгоритмика и ошибки интерфейсов (в неправильном порядке вызваны слова, не проверен результат работы и т.п.).
Сообщение Добавлено: Пт май 31, 2013 13:46
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
KPG писал(а):
А есть грани чёткого разделения между ними? :)
Т.е. отсутствие сказуемого в предложении есть признак правильности написанного? Извините.
KPG писал(а):
Оставайтесь Дейкстра-ординарным.
Это не ко мне, это к терапевту Зингеру.

Рассмотрим простой пример (с запасного форума):
Код:
VARIABLE TEST3
TEST3 2000 ALLOCATE THROW !

Здесь заведомо есть ошибка - неправильное расположение значений на стеке; но даже для того, чтобы ее найти, надо в лучшем случае рассматривать не только сами слова, но и их стековые комментарии, а в худшем - отслеживать "ход исполнения". Если адрес переменной рассчитывается более сложно или кусок кода между ней и расчетом значения нетривиален, то заметить ошибку гораздо сложнее.
Но, самое интересное здесь, что данный простой! фрагмент содержит в себе еще несколько потенциально опасных моментов:
1. Если значения CURRENT и CONTEXT не совпадают, то вполне вероятно, что вызывается не тот TEST3, который мы только что определили.
2. Поведение THROW может зависеть от охватывающего CATCH.
3. Выделение массива в 2000 байтов требует где-то в дальнейшем проверок, что при заполнении не будет выхода за его пределы. Здесь уместнее применение константы, т.к. нет никакой гарантии, что при правке программы размер массива не поплывет.
Список можно продолжить.
Сообщение Добавлено: Пт май 31, 2013 10:55
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
gudleifr писал(а):
KPG писал(а):
На уровне базиса языка Форт, в какой то степени близок к 2, а расширения только полностью "верифицированные" и не усложнённые в своих вариантах применения. Даже ограниченных.
Даже не знаю, что здесь больше не в порядке: грамматика или смысл.

А есть грани чёткого разделения между ними? :)
Оставайтесь Дейкстра-ординарным.
Сообщение Добавлено: Пт май 31, 2013 01:34
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
KPG писал(а):
На уровне базиса языка Форт, в какой то степени близок к 2, а расширения только полностью "верифицированные" и не усложнённые в своих вариантах применения. Даже ограниченных.
Даже не знаю, что здесь больше не в порядке: грамматика или смысл.
Сообщение Добавлено: Пт май 31, 2013 01:32
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
gudleifr писал(а):
KPG писал(а):
1. когда то может и по Дейкстре, если времени "вагон" для её построения и доказательства корректности.
2. используя простые понятные конструкции, которые можно "контролировать"
(1) противоречит (2). И уж всяко, это будет не Forth.

Конечно противоречит. Это разные подходы.
На уровне базиса языка Форт, в какой то степени близок к 2, а расширения только полностью "верифицированные" и не усложнённые в своих вариантах применения. Даже ограниченных.
Сообщение Добавлено: Пт май 31, 2013 01:28
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
KPG писал(а):
1. когда то может и по Дейкстре, если времени "вагон" для её построения и доказательства корректности.
2. используя простые понятные конструкции, которые можно "контролировать"
(1) противоречит (2). И уж всяко, это будет не Forth "как он понимается".
Сообщение Добавлено: Пт май 31, 2013 01:20
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
gudleifr писал(а):
KPG писал(а):
И что нельзя выяснить где все эти IF запрятались?

KPG писал(а):
даже если привлечь "динамику" кроме статического анализа

В общем случае задача доказуемо неразрешима.
Модно идти двумя путями:
1. как антивирусы/оптимизаторы - наступаем на очередную коровью лепешку, провешиваем обходной путь, идем дальше, пока опять не вляпаемся...
2. по Дейкстре - строим программу доказуемо правильным способом.

1. когда то может и по Дейкстре, если времени "вагон" для её построения и доказательства корректности.
2. используя простые понятные конструкции, которые можно "контролировать"

gudleifr писал(а):
KPG писал(а):
И что будем Базаровыми?
Кирсанов нравится больше?

Будем самими сабой.
Сообщение Добавлено: Пт май 31, 2013 01:17
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
KPG писал(а):
И что нельзя выяснить где все эти IF запрятались?

KPG писал(а):
даже если привлечь "динамику" кроме статического анализа

В общем случае задача доказуемо неразрешима.
Модно идти двумя путями:
1. как антивирусы/оптимизаторы - наступаем на очередную коровью лепешку, провешиваем обходной путь, идем дальше, пока опять не вляпаемся...
2. по Дейкстре - строим программу доказуемо правильным способом.
KPG писал(а):
И что будем Базаровыми?
Кирсанов нравится больше?
Сообщение Добавлено: Пт май 31, 2013 01:00
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
gudleifr писал(а):
KPG писал(а):
Вы видели Форт без IF-THEN? или других "синтаксических" элементов?

Пожалуйста! Например, мой распознаватель "градусов" для примера коллеги mOleg. Условий там до фига, а IF-ов очень мало. Или те же стековые манипуляторы... Одна из первых моих задачек в Forth была замена обычных IF-ов на дейкстровские if и do...
Тоже и про :-; , которые вполне могут кончится в первых блоках программы, уступив место Вами придуманным. Как, например, в Forth-ассемблерах.

И что нельзя выяснить где все эти IF запрятались? исходя из исходной модели знаний о Форт системе?
(даже если привлечь "динамику" кроме статического анализа, что скорее всего и делают продвинутые Lint)
А семантику, для сравнения, описать отдельно.

gudleifr писал(а):
KPG писал(а):
Пока на данном форуме обсуждается Форт в том виде как он понимается.
Открываем Броуди-TF, читаем... Или надо читать "понимается мною"?

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

gudleifr писал(а):
KPG писал(а):
"Нигелирование" существа вопроса
или сведения обсуждения его к обсурду не способствует конструктивному диалогу.
Почему же? Reductio ad absurdum очень давно используется в логике доказательств.

И что будем Базаровыми?
Сообщение Добавлено: Пт май 31, 2013 00:53
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
KPG писал(а):
Вы видели Форт без IF-THEN? или других "синтаксических" элементов?

Пожалуйста! Например, мой распознаватель "градусов" для примера коллеги mOleg. Условий там до фига, а IF-ов очень мало. Или те же стековые манипуляторы... Одна из первых моих задачек в Forth была замена обычных IF-ов на дейкстровские if и do...
Тоже и про :-; , которые вполне могут кончится в первых блоках программы, уступив место Вами придуманным. Как, например, в Forth-ассемблерах.
KPG писал(а):
Пока на данном форуме обсуждается Форт в том виде как он понимается.
Открываем Броуди-TF, читаем... Или надо читать "понимается мною"?
KPG писал(а):
"Нигелирование" существа вопроса
или сведения обсуждения его к обсурду не способствует конструктивному диалогу.
Почему же? Reductio ad absurdum очень давно используется в логике доказательств.
Сообщение Добавлено: Пт май 31, 2013 00:31
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
gudleifr писал(а):
KPG писал(а):
Или для Форта это лишнее?
Начало всех lint-подобных программ анализ синтаксиса, на основании которого делаются выводы о семантике. В Forth-же синтаксиса нет. Если Вы придумаете свой, например, будете считать связки :-; и/или IF-THEN синтаксически значимыми, то можете их проверять-раскрашивать... Но это не помешает другому фортеру вообще обойтись без подобных конструкций.

Вы видели Форт без IF-THEN? или других "синтаксических" элементов?

gudleifr писал(а):
В отличие от других языков, например, C++, где все, что Вы можете написать, обязано следовать правилам C-синтаксиса, в Forth можно полагаться только на те "опорные точки", которые Вы сами расставите в своих словах: SMUDGE, LATEST в :-; , стек управления в IF-THEN, контроль стека в основном цикле...

Пока на данном форуме обсуждается Форт в том виде как он понимается. "Нигелирование" существа вопроса
или сведения обсуждения его к абсурду не способствует конструктивному диалогу. По моему :<

P.S. Т.к. программа выполняется в реальных командах, то и верифицировать её в той или иной степени возможно.
Сообщение Добавлено: Пт май 31, 2013 00:17
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
KPG писал(а):
Или для Форта это лишнее?
Начало всех lint-подобных программ анализ синтаксиса, на основании которого делаются выводы о семантике. В Forth-же синтаксиса нет. Если Вы придумаете свой, например, будете считать связки :-; и/или IF-THEN синтаксически значимыми, то можете их проверять-раскрашивать... Но это не помешает другому фортеру вообще обойтись без подобных конструкций.
В отличие от других языков, например, C++, где все, что Вы можете написать, обязано следовать правилам C-синтаксиса, в Forth можно полагаться только на те "опорные точки", которые Вы сами расставите в своих словах: SMUDGE, LATEST в :-; , стек управления в IF-THEN, контроль стека в основном цикле...
Сообщение Добавлено: Чт май 30, 2013 23:53
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
gudleifr писал(а):
KPG писал(а):
Вроде эта тема особо не обсуждалась и для Форта не видно Lint анализаторов на "горизонте".
Это опять из разряда обсуждений, куда к автомобилю цеплять лошадь и почему телеграммы доходят сухими. Или, если угодно, как раскрасить Forth-программу...

Может быть и так, но хороший или плохой пример по данному вопросу мог бы быть полезным.
Или для Форта это лишнее? и должно решаться комплексным инструментом типа IDE? или не решаться
вообще.

P.S. Если раскраска программы кому то помогает, то почему её не надо использовать? А раскрашивать
или нет это уже индивидуально решается.
Сообщение Добавлено: Чт май 30, 2013 23:25
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
KPG писал(а):
Вроде эта тема особо не обсуждалась и для Форта не видно Lint анализаторов на "горизонте".
Это опять из разряда обсуждений, куда к автомобилю цеплять лошадь и почему телеграммы доходят сухими. Или, если угодно, как раскрасить Forth-программу...
Сообщение Добавлено: Чт май 30, 2013 23:19
  Заголовок сообщения:  Re: Старая статья о разработке компилятора С++  Ответить с цитатой
Хищник писал(а):
Интересный и занимательный рассказ о коллективе весьма неглупых специалистов, которые делали серьезный проект, получая на нем организационный опыт. Дополнительно можно еще и посмотреть, СКОЛЬКО усилий требуется на Си-подобные компиляторы, которые, по представлениям некоторых программистов, существуют в избытке и обязательно рано или поздно появятся для любой платформы.


А ещё можно посмотреть на программы статического анализа типа Lint их цены и диагностические "всевозможные'
сообщения.
В Форте за счёт изначально "простой" вычислительной виртуальной машины (например "явный" массив памяти,
базовые переменные указывающие на ячейки этой памяти, "упрощённая" форма циклов с I и J базовыми словами,
т.к. "не надо" следить за типами переменных, то и ошибок с преобразованием типа и "непомнинья" типа конкретной переменной если она не введена через макрос тоже нет, к тому же, напрмер, в массивах можно вести по "желанию" динамический контроль за диапазоном обращения к памяти из запомненой размерности,
короткие и легко запоминаемые слова @ ! и др., лёгкость внесения изменений в рабочий код, возможность
параметризовать код, подстроить синтаксис и семантику, "монотонность" восприятия текста программы ...
Что ещё забыто или указано неверно? )

P.S. К чему это? Интересно как может выглядеть Lint по функциональности для Форта и какие сообщения об опасных или не очень местах будет выводить? Как можно формализовать для этого инструментарий?
К этим размышлениям привело рассмотрение ранее приводимой ссылки по программе Cweed (не понятно что
она и зачем "сканирует" в Си файлах для практического использования информации?)
Вроде эта тема особо не обсуждалась и для Форта не видно Lint анализаторов на "горизонте".
Сообщение Добавлено: Чт май 30, 2013 23:13

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


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