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

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - Блог программиста любителя
Автор Сообщение
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
Victor__v писал(а):

С примитивов
DUP DROP и пр


dup drop - здесь это команды виртуальной форт машины, их надо только пихнуть в словарь.

Hishnik писал(а):
Нужна тестовая задачка, на которой можно пробовать получившееся.

Часть кода взял со своих разработок.
Он путанный и странный.
В java можно написать так
Код:
class myclass() {
  public   int  aa;
//-----------------------------
  public  myclass  mc;
}

и создавать классические цепные списки.
Но сколько не смотрел исходники java программ, никто так не пишет.
Вот и приходится создавать векторы - выглядят чудовищно,
хотя вроде работают быстро.
Вообще, это черновик - хочется быстрее получить цельную систему,
а потом должна получится методичка по написанию и внедрению форта в
программу на языке высокого уровня, что бы в ней писать скрипты.
Даже мои предыдущие корявые эксперименты с псевдо-фортом более чем
успешны.
Сообщение Добавлено: Сб ноя 10, 2018 01:50
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
Нужна тестовая задачка, на которой можно пробовать получившееся.
Сообщение Добавлено: Пт ноя 09, 2018 22:49
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
Цитата:
Теперь самая мутная часть, написание самого форта.
Непонятно, с чего начинать, с каких-нибудь сервисных функций, или с чего-то еще.

С примитивов
DUP DROP и пр
Сообщение Добавлено: Пт ноя 09, 2018 16:59
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
Строки, черновой набросок.
После того, как разобрались с вызовом функций и передачей параметров,
реализовать нужную строковую функцию можно за пять минут.

Код:
void StringLib() {
   int nf = stack.pop(); // получение номера ф-ции
   int ind;  //
   String str = null;
   switch (nf) {
       case 0 : //  0 - создать строку
            int sf  = stack.pop(); // получение номера подфункции
       switch (sf)  {
                  case 7 : //  создать копию строки, которая имеет индекс ind   
               ind = stack.pop();
          str = new String( (String) V.elementAt( ind ) );
                         stack.push( // положить елемент вектора со строкой на стек
                      appendData( V, str) //добавление новой строки в вектор
                 );                   
         breake;     
                   case 11 :
            //  создать строку другим способом
         breake;
       }//switch 2
         breake;         
    case 1 : // сравнить строки, равны - на стеке 0
            // на стеке ind1, ind0  --> 0 если равны
                 String s0 = (String) V.elementAt( stack.pop()  ) ;
                 String s1 = (String) V.elementAt( stack.pop()  ) ;      
                 stack.push( s0.compareTo(s1) );             
        breake;       
    ///--  другие функции  ...///
   }//switch

}


Теперь самая мутная часть, написание самого форта.
Непонятно, с чего начинать, с каких-нибудь сервисных функций, или с чего-то еще.
Сообщение Добавлено: Чт ноя 08, 2018 23:36
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
Hishnik писал(а):
vikt писал(а):
Пусть работа с массивом байт осуществляется через 6 порт.

0 6 out можно обернуть в функцию, и все. Зачем какие-то порты?


Это пока только виртуальная машина. Тут еще нет функций, словарей...
Но обдумал на выходных. Возможно, каждому модулю, реализуемым
на языке высокого уровня, добавлять реализацию словаря в фортовском
стиле, где "экспортировать" нужные функции. Но это надо опробывать.
Подозреваю, что все равно нужен будет какой-то код, реализующий
вызов из инструкций ФВМ кода, реализуемого на языке высокого уровня.
Вообще, готов принять любую идею, способствующую простоте, ясности разработки.
Сообщение Добавлено: Вт окт 30, 2018 02:51
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
vikt писал(а):
Пусть работа с массивом байт осуществляется через 6 порт.

0 6 out можно обернуть в функцию, и все. Зачем какие-то порты?
Сообщение Добавлено: Чт окт 25, 2018 00:56
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
Работа с массивами.
Пусть работа с массивом байт осуществляется через 6 порт.
Пусть подфункции имеют следующие номера
0 - создание массива
1 - чтение элемента массива
2 - запись элемента массива
3 - удаление массива

константы
ind - индекс массива в векторе
i - адрес элемента массива
size - размер массива
val - значение
size 0 6 out \ создание массива размером size байт
\ на стек возвращается ind
i ind 1 6 out \ положить на стек значение из массива по адресу i
val i ind 2 6 out \ поместить val в массив по адресу i

ind 3 6 out \ удалить массив из вектора

Код:
private void callService(int number_port, int value) { вызывается во время записи в порт (out)

   switch (number_port) {
      case 1  //----------------
         breake;
   //-----------------------------
     
     
      case 5 :      //5 порт
         
          //----------тут обработка вызова функций 
         
       breake;
            //------------------------------------   
      
       case 6 : //6 порт 
             switch(value) {
           case 0 :
              int sizeArray=stack.pop();   
         byte [] BB = new byte[sizeArray];
         stack.push(  appendData(V,BB)  );
      breake;
                case 1 :
          int ind = stack.pop();
          int i = stack.pop();
          int val =( (byte[]) V.elementAt( ind ) ) [i];
           stack.push(val);
          breake;
      case 2 :     
           ind = stack.pop();
            i = stack.pop();               
                     val = stack.pop();
           ( (byte[]) V.elementAt( ind ) ) [i]=val;
       breake;
      case 3 :
         ind = stack.pop();
          removeData (V , ind);
      breake;     
           
        breake;
     //-----------------------------------------
       breake;
      }//switch
}//callsevice   
 

Завтра, если будет время, напишу работу со строками, затем можно
начинать писать форт.
Сообщение Добавлено: Ср окт 24, 2018 02:02
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
Вызов функции, написанной на java из виртуальной машины форта

Пусть ф-ция на java использует в качестве параметров массив байт, строку и целое,
и возвращает массив байт
Код:
byte [] funct( byte[] b, String s, int i) {
   byte[] ret=null;
//-- реализация ф-ции
return ret;
}

Пусть она привязана к пятому порту и имеет номер 10.

пусть параметры на стеке расположенны следующим образом:

На вершине: целое, указывающий на расположение массива байт в векторе.
далее целое, указывающее на строку
далее, просто целое

тогда вызов функции на ява может быть написана так
Код:
private void callService(int number_port, int value) { вызывается во время записи в порт (out)

   switch (number_port) {
      case 1  //----------------
         breake;
   //-----------------------------
     
     
      case 5 :      //5 порт
         
          switch(value) {   
              case 1 :  //  ---------------
                 breake;
           //---------------------------------------------------   
              case 10 :   // наша функция
                stack.push(   // индекс на масссив байт в векторе, который вернула наша ф-ция кладется на стек
                        V.appendData( V,  //    возвращаемый функцией массив байт добавляется в вектор
                                     funct(
                                          (byte[]) V.elementAt( stack.pop() ) ,   // первый параметр
                                          (String) V.elementAt( stack.pop() ) ,  //второй
                                          stack.pop()                            //третий
                                         )
                                    )   
                          );
         
                breake; 
            //------------------------------------    
              }//switch
       

     //-----------------------------------------
       breake;
      }//switch
}//callsevice


вызов
( стек для вызова ф-ции уже подготовлен. )
10 5
out
( на стеке - индекс массива в векторе )
Сообщение Добавлено: Чт окт 04, 2018 01:47
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
Продолжаю выкладывать черновой вариант форта.

О работе с памятью и вызове процедур на языке высокого уровня.
Именно тут, помимо стека и происходит взаимодействие
виртуальной машины форта и программой, в которую ФВМ
внедрена.

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

В java "память" можно реализовать так же с помощью вектора.

Код:
import java.utils.*;
--------------

  Vector V;
  public void initData(Vector V) {
     V=new Vector();
     Integer I = new Integer(0);   // тип Integer, это объектное представление типа int
     V.addElement(I);               // чтобы его можно было положить в вектор
  }                                          // начальный элемент вектора инициализируется 0


Объекты ( массивы, строки, структуры и тд ) добавляются в вектор

Код:
  public int appendData(Vector v,Object obj) {
    Integer Ind=(Integer)v.elementAt(0);  // получить значение начального элемента вектора как Integer
    int ind = Ind.intValue();                      // преобразовать в нормальный int
    if ( ind == 0) {                                  // если равен 0, то свободных элементов нет
       v.addElement(obj);                    // тогда добавляем объект  к вектору
       ind=v.size()-1;
       }
        else {
          Integer I =( Integer)V.elementAt(ind);   // иначе ind указывает на свободный элемент (СЭ)   
          int i = I.intValue();                                //там хранится предыдущий   (СЭ) который получаем 
     v.setElementAt(obj, ind);                  // Замещаем элемент вектора с номером ind объектом obj
     v.setElementAt(I, 0);                    // в начальный элемент вектора пишем предыдущий  СЭ
          }
   return ind;          // возвращаем индекс объекта в векторе 
  }


удаление объектов из вектора
Код:
  public void removeData (Vector v, int ind){
           Integer IndOld=(Integer)v.elementAt(0);    // получить   знач 0 элемента
           v.setElementAt(IndOld, ind);                    // заместить им объект, который на удаление
           Integer IndNew = new Integer(ind);        // преобразрвать ind  в тип Integer
           v.setElementAt(IndNew, 0);                // записать в начальный элемент вектора
                                                                     // 0 элемент указывает на новый                  
  }

из удаленых объектов образуется связный список

Тут, если например, выделить сразу 1000 объектов,
а затем сразу удалить, то размер вектора все равно
останется равным 1000. Тут надо додумать и удалять крайний элемент

получить тип объекта в виде строки
Код:
public String getTypeData( Vector v, int ind){
return  v.elementAt(ind) . getClass().getName() ;
}

тип "cтрока" вернет как "java.lang.String"
массив целых как "[I"
двухмерный массив "[[I" итд
тут есть над чем подумать, возможно строку лучше парсировать и
типы данных представлять числами.

Функции на java могут использовать в качестве параметров элементы вектора,
присвоить результат выполнения функции элементу вектора и вернуть
этот элемент на стек или в порт.
Форт ВМ может обращаться к вектору через порты,
обработка записи и чтение портов индивидуально для каждой задачи.
В следующей записи будут примеры работы со строками и массивами.
После начну наконец то написание самого форта.
Сообщение Добавлено: Вс сен 16, 2018 03:38
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
vikt писал(а):
Спасибо. Скомпилировал. Попробую присобачить телефон на руль велосипеда и
использовать как go-pro.

По использованию модуля, могу отвечать здесь, или по
почте
vikt-beliak@yandex.ru


Я ее практически так и использую. Выехать на пляж, нафотографировать девушек.
Собачу на руль так
https://toogeza.com/2013/07/29/6197
только не затягивать сильно, что бы можно было переставить вот так
Изображение

моя почта
longerm9@gmail.com
Сообщение Добавлено: Вс ноя 05, 2017 01:03
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
Спасибо. Скомпилировал. Попробую присобачить телефон на руль велосипеда и
использовать как go-pro.

Понемногу начинаю выкладывать свою.
Пока только класс, реализующий фотографирование, для ознакомления.
http://vikt-beliak.narod.ru/save/myphoto.java

Дело в том, что на нокии C3 не гаснет дисплей и соответственно жрет
батарейки. В процессе решения проблемы, очень сильно испортил код,
он практически не читаем. Сейчас упорно исправляю.

Кроме того, хочу попробывать AMMS API для более тонкой работы с камерой
http://developer.samsung.com/java/technical-docs/Advanced-Mutlimedia-Supplements-JSR-234

По использованию модуля, могу отвечать здесь, или по
почте
vikt-beliak@yandex.ru
Сообщение Добавлено: Сб ноя 04, 2017 15:15
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
vikt писал(а):
Исходный код скомпилировать не удалось,


Компилировал программу в AIDE
http://www.android-ide.com/
AIDE устанавливается на андроид, на него копируются исходные тексты
и компилируются.
Тут наверно будет проще так. В AIDe создается новый проект.
В каталог, в котором находится MainActivity.java копируются
файлы из моего проекта. В этих файлах в строке
package com.mycompany,,,
заменяется на
package <путь проекта>;
также заменяется
import <этот package>;
Ничего сложного. Просто в AIDE кажется все работает по другому,
чем в эклипс.
Еще важно. В папке res/layout заменить файлы main.xml на мои файлы,
которые находятся в соответствующей директории.

Программу написал на основе кода
http://startandroid.ru/ru/uroki/vse-uroki-spiskom/266-urok-133-kamera-delaem-snimok-i-pishem-video.html
и официального api. Там много полезной информации.
Сообщение Добавлено: Вт окт 31, 2017 12:33
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
Здравствуйте! Спасибо за программу. Установилась и работает.
Исходный код скомпилировать не удалось, пока я в программировании
андроида новичок. С фотопрограммой для j2me у меня образовался
бардак, разные телефоны используют разные encoding,
у меня разные исходные тексты для nokia и sonyerrikson.
Я ведь не думал, что буду публиковать. В телефонах
установлены уже скомпилированные версии. Наведение порядка
займет некоторое время. Но если нужно, то конечно выложу весь
бардак. Еще могу выложить код модуля, который непосредственно
осуществляет съемку он вполне отлажен.
Сообщение Добавлено: Чт окт 26, 2017 22:05
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
Добрый день!
Интересует фотографическая программа для j2me.
У меня есть простая фотографическая программа для android с исходными текстами.
http://lingerman.ucoz.net/uploads/camSnap2_2.7z

С удовольствием буду отвечать на вопросы по программе и по исходным текстам, если кого-то
заинтересует.
Правда форум http://fforum.winglion.ru/ почему то блокирован в нашей деревне
Роскомнадзором, приходится выходить через тор, который тоже работает не стабильно.
Наверно какой-нибудь террористический сайт вертится на том же хостинге, что
и форум.
И да! Поддерживаю идею написать простую реализацию языка программирования.
Сообщение Добавлено: Ср окт 25, 2017 02:41
  Заголовок сообщения:  Re: Блог программиста любителя  Ответить с цитатой
В принципе реализация стека и виртуальной машины достаточно для реализации
форт системы. Достаточно сформировать массив с образом виртуальной
памяти, и определить действия, которые будут выполняться при операциях с портами.
Но это мало интересно. Вероятнее всего следующим делом надо реализовать
построение словарной статьи. Так во всяком случае кажется, после прочтения статей,
любезно выложенных gudleifr
Но не нашел в компактном виде описания списка процедур, функций, переменных,
которые зависят от структур данных статьи или которые записывают эти структуры.
Сообщение Добавлено: Ср окт 25, 2017 02:18

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


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