Forth - язык нового поколения :)

 
1 2 3 4
+
-
edit
 

zespri

новичок
Кирилл>Можно у тебя побольше узнать о потрохах виртуальной .NET-машины (в английском я не силен)?

Можно, а что конкретно тебя интересует?
 
RU Кирилл #29.09.2004 07:27
+
-
edit
 

Кирилл

втянувшийся

Все :)
Хотя бы азы.
Стековая или смешанная (стеково-регистровая) архитектура?
Как передаются входные и выходные параметры процедур?
Что представляет собой вызов процедуры (метода объекта)?
- Сами понимаете, вселенная-то на моей стороне.
- Вот это мне таким вульгарным и кажется.
 
+
-
edit
 

zespri

новичок
>>Хотя бы азы.

Ну значит так. Весь код описывается метаданными которые хранятся в том же файле что и байт код. Это значит, что каждый метод имеет описание количиства и типа параметров и возвращаемого значения. Во время выполнения VM следит за следующими вещами предоставляемыми методу:

- Указатель на текущую инструкцию (ip)
- Стек
- Массив локальных переменных
- Массив аргументов
- Метаданные
- Локальная память
- Дескриптор состояния возвращения
- Секьрити дескриптор

ip не адресуем и стек не адресуем. массив локальных переменных это то что определяется при компиляции метода, в нём присутствуют все локальные переменнве которые используются в методе. Кстати на этапе компиляции определяется максимальная глубина стека. Если она будет привышена во время исполнения, то будет возвращена ошибка. Массив аргуметов выглядит точно так же как и массив переменных но содержит аргументы метода. Каждый слот в обоих массивах содержит одно значение независимо от типа. есть специальные инструкции для чтения - записи в эти массивы. Что такое метаданные я написал выше, во времяи сполнения они разумется read-only. Локальная память это память которую может выделить метод и которая будет освобождна по окончании выполнения метода. Эта память адресуема. Не существует инструкций для освобождения этой памяти, она освобождается когда заканчивается метод. С# в режиме по умолчанию этой памятью не пользуется вообще. Псоледние две вещи не заслуживают упоминания на данной стадии, одна предназанчена для восстановления состояния виртуальной машины после возвращаения из метода и вторая связяана с встроенное в VM секьюрити.

Стек у каждого метода свой собственный и в начале выполнения метода он пуст. Для вызова метода в стек кладутся параметры (и, может быть, this) и вызывается инструкция вызова. Параметром этой инструкции является токен метаданных который определяет какой именно метод надо вызывать. при выполнении этой инструкции VM создаёт новую среду для метода, копирует параметры со стека в массив аргументов и при необходимости инициализирует локальные переменные (есть бит отвечающий за необходимость такой инициализации). Вот собственно и всё. При возвращении результат будет положен на стек выхывающего метода.
 
+
-
edit
 
популярность форта неплохо сдерживают - отсутствие более менее похожего на IDE, отсутствие заточенных под конечного юзера библиотек, отсутствие документации..
 

zespri

новичок
Jelsay>популярность форта неплохо сдерживают - отсутствие более менее похожего на IDE, отсутствие заточенных под конечного юзера библиотек, отсутствие документации..[»]

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

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

СРПО (IDE) нет и её простоя минимальная реализация - скажем для SPF - мне кажется способствовало бы популяризации самого SPF и Форта вообще.
Была же классная идея с редактором FE (еще тем что под ДОС) - что сейчас мешает наростить над SPF4хх аналогичный "примитив" из editor+run+error ?

Вместо документации - исходники - зачем пользователю, не писателю собственных фортов, исходники? Ему нужно нормальное описание пакета - особенно библиотек. И где если не секрет лежит это "полно" документации? на форт.орг.ру? Более менее ориентированные на юзеров были Ларионовские отечественные GP-FORH и SMAL32, но они тихонько сдохли т.к. были не под WIN.

Я понимаю что многие возразят - "Форт слишком широк, что бы его загонять в рамки" (типа ..Аллах слишком велик что-бы говорить - "НЕТ".. :-)), но надо быть реалистами - огромный потенциал Форта как языка адаптируемого пользователем просто не используется этим самым пользователем по причине слишкой низкоуровнвости начальной адаптации. Для популяризации нужен более высокий стартовый уровень - или хотя бы логически взаимосвязанные стройные и "стандартные" решения его достижения.

Изучать программирование вообще и как работают всякого рода трансляторы - тут у Форта соперников нет - в электронике тоже он не плох особенно при оладке всякой "цифровухи" - хотя уже и тут обычно начинаются проблеммы с редактированием в строчным интерпретатором, а пакетный цикл edit+save+forth+error+edit.. задолбывает

с уважением, Jelsay
 
+
-
edit
 

Balancer

администратор
★★★★★
На счёт документации - SP-Forth по исходникам документирован просто дальше некуда. У меня, сколько им пользуюсь, вопросов по ANS-форту ни разу не возникало:
code forth
  1. USER-CREATE S-O 16 CELLS TC-USER-ALLOT \ порядок поиска
  2. USER-VALUE CONTEXT    \ CONTEXT @ дает wid1
  3.  
  4. : FIND1 ( c-addr -- c-addr 0 | xt 1 | xt -1 ) \ 94 SEARCH
  5. \ Расширить семантику CORE FIND следующим:
  6. \ Искать определение с именем, заданным строкой со счетчиком c-addr.
  7. \ Если определение не найдено после просмотра всех списков в порядке поиска,
  8. \ возвратить c-addr и ноль. Если определение найдено, возвратить xt.
  9. \ Если определение немедленного исполнения, вернуть также единицу (1);
  10. \ иначе также вернуть минус единицу (-1). Для данной строки, значения,
  11. \ возвращаемые FIND во время компиляции, могут отличаться от значений,
  12. \ возвращаемых не в режиме компиляции.
  13.   0
  14.   S-O 1- CONTEXT
  15.   DO
  16.    OVER COUNT I @ SEARCH-WORDLIST
  17.    DUP IF 2SWAP 2DROP LEAVE THEN DROP
  18.    I S-O = IF LEAVE THEN
  19.    1 CELLS NEGATE
  20.   +LOOP
  21. ;
  22.  
  23. : SFIND ( addr u -- addr u 0 | xt 1 | xt -1 ) \ 94 SEARCH
  24. \ Расширить семантику CORE FIND следующим:
  25. \ Искать определение с именем, заданным строкой addr u.
  26. \ Если определение не найдено после просмотра всех списков в порядке поиска,
  27. \ возвратить addr u и ноль. Если определение найдено, возвратить xt.
  28. \ Если определение немедленного исполнения, вернуть также единицу (1);
  29. \ иначе также вернуть минус единицу (-1). Для данной строки, значения,
  30. \ возвращаемые FIND во время компиляции, могут отличаться от значений,
  31. \ возвращаемых не в режиме компиляции.
  32.   S-O 1- CONTEXT
  33.   DO
  34.    2DUP I @ SEARCH-WORDLIST
  35.     DUP IF 2SWAP 2DROP UNLOOP EXIT THEN DROP
  36.    I S-O = IF LEAVE THEN
  37.    1 CELLS NEGATE
  38.   +LOOP
  39.   0
  40. ;


И всё в таком духе. Т.е. по каждому слову подробное описание, со всеми состояниями стека, на русском, и тут же видно как оно устроено. Чего же больше желать? :)

Кстати, под SP-forth есть "нормальная" документация в CHM. Но у меня под рукой нет за ненадобностью.

IDE же - да, не хватает... Но лично мне она не нужна, а популяризация Форта для меня не настолько актуальна, чтобы я взялся за её написание, отставив на это время в сторонку десятки более актуальных задач :)
 

Dmivs

новичок
Добрая ночь!

Многообразна эта многолетняя ветка форума, от железа до Forth.NET :)
Думаю, мой вопрос также не будет оффтопиком.
Я адаптировал и расширил для достаточно нестандартного встроенного управляющего компьютера e-Forth.
Как база для освоения незнакомого железа он показал себя великолепно. Хотелось-бы продолжать использовать его, так-как требуется именно быстрая адаптация custom-приложений к разного рода быстро меняющимся CPLD и FPGA. Да и полный контроль над системой дает приятное чувство независимости от Добрых Американских Дядь ;)
Однако, действительно, классический цикл тесты в командной строке-набор текста-компиляции экранов/файлов через некоторое время становится тормозом.
А что думают уважаемые собеседники про идеологию holon? Например, замена слов во время исполнения приложения или просмотр переменных/памяти real-time? Применял ли кто-то подобные технологии на практике, пусть с другими языками/системами?
Спустимся с высот программирования под Windows в Python / Haskell / C# на грешное (читай "глючное") железо :)
 
1 2 3 4

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru