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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 81 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 11:22 
Ethereal писал(а):
Чего-то никакого удовольствия от такой писанины не получил
Дык, очевидно. "Структура программы не зависит от задачи". Квадратно-гнездовой метод определения всего (то, над чем мы смеемся в ООП) и запись своего решения шаг за шагом - это две большие разницы.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 11:34 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Так зачем его записывать шаг за шагом, если оно даже в голове решается одним махом ? Цикл в цикле и повторение внутреннего цикла для вывода, если решение нашлось. У меня именно так в голове задача решается. И я именно так ее первый раз и записал.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 11:41 
Ethereal писал(а):
Так зачем его записывать шаг за шагом, если оно даже в голове решается одним махом ?
Если одним махом, то не надо. Один шаг - он и есть один шаг. Если Вам нравится читать код со вложенными циклами, то единственное, что Вы потеряли в первом варианте - это переложение на пользователя заботы о точной формулировке задачи.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 12:15 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
------------


Последний раз редактировалось Ethereal Ср сен 06, 2017 17:03, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 12:32 
Ethereal писал(а):
От перегона кода одно- и двухадресной архитектуры в безадресную (стековую) только от этого уже получается сжатие за счет возрастания плотности неявной информации.
Нет никакого сжатия само по себе. Наоборот, обычно сравнительно небольшое количество рабочих адресов заменяется на гораздо большее число операций перетасовки стека. Т.е. замена информации о данных на информацию об операциях над данными. Конечно, введя операции над сложными структурами (опять см. Бэкуса) можно сэкономить.

Например, у Вас:

1 I LSHIFT J AND IF DATA I CELLS + @ + THEN

Тут, ведь, необходим всего один полный адрес - слагаемого. А сколько стековых операций!


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 17:41 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Ну тут-же не просто адрес, тут вычисляемый адрес. Ну возьмем какую-нибудь популярную архитектуру, например Atmel AVR. Одно слово шитого кода занимает место одной ассемблерной команды. Так тут только одно место на ассемблере будет короче - J AND в одну команду при двух если - если J на готово в регистре и если мы оперируем байтами, а не словами. А остальное на ассемблере будет или не короче или явно длиннее - сложение с адресом ADD+ADC, 1 I LSHIFT циклом.
И это еще более менее приличная архитектура. На неприличной, типа MicroChip PIC, даже написать пересылку строки как серпом по яйцам - косвенный указатель существует всего один, плюс все данные нужно всегда проталкивать через W-аккамулятор (и значение указателя тоже), короче все через один указатель и один аккамулятор и про переключение регистровых банков при этом не забывать. Там очень мило первые $60 байт ОЗУ в одном банке, а последующие $80 в другом, да еще и последние $20 из них отображаются на общую память во всех банках. Код получается избыточным просто потому, что кошмарным. Как он может быть не избыточным, если ты больше воюешь с проталкиванием всего и вся через полторы дырки, кромсанием строки на куски и переключением банков, чем дело пишешь ?
А у Motorola 6805 если тебе нужна пересылка строки, то ты должен динамически создать для пересылки байта подпрограмму в ОЗУ и ее в цикле вызывать. И после каждого вызова корректировать в ней адреса. Потому как команд косвенного чтения и записи по произвольному адресу нет. Тоже избыточно. Вернее, они есть, но только для первых 256-и байт памяти. Но даже если строка там, то в то, что регистров кроме аккамулятора всего один все равно упрешься. Поэтому для строк в первых 256-и байтах памяти или динамическая подпрограмма в ОЗУ или пересылка опять в том-же стиле PIC. В любом варианте получается избыточно. Не код, а война с архитектурой.
Вот у PDP-11 не избыточно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 21:42 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Примитивные задачки нужно решать на примитивном языке
Код:
: ZS5
n[ \10$JyIl&?Ig*A+@ ]
/P:11g*d:2hd:A2`V0:3y1ly$ n` /3+:3tL3Z? n` /.tL\t0:3L ;

STARTLOG
5 -3 -2  2 -5 10 1 -2 ZS5

LOG
Код:
5 -3 -2
-2 2
5 -5
5 -2 2 -5
-3 -2 -5 10
-3 2 1
5 -3 2 -5 1
5 -3 -2
2 -2
5 -3 -2 2 -2
5 2 -5 -2
-3 -5 10 -2
-3 -2 2 -5 10 -2

Ok ( [8].. 2 4294967291(-5) 10 1 4294967294(-2) )

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 22:15 
[Ethereal"]Ну возьмем какую-нибудь популярную архитектуру...[/quote]

SHR RM, 1
JNC $+1
ADD RA, RD[RI]

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

chess писал(а):
Примитивные задачки нужно решать на примитивном языке
Ну, как бы, с тем же успехом, я могу выучить адреса слов своего FORTH и втюхивать их в программаторе...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Чт сен 07, 2017 01:39 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
gudleifr писал(а):
SHR RM, 1
JNC $+1
ADD RA, RD[RI]

Честно говоря, мне кажется, что Вы либо плохо читали документацию на все эти эзотерические системы
Gudleifr заумничался. Да еще и с каким пафосом.
Я говорил про AVR, PIC и 6805. А то, что он привел не есть первое, не есть второе и не есть третье.

Сынок, ты свою жену учи щи варить. В ПИК-е, кстати, вообще условных переходов нет. И это вовсе не эзотерическая система. Производитель этой системы купил Atmel за 3,5 лярда долларов. Мальца бабосов поднял на продаже своей системы. Именно потому, что его система оказалась на редкость практичной. С кривой глазами опытного программиста, но легкой в изучении новичками системой из 37-и команд.
gudleifr писал(а):
либо их надо побеждать не шитым кодом, но нормальным компилятором, ориентированном на это уродство...
Когда ассемблерное еле лезет в камень какой еще в задницу компилятор ? Есть однокристалки для которых и ЯВУ-компиляторов-то нет, за полной их бесполезностью при столь ограниченных ресурсах. Вот прочти
http://www.cyberforum.ru/microcontrolle ... 02153.html
А у КР1878ВЕ1 ресурсов поболе, чем у того ПИК-а с которым они когда-то конкурировать собирались, будет. КР1878ВЕ1 была когда-то выпущена как заменитель PIC16F84 с той-же разводкой ног, аппаратной совместимостью, но с большей памятью на борту и другой, почти совершенной системой команд.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Чт сен 07, 2017 11:03 
Ethereal писал(а):
В ПИК-е, кстати, вообще условных переходов нет.
А чем плоха BTFSC ? Я, конечно, отстал от жизни, но мне кажется, что любая система команд (даже техас какой-нибудь), позволяет писать эффективный код, иначе ей бы не пользовались. Кстати, если здесь есть знатоки перечисленных систем, пусть попробуют закодировать эти три команды... Не думаю, что где-то это перевесит два десятка стековых операций (не считая стека возврата) приведенной FORTH-строки. И займет места больше, чем приведенный выше десяток слов.

Ethereal писал(а):
какой еще в задницу компилятор ?
Позволяющий высокоуровнево писать программу в терминах, близких идеологии железа, а не тупо приводить к привычному императиву, которое приходится кодировать с жуткой избыточностью.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Чт сен 07, 2017 17:57 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Написал тут текст. Закину.

Проблема состоит в 8-разрядности однокристалок. Понятно, что адресное пространство 8-разрядным быть не может, поскольку в 256 байт кода много путного не поместить. Поэтому адресное пространство у 8-разрядных однокристалок шире разрядности процессора. Это приводит к проблемам с косвенной адресацией. Ну вот как 8-разрядным регистром косвенно адресоваться в 16-разрядном, к примеру, адресном пространстве ? И тут появляются ТРИ подхода :

1.) Подход AVR
Сделать пары 8-разрядных регистров для косвенной адресации. Такими парами являются XH:XL YH:YL ZH:ZL. Косвенно адресует такая пара целиком. Но база для косвенной адресации остается все равно восьмишестиразрядной. Т.е. есть режим адресации off_6[Z] , помимо чисто косвенного. Поэтому для вычисления произвольного адреса приходится с парами XH:XL YH:YL ZH:ZL работать опять-таки парами команд ADD+ADC.

2.) Подход ПИК
Формировать полный адрес так : младший байт из 8-разрядного регистра для косвенной адресации, а старший из регистра, хранящего текущий банк. В результате вся память оказывается побита на банки и есть только косвенный режим адресации. А чтобы переключений банков стало меньше в конце каждого банка есть область адресов, проецирующаяся на общую для всех банков память. Кроме того, по иным причинам, банки сделаны не 256-и, а 128-байтные. Вернее для косвенной адресации они 256-и байтные, а для прямой 128-и. В итоге в конце каждого 128-байтного банка есть 32-байтная область общей памяти для всех банков. И от этого память напрочь потеряла связность. Максимальная непрерывная длина области памяти равна 96 байт. От этого копирование строки производится с шинкованием ее на куски.

3.) Подход 6805
Предоставить в наборе команд режим адресации off_16[x], где x - восьмибитный регистр. Т.е. смещение относительно заранее известной базы лежит в диапазоне 00..FF. Из-за этого для доступа к произвольному адресу (когда база при компиляции кода еще не известна) приходится в ОЗУ формировать динамически подпрограмму lda off_16 rts или lda off_16,x rts и перед исполнением этой подпрограммы динамически заполнять нужным значением поле off_16 прямо в коде команды lda.
gudleifr писал(а):
А чем плоха BTFSC ?
Хороша, хороша. Только это условный пропуск команды, а не условный переход. btfSc - здесь S означает "skip". Замена условных переходов парами "условный skip"+"безусловный переход" была еще в PDP-8. В PDP-8 для общности был даже безусловный skip.
gudleifr писал(а):
Кстати, если здесь есть знатоки перечисленных систем, пусть попробуют закодировать эти три команды...
Стороннее подтверждение ищешь ? Смешно. Я когда-то опкоды 6805 на память помнил почти все и короткие штучки писал без ассемблера. Какого тебе еще знатока надо ?
Говорю тебе, что ...

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


Последний раз редактировалось Ethereal Чт сен 07, 2017 18:34, всего редактировалось 5 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Чт сен 07, 2017 22:17 
Ethereal писал(а):
Я когда-то опкоды 6805 на память помнил почти все и короткие штучки писал без ассемблера.
А я когда-то свои процессоры из секций собирал... По Мику и Брику... И что? Я прошу привести примеры кода современных кристаллов, для которых возможен FORTH-выигрыш в данном случае. Так трудно?


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

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Не трудно.

1.) Понятно, что на ассемблере можно написать что угодно. Поэтому результат
трансляции с любого языка по совместительству является и потенциальным
результатом ассемблирования некоего ненаписанного, но вполне возможного,
ассемблерного исходника. Только на этом основании можно утверждать, что
ни один язык никогда не переплюнет ассемблер. Но ! На ассемблере пишет
человек. И пишет он по человечески. А транслятор может породить код
не человеческий. Поэтому сравним человеческий стиль написания и
Фортовский нечеловеческий.
2.) Я говорил, что Форт сначала отъедает одним махом изрядный кусок,
а потом (при трансляции программы) код растет медленно. Поэтому
сравниваем только приращения при трансляции, считая начальное
отъедание форой. На большой программе фора должна перекрыться.
3.) Понятно, что искусственный пример ничего не докажет, поскольку
был создан искусственно и именно для доказывания.

Поэтому берем естественный пример уже примененный на практике.
С того сайта из примеров написания на AVR-Форте для смарт-карт.

Обработка одной из команд карты :
Код:
: INS_44 ( -- u ) LENGTH COUNT SWAP 2DUP CHAR+ -ROT CMOVE CELL- ;
Породила 9 слов, включая EXIT. Заголовков слов нет, они укладывались
отдельно и были отрезаны. Теперь пишем то-же самое по человечески,
так что код будет предельно оптимальным :
Код:
   ldi   YL, low(адрес)
   ldi   YH, high(адрес)
   ld   r16, Y+
   mov   r18, r16
метка:   ldd   r17, Y+1
   st   Y+, r17
   dec   r16
   brne   метка
   dec   r18
   dec   r18   ;Также требуемый результат на выходе, помимо копирования
   ret
Придраться не к чему. Образчик ассемблирования с оптимизацией в длину.
Да только он был черезчур человеческим и занял 11 слов. А не человеческий
фортовский 9. А вот человек не умеет писать не по человечески.
И не будет писать не по человечески, коли по человечески хорошо вышло (см. код выше).
Так вот именно за счет своей не человечности Форт, в случае данной его реализации,
дает или не хуже или короче.

И это я выбрал еще хороший 8-разрядный камень. С автоинкрементом, понимаешь.
На котором ассемблер - не кошмар.


Последний раз редактировалось Ethereal Пт сен 08, 2017 17:39, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Пт сен 08, 2017 17:39 
Ethereal писал(а):
Поэтому берем естественный пример уже примененный на практике.
Не передергивайте. Я просил именно тот пример, который мы обсуждали. Вы же нажульничали - всю работу Вашего примера делает CMOVE, поэтому сравнивать ассемблерный код здесь надо с его кодом, а не с кодом его обвеса.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Пт сен 08, 2017 17:41 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
По поводу обвеса - я же сказал "сравниваем только приращения". Ибо начальное отъедание памяти уже оговорил.
А в вашем примере 1 J LSHIFT в приращении даст цикл, а Форт не даст. SHL рег,CL такое только в персоналке есть.


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

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


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

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


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

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