forther писал(а):
Алгоритм будет работать и без переноса, если вы примените вычитание/сложение отдельно к каждому байту.
Возможно in4 имел ввиду решение на форте, которое использует слова
+ и
-. Реализация этих слов в 16 битном форте на 8 битном процессоре использует перенос.
chess писал(а):
Благодарю.
chess писал(а):
исходников-то нет - продукт однако коммерческий сказать ничего не могу.
И не сможете, поскольку даже приобретя самый дорогой пакет содержащий исходники оптимизатора за ~$6000, вы подписываете договор о неразглашении, запрещающий вам рассказывать как оно устроено.

chess писал(а):
Однако до такого оптимизатор СПФ легко доработать можно.
Вот видите, а вы говорите что незнаете фортов с нормальной оптимизацией. VFX уже компилирует мой вариант идеально, и вы согласны что СПФ тоже легко до такого доработать.

chess писал(а):
Сначала нужно убедиться, что форт-система грамотно поставлена на аппаратную платформу, а потом уже смотреть как сделать оптимизатор.
Ну мы вроде не оптимизаторы обсуждаем а варианты решения задачи garbler. Попробую подытожить.
1. Ваш вариант без ассма:
Код:
: VSWAP1 ( xt1 xt2 -- ) >BODY SWAP >BODY 2DUP @ SWAP @ ROT ! SWAP ! ;
: VSWAP2 ' ' STATE @ IF POSTPONE 2LITERAL POSTPONE VSWAP1 ELSE VSWAP1 THEN ; IMMEDIATE
Преимущества:
- есть VSWAP1 берущий в качестве аргументов xt переменных.
Недостатки:
- код зависит от реализации VALUE, поэтому не переносим;
- генерирует очень неэффективный код на любых реализациях Форта;
2. Мой последний вариант:Код:
: VSWAP ( "v1 v2" -- )
>IN @ PAD 2 0 DO BL WORD COUNT CHARS TUCK 3 PICK SWAP MOVE + BL OVER C! CHAR+ LOOP SWAP >IN !
2 0 DO S" TO " CHARS TUCK 3 PICK SWAP MOVE + BL WORD COUNT CHARS TUCK 3 PICK SWAP MOVE + LOOP
PAD SWAP OVER - EVALUATE ; IMMEDIATE
Преимущества:
- независит от реализации VALUE на конкретом Форте, может быть использован практически везде, без изменений;
- генерирует максимально эффективный код, на который способен компилятор, без вмешательства ассемблера.
- соответствует стандарту ANSI94
Недостатки:
- использует PAD.
3. Ваш ассемблерный вариант:Код:
: VSWAP
' >BODY DUP ' >BODY DUP >CS C=@, SWAP >CS D=@, >CS @=D, >CS @=C,
; IMMEDIATE
Преимущества:
- генерирует максимально эффективный код (эффективнее за мой вариант);
Недостатки:
- применим только на SPF;
- использует не только Форт (это недостаток, поскольку в задаче было сказано: "усложнение задачи: решение должно быть совместимым со стандартом (одним из).").
Вот, гдето так.
