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

...
Google Search
Forth-FAQ Spy Grafic

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




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

Зарегистрирован: Пт май 12, 2006 00:52
Сообщения: 88
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хищник писал(а):
Balancer писал(а):
Не имеющих такой команды - вагон и маленькая тележка. Начиная с тех же PDP Smile

Серьезно? PDP не умеет управлять потоком выполнения команд? :)


Ты читай меня буквально, а не по своим предположениям :)

На PDP нет _специальной_ команды jump/br/jmp/etc. Есть совершенно равнозначные с другими команды mov для r7.

>Например? Чтобы не было возможности вернуться к точке вызова, но при этом выполнялся Форт.

Я сейчас точных моделей не вспомню, ибо последний раз занимался ими лет 10 назад. Кажется, это были ВЕ48/ВЕ52. У них не было команд call/ret, была команда записи текущего IP в специальный регистр. Стека как такового, соответственно, тоже не было вообще.

>И при этом выполняющие Форт?

Именно. Народ умудряется делать даже Форт на системах, где нельзя писать данные в память кода, а код - в память данных.

>Причем которые не могут не только положить число на стек, но и организовать стек в памяти и завести указатель

Блин, да пойми ты, наконец, что есть процессоры, на которых стека как такового, вообще нет. В принципе. Можно ручками сохранить байт в косвенно адресуемую память, инкрементить ручками же этот регистр. 3..5 команд на аналог push. Но именно аналога push - нет. Есть процессоры, где и косвенной адресации нет. Правда, вот, про Форт для них уже не слышал :D

>Что такое "идеология Форта"?

На колу мочало, начинай сначала... А не рассказать ли тебе сказочку про белого бычка.

Если ты искренне считаешь, что call/jump/ret/шитый код/подпрограммный код имеют хоть какое-то отношение к идеологии Форта то, извини, ты не Фортер :D

>Что до call/push/jmp - дискутировать надо прежде всего с Барановым-Ноздруновым

Опять мы путаем "язык Форт" с "его реализациями".

Это разные, совершенно ортогональные вещи.

>там описано выполнение программы Форт-машиной.

И что, давно Форт стал определяться характером выполнения программы форт-машиной?

>И делает она вызов, возврат, и переход к следующему слову.

Извини, но даже в рамках традиционных x86-решений ты спорол чушь. Слово NEXT не делает никакого возврата. И, кстати, из-за этого вплоть до времён ~486 прямой шитый код был быстрее подпрограммного на вызове примитивов.

>Но та же МТ должна иметь перемещаемый указатель - неважно какими командами и как он перемещается.

Угу. А Волга, меж тем, впадает в Каспийское море. Это-то тут при чём?

_________________
... чтобы понять рекурсию, нужно сперва понять рекурсию ...


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

Зарегистрирован: Пт май 12, 2006 00:52
Сообщения: 88
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Геннадий писал(а):
Balancer писал(а):
Не имеющих такой команды - вагон и маленькая тележка

Ёлы-палы! А ещё таких команд не было у арифмометра!


Если тебе доводилось работать только с x86 (и идеологическими близнецами), то это не значит, что других _современных_ процессоров такого плана не существует.

_________________
... чтобы понять рекурсию, нужно сперва понять рекурсию ...


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

Зарегистрирован: Пт май 12, 2006 00:52
Сообщения: 88
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
вопрос писал(а):
Операция помещения в стек и выемки из стека - довольно продолжительные по количеству операций.


На подавляющем большинстве современных процессоров это 1 или 1/2 такта. Куда меньше-то?

вопрос писал(а):
СуПЕРАССЕМБЛЕР? так ведь польза от ассемблера - скорость, отсутствие лишних движений, а тут нельзя расположить число непосредственно.


А Форт - это, вообще-то, язык высокого уровня. Удивительно, нет?

_________________
... чтобы понять рекурсию, нужно сперва понять рекурсию ...


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6328
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
Balancer писал(а):
На PDP нет _специальной_ команды jump/br/jmp/etc. Есть совершенно равнозначные с другими команды mov для r7.

Ну так я именно про такие равнозначности и говорю! jump может быть и макросом, главное, чтобы процессор мог перейти к новому адресу. А как будет называться и кодироваться команда - совершенно неважно.
Balancer писал(а):
Именно. Народ умудряется делать даже Форт на системах, где нельзя писать данные в память кода, а код - в память данных.

Это-то как раз несложно. Но когда данные нельзя писать в данные - это уже даже и не процессор.
Balancer писал(а):
На колу мочало, начинай сначала... А не рассказать ли тебе сказочку про белого бычка.

Если ты искренне считаешь, что call/jump/ret/шитый код/подпрограммный код имеют хоть какое-то отношение к идеологии Форта то, извини, ты не Фортер Very Happy

А какой же я Фортер? Я Хищник! :) Вон на мне даже написано - Тигр! :)
Ну и что же тогда есть эта самая "идеология Форта", которая не относится ни к одной отдельно взятой концепции, используемой в конкретных реализациях?
Balancer писал(а):
И что, давно Форт стал определяться характером выполнения программы форт-машиной?

Так о каком Форте мы говорим? О той абстрактной сферической лошади в вакууме, которая может все (но мало чего хочет)? О том, что это язык, который можно "неограниченно расширять"? И который от этого ускользает как предмет обсуждения? Еще раз: есть этапы трансляции программы. Пусть берем классику - Dragon Book. Начинаем:
1) Лексический анализ
Как таковой отсутствует. Заключается в выборе лексем из входного потока по символу-разделителю.
2) Синтаксический анализ
Проходом по односвязному списку возвращает указатель на структуру-описание данного токена в этом списке, либо признак литерала, либо ошибку "слово не найдено"
3) Семантический анализ
Выполняется immediate-словами самостоятельно
4) Генерация промежуточного кода
Генерируется вызов найденного слова, либо код push literal (в терминах системы команд виртуальной машины), либо код, генерируемый immediate-словами по их усмотрению.
5) Оптимизация
То, что можно сделать однопроходной заменой. Макроподстановки, разворачивание кода.
6) Генерация исполняемого кода.
Как таковая отсутствует. Что получится.

Попытайся упростить хоть один из этих этапов.

Balancer писал(а):
>И делает она вызов, возврат, и переход к следующему слову.

Извини, но даже в рамках традиционных x86-решений ты спорол чушь. Слово NEXT не делает никакого возврата. И, кстати, из-за этого вплоть до времён ~486 прямой шитый код был быстрее подпрограммного на вызове примитивов.

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

Balancer писал(а):
Если тебе доводилось работать только с x86 (и идеологическими близнецами), то это не значит, что других _современных_ процессоров такого плана не существует.

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

Balancer писал(а):
Операция помещения в стек и выемки из стека - довольно продолжительные по количеству операций.
На подавляющем большинстве современных процессоров это 1 или 1/2 такта. Куда меньше-то?

При стеке в памяти? Очень много. При отсутствии независимого аппаратного указателя - еще больше. Добавляется программная модификация указателя, что дает еще как минимум две транзакции.


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
аппаратный стек

Это что? Такое есть? насколько лучше ? в х86 ?

_________________
понимаю некоторую бестолковость некоторых вопросов


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6328
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
вопрос писал(а):
Это что? Такое есть? насколько лучше ? в х86 ?

В ПЛИС - сколько угодно. Стек, размещенный на кристалле, и система команд, выполняющая операции непосредственно над этими числами (а не путем загрузки в регистры, модификации и отправки обратно). В x86 - нет. Для Форта - лучше намного.


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Хищник писал(а):
вопрос писал(а):
Это что? Такое есть? насколько лучше ? в х86 ?

В ПЛИС - сколько угодно. Стек, размещенный на кристалле, и система команд, выполняющая операции непосредственно над этими числами (а не путем загрузки в регистры, модификации и отправки обратно). В x86 - нет. Для Форта - лучше намного.

ДА, я всегда задавался вопросом - почему стек, который так часто используют не реализован аппаратно в х86, тупо ведь, достаточно написать на ассемблере одну и ту же функцию с использованием стека и без, посчитать время, за счёт обращения к памяти время возрастает в разы


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

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Забыл спросить - всегда ли переменные в Форт лежат в стеке?

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


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

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

Это переделаный Smal32 под платформу Win32.

Жуткие тормоза. И стандарт редкий. Я признаю только форт-системы с открытым
исходным текстом. Я как-то сделал дисфорт для Smal32 http://forth.spb.su:8888/disf.f32
Думал извлечь материал для ФортОС.

Цитата:
Mihail писал(а):
Я реализовал полноценную поддержку языка С.

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


Файлы с расширением F_L - это листинги одноименных файлов с расширением F .
Их можно удалить. Генерация листингов производится словом INCLUDED_L .
За исключением генерации листингов его действия аналогичны INCLUDED .
Кстати, оптимизатор неплохой.(Оптимизацией результата работы языка С
я почти не занимался)


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

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


Не понял вопрос. Значения глобальных переменных лежат в отведенных для них
ячейках памяти. Для локальных необходим стек, тот или иной.

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


Если я правильно понял, то так работает мой оптимизатор
http://wiki.forth.org.ru/optimizer


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6328
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
вопрос писал(а):
ДА, я всегда задавался вопросом - почему стек, который так часто используют не реализован аппаратно в х86, тупо ведь, достаточно написать на ассемблере одну и ту же функцию с использованием стека и без, посчитать время, за счёт обращения к памяти время возрастает в разы

На момент разработки 8086/8088 это было довольно накладно по аппаратуре. На стеке ведь передается не только адрес возврата, но и локальные параметры, так что его объем может быть достаточно большим. На сегмент стека в 16-разрядных x86 отводилось до 64 кб - для того времени запредельный объем, реализуемый только во внешней микросхеме. Потом появились соображения совместимости (с чего вдруг менять системную архитектуру так кардинально?), а потом появился большой и быстрый кэш.
вопрос писал(а):
Забыл спросить - всегда ли переменные в Форт лежат в стеке?

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 07, 2006 18:28 
Ух, все такие умные! А у меня уже мозги послабее стали, программированием их давно не тренирую, да и пальцы крючковатые на клаве дрожат... Потому мне Форт в последние-то годы и приглянулся. Мощностью своей. Большим количеством мысли на оператор. Зверской сверткой инструкций на байт кода. Предрасположенностью к глубокой вложенности процедур и вообще их детальному структурированию.
Поэтому мне иногда даже смешно слушать (и читать сквозь очки-то) about ресурсы, каковые он отъедает. Память там, стеки и навороты лишних инструкций... Ведь главное - экономия труда программиста. Уж я то лишний раз клавишу не нажму! Мышкой не пошевелю! И извилиной тоже:)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 07, 2006 19:25 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Хищник писал(а):
Если есть возможность чуть усложнить кодогенератор, то именно так и надо делать. Вопрос в том, что раскладку по регистрам не всегда можно сделать за один проход трансляции, а Форт хорош в том числе и тем, что в минимальном варианте использует именно однопроходную трансляцию.


А если мне всё равно, сколько проходов, а интересует только оптимальность?


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6328
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
КатастрофаС писал(а):
Поэтому мне иногда даже смешно слушать (и читать сквозь очки-то) about ресурсы, каковые он отъедает. Память там, стеки и навороты лишних инструкций... Ведь главное - экономия труда программиста. Уж я то лишний раз клавишу не нажму! Мышкой не пошевелю! И извилиной тожеSmile

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

А ресурсы - всегда надо смотреть. Потому что всегда будут маленькие, средние и большие системы. И если можно будет получить свойства большой при ресурсах (и стоимости) средней, это только плюс.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6328
Благодарил (а): 14 раз.
Поблагодарили: 99 раз.
вопрос писал(а):
А если мне всё равно, сколько проходов, а интересует только оптимальность?


Тогда получается большой и сложный оптимизатор. Сразу вылезает классика computer science во всей красе. Оптимальность вообще сложный вопрос, до сих пор им занимаются.


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

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


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

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


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

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