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

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

Для этого сравним:

Реальные преимущества ассемблера:

1. Программист никогда не оказывается перед проблемой "где у меня сейчас лежит что-то", всё на уровне физических мест и всё ясно с форматми данных, никаких подвохов компилятора.
2. Никаких ограничений компилятора, все команды процессора доступны

а форта?


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
С "1" даже не соглашусь.

В свое время долго мучался с ассмеблером x86, не понимая, почему простая инструкция mov bx,address укладывает в bx вовсе не адрес, а то, что по этому адресу лежит. После ассемблера для Z80 это казалось дикостью.

О том, что запутаться в регистрах, где что лежит, тоже легко можно - даже и не вспоминаю.

Пункт "2" тоже не всегда работает, опять же из-за запутанности этого самого ассемблера с "дикими" инструкциями.

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

Главные преимущества:
1. Абсолютная расширяемость Уж не знаю, как там на Си, можно ли взять и переделать какой-нибудь оператир print под свои изыски, а Форте можно переделать любое слово, любую команду. Переделывать надо, разумеется, зная что делаешь, чтобы не рубить сук, на котором сидишь.

2. Компактность. Для современного железа, это, конечно, уже не такое необходимое преимущество, но все же, не в каждую железяку можно воткнуть DDR на гиг.

3. Скорость. "Программа написанная на форте работает быстрее программы, написанной на ассемблере, потому что она обращается к регистрам напрямую, минуя процессор." (с) ... Шутка шуткой, но варианты, когда программа на форте работает действительно быстрее, существуют. Ссылку привести не могу, а теоретически именно из-за компактности, когда весь фортовый код с данными умещается в кэш, скорость оказывается выше. В конце концов, сравнивать скорость можно и не с ассемблером, а с другими языками, ну, там с бейсиком каким-нибудь :)

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
вопрос писал(а):
В чём могут быть реальные преимущества Форта?


Форт можно рассматривать как макроассемблер стековой машины. Со всеми вытекающими. Ясно, где что лежит (на стеке и в памяти), можно выполнить любую команду (в случае необходимости заинлайнить и оформить как новое слово). Подвохов компилятора нет в силу стопроцентного соответствия между исходным текстом и сгенерированным кодом (слова транслируются в call, числа - в push, структуры управления в jmp).


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

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


Для многих процессоров, при вызове примитивов, мокрокоманда NEXT
работает быстрее чем пара CALL RET.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 16, 2006 11:45 
Монолог о языке Форт.

Для меня и не только, при кажущемся неудобстве и простоте синтаксиса, сравнимом
с ассемблером, Форт остается мощнейшим из созданных языков программирования
со своей парадигмой разработки программ.
Познакомится с языком можно по изданной литературе ( начав с рускоязычного ресурса forth.org.ru ).
C середины 90х годов в России литература по данному языку не издавалась.

В качестве коммерческого продукта в россии он все же используется, как встроенный в
средство автоматизации планировщика nncron ( nncron.ru) на PC . На нем также написан мультисервер
eserv ( eserv.ru). Частично, как скриптовый язык он один из реальных участников процессов
автоматизации производства.

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

Программа представляет цепочку взаимодействующих слов, без явной связи по параметрам.
Стандартным компонентом языка для передачи параметров является стек. Стек также
является вычислительным устройством языка. ( Например типичное сложение с участием
стека можно выразить так 5 4 + результат останется на стеке заменив числа 5 и 4 )
Введение скобочной записи не представляет сложности. Типов данных как таковых
в языке почти нет ( char , int , double int, float ). Типы данных никак не определяются.
Для Char и int при арифметических операциях выделяется одна ячейка стека ( в зависимости от разрядности системы) для double 2-e ячейки. Float заносится на свой стек данных.
Операции над числами одинарной или двойной длины отличаются добавочным признаком в слове.( т.е. в зависимости от требуемого действия выбирается соответствующее слово).
Слово никак не контролирует обрабатываемые параметры на стеке. Для безнакового сравнения есть свое слово. В языке отсутствуе механизм меток.

Такое вот это чудо при первом рассмотрении.

P.S.
Хочется адекватных возможностей в классических языках.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 16, 2006 12:50 
Цитата:
Для многих процессоров, при вызове примитивов, мокрокоманда NEXT
работает быстрее чем пара CALL RET.
NEXT - как она кодируется?
Естественно, что простое jmp должно быть быстрее, чем call - ret , насколько я знаю, инструкция call вырабатывает ещё код работы со стеком (для RET)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 16, 2006 13:27 
Не в сети

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

Anonymous писал(а):
Введение скобочной записи не представляет сложности. Типов данных как таковых
в языке почти нет ( char , int , double int, float ). Типы данных никак не определяются.


Для введения типов можно завести стек типов. А действия функции при этом,
ставятся в зависимость от содержимого этого стека.
http://forth.spb.su:8888/f-pl1.rar

Цитата:
В языке отсутствуе механизм меток.


http://home.earthlink.net/~neilbawd/goto.txt

http://fpauk.narod.ru/A_IF.F - альтернатива механизма меток

Цитата:
P.S.
Хочется адекватных возможностей в классических языках.


Форт можно расширить ровно до классических языков и при этом
они могут унаследовать свойства форта.
Самых простой способ:
взять исходный текст некого языка и пеевести его исходный текст форта.
http://forth.spb.su:8888/CinF11.rar
http://www.plati.ru/asp/pay.asp?id_d=45066

Вобщето, форт больше операционная система и виртуальная машина, чем
язык программирования


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Anonymous писал(а):
Цитата:
Для многих процессоров, при вызове примитивов, мокрокоманда NEXT
работает быстрее чем пара CALL RET.
NEXT - как она кодируется?


В зависимости от процессора и типа шитого кода.

Для ARMа достаточно одной команды для 4-байтного прямого шитого кода
ldr pc, [r11], #4
но я использовал относительный 2-байтный прямой шитый код
для экономии памяти и адресной независимости. Получилось 2-е
ldrsh r9, [r11], #2
ADD pc,r11,r9

где r11 отведен под адрес шитого кода


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

Зарегистрирован: Пт май 12, 2006 00:52
Сообщения: 88
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Ну а на клссических x86 NEXT реализовывался в духе:

inc eax
jmp [eax]

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


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
В WIN32FOR:
mov eax, 0 [esi]
add esi, # 4
jmp [eax]

Если сделать:
add esi, # 4
jmp [esi]
То надо иметь ввиду, что esi содержит не следующий адрес, а на 4 меньше.

можно:
lodsd
jmp [eax]


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
перед lodsd надо бы cld, чтобы не заглючило,
если программист забыл направление вернуть на место.
Хотя, можно и не делать, если не давать ему на ассмеблере
много писать...

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Да уж, программист-то может еще и esi использовать.


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Дык, его просто придется использовать, как текущий адрес интерпретации. Особенно, если это слово какое-нибудь с использованием данных, следующих за кодом слова (как в BRANCH, например :) )

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Вот чем и плох щитый код в системах, допускающих широкое использование ассемблера. Можно развалить весь адресный интерпретатор. Машинный код в этом смысле лучше.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 01, 2006 15:58 
Люди, вы тут, никак, решили Форт порекламировать?! А ведь Гость писал: «Основу языка составляет механизм саморасширения в нужную проблемную область». Программист пусть отдыхает, пока Форт саморасширяется и саморекламируется :)
Другие пишут: «слова транслируются в call, числа - в push, структуры управления в jmp». Они уже низвели форт-идеологию до ассемблера. Привязали к архитектуре компутера. Герои.
По теме: смысл Форта в том, что решения по пунктам 1 и 2 фортер принимает сам. Сам вводит ограничения (где ему удобно), сам определяет степени свободы (сознательно рискуя при этом забыть, где чего лежит). Но рядовой человек конституциев не пишет. Потому большинство программистов не тянут на Форт. Им подавай готовенькое, или они даже не задумывались о идеологии взаимодействия человека и компьютера.


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

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


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

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


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

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