Forth http://fforum.winglion.ru/ |
|
Автоматизация статического анализа исходных текстов на Форте http://fforum.winglion.ru/viewtopic.php?f=2&t=3038 |
Страница 1 из 2 |
Автор: | Hishnik [ Пн мар 09, 2015 17:47 ] |
Заголовок сообщения: | Автоматизация статического анализа исходных текстов на Форте |
Статический анализ текстов может выглядеть ненужной рутиной, особенно для маленьких проектов. Конечно, это не самоцель. Однако если посмотреть на этот вопрос с точки зрения "насколько просто это сделать", то можно обеспечить заготовки для такого анализа, а потом уже при необходимости развивать идею. Что есть статический анализ? Ну например, если мы по исходным текстам попробуем определить такие параметры, как процент строк с комментариями, количество вложенных управляющих конструкций, наличие дублирующихся идентификаторов и пр., то это может помочь поддерживать проект в сопровождаемом состоянии. В качестве примера можно рассмотреть MISRA-C. Это не диалект Си, а набор правил, которых стоит придерживаться при разработке программ. Как это можно сделать? С одной стороны, можно на Форт наслоить еще один парсер, продублировав, фактически, всю работу интерпретатора. Однако интерпретатор уже такое делает - мы знаем, в какие моменты формируются структуры управления, когда обрабатываются комментарии и т.д. Знаем хотя бы потому, что в эти моменты исполняются соответствующие слова. Поэтому можно встроить соответствующие инструменты непосредственно в ядро. Проще всего это сделать в виде векторных слов. Допустим, мы хотим определить максимальную глубину вложенности управляющих структур. Тогда при выполнении : надо обнулить счетчик, далее каждое из слов IF BEGIN DO будет его увеличивать, а UNTIL REPEAT THE LOOP - уменьшать. При этом максимально достигнутое значение счетчика будет запомнено. Все это можно получить и из анализа глубины Control Flow Stack, но с отдельной переменной можно делать разные фокусы - например, считать именно вложенные IF. При завершении компиляции ; может отправить полученную переменную в отчет, в специальный массив, или просто прикрепить к слову каким-то образом (можно ведь вводить и свои поля). В данном предложении важно то, что для его реализации требуется внести несущественные изменения в ядро. Вызов дополнительных векторных слов окажет исчезающе малое влияние на скорость компиляции, но позволит сделать много интересного с кодом. |
Автор: | gudleifr [ Пн мар 09, 2015 18:12 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
Hishnik писал(а): ... Еще Холстед жаловался, что применение его метрик к FORTH бессмысленно. И не странно - ведь, FORTH позволяет писать как угодно, со своими управляющими структурами... Применять к нему метрики - как к обычной литературе. Только поржать.А заставлять всех писать "правильно"? Мы видели чем это кончается: C-образными FORTH-программами и просьбами добавить в него "объекты" и "библиотеки". |
Автор: | Hishnik [ Пн мар 09, 2015 18:22 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
gudleifr писал(а): Еще Холстед жаловался, что применение его метрик к FORTH бессмысленно. И не странно - ведь, FORTH позволяет писать как угодно, со своими управляющими структурами... Именно поэтому я и отметил, что надо не писать внешний анализатор, а встраивать метрики непосредственно в слова. Тогда новые управляющие структуры сами про себя все соберут. gudleifr писал(а): Применять к нему метрики - как к обычной литературе. Только поржать. В обычной литературе, к сожалению, ржать чаще приходится над неграмотностью. Чем программирование лучше? gudleifr писал(а): А заставлять всех писать "правильно"? Мы видели чем это кончается: C-образными FORTH-программами и просьбами добавить в него "объекты" и "библиотеки". Форт - это Форт, а не "не Си". От того, что что-то совпало по стилю или решаемым задачам с программой на Си, сам язык хуже не стал. Требования объектов и библиотек имеют совершенно не техническую причину негативного влияния. Они не ухудшают язык, они просто откладывают на неопределенное время начало практической работы. Программист может долго ходить вокруг, все время предъявляя требования - то библиотек не хватает, то объектов, то IDE. "А так бы я конечно!". Но в этом плане как раз и нужно предлагать хоть какие-то практические решения, чтобы прятаться было уже не за что. |
Автор: | KPG [ Пн мар 09, 2015 18:26 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
Какие значимые "утилизационные" результаты и форму их отображения можно получить после статического анализа текста? P.S. Например в IDE Win32Forth есть возможность навигации по кросс ссылкам слов используемых в проекте слов (собирается такая статистика) Интересен вариант построения "клаcтерного" графа кодовой базы Форт проекта и по нему навигацию. Для Форт, наверное, можно попробовать использовать программы статческого анализа текста. При беглом поиске одна из программ Khcoder |
Автор: | Hishnik [ Пн мар 09, 2015 19:28 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
KPG писал(а): Какие значимые "утилизационные" результаты и форму их отображения можно получить после статического анализа текста? Рекомендации по тестированию (чем выше сложность, тем легче сделать логическую ошибку). |
Автор: | KPG [ Пн мар 09, 2015 19:32 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
Hishnik писал(а): KPG писал(а): Какие значимые "утилизационные" результаты и форму их отображения можно получить после статического анализа текста? Рекомендации по тестированию (чем выше сложность, тем легче сделать логическую ошибку). А как визуализировать логическую составляющую в динамике для выявления "логических" ошибок. Работа программиста и есть выявление этих рассогласований от начального замысла и насколько это можно формализовать? |
Автор: | Hishnik [ Пн мар 09, 2015 20:19 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
KPG писал(а): А как визуализировать логическую составляющую в динамике для выявления "логических" ошибок. Работа программиста и есть выявление этих рассогласований от начального замысла и насколько это можно формализовать? Да специально-то никак и не надо. Вопрос ведь не в том, каким именно волшебным образом ликвидировать ошибки. Просто программист не робот, и не может не делать ошибок совсем. Процесс поиска "ошибок вообще" не формализуется, для этого надо создать условия - от вкусного кофе и отпуска в удобное время до инструментов автоматизации. Кто же может заранее знать, что именно поможет? Метрики сами по себе не помогают, и даже способствуют забюрокрачиванию процесса, просто потому, что появляется что-то измеримое для контроля. Но если метрик нет, то в противовес забюрокрачиванию может возникнуть синдром "зелен виноград!". "Нам не надо метрик!", (вполголоса: "потому что мы не умеем ими пользоваться"). В данном случае я не предлагаю срочно бросить все и делать метрики. Идея идет с другой стороны - что еще можно модифицировать в ядре, чтобы от этого была польза. |
Автор: | gudleifr [ Пн мар 09, 2015 20:32 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
Hishnik писал(а): Идея идет с другой стороны - что еще можно модифицировать в ядре, чтобы от этого была польза. Давно уже объяснил. Ядро пишется каждый раз под новую задачу заново.Написание ядра заранее - это: Hishnik писал(а): Они не ухудшают язык, они просто откладывают на неопределенное время начало практической работы.
|
Автор: | Hishnik [ Пн мар 09, 2015 20:42 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
gudleifr писал(а): Давно уже объяснил. Ядро пишется каждый раз под новую задачу заново. К "Давно уже объяснил" надо дописать "... свою позицию". Я ее знаю. Это вдруг стало непререкаемой истиной? gudleifr писал(а): Написание ядра заранее - это: Это разработка инструмента для серии конкретных программ. Если в кварке ~10 тыс. строк, я не буду его каждый раз переписывать. Транслятор для того и пишется, чтобы решать на нем определенные задачи. Понятно, что кварк с его 3D-экраном и Win-only не годится для каких-то программ. Но параллельно надо и пробовать технологии, чтобы не изобретать каждый раз целый набор... и не откладывать на неопределенное время начало практической работы. |
Автор: | gudleifr [ Пн мар 09, 2015 20:46 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
Hishnik писал(а): Это вдруг стало непререкаемой истиной? Пока, как бы никто опровергнуть ее не смог.
|
Автор: | Hishnik [ Пн мар 09, 2015 20:55 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
gudleifr писал(а): Пока, как бы никто опровергнуть ее не смог. А оно надо? Начнем с того, что доказываются положительные утверждения, а не "опровергните меня". Далее, что значит "ядро пишется каждый раз под новую задачу заново"? Это можно выразить через квантор общности, да? Ну пробуем: "для каждой новой задачи (упс - что такое новая?) существует единственный и уникальный вариант ядра, которое должно быть использовано для ее решения". Сразу приходит ассоциация с потолстевшим мужем Анджелины Джоли Или будем утверждать, что существует биекция между множеством задач и множеством ядер Форта? Эти псевдонаучные игры - без меня. |
Автор: | Victor__v [ Вс дек 25, 2016 11:40 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
Ам, я как-то не понял зачем встраивать в ядро, ежели можно обойтись служебной библиотекой? Там переопределим нужные слова для анализа и скормим библиотеке тексты исходников. Сделал недавно подобное. Самому надоели ошибки от правки текста. Чего в СПФ только стоят лишние ; поставить. Последнее опр.слово ломается. А упр.структуры? Помню, полчаса ломал голову откуда на стеке два непонятных значения. Потом нашёл ошибку. |
Автор: | gudleifr [ Вс дек 25, 2016 12:09 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
Victor__v писал(а): Самому надоели ошибки от правки текста. Все ваши проблемы от "форт-компилятора". При этом теряются все преимущества метода. Из системы удаляется "умный пользователь" и остается только "тупой программист".P.S. Метрики - это совсем не то, что Вы думаете. |
Автор: | KPG [ Вс дек 25, 2016 12:20 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
В этой теме может быть и интересна возможность преобразования 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. |
Автор: | Victor__v [ Вс дек 25, 2016 12:31 ] |
Заголовок сообщения: | Re: Автоматизация статического анализа исходных текстов на Ф |
Цитата: P.S. Метрики - это совсем не то, что Вы думаете. Дельное замечание. Но лишнее ( отсутствующее) слово такой же недостаток, как и цикл в цикле или множество условных переходов. Знаю, это не метрика, это не статистика. Но базируется-то на этом. На статистике. на сборе данных. С вероятность 98% если кол-во if then или : ; не совпадают, то это ошибка. И на неё надо реагировать. Да сопровождение исходников комментариями тоже полезно. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |