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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 85 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 12:33 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
wormball писал(а):
А каким образом тогда это делается?

Здесь слово STACK-OFF по смыслу выключает движение стека при исполнении операций с параметрами на нем, а
на самом деле оно дает смещение для адреса варианта исполнения операции + в этой ситуации ее применения.
wormball писал(а):
Если уж гнаться за производительностью программы, то не ценой производительности программиста и потери читаемости. Как известно, 10% кода исполняются 90% времени, так эти 10% можно и вручную оптимизировать.

Насчет читаемости - это спорно. Это дело привычки.
Производительность программиста на 90% зависит не от языка, на котором он пишет, а от уровня понимания задачи, которую он решает когда пишет программу.
Можно и на ассемблере написать быстрее, чем на самом выразительном языке. А вот производительность кода программы впрямую зависит от реализации языка.
И еще насчет производительности программиста.
Современные языки развиваются в сторону исключения таких сущностей в тексте программы, которые впрямую не относятся к предмету решаемой задачи. Для них стеки, словари, работа с ячейками памяти и вообще какое-либо отвлечение на особенности реализации транслятора - это лишние сущности, забивающие оперативный объем внимания программиста, а значит - факторы мешающие, затрудняющие, и как следствие - снижающие производительность.
Программист в идеале должен быть сосредоточен только на самом предмете решаемой задачи.
Назовем, то что занимает объем внимания программиста кроме понятий самой задачи, например, оперативным тезаурусом программиста, а то, что нужно транслятору для трансляции текста программы, например, инструментальным тезаурусом транслятора. В этих терминах тенденция развития современных языков - это перетекание тезауруса программиста в тезаурус транслятора – то есть увеличиваем полезный объем внимания программиста за счет увеличения возможностей транслятора. С этой точки зрения Форт на идеальный язык программирования не тянет по определению. Форт это разновидность макроассемблера(с возможностью интерактивного доступа к процессу трансляции), потерявшая основное его(ассемблера) качество - быстроту кода. Для начала, по-моему, надо заняться повышением быстродействия кода, даваемого Фортом, а для этого пересмотреть принципы реализации его транслятора.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 13:00 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
chess писал(а):
С этой точки зрения Форт на идеальный язык программирования не тянет по определению.


По какому определению?

Цитата:
Форт это разновидность макроассемблера(с возможностью интерактивного доступа к


Попробуй на макроассемблере определить новую директиву.

Цитата:
потерявшая основное его(ассемблера) качество - быстроту кода.


На сколько? Тест проводился?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 13:32 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Mihail писал(а):
По какому определению?

По моему определению направления развития языков программирования.
Mihail писал(а):
Попробуй на макроассемблере определить новую директиву.

Можно обойтись уже существующими. Приведи пример когда это может понабиться.
Mihail писал(а):
На сколько? Тест проводился?

Зачем проводить - итак очевидно.
Для примера посмотри код цикла 1000000000 0 DO LOOP на Форте/
и на MASM.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 14:07 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
chess писал(а):
По моему определению направления развития языков программирования.


Форт то ты как определяешь.

Цитата:
Mihail писал(а):
Попробуй на макроассемблере определить новую директиву.

Можно обойтись уже существующими. Приведи пример когда это может понабиться.


На пример, когда меня не устраивает польская запись
http://wiki.forth.org.ru/%C8%EC%EF%E5%F ... F%E7%FB%EA
http://spf.cvs.sourceforge.net/spf/devel/~mak/infix.f

http://fforum.winglion.ru/viewtopic.php ... ight=#3205
Я произвожу INCLUDE map-файла сгенерированого Си линковщиком.

Цитата:
Для примера посмотри код цикла 1000000000 0 DO LOOP на Форте/
и на MASM.


Что за DO LOOP на MASM?

Код:

>: TTT 1000000000 BEGIN 1- DUP 0= UNTIL ;
Ok
>SEE TTT

58AFF0 8945FC      MOV     FC [EBP] , EAX
58AFF3 B800CA9A3B   MOV     EAX , # 3B9ACA00
58AFF8 8D6DFC      LEA     EBP , FC [EBP]
58AFFB 90      XCHG     EAX, EAX
58AFFC 83C0FF      ADD     EAX , # -1
58AFFF 75FB      JNE     58AFFC
58B001 C3      RET     NEAR
END-CODE   Ok


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 14:49 
WingLion писал(а):
В данном случае, главный смысл в том, что придумать все на все случаи - нереально, поэтому, стоит подумать, как сделать механизм дополнений простым и прозрачным.

Надо делать либо многоуровневые абстракции, либо какие то узкоспециализированые вещи, по принципу как это сделано в той же FreeBSD. Другое дело что возникает проблема совместимости core words, которые у всех свои. :shuffle;
WingLion писал(а):
Обвешать Форт либами, как новогоднюю елку игрушками можно, но надо еще сделать и так, чтобы "при навешивании новых елка не кололась и старые игрушки не падали и не разбивались" :)

Тут поможет только тестирование ака test-units. Тут на форуме уже выкладывали вариант тестирования библиотек. Параллельно получатся не только тесты но и примеры использования.
WingLion писал(а):
Однако, если язык не научить мяукать и махать хвостом, то он кошкой никогда и не станет :)

Согласен целиком и полностью. :)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 15:55 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Mihail писал(а):
Форт то ты как определяешь.


Форт - программа(на входе - один поток информации, на выходе - другой поток информации, возможны варианты с ответвлением выходной информации во входной поток)
с набором правил двух типов:
1 тип правил: как менять правила 1 типа и 2 типа по текущей информации из входного потока(возможны варианты с использованием для этой цели информации из выходного потока, даже если текущий выходной поток не замкнут на входной) сюда также входит информация по реконфигурации движения входного и выходного потока.
2 тип правил: как трактовать текущую информацию из входного потока если она не является меняющей правила -
как доформирование кодового массива или как исполнение команд из этого массива.

Все варианты обработки и реконфигурации входного и выходных потоков дают возможные варианты Форт-систем. Железо в данном определении не меняется по ходу работы Форт-системы.

Чем большая вариативность(гибкость) заложена в Форт-систему, тем больше забит объем внимания программиста при написании программ, тем меньше ресурсов у него на решение задачи.


Mihail писал(а):
Что за DO LOOP на MASM?

Код:


>: TTT 1000000000 BEGIN 1- DUP 0= UNTIL ;
Ok
>SEE TTT

58AFF0 8945FC MOV FC [EBP] , EAX
58AFF3 B800CA9A3B MOV EAX , # 3B9ACA00
58AFF8 8D6DFC LEA EBP , FC [EBP]
58AFFB 90 XCHG EAX, EAX
58AFFC 83C0FF ADD EAX , # -1
58AFFF 75FB JNE 58AFFC
58B001 C3 RET NEAR
END-CODE Ok


Код:
на ASM этот цикл (в 2 раза быстрее чем на Форте)

M1: MOV  EAX, # 3B9ACA00
      ADD  EAX, # -1
      JNE    M1
      RET

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 16:33 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
chess писал(а):
Mihail писал(а):
Форт то ты как определяешь.


Форт - программа(на входе - один поток информации, на выходе - другой поток


Что-то мудрено. При том, что Форт (в своей основе) самое примитивное средство
разработки программ.

Цитата:
Чем большая вариативность(гибкость) заложена в Форт-систему, тем больше забит объем внимания программиста при написании программ, тем меньше ресурсов у него на решение задачи.


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

Mihail писал(а):
Что за DO LOOP на MASM?

Код:


Код:
на ASM этот цикл (в 2 раза быстрее чем на Форте)

M1: MOV  EAX, # 3B9ACA00
      ADD  EAX, # -1
      JNE    M1
      RET


M1: не туда поставил.
В цикле Форта те-же 2-е команды
Код:
58AFFC 83C0FF ADD EAX , # -1
58AFFF 75FB JNE 58AFFC


К стаит при DO LOOP тоже 2-е команды

Код:
>: MMM 1000000000 DO LOOP ;
Ok
>SEE MMM

58AFF0 BA00000080   MOV     EDX , # 80000000
58AFF5 2BD0      SUB     EDX , EAX
58AFF7 8D9A00CA9A3B   LEA     EBX , 3B9ACA00  ( MMM+3B421A10  ) [EDX]
58AFFD 8B4500      MOV     EAX , 0 [EBP]
58B000 8D6D04      LEA     EBP , 4 [EBP]
58B003 6815B05800   PUSH    , # 58B015
58B008 52      PUSH    EDX
58B009 53      PUSH    EBX
58B00A 90      XCHG     EAX, EAX
58B00B 90      XCHG     EAX, EAX
58B00C FF0424      INC     [ESP]
58B00F 71FB      JNO     58B00C
58B011 8D64240C      LEA     ESP , C [ESP]
58B015 C3      RET     NEAR
END-CODE   Ok


Думаю [ESP] из кеша будет считываться быстро.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 17:12 
chess
Небольшое замечание: наблюдается традиция саботирования вами любой темы, в которой участвуете.

Человек просил высказаться касательно своей форт-системы. А тут опять про белого бычка и общую теорию "если-бы-да-кабы"...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 23:01 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
chess писал(а):
Форт - программа(на входе - один поток информации, на выходе - другой поток информации, возможны варианты с ответвлением выходной информации во входной поток)
с набором правил двух типов:

Это сильно похоже на определение транслятора "как такового".


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 23:51 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 16, 2006 23:02
Сообщения: 65
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
[offtopic]
Нашёл на настоящем форуме кнопку быстрого цитирования и очень этому обрадовался.
[/offtopic]

WingLion писал(а):
В данном случае, главный смысл в том, что придумать все на все случаи - нереально, поэтому, стоит подумать, как сделать механизм дополнений простым и прозрачным.

Обвешать Форт либами, как новогоднюю елку игрушками можно, но надо еще сделать и так, чтобы "при навешивании новых елка не кололась и старые игрушки не падали и не разбивались"

Собственно об этом я и думаю, и в этом же заключался мой первоначальный вопрос.

WingLion писал(а):
Однако, если язык не научить мяукать и махать хвостом, то он кошкой никогда и не станет

Конечно, любую форт-программу можно рассматривать как расширение языка, но я всё-таки думал, что выражение "выразительные средства" подразумевает несколько другие вещи.

chess писал(а):
Здесь слово STACK-OFF по смыслу выключает движение стека при исполнении операций с параметрами на нем, а
на самом деле оно дает смещение для адреса варианта исполнения операции + в этой ситуации ее применения.

Ну даёт оно смещение, а как оно понимает, какое надо дать смещение, кроме как анализируя входной поток?

chess писал(а):
В этих терминах тенденция развития современных языков - это перетекание тезауруса программиста в тезаурус транслятора – то есть увеличиваем полезный объем внимания программиста за счет увеличения возможностей транслятора. С этой точки зрения Форт на идеальный язык программирования не тянет по определению.

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

Mihail писал(а):
Форт то ты как определяешь.

: Форт определяешь как ты то ; :D

chess писал(а):
Чем большая вариативность(гибкость) заложена в Форт-систему, тем больше забит объем внимания программиста при написании программ, тем меньше ресурсов у него на решение задачи.

Это почему? По-моему, как раз напротив: ежели, скажем, паскаль предоставляет только строго ограниченный набор возможностей, программист всё время вынужден думать, как впихнуть свой замысел в это прокрустово ложе, тогда как на форте такой проблемы нет.

Хищник писал(а):
Это сильно похоже на определение транслятора "как такового".

Это сильно похоже на определение алгоритма "как такового".

По теме: наткнулся на настоящем форуме на обсуждение ForthEC, понравилась идея с именованными параметрами. Пожалуй, возьму на вооружение, только пока что не придумал, как сделать, чтобы локальные имена были видны только в определении.

_________________
Я знаю только то, что я ничего не знаю. /(с) Сократ/
Мой форт | Мой проект ИИ


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 01, 2006 10:33 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
wormball писал(а):
]Так в этом весь принцип форта - программирование на нём состоит как раз в перетекании тезауруса программиста в тезаурус транслятора. Так что с этой точки зрения форт вполне себе рулит, в отличие от подавляющего большинства языков.

Может я не совсем точно выразился. Уточняю - в форте тезаурус программиста не перемещается в тезаурус транслятора, а копируется, у программиста он продолжает оставаться таким же
каким и был. Короче - с налета реализовать сложный алгоритм на форте более затратно по времени, чем например на Sheme. Выход один - брать из современных языков идеи и запихивать их в библиотеки. Для создания интерфейсов из Смолтока или ТСЛ/ТК, для математики из АПЛ, для логического вывода из Пролога и т.д.
Тут просто надо определиться - какие задачи хочешь решать и что в итоге от этого хочешь иметь.
Я вот электронщик никогда не программировал, делал разные контроллеры для автоматизации производства.
Ушел от нас программист - мне пришлось программировать. Сделал транслятор на Форте для МК. Понял наконец что такое Форт, заодно стал интересоваться программированием вообще. Появляются по мере программисткой
практики идеи, часть идей уходит в библиотеки, а часть уходит в ядро транслятора - то, что часто используется, так сказать это и есть "выразительные средства". При этом приходится переделывать мой Форт.
wormball писал(а):
Ну даёт оно смещение, а как оно понимает, какое надо дать смещение, кроме как анализируя входной поток?

STACK-OFF это именованный параметр для операции +, в этом смысле его действительно надо взять из входного потока, но это не приводит к понижении гибкости, скорее наоборот, а кроме того увеличивается быстродействие.
wormball писал(а):
Это почему? По-моему, как раз напротив: ежели, скажем, паскаль предоставляет только строго ограниченный набор возможностей, программист всё время вынужден думать, как впихнуть свой замысел в это прокрустово ложе, тогда как на форте такой проблемы нет.

Не считаю паскаль развитым (современным) языком, хотя и на нем есть много библиотек.

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


Последний раз редактировалось chess Ср ноя 01, 2006 11:50, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 01, 2006 10:47 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Mihail писал(а):
M1: MOV EAX, # 3B9ACA00
ADD EAX, # -1
JNE M1
RET

Да точно, надо так
Код:
      MOV  EAX, # 3B9ACA00
M1: ADD  EAX, # -1
      JNE    M1
      RET

Вопрос, а код для : TTT 1000000000 BEGIN 1- DUP 0= UNTIL ;
получен с помощью оптимизатора?
Если так, тогда понятно почему он минимальным получился.


Я все это к тому, что надо пытаться все же на уровне синтаксиса транслятора позаботиться об увеличении быстродействия выходного кода.

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


Последний раз редактировалось chess Ср ноя 01, 2006 12:39, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 01, 2006 11:21 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Mihail писал(а):
Что-то мудрено. При том, что Форт (в своей основе) самое примитивное средство
разработки программ.

Я тут хотел сказать, что для форта основное, а что вспомогательное.
Во вспомогательное попали организация словарей, взаимодействие с памятью, наличие слов немедленного исполнения, интерфейс с ОС, базовый набор форт-примитивов, обработка литералов и т.д. и т.п. То есть набор этих характеристик определяет конечно конкретную реализацию Форт-системы, но не отвечает на вопрос что такое форт. В главное попало наличие 1-го типа правил и пожалуй возможность изменять конфигурацию входного и выходного потоков.
При наличии основного все вспомогательное может быть изменено по ходу восприятия входного потока.
При таком взгляде понятно, что форт это метаязык и что любая конкретная форт-система может быть получена
на определенном этапе работы исходной форт-системы, так же исходная форт-система по мере обработки входного потока может быть трансформирована в транслятор любого заданного языка.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 01, 2006 11:35 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
profiT писал(а):
chess
Небольшое замечание: наблюдается традиция саботирования вами любой темы, в которой участвуете

Мне кажется, что это вам только кажется.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 01, 2006 13:51 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
chess писал(а):
Вопрос, а код для : TTT 1000000000 BEGIN 1- DUP 0= UNTIL ;
получен с помощью оптимизатора?


Естественно.

Цитата:
Я все это к тому, что надо пытаться все же на уровне синтаксиса транслятора позаботиться об увеличении быстродействия выходного кода.


Синтаксиса транслятора призван обеспечить наглядность.
Об эффективности пусть заботится оптимизатор.
При программировании на ассемблере часто жертвуют эффективностью
ради наглядности.


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

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


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

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


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

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