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

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

Обзор темы - [BF] система команд
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
вопрос писал(а):
Ну, сумейте прото не полениться записать на Форте
if((a==(c+b)*d-e&&d<e) || (c<a * d - (b * e) * 1.5)) function1();
else if ...
else ...


вне темы конечно, но ...

Код:
a c b + d * e d AND e < - =
c a < d * b e 1.5 * * - OR
IF word1
ELSE word2 IF ... THEN
THEN

:)
Сообщение Добавлено: Ср июн 06, 2007 11:45
  Заголовок сообщения:   Ответить с цитатой
По-русски
если
или d меньше e и а равно разности произведения d на сумму c+b и е
или с меньше разности произведения а и d и полутора произведения b и е
вызвать функцию
иначе если
иначе


Форт позволяет реализовать любой синтаксис, где это видано, чтобы не пользовались преиму-вами?
Сообщение Добавлено: Ср июн 06, 2007 10:14
  Заголовок сообщения:   Ответить с цитатой
я это даже прочесть не могу :)
Сообщение Добавлено: Ср июн 06, 2007 10:05
  Заголовок сообщения:   Ответить с цитатой
по поводу С-синтаксиса добро пожаловать в тему "Как бы фортеры восприняли такой синтаксис", а эту часть темы, как не соответствующую теме, модератора прошу удалить
Сообщение Добавлено: Ср июн 06, 2007 09:44
  Заголовок сообщения:   Ответить с цитатой
diver писал(а):
вопрос писал(а):
Но С-синтаксис имеет хорошие качества


Хоть одно :) ?


Это массовый продукт:)
Но по моему это уже флейм.
Сообщение Добавлено: Ср июн 06, 2007 06:45
  Заголовок сообщения:   Ответить с цитатой
вопрос писал(а):
Но С-синтаксис имеет хорошие качества


Хоть одно :) ?
Сообщение Добавлено: Ср июн 06, 2007 06:34
  Заголовок сообщения:   Ответить с цитатой
diver писал(а):
in4 писал(а):
mrack писал(а):
еще раз скажу, в истоках форт меня заинтересовал своей простотой и НЕ_СИ_СИНТАКСИСОМ
не испытываю лично не капли восторга от внедрения си подобных конструкций

Абсолютно поддерживаю. Форт все-таки самодостаточная система.

Никто не спорит о самодостаточности Форта. Но С-синтаксис имеет хорошие качества
Сообщение Добавлено: Вт июн 05, 2007 19:42
  Заголовок сообщения:   Ответить с цитатой
in4 писал(а):
mrack писал(а):
еще раз скажу, в истоках форт меня заинтересовал своей простотой и НЕ_СИ_СИНТАКСИСОМ
не испытываю лично не капли восторга от внедрения си подобных конструкций


Абсолютно поддерживаю. Форт все-таки самодостаточная система.
Сообщение Добавлено: Вт июн 05, 2007 12:57
  Заголовок сообщения:   Ответить с цитатой
mrack писал(а):
еще раз скажу, в истоках форт меня заинтересовал своей простотой и НЕ_СИ_СИНТАКСИСОМ
не испытываю лично не капли восторга от внедрения си подобных конструкций

Конечно, в Форте С-шные костыли не нужны! ;)
Предложение было для Сшных исходников! ;)
И макросы, IMHO, могут хоть как-то приблизить С к Форту в данном конкретном случае - при написании ВМ на С.
Сообщение Добавлено: Вт июн 05, 2007 12:09
  Заголовок сообщения:   Ответить с цитатой
еще раз скажу, в истоках форт меня заинтересовал своей простотой и НЕ_СИ_СИНТАКСИСОМ
не испытываю лично не капли восторга от внедрения си подобных конструкций
Сообщение Добавлено: Пн июн 04, 2007 06:16
  Заголовок сообщения:   Ответить с цитатой
Я еще раз предложу использовать макросы С для упрощения (и повышения читабельности) исходников... ;)
Сообщение Добавлено: Пн июн 04, 2007 00:26
  Заголовок сообщения:   Ответить с цитатой
отладка

Код:
void sdot() { printf("\n[ ");
              for (uint i=0;i<Dp;i++) printf("%i ",D[i]);
              printf("]\n");                                                }
void dump() { assert(Dp>=1);
              uint len=D[--Dp],addr=D[--Dp]; assert(addr+len<Msz);
              printf("\n[ ");
              for (uint i=addr;i<addr+len;i++) printf("%.2X ",M[i]);
              printf("]\n");                                                }
void hdot() { assert(Dp>=1);
              #ifdef MODE16
                     printf("%.4X ",D[--Dp]);
              #else
                     printf("%.8X ",D[--Dp]);
              #endif
                                                                            }
void dot()  { assert(Dp>=1); printf("%i ",D[--Dp]); }


Код:
void step() {
switch(op) {
            case 0x80: sdot(); break;    case 0x81: dump(); break;
            case 0x82: hdot(); break;    case 0x83: dot(); break;


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

Код:
0x80 0op s.   0x81 0op dump   0x82 0op h.   0x83 0op .


еще -- слова типа h. . перенести в консольный ввод/вывод как часто используемые, или оставить в отладке, а консольный вывод чисел реализовать в байт-коде специально
Сообщение Добавлено: Вс июн 03, 2007 12:53
  Заголовок сообщения:   Ответить с цитатой
консольный ввод/вывод

Код:
void qkey()   { assert(Dp<Dsz); D[Dp++]=-1; }
void key()    { assert(Dp<Dsz); D[Dp++]=getchar(); }
void qemit()  { assert(Dp<Dsz); D[Dp++]=-1; }
void emit()   { assert(Dp>=1);
                if (D[Dp-1]==0x0A) putchar(0x0D); putchar(D[--Dp]); }


Код:
void step() {
switch(op) {
            case 0x70: qkey(); break;    case 0x71: key(); break;
            case 0x72: qemit(); break;   case 0x73: emit(); break;


вообще тут нужна проработка -- давать ли прямой доступ к консоли, работать через stdio/stdout, делать ли какие-то потоки ввода/вывода с созданием/переключением/итп, короче нужна проработка

Код:
\ консольный ввод/вывод (фактически расширение -- может просто не поддерживатся железом)

0x70 0op ?key   0x71 0op key   0x72 0op ?emit   0x73 0op emit
Сообщение Добавлено: Вс июн 03, 2007 12:45
  Заголовок сообщения:   Ответить с цитатой
логика и битовые операции

Код:
void eq()        { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp];
                  if (n1==n2) D[Dp++]=-1; else D[Dp++]=0;                 }
void noteq()     { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp];
                  if (n1!=n2) D[Dp++]=-1; else D[Dp++]=0;                 }
void less()      { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp];
                  if (n1<n2) D[Dp++]=-1; else D[Dp++]=0;                  }
void great()     { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp];
                  if (n1>n2) D[Dp++]=-1; else D[Dp++]=0;                  }
void leq()      { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp];
                  if (n1<=n2) D[Dp++]=-1; else D[Dp++]=0;                 }
void geq()      { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp];
                  if (n1>=n2) D[Dp++]=-1; else D[Dp++]=0;                 }

void not()     { assert(Dp>=1); D[Dp-1]=~D[Dp-1]; }
void or()      { assert(Dp>=2); uint n2=D[--Dp],n1=D[--Dp]; D[Dp++]=n1|n2; }
void and()     { assert(Dp>=2); uint n2=D[--Dp],n1=D[--Dp]; D[Dp++]=n1&n2; }
void xor()     { assert(Dp>=2); uint n2=D[--Dp],n1=D[--Dp]; D[Dp++]=n1^n2; }
void lshift()  { assert(Dp>=2); uint n2=D[--Dp],n1=D[--Dp]; D[Dp++]=n1<<n2; }
void rshift()  { assert(Dp>=2); uint n2=D[--Dp],n1=D[--Dp]; D[Dp++]=n1>>n2; }


Код:
void step() {
switch(op) {
            case 0x40: eq(); break;      case 0x41: noteq(); break;
            case 0x42: less(); break;    case 0x43: great(); break;
            case 0x44: leq(); break;     case 0x45: geq(); break;

            case 0x48: not(); break;     case 0x49: or(); break;
            case 0x4A: and(); break;     case 0x4B: xor(); break;
            case 0x4C: lshift(); break;  case 0x4D: rshift(); break;


Код:
0x40 0op =   0x41 0op !=   : <> != ;
0x42 0op <   0x43 0op >
0x44 0op <=   0x45 0op >=

0x48 0op not   0x49 0op or   0x4A 0op and   0x4B 0op xor
0x4C 0op <<   0x4D 0op >>
Сообщение Добавлено: Вс июн 03, 2007 12:37
  Заголовок сообщения:   Ответить с цитатой
целочисленная арифметика

Код:
void add()       { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp]; D[Dp++]=n1+n2; }
void sub()       { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp]; D[Dp++]=n1-n2; }
void mul()       { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp]; D[Dp++]=n1*n2; }
void div()       { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp]; D[Dp++]=n1/n2; }
void mod()    { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp]; D[Dp++]=n1%n2; }
void zmin()   { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp];
                if (n1<n2) D[Dp++]=n1; else D[Dp++]=n2; }
void zmax()   { assert(Dp>=2); int n2=D[--Dp],n1=D[--Dp];
                if (n1<n2) D[Dp++]=n2; else D[Dp++]=n1; }

#ifdef DOS16
void rnd() { assert(Dp>=1); D[Dp-1]=random(D[Dp-1]+1); }
#endif


Код:
void step() {
switch(op) {
            case 0x30: add(); break;     case 0x31: sub(); break;
           case 0x32: mul(); break;     case 0x33: div(); break;
            case 0x34: mod(); break;
            case 0x35: zmin(); break;    case 0x36: zmax(); break;
            #ifdef DOS16
                   case 0x37: rnd(); break;
            #endif


генерацию случайный чисел пока нашел как делать только под DOS

Код:
0x30 0op +   0x31 0op -   0x32 0op *   0x33 0op /
0x34 0op mod   0x35 0op min   0x36 0op max   0x37 0op rnd
Сообщение Добавлено: Вс июн 03, 2007 12:32

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


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