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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Автоматизация статического анализа исходных текстов на Форте
СообщениеДобавлено: Пн мар 09, 2015 17:47 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Статический анализ текстов может выглядеть ненужной рутиной, особенно для маленьких проектов. Конечно, это не самоцель. Однако если посмотреть на этот вопрос с точки зрения "насколько просто это сделать", то можно обеспечить заготовки для такого анализа, а потом уже при необходимости развивать идею.
Что есть статический анализ? Ну например, если мы по исходным текстам попробуем определить такие параметры, как процент строк с комментариями, количество вложенных управляющих конструкций, наличие дублирующихся идентификаторов и пр., то это может помочь поддерживать проект в сопровождаемом состоянии. В качестве примера можно рассмотреть MISRA-C. Это не диалект Си, а набор правил, которых стоит придерживаться при разработке программ.
Как это можно сделать? С одной стороны, можно на Форт наслоить еще один парсер, продублировав, фактически, всю работу интерпретатора. Однако интерпретатор уже такое делает - мы знаем, в какие моменты формируются структуры управления, когда обрабатываются комментарии и т.д. Знаем хотя бы потому, что в эти моменты исполняются соответствующие слова. Поэтому можно встроить соответствующие инструменты непосредственно в ядро. Проще всего это сделать в виде векторных слов.

Допустим, мы хотим определить максимальную глубину вложенности управляющих структур. Тогда при выполнении : надо обнулить счетчик, далее каждое из слов IF BEGIN DO будет его увеличивать, а UNTIL REPEAT THE LOOP - уменьшать. При этом максимально достигнутое значение счетчика будет запомнено. Все это можно получить и из анализа глубины Control Flow Stack, но с отдельной переменной можно делать разные фокусы - например, считать именно вложенные IF. При завершении компиляции ; может отправить полученную переменную в отчет, в специальный массив, или просто прикрепить к слову каким-то образом (можно ведь вводить и свои поля).

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Пн мар 09, 2015 18:12 
Hishnik писал(а):
...
Еще Холстед жаловался, что применение его метрик к FORTH бессмысленно. И не странно - ведь, FORTH позволяет писать как угодно, со своими управляющими структурами... Применять к нему метрики - как к обычной литературе. Только поржать.
А заставлять всех писать "правильно"? Мы видели чем это кончается: C-образными FORTH-программами и просьбами добавить в него "объекты" и "библиотеки".


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Пн мар 09, 2015 18:22 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
gudleifr писал(а):
Еще Холстед жаловался, что применение его метрик к FORTH бессмысленно. И не странно - ведь, FORTH позволяет писать как угодно, со своими управляющими структурами...

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

В обычной литературе, к сожалению, ржать чаще приходится над неграмотностью. Чем программирование лучше?
gudleifr писал(а):
А заставлять всех писать "правильно"? Мы видели чем это кончается: C-образными FORTH-программами и просьбами добавить в него "объекты" и "библиотеки".

Форт - это Форт, а не "не Си". От того, что что-то совпало по стилю или решаемым задачам с программой на Си, сам язык хуже не стал. Требования объектов и библиотек имеют совершенно не техническую причину негативного влияния. Они не ухудшают язык, они просто откладывают на неопределенное время начало практической работы. Программист может долго ходить вокруг, все время предъявляя требования - то библиотек не хватает, то объектов, то IDE. "А так бы я конечно!". Но в этом плане как раз и нужно предлагать хоть какие-то практические решения, чтобы прятаться было уже не за что.



За это сообщение автора Hishnik поблагодарил: zehotello
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Пн мар 09, 2015 18:26 
Не в сети

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

P.S. Например в IDE Win32Forth есть возможность навигации по кросс ссылкам слов используемых в проекте слов (собирается такая статистика)
Интересен вариант построения "клаcтерного" графа кодовой базы Форт проекта и по нему навигацию.
Для Форт, наверное, можно попробовать использовать программы статческого анализа текста.
При беглом поиске одна из программ Khcoder


Последний раз редактировалось KPG Пн мар 09, 2015 19:29, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Пн мар 09, 2015 19:28 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
KPG писал(а):
Какие значимые "утилизационные" результаты и форму их отображения можно получить после статического анализа текста?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Пн мар 09, 2015 19:32 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Hishnik писал(а):
KPG писал(а):
Какие значимые "утилизационные" результаты и форму их отображения можно получить после статического анализа текста?

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


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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Пн мар 09, 2015 20:19 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
KPG писал(а):
А как визуализировать логическую составляющую в динамике для выявления "логических" ошибок.
Работа программиста и есть выявление этих рассогласований от начального замысла и насколько это можно формализовать?

Да специально-то никак и не надо. Вопрос ведь не в том, каким именно волшебным образом ликвидировать ошибки. Просто программист не робот, и не может не делать ошибок совсем. Процесс поиска "ошибок вообще" не формализуется, для этого надо создать условия - от вкусного кофе и отпуска в удобное время до инструментов автоматизации. Кто же может заранее знать, что именно поможет? Метрики сами по себе не помогают, и даже способствуют забюрокрачиванию процесса, просто потому, что появляется что-то измеримое для контроля. Но если метрик нет, то в противовес забюрокрачиванию может возникнуть синдром "зелен виноград!". "Нам не надо метрик!", (вполголоса: "потому что мы не умеем ими пользоваться"). В данном случае я не предлагаю срочно бросить все и делать метрики. Идея идет с другой стороны - что еще можно модифицировать в ядре, чтобы от этого была польза.



За это сообщение автора Hishnik поблагодарил: zehotello
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Пн мар 09, 2015 20:32 
Hishnik писал(а):
Идея идет с другой стороны - что еще можно модифицировать в ядре, чтобы от этого была польза.
Давно уже объяснил. Ядро пишется каждый раз под новую задачу заново.

Написание ядра заранее - это:
Hishnik писал(а):
Они не ухудшают язык, они просто откладывают на неопределенное время начало практической работы.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Пн мар 09, 2015 20:42 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
gudleifr писал(а):
Давно уже объяснил. Ядро пишется каждый раз под новую задачу заново.

К "Давно уже объяснил" надо дописать "... свою позицию". Я ее знаю. Это вдруг стало непререкаемой истиной? :)
gudleifr писал(а):
Написание ядра заранее - это:

Это разработка инструмента для серии конкретных программ. Если в кварке ~10 тыс. строк, я не буду его каждый раз переписывать. Транслятор для того и пишется, чтобы решать на нем определенные задачи. Понятно, что кварк с его 3D-экраном и Win-only не годится для каких-то программ. Но параллельно надо и пробовать технологии, чтобы не изобретать каждый раз целый набор... и не откладывать на неопределенное время начало практической работы.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Пн мар 09, 2015 20:46 
Hishnik писал(а):
Это вдруг стало непререкаемой истиной?
Пока, как бы никто опровергнуть ее не смог.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Пн мар 09, 2015 20:55 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
gudleifr писал(а):
Пока, как бы никто опровергнуть ее не смог.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Вс дек 25, 2016 11:40 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Ам, я как-то не понял зачем встраивать в ядро, ежели можно обойтись служебной библиотекой?
Там переопределим нужные слова для анализа и скормим библиотеке тексты исходников.
Сделал недавно подобное.
Самому надоели ошибки от правки текста. Чего в СПФ только стоят лишние ; поставить. Последнее опр.слово ломается.
А упр.структуры? Помню, полчаса ломал голову откуда на стеке два непонятных значения. Потом нашёл ошибку.

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Вс дек 25, 2016 12:09 
Victor__v писал(а):
Самому надоели ошибки от правки текста.
Все ваши проблемы от "форт-компилятора". При этом теряются все преимущества метода. Из системы удаляется "умный пользователь" и остается только "тупой программист".
P.S. Метрики - это совсем не то, что Вы думаете.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Вс дек 25, 2016 12:20 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
В этой теме может быть и интересна возможность преобразования AST дерева Forth в классические представления
что то подобное shift-forth, но в обратную сторону.
Код:
function add42 (a) {             // : add42 42 + exit ;
  return a + 42;
}

function square (x) {            // : square 0 pick * exit ;
    return x * x;
}

function sub (a, b) {            // : sub
  return a - b;                  //     - exit
}                                // ;

                                 // variable g0
function mul_global (a) {        // : mul_global
  return a * g0;                 //     g0 @ * exit
}                                // ;

function add3_fast (a, b, c) {   // : add3_fast
  return b + c + a;              //     + + exit
}                                // ;

function add_var (a, b) {        // : add_var
  var x;
  x = a + b;                     //     +
  return x;                      //     exit
}                                // ;

function cmplx_re (a, b, c, d) { // : cmplx_re
  var re;                        //     3 pick 2 pick *
  re = a * c - b * d;            //     3 pick 2 pick * -
  return re;                     //     nip nip nip nip exit
}                                // ;

function cmplx_im (a, b, c, d) { // : cmplx_im
  var im;                        //     3 pick *
  im = a * d + b * c;            //     2 pick 2 pick * +
  return im;                     //     nip nip nip exit
}                                // ;

function foo (x0, y0) {          // : foo
  if (x0 < 100) {                //     over 100 < if
    do {                         //         begin
      x1 = ф(x0, x2);            //
      y1 = ф(y0, y2);            //
      x2 = x1 + 1;               //             swap 1 +
      y2 = y1 + x2;              //             swap over +
    } while (x2 < 100);          //         over 100 >= until
  }                              //     then
  x3 = ф(x0, x2);
  y3 = ф(y0, y2);
  return [x3, y3];               //     exit
}       

Но это, скорее всего, хорошо иметь в Forth IDE по функциональности сравнимой со средами от JetBrains (IntelliJ IDEA и др.)
продолжив "пилить", например, Win32Forth IDE.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Автоматизация статического анализа исходных текстов на Ф
СообщениеДобавлено: Вс дек 25, 2016 12:31 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Цитата:
P.S. Метрики - это совсем не то, что Вы думаете.

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

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

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


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

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


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

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