Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб окт 21, 2017 01:20

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 74 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Пт сен 08, 2017 17:50 
Не в сети
Аватара пользователя

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1961
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 32 раз.
Ethereal писал(а):
По поводу обвеса - я же сказал "сравниваем только приращения".
А кто Вам запретит в коде библиотеки, работающей со строками, сделать ф-ию strcpy()? Более того, если программа обозрима, то там будет использована ф-ия, для которой не понадобятся всякие SWAP-ы. Вот и сравнивайте "обвес": Ваши 9 слов и "call".
Если хотите честный эксперимент, то пересчитайте общую длину ассемблерной реализации всех мест Вашей "смарт-программы", где используется CMOVE (заменив очевидное использование cpystr() на ее вызов), и добавьте длину кода этой ф-ии. Будет намного меньше общей суммы Ваших "обвесов" и без учета кода CMOVE.
Что мы имеем в принципе: язык ассемблера, в котором мы можем "гранулировать" код по потребности, и FORTH, где "грануляция" нам навязана изначально. Т.е. мы, конечно, можем выиграть на "родных" для FORTH задачах (где пригодятся наши возможности работать с ПОТОКОМ, ЗНАЧЕНИЕМ, СТЕКОМ и СЛОВАРЕМ), но, в общем случае, всегда будем проигрывать.

Ethereal писал(а):
А в вашем примере 1 J LSHIFT в приращении даст цикл, а Форт не даст. SHL рег,CL такое только в персоналке есть.
Где в моем коде цикл? Или сдвиг на переменную величину?

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2093
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 34 раз.
В СССР ДССП называли "рабочей смесью". Может быть это название и не совсем подходит, но по отношению к тому как я программировал свои контроллеры самое то. Сначала вручную урезал набор подпрограмм фортсистемы для определенного MK под задачу, а потом надоело, и сделал это урезание автоматическим, путем введения многопроходной (3 прохода) трансляции программ. Где-то не надо обмена по последовательным портам, где-то не надо eprom, где-то не надо внешнего ОЗУ и/или ПЗУ и т.п. Поэтому ФортСистема(рабочая смесь) изначально ничего не отъедала.

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

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6076
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
chess писал(а):
По теме - искать доказательства, того, что на форте получаются более "плотные" программы, чем на чем-то еще - нецелесообразно, так как, во первых, плотнее чем маш.код все равно не получится,


Машинный код:
call addr1
call addr2
call addr3

ШК:
addr1
addr2
addr3

Добавляется, правда, адресный интерпретатор, но в данном случае имеем две "условно прямые". Одна Kx, другая kx + b, где K > k. Они явно пересекаются.

chess писал(а):
а в третьих - стоимость кристаллов падает и весовой коэффициент критерия "плотность кода ПО" в функции качества системы стремится сегодня к нулю.

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


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2093
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 34 раз.
Hishnik писал(а):
Машинный код:
call addr1
call addr2
call addr3

ШК:
addr1
addr2
addr3


ШК существовал до форта и используется вне форта сейчас.

Hishnik писал(а):
Ничего подобного, это не универсальное правило.

Имеется ввиду стоимость кристалла относительно стоимости всей системы.

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6076
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
chess писал(а):
ШК существовал до форта и используется вне форта сейчас.

Важнее, что Форт и такую технологию допускает. А еще важно, что 0-операндная машина тоже вносит свой вклад в сокращение размера кода. И что еще будем пробовать? Java? :)

chess писал(а):
Имеется ввиду стоимость кристалла относительно стоимости всей системы.

Хоть так, хоть так. Бывает задача "вписать BOM в 2$".


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

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 480
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
gudleifr писал(а):
А кто Вам запретит в коде библиотеки, работающей со строками, сделать ф-ию strcpy()? Более того, если программа обозрима, то там будет использована ф-ия, для которой не понадобятся всякие SWAP-ы. Вот и сравнивайте "обвес": Ваши 9 слов и "call
Хорошо, давай с strcpy или для пущей корректности с ассемблерным аналогом CMOVE с передачей параметров через регистры, а не стек, есс-но. Получается
Код:
   ldi   YL, low(адрес)
   ldi   YH, high(адрес)
   ld   r24, Y+
   ldi   r25, 0
   movw   ZH:ZL, YH:YL
   rcall   CMOVE   ;Копирование r25:r24 байт из YH:YL в ZH:ZL
   dec   r24   ;Предположим подпрограмма не портит r25:r24
   dec   r24   ;Требуемый результат на выходе помимо копирования
   ret
9 слов. Ноздря в ноздрю с Фортом. Итого опять получается, что Форт или не длиннее или короче.
gudleifr писал(а):
Где в моем коде цикл? Или сдвиг на переменную величину?
1 J LSHIFT это сдвиг единицы на переменную величину. За не имением нужного опкода делается циклом.
gudleifr писал(а):
язык ассемблера, в котором мы можем "гранулировать" код по потребности, и FORTH, где "грануляция" нам навязана изначально
Я упоминал в разговоре Форт для AVR, где грануляция ассемблерного и фортовского одинакова. Одно слово шитого кода - одна (а иногда, правда редко, и половина) ассемблерной команды. И это-ж не спроста я имел ввиду именно эту систему.
gudleifr писал(а):
Если хотите честный эксперимент, то пересчитайте общую длину ассемблерной реализации всех мест
Для чего этим экспериментом время терять ? Вас убедить ? Не, ради этого я лишний раз с постели не встану. А сам я уже увидел. что оно так.


Последний раз редактировалось Ethereal Сб сен 09, 2017 05:45, всего редактировалось 3 раз(а).

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

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 480
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
chess писал(а):
сделал это урезание автоматическим, путем введения многопроходной (3 прохода) трансляции программ.

Поэтому ФортСистема(рабочая смесь) изначально ничего не отъедала.
Ну так великолепный подход при кросс-трансляции. И я думал поначалу сделать также. Но потом взял и сделал шизовую систему без кросс-трансляции. К которой можно подключаться терминалом по RS-232 и вручную системой управлять, а если надо, то скармливать ей исходник - она сама себя дошьет. AVR сам свою флеш дошивает, то есть компилирует в себя сама целевая система. В частном случае этой системой оказалась даже смарт-карта. Не знаю почему сделал именно так, наверное потому, что офигенно чумово выглядит. Особенно со смарт-картой, потому-что компилятор находится на самой смарт-карте, а это что-то с чем-то. Вообще, когда мне приходит в голову всякая шиза я ее тут-же реализую. Чтобы шиза ожила.

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

Дело было во времена Win-98SE + XP. Шиза была такая.
К виндозной программе добавляется DOS-овский stub.
Один раз я взял и написал одно и то-же консольное, но полноэкранное
вроде Norton Commander-а, приложение на SPF 2.x под DOS и абсолютно
то-же самое на SPF 3.x под Windows. Приложение обеспечивало удобную
работу с некоторым агрегатом через RS-232. При этом досовский вариант
работал с COM-портами через порты ввода-вывода, а виндозный через
вызовы Windows-API. А потом взял и вмонтировал досовский вариант в
качестве stub в виндозный. Получилась программа которую все равно
где запускать. И увидел я, что это шизово и хорошо.

А потом пришла в голову мысль, а как сделать так, чтобы это были
не две разные программы, вложенные друг в друга матрешкой, в
которых задача закодирана шитым кодом в двух разных экземплярах,
а чтобы шитый код для обоих варинтов был общий ? Просто в качестве
реализации красивой, шизовой идеи. И подумал я, что если виндозная
программа будет 16-разрядной NE-Executable, то это будет вполне реально.
Более того у большей части слов их виндозная и досовская реализации нативным
кодом будут совпадать. И только совсем малая часть нативной реализации
слов должна будет ветвиться - где я запушена ? в ДОС-е или в Винде ?
И начал даже наметку такого досо-виндозного форта рисовать. И все
складывалось везде на редкость удачно, но разбилось об одну единственную
фигню - NE-приложения не знают что такое консоль. Они работают только с
окнами и больше ни с чем. Я даже книжку по внутренностиям Win-3.x
скачал, но нигде не нашел упоминания о связи NE-приложения хоть с
какой-то консолью. В Win 3.x не было консольных виндозных приложений.
Роль таковых в ней играли досовские. И ни досовиндозный Форт не нарисовать -
ему консоль нужна и даже одно приложение не сделать - если рисовать его
виндозный вариант оконным, то виндозный и досовский варианты шитого
кода перестанут иметь общее семантически. Вот ведь блин.


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

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1961
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 32 раз.
Ethereal писал(а):
Итого опять получается, что Форт или не длиннее или короче.
Посмотрите внимательно на код. Основные ассемблерные потери места - на загрузку параметров в нужные ф-ии регистры. Основные же потери FORTH - на перестановки стека (и избыточные иеерархии). Первых часто можно избежать, приписав некоторым регистрам "специальные значения" или, в связках ф-ий, сразу грузить "куда надо". Потери же "на стек" неизбежны.

Ethereal писал(а):
1 J LSHIFT это сдвиг единицы на переменную величину. За не имением нужного опкода делается циклом.
Эта операция в ассемблерном коде не нужна. Она не очень-то нужна и в FORTH-овском, здесь служит примером платы за удобство FORTH-писания.

Ethereal писал(а):
грануляция ассемблерного и фортовского одинакова.
Грануляцией я обозвал размер подпрограм. В языке ассемблера он произвольный: хочу, каждый чих оформляю, хочу, на большие куски делю. В FORTH - только заранее отмеренные минимальные кирпичики. Отсюда - и потери на "избыточные иерархии".

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


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

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1961
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 32 раз.
Ethereal писал(а):
Щас расскажу про еще одну шизу, чтобы сменить тему разговора...
Зачем менять тему на другую, в которой, судя по вбросу, Вы разбираетесь еще хуже, чем в предыдущей? Тем более, опять не относящейся к "Самозапросам на форт-софт".

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 708
Благодарил (а): 3 раз.
Поблагодарили: 31 раз.
gudleifr писал(а):
Ethereal писал(а):
Щас расскажу про еще одну шизу, чтобы сменить тему разговора...
Зачем менять тему на другую, в которой, судя по вбросу, Вы разбираетесь еще хуже, чем в предыдущей? Тем более, опять не относящейся к "Самозапросам на форт-софт".

Снобизм. опять снобизм :)

P.S. Основное сжатие Форт программ происходит из того факта, что СЛОВА сами завботятся о входных и выходных своих обрабатываемых параметрах.
а так как подготовка параметров для этих слов происходит часто достаточно высокоуровневыми словами, то отсюда и основной профит.
Цепочки слов, при использовании стека, достаточно оптимально выстраиваются для того, чтобы не манипулировать данными на нём без необходимости.
+ имеется возможность "кэширования" данных с использованием стека, что в регистровой архитектуре почти невозможно (не управляется программистом)
а т.к. "наверченность" классических языков достаточно большая (и удалённость от железа), то этот момент тоже не делает их более компактными при исполнении.


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

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1961
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 32 раз.
KPG писал(а):
Основное сжатие Форт программ происходит из того факта, что СЛОВА сами завботятся о входных и выходных своих обрабатываемых параметрах.


: INS_44 ( -- u ) LENGTH COUNT SWAP 2DUP CHAR+ -ROT CMOVE CELL- ;

Ага, видим. Половина кода - "забота о параметрах".

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


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

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 480
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
gudleifr писал(а):
Ага, видим. Половина кода - "забота о параметрах".
Занимающая размер 3-х ассемблерных команд. Но на ассемблере столько их будет ? Учитывая узкие места, такие как наличие аккамулятора или всего одного регистра-указателя у PIC и 6805 и трех у AVR огромное количество ассемблерного "клея" будет уходить на сохранение и восстановление старых значений регистров. А в Форте стек организует этот вопрос автоматически.

Вообще говоря, разные архитектуры должны уже самой своей организацией создавать разный процент избыточности. Как его оценить ? Думаю субъективной, но верной оценкой будет следующая : Пусть некто написал код с первой попытки. Насколько он вышел близким к кратчайшему ? Иначе говоря как долго можно этот код по размеру ужимать до тех пока возможностей его ужать уже не будет видно ? Ужимать не алгоритмически, а кодированием
Худшим в этом отношении будет PIC. Такое чувство, что код для него можно уминать до бесконечности и жмется он не на проценты, а в разы. На нем просто не реально сразу написать что-то близкое к самому короткому.
Лучшим - PDP-11 , где сразу кодируется то, что короче уже не может быть.
Остальные варианты промежуточные.
А что будет если шитым кодом, где каждое слово длиной в ассемблерную команду, привести архитектуру, например, к системе команд, подобной PDP-11 ? Да тут просто обязано на практике выйти сжатие. Не в теории, но на практике. Потому-что человек пишет не так, как это теоретически наилучшим образом возможно, а так как пишет человек. И Форт, как система команд, получше многих однокристалок будет в указанном отношении.
Второй критерий процента избыточности, проистекающего от самой архитектуры - это то, о чем ты думаешь, когда кодируешь алгоритм. В PDP-11 ты думаешь именно о самом алгоритме. А у PIC думаешь в первую голову о 37-и кирпичиках из которых складываешь код. Алгоритм, при этом, находится далеко на заднем плане сознания. И опять к каким эффектам приведет смена системы команд, а ведь фортизация - это в каком-то смысле смена системы команд ?
gudleifr писал(а):
судя по вбросу, Вы разбираетесь еще хуже
По какому вбросу ? Вброс делается с какой-то целью. Ну и какая тут может быть цель ? Просто захотелось рассказать. В плане генерации идей по одной штуке на дню и разбрасывания их во все стороны. Вы любите таким заниматься ?
А в плане способности разбираться, то в ассемблерах, самых, что ни на есть разных архитектур, я как раз разбираюсь, хотя бы по факту наличия опыта. А Вас в их отношении отличает очень удивительное "не знать, но мнение все равно иметь". Ну вот это, что вот было такое ?
gudleifr писал(а):
Честно говоря, мне кажется, что Вы либо плохо читали документацию на все эти эзотерические системы
То есть не знаю, руками не щупал, но все равно кажется. Снобизм+верхоглядство - такой получается коктейль.


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

Зарегистрирован: Чт дек 31, 2009 18:36
Сообщения: 1961
Откуда: Питер
Благодарил (а): 13 раз.
Поблагодарили: 32 раз.
Ethereal писал(а):
...

Бисер кончился.

_________________
Когда я говорю "понимаю" - это не значит, что я согласен, не значит, что я понимаю и вообще не значит, что я слушаю тебя. /Чарли, "2 1/2 человека"/


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 343
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
У фотошопа есть com-интерфейс или что-то подобное?
Хочу с форта снять несколько рутинных операций по сохранению

_________________
Цель: написать форт-систему
Подцель: pe-формат, скрыть ненужные слова из целевого словаря FORTH, отладка


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

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


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

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


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

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