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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Сб май 13, 2017 01:11 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Мысли вслух.
Зачем?
Более эффективная поддержка возможных улучшений ( выравнивание памяти, лок.переменные, оптимизация и пр. )
Оптимизация тут стоит особняком.
Сразу вводная.
Есть Форт, дающий нативный код, есть поддержка инлайна.
Проблема:
бесящий итоговый код некого отрезка ( 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 ячеек под каждую группу слов и обработчиков хватит )
Логично ввести возможность создания псеводнима для группы слов

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Сб май 13, 2017 12:45 
Victor__v писал(а):
Есть Форт, дающий нативный код, есть поддержка инлайна.
Проблема:

Правильно так:
Проблема - [вместо нормального FORTH] есть Форт, дающий нативный код, есть поддержка инлайна.

И почему какой-то идиот будет запрещать мне писать "10 20 +", если мне надо иметь в коде именно "10 20 +"?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Сб май 13, 2017 12:59 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Я с gudleifr согласен. Форт всё-равно должен быть фортом.
Ведь это как-то должно вычисляться? Через стек проще всего(это же не ассемблер).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Сб май 13, 2017 13:19 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
_KROL писал(а):
Ведь это как-то должно вычисляться?

В примере 10 20 + изначально значение 30 вычисляется на этапе выполнения каждый, а может быть вычислено один раз во время компиляции
Так и места меньше в кодах и быстрее.
К тому же
как писали раньше 10 20 + так и пишем сейчас. Вся работа происходит за кадром.
Так что, форт остаётся фортом. Чтобы это не значило :D

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Сб май 13, 2017 13:29 
Victor__v писал(а):
как писали раньше 10 20 + так и пишем сейчас
Фортер пишет "10 20 +" только для того, чтобы иметь "10 20 +" в коде!

Например: http://fforum.winglion.ru/viewtopic.php?p=42297#p42297

Victor__v писал(а):
Так что, форт остаётся фортом.
Нет, "Форт-компилятор в нативный код" это не FORTH, а просто хреновый компилятор хреновой стековой нотации в хреновый код.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Сб май 13, 2017 23:52 
Не в сети

Зарегистрирован: Пт июн 06, 2008 14:21
Сообщения: 128
Откуда: Карелия
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Victor__v писал(а):
_KROL писал(а):
Ведь это как-то должно вычисляться?

В примере 10 20 + изначально значение 30 вычисляется на этапе выполнения каждый, а может быть вычислено один раз во время компиляции
Так и места меньше в кодах и быстрее.
К тому же
как писали раньше 10 20 + так и пишем сейчас. Вся работа происходит за кадром.
Так что, форт остаётся фортом. Чтобы это не значило :D

Victor__v писал(а):
_KROL писал(а):
Ведь это как-то должно вычисляться?


Новые Фортеры наверно забыли известный код: [ 10 20 + ] LITERAL


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вс май 14, 2017 10:12 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
F-MAP писал(а):
Новые Фортеры наверно забыли известный код: [ 10 20 + ] LITERAL

Если мне нужно зрительно выделить число полученное путём расчётов,
то я пишу так
Код:
[ 1024 1024 * 100 * LIT, ]

Но это случается не часто.

А ваш пример это оптимизация кода вручную. Не каждый же раз переключать режимы, верно?

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

Под фразой
Цитата:
можно легко оптимизировать
подразумевается, не просто положить сюда непонятное число, метод расчёта которого забудется через неделю, а оптимизация в конечном коде.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вс май 14, 2017 10:18 
Victor__v писал(а):
Не каждый же раз переключать режимы, верно?
А для чего тогда сделано ручное переключение? Опять забиваем транзистором гвозди?

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


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вс май 14, 2017 10:51 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Многоуважаемый gudleifr . Многие обитатели форума ценят ваше мнение. Естественно, вам лучше знать, что говорить в теме "Навешивание обработчиков на компиляцию" . Более того зачем касаться реализации данного механизма или его критики. Лучше всего поговорить о теологии форта, о том что значит быть фортером, об отличиях форт-языка от форт-метода, который часто используют люди вообще не слышавшие о форте. Или нет, лучше покритиковать вещи, которые имеют ту или иную вспомогательную роль, а ещё лучше провести аналогии с великим русским растением - хреном. И как же люди с образным мышлением могут обойти стороной пример по забиванию гвоздей гитарами, микроскопами, транзисторами, процессорами, телефонами и другими не менее полезными вещами? Если я из-за своей недальновидности что-то упустил, то отправьте мне сообщение в ЛС, исправлю.

P.S.
Интересно, что читатели данного форума увидят после этого сообщения? Ссылку на статью или сообщение по ранее названным темам? Ссылку на что-то новое? Картинку? Или вы, многоуважаемый gudleifr, выскажете нам своё мнение по поводу этого мессаджа, на которое вы имеете безоговорочное право? В любом случае обитатели форума готовы услышать и прочувствовать на себе любой ваш наказ.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вс май 14, 2017 10:57 
Victor__v писал(а):
Более того зачем касаться реализации данного механизма или его критики.
Было бы что критиковать, была бы критика. А "теология"? Ну, не писать же сразу: "Учите матчасть!" Извините.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вс май 14, 2017 12:45 
Попробую объяснить.
Вот, приходит еще один программист с очередной фичей, которая, будучи включенной в стандарт или требуя всего лишь небольшого исправления всего, что написано до него, открывает "бескрайние перспективы"... Как на это должны реагировать старые пердуны, которые наелись этими перспективами еще в бытность свою в трезвом уме и твердой памяти, плюс, совершенно не желающие переписывать весь свой код? Вот, если бы вместо библиотек и компиляторов им предложили фичу строки в две, которая имела бы конкретное применение в конкретном продукте, демонстрируя, что FORTH еще не совсем умер...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вс май 14, 2017 17:12 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Victor__v писал(а):
Если мне нужно зрительно выделить число полученное путём расчётов,
то я пишу так
Код:
[ 1024 1024 * 100 * LIT, ]

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вс май 14, 2017 17:46 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Цитата:
Зачем вообще жертвовать читаемостью кода в угоду "оптимизации", которую и не заметят.

Вот и я про тоже. Постоянно переключать режимы - наживать ошибки.

касательно [ 1024 1024 * 100 * LIT, ] ключевое слово "зрительно" можно и без [ ] , но так выделяется в коде, что на водит на мысли, а в друг там что-то важное?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вс май 14, 2017 23:27 
Не в сети
Administrator
Administrator
Аватара пользователя

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

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

Но тут есть еще один аспект. Вот флагманские компиляторы с большим коллективом разработчиков действительно нуждаются в постоянном доведении до высокого уровня производительности. Потому что иначе будет плохо выглядеть по сравнению с конкурентами. Нужны и IDE, и библиотеки, и визуальные средства проектирования интерфейсов. Но нужно ли это для "точечного решения", каким часто является Форт? После 1-2 месяцев разработки основных функций стоит ли тратить еще 5-6 месяцев на добавление возможностей "как у всех"? Мне сильно кажется, что нет.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Навешивание обработчиков на компиляцию
СообщениеДобавлено: Вс май 14, 2017 23:33 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Оптимизация рассматривается здесь, как частный случай применения.
Лично мне не нужна зверская оптимизация.
но просматривать отъилнайненный код 10 20 + выше моих духовных сил. Вот с этим смириться не могу :mrgreen:

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


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

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


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

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


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

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