Forth http://fforum.winglion.ru/ |
|
Навешивание обработчиков на компиляцию http://fforum.winglion.ru/viewtopic.php?f=2&t=3126 |
Страница 1 из 3 |
Автор: | Victor__v [ Сб май 13, 2017 01:11 ] |
Заголовок сообщения: | Навешивание обработчиков на компиляцию |
Мысли вслух. Зачем? Более эффективная поддержка возможных улучшений ( выравнивание памяти, лок.переменные, оптимизация и пр. ) Оптимизация тут стоит особняком. Сразу вводная. Есть Форт, дающий нативный код, есть поддержка инлайна. Проблема: бесящий итоговый код некого отрезка ( 10 20 + к примеру ) Вместо того, чтобы выдать 30 выдаётся "положить на стек 10, положить 20, сложить 2 элемента и пр." Решение: напишем обработчик с таким поведением: просканировать небольшую часть кодофайла на предмет поиска ситуации " положить на стек число" . Число в данном случае широкое понятие это м.б. и адрес и код символа и пр. Ежели ситуация найдена, вычленяем значения и вызываем xt слова, на который записан обработчик т.е на + . убираем лишний код в кодофайле и ставим обновлённый код с этим числом. Очевидно, что писать один и тот же обработчик на каждый подобный случай ( + - * / MOD LSHIFT RSHIFT ) не оправдано. Поэтому предлагается завести таблицу с такими полями: кол-во слов в группе, поле для слов, кол-во обработчиков в группе, поле для обработчиков Такая организация поддерживает два крайних случая: одно слово - мн-во обработчиков, мн-во слов - один обработчик. касательно примера: 7 xt1 xt2 ... xt7 пространство для расширения 1 xt пространство для расширения Для организации данного механизма и его поддержки понадобятся след.слова EVENT-WORD ( -- ) сделать посл опред слово в словаре словом имеющее предвыполнение ->EVENT ( xt1 xt2 -- ) добавить обработчик xt1 к слову xt2, которому нужно предвыполнение . Если xt2 не имеет соотв. флага выдать исключение ADD-EVENT-GROUP ( xt-e1 xt-e2 .. xt-en n xt-t1 xt-t2 .. xt-tn n -- ) добавить все xt-e? в группу слов, которая характеризуется произвольным кол-вом элементов xt-t? из группы Если какие-то элементы в двух перечнях совпадают, то дублирования не происходит. Если xt-t ... xt-tn не найдены в таблице событий, выдать исключение Если xt-e ... xt-en не имеют флага предвыполнения, то выдать исключение ->EVENT-GROUP ( xt-h xt-t1 xt-t2 .. xt-en n ) добавить обработчик xt-h в группу, которая характеризуется произвольным кол-вом элементов слов xt-t Если xt-t ... xt-tn не найдены в таблице событий, выдать исключение EVENT-COMPILE, ( xt -- xt|'noop|xt-n ) взять xt и найти его в таблице событий. Выполнить обработчики характерные для этого xt. Выдать на выходе xt-n определяемый спец.переменной. Результат м.б. тот что и на входе, равен noop или иному значению адреса Если обработчиков для xt не нашлось, вернуть xt Дополнительные моменты: обработчики должны иметь возможность прерывать обход по таблице т.е. выходить в конец кода EVENT-COMPILE, Таблица должна уметь расширяться ( маловероятно, думаю, 20 ячеек под каждую группу слов и обработчиков хватит ) Логично ввести возможность создания псеводнима для группы слов |
Автор: | gudleifr [ Сб май 13, 2017 12:45 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
Victor__v писал(а): Есть Форт, дающий нативный код, есть поддержка инлайна. Проблема: Правильно так: Проблема - [вместо нормального FORTH] есть Форт, дающий нативный код, есть поддержка инлайна. И почему какой-то идиот будет запрещать мне писать "10 20 +", если мне надо иметь в коде именно "10 20 +"? |
Автор: | _KROL [ Сб май 13, 2017 12:59 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
Я с gudleifr согласен. Форт всё-равно должен быть фортом. Ведь это как-то должно вычисляться? Через стек проще всего(это же не ассемблер). |
Автор: | Victor__v [ Сб май 13, 2017 13:19 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
_KROL писал(а): Ведь это как-то должно вычисляться? В примере 10 20 + изначально значение 30 вычисляется на этапе выполнения каждый, а может быть вычислено один раз во время компиляции Так и места меньше в кодах и быстрее. К тому же как писали раньше 10 20 + так и пишем сейчас. Вся работа происходит за кадром. Так что, форт остаётся фортом. Чтобы это не значило |
Автор: | gudleifr [ Сб май 13, 2017 13:29 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
Victor__v писал(а): как писали раньше 10 20 + так и пишем сейчас Фортер пишет "10 20 +" только для того, чтобы иметь "10 20 +" в коде!Например: http://fforum.winglion.ru/viewtopic.php?p=42297#p42297 Victor__v писал(а): Так что, форт остаётся фортом. Нет, "Форт-компилятор в нативный код" это не FORTH, а просто хреновый компилятор хреновой стековой нотации в хреновый код.
|
Автор: | F-MAP [ Сб май 13, 2017 23:52 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
Victor__v писал(а): _KROL писал(а): Ведь это как-то должно вычисляться? В примере 10 20 + изначально значение 30 вычисляется на этапе выполнения каждый, а может быть вычислено один раз во время компиляции Так и места меньше в кодах и быстрее. К тому же как писали раньше 10 20 + так и пишем сейчас. Вся работа происходит за кадром. Так что, форт остаётся фортом. Чтобы это не значило Victor__v писал(а): _KROL писал(а): Ведь это как-то должно вычисляться? Новые Фортеры наверно забыли известный код: [ 10 20 + ] LITERAL |
Автор: | Victor__v [ Вс май 14, 2017 10:12 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
F-MAP писал(а): Новые Фортеры наверно забыли известный код: [ 10 20 + ] LITERAL Если мне нужно зрительно выделить число полученное путём расчётов, то я пишу так Код: [ 1024 1024 * 100 * LIT, ] Но это случается не часто. А ваш пример это оптимизация кода вручную. Не каждый же раз переключать режимы, верно? А если нам надо вычислить какой-либо адрес динамически, то либо мириться с лишним кодом, который можно легко оптимизировать, либо каждый раз переключать режим, что чревато ошибками. Под фразой Цитата: можно легко оптимизировать подразумевается, не просто положить сюда непонятное число, метод расчёта которого забудется через неделю, а оптимизация в конечном коде.
|
Автор: | gudleifr [ Вс май 14, 2017 10:18 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
Victor__v писал(а): Не каждый же раз переключать режимы, верно? А для чего тогда сделано ручное переключение? Опять забиваем транзистором гвозди?И забудьте слово "оптимизация". Пока Вы реально не столкнетесь с тем, что программа не влазит в память или не укладывается в отведенное время не из-за программных ошибок, а из-за железа, Вы не поймете, что это такое. |
Автор: | Victor__v [ Вс май 14, 2017 10:51 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
Многоуважаемый gudleifr . Многие обитатели форума ценят ваше мнение. Естественно, вам лучше знать, что говорить в теме "Навешивание обработчиков на компиляцию" . Более того зачем касаться реализации данного механизма или его критики. Лучше всего поговорить о теологии форта, о том что значит быть фортером, об отличиях форт-языка от форт-метода, который часто используют люди вообще не слышавшие о форте. Или нет, лучше покритиковать вещи, которые имеют ту или иную вспомогательную роль, а ещё лучше провести аналогии с великим русским растением - хреном. И как же люди с образным мышлением могут обойти стороной пример по забиванию гвоздей гитарами, микроскопами, транзисторами, процессорами, телефонами и другими не менее полезными вещами? Если я из-за своей недальновидности что-то упустил, то отправьте мне сообщение в ЛС, исправлю. P.S. Интересно, что читатели данного форума увидят после этого сообщения? Ссылку на статью или сообщение по ранее названным темам? Ссылку на что-то новое? Картинку? Или вы, многоуважаемый gudleifr, выскажете нам своё мнение по поводу этого мессаджа, на которое вы имеете безоговорочное право? В любом случае обитатели форума готовы услышать и прочувствовать на себе любой ваш наказ. |
Автор: | gudleifr [ Вс май 14, 2017 10:57 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
Victor__v писал(а): Более того зачем касаться реализации данного механизма или его критики. Было бы что критиковать, была бы критика. А "теология"? Ну, не писать же сразу: "Учите матчасть!" Извините.
|
Автор: | gudleifr [ Вс май 14, 2017 12:45 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
Попробую объяснить. Вот, приходит еще один программист с очередной фичей, которая, будучи включенной в стандарт или требуя всего лишь небольшого исправления всего, что написано до него, открывает "бескрайние перспективы"... Как на это должны реагировать старые пердуны, которые наелись этими перспективами еще в бытность свою в трезвом уме и твердой памяти, плюс, совершенно не желающие переписывать весь свой код? Вот, если бы вместо библиотек и компиляторов им предложили фичу строки в две, которая имела бы конкретное применение в конкретном продукте, демонстрируя, что FORTH еще не совсем умер... |
Автор: | Hishnik [ Вс май 14, 2017 17:12 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
Victor__v писал(а): Если мне нужно зрительно выделить число полученное путём расчётов, то я пишу так Код: [ 1024 1024 * 100 * LIT, ] А оно что, так рассчитывается в цикле на миллиарды итераций? Зачем вообще жертвовать читаемостью кода в угоду "оптимизации", которую и не заметят. |
Автор: | Victor__v [ Вс май 14, 2017 17:46 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
Цитата: Зачем вообще жертвовать читаемостью кода в угоду "оптимизации", которую и не заметят. Вот и я про тоже. Постоянно переключать режимы - наживать ошибки. касательно [ 1024 1024 * 100 * LIT, ] ключевое слово "зрительно" можно и без [ ] , но так выделяется в коде, что на водит на мысли, а в друг там что-то важное? |
Автор: | Hishnik [ Вс май 14, 2017 23:27 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
Victor__v писал(а): Вот и я про тоже. Постоянно переключать режимы - наживать ошибки. Да тут вообще надо осторожно с оптимизациями. Вот была многолетняя эпопея у Максимова с макроподстановщиком. Только сделано было топорно, вручную, через перечисление вариантов кода и замены этого кода. Разумеется, нужен был инструмент задания правил. Но тут есть еще один аспект. Вот флагманские компиляторы с большим коллективом разработчиков действительно нуждаются в постоянном доведении до высокого уровня производительности. Потому что иначе будет плохо выглядеть по сравнению с конкурентами. Нужны и IDE, и библиотеки, и визуальные средства проектирования интерфейсов. Но нужно ли это для "точечного решения", каким часто является Форт? После 1-2 месяцев разработки основных функций стоит ли тратить еще 5-6 месяцев на добавление возможностей "как у всех"? Мне сильно кажется, что нет. |
Автор: | Victor__v [ Вс май 14, 2017 23:33 ] |
Заголовок сообщения: | Re: Навешивание обработчиков на компиляцию |
Оптимизация рассматривается здесь, как частный случай применения. Лично мне не нужна зверская оптимизация. но просматривать отъилнайненный код 10 20 + выше моих духовных сил. Вот с этим смириться не могу |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |