Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 13:45

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 56 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Чт янв 12, 2023 01:16 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Ну такое себе. А где анализ-то? Я предлагал при упоминании реализаций описывать, каким образом там организуются слова и их выполнение. А еще да... такое. Надо поискать еще Spisok_slov, obraborka_chisla и ochistka_steka.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Чт янв 12, 2023 16:12 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Hishnik писал(а):
Ну такое себе. А где анализ-то? .

Это к дохтуру. :)
У меня IQ низкое, чтобы ещё и анализы выписывать.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Чт янв 12, 2023 16:36 
Не в сети
Administrator
Administrator
Аватара пользователя

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

А поиск в Интернете вполне делается и поисковыми системами. Там по ключевым словам каждый может найти сколько угодно ссылок на самое разное.

Навык идентификации компонентов форт-системы уж должен был за годы образоваться.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Сб янв 14, 2023 07:22 
Не в сети

Зарегистрирован: Сб ноя 20, 2021 06:51
Сообщения: 41
Откуда: Южный Урал
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Hishnik писал(а):
А где анализ-то?

Хищник, дайте нам, пожалуйста, анализ, а мы таковой почитаем.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Сб янв 14, 2023 15:12 
Не в сети
Administrator
Administrator
Аватара пользователя

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Пн янв 16, 2023 00:12 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 463
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Hishnik писал(а):
Я уже выше написал, что пока встречаются:
- машинный код
Вот, кстати, а почему только мышиный кот? :D Например, если делать Форт на браузерном javascript, то там один из вариантов - подпрограммный шитый код. Но при этом в низкоуровневом представлении вылезает не мышиный кот, а вполне себе высокоуровневые куски на javascript:
Код:
s[p++]=0x1234;
while(s[--p]){...}
if (s[--p]){...}
и т.д.
А вообще, предполагаю, что у половины из здесь присутствующих именно подпрограммный шитый код в почёте. :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Пн янв 16, 2023 01:48 
Не в сети
Administrator
Administrator
Аватара пользователя

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Пн янв 16, 2023 10:49 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 463
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Например, в одной из реализаций у меня так:
Код:
: test dup swap 123 if else then ;
: see `console.log(code[stack[--sp]]);` ;
'test' see
В консоли видим:
Код:
execute['dup']();execute['swap']();stack[sp++]=123;if(pop()){}else{}

Словарь на базе ассоциативных массивов, поиск (а также добавление новых слов) в них прямо по имени токена. Например, в code[] хранятся текстовые представления объявлений, а execute[] - массив функций, которые можно вызывать. Ну и еще один массив immediate[] для соответствующего признака.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Пн янв 16, 2023 21:31 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
forth.php (на PHP)

Проверка запуска PHP примера в Online консоле

------------------------------------------------------------------------------------------------------------------------------------

rforth.rb (на Ruby)

Проверка запуска Ruby примера в Online консоле


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Пн янв 16, 2023 21:47 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Total Vacuum писал(а):
Словарь на базе ассоциативных массивов, поиск (а также добавление новых слов) в них прямо по имени токена. Например, в code[] хранятся текстовые представления объявлений, а execute[] - массив функций, которые можно вызывать. Ну и еще один массив immediate[] для соответствующего признака.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Пн янв 16, 2023 21:59 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
KPG писал(а):
forth.php (на PHP)

Вижу простенькие упражнения по разбору строки и вызову нескольких десятков слов. Куда такое приспособить - непонятно. Как реализована интеграция с языком - тоже непонятно (поэтому и непонятно, куда приспособить). Можно считать что-то на стеке и печатать. И делать emit. Но если это php, может быть, надо что-то с веб-страницей делать, м?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Пн янв 16, 2023 23:01 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
BashForth (на Bash)

Проверка запуска Bash примера в Online консоле


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Пн янв 16, 2023 23:47 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 463
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Hishnik писал(а):
Получилась одна машина поверх другой... был один синтаксис, а стал другой.
Ну а как иначе-то? Смысл форта как раз в том, чтобы слово за словом пережевывать программу на форте и переводить ее в код целевой платформы. Для браузера это javascript без вариантов.

Hishnik писал(а):
Практично ли такое - другой вопрос. Тут по сути нового качества не видно.
Мой пост немного о другом был...
Hishnik писал(а):
Например, в машинном коде Форт будет набором call и lit (его можно по-разному сделать).
Я как раз привел пример "сделанного по-разному" "машинного" кода, который получается в результате работы запускаемого поверх браузера форта. В другом испонении получается, например,
Код:
f23();f24();s[p++]=123;if(s[--p]){}else{}
Но смысл ровно тот же самый: на выходе подпрограммный шитый код, который можно назвать машинным с очень большой натяжкой :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Вт янв 17, 2023 01:55 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 327
Откуда: Москва
Благодарил (а): 36 раз.
Поблагодарили: 7 раз.
В сообщении
viewtopic.php?p=50719#p50719
разбиралась реализация вирт. машины с использованием bytebuffer.

Теперь, как использовать reflection api ( обращение к объектам java, используя текстовую строку)

имеем класс fas.java ( форт ассемблер )
там имеем процедуру allot
Код:
void allot() { setHere(  getHere() + stack.pop()  ) ; }   // псевдо код allot

доступ к ней хоть и выглядит громоздким, но ничего сложного в этом нет
в FVM (вирт машине, внутри оператора switch) есть инструкция out, которая просто
вызывает процедуру callService и передает ей два верхних элемента стека.
callService - основной метод связи форт с внешним миром.
Код:
private void process() {  // выполняет один опкод
      int x, y, z,tmp, op ;
   op=mem.get();   
   switch(op) {
...................................................................................
    case VM_OUT:  // вершина номер порта
      x=stack.pop();   y=stack.pop();
      callService(x,y);  //вызов внешней функции
      break;
..................................................................................
  }  //
}
private void callService(int port, int y) { // вызывается во время записи в порт (out)
  if (port==8)  runProcedure( Ob , procedureLists[y]);   //   число 8 - произвольное
     else {
         // другие действия
        }   
}


Код:
import java.lang.reflect.*;
import java.nio.*; // ByteBuffer

.............................
     public Object  Ob; // класс, в котором находятся  методы, которые надо вызвать 
                      // подразумевается fas.java ( фортассемблер )
           
 
public Method [] procedureLists = new Method[150];  //массив методов
public int procedureIndex=0;                       // индекс свободного элемента в массиве методов.
     
//https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html#invoke-java.lang.Object-java.lang.Object...-

public void runProcedure(Object o, Method method) {  // выполнение метода
     try {
        method.invoke(o);
     } catch ( // NoSuchMethodException |
               InvocationTargetException | IllegalAccessException e)
        {
         e.printStackTrace();
         }
}   

public void buildProcedure( Object o, String procName) {  // заполнение массива методов
      Method method;
      method=registerProcedure(o, procName);
      int index = procedureIndex;
      procedureIndex++;
      procedureLists[index]=method;
/*    после построения метода, необходимо построить соварную статью
      createProc(procName, index); // создание словарной статьи, чтобы метод был найден из форта
                                  // содержит коды вирт машины - lit index lit 8 out
              // чтобы выполнился callServices     
*/
}

public Method registerProcedure( Object o, String procName) {  // создание метода на основе текстовой строки
     Method method=null;
     try {
       method = o.getClass().getDeclaredMethod( procName );
       method.setAccessible(true);
     } catch (NoSuchMethodException e )   
        {
         e.printStackTrace();
         }   
return method; 
}     



инициализируется парсингом текстовой строки инициализации, в котором методы представлены так
" ... allot allot n ... " // 1 слово, как представлено в java, 2 - как в форт, i или n - immediate или нет

Способ гораздо производительнее, чем другие извесные мне способы взаимодействия форт и java,
но главное, им гораздо удобнее пользоваться.
Надо только написать метод на java и добавить имя метода в строку инициализации,
после чего парсер сам загрузит метод в массив и создаст для него словарную статью.

ps не нашел способа отправить текст под кат, на случай, если кому будет лень читать мои буквы

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Собираем способы реализации Форта на разных ЯП
СообщениеДобавлено: Вт янв 17, 2023 03:35 
Не в сети
Administrator
Administrator
Аватара пользователя

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


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

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


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

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


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

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