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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 175 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12  След.
Автор Сообщение
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Пт дек 05, 2014 20:57 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
Тогда почему же Вы не хотите сказать, где там FORTH?

Где Вы в этом высказывании?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Пт дек 05, 2014 21:00 
KPG писал(а):
Где Вы в этом высказывании?
Ваш троллинг достал. Включаю игнор.

Или, может, это бот, собирающий из Сети статьи со словом "FORTH"?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 06, 2014 04:16 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Есть еще варианты решения более общей задачи, особенно если нет привязки к FORTH-83/94:
- реализация FORTH-подобного языка (бОльше ограничений на синтаксис) на макросах ассемблера. Так делал для AVR и для x86.
Минусы - ОЧЕНЬ жесткая привязка к определенному Ассемблеру, не переносимо... :( Правда, можно обойти внешним препроцессором... ;)

- если можно не совсем полноценный FORTH, то можно сделать кодогенерацию, как у Мура в ColorForth (там и оптимизация есть, но ColorForth, а не FORTH-94). Готового на отдачу нет, сейчас неспешно пытаюсь минимизировать слова для самораскрутки(компиляции собственных исходников) - исправляю ошибки.
Минусы - нельзя применить немедленно, нет готового решения, оптимизации реализовывать самостоятельно.

- реализация полной или ограниченной FORTH-ВМ и интерпретация ввода пользователя с построением кода ВМ в ОЗУ и возможностью докомпилировать во flash
Минус - нельзя применить немедленно, нет готового решения

для таких вариантов, IMHO, больше подходит вариант ColorForth, т.к. в нем адрес слова - это адрес в коде (для слова - адрес CFA). Ну и сжатие словаря. А также идеология работы - очистка системы и пере-/до- компиляция при необходимости
Задачу "встроенной FORTH-системы" лучше всего решает последний вариант.

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 06, 2014 11:52 
in4 писал(а):
...
Все понятно. Но почему Вы считаете получившиеся FORTH-системы неполноценными? Самый, что ни на есть, обычный FORTH: нестандартный, непереносимый и написанный на чем попало. Не хватает только "заранее заложенного в него механизма, облегчающего решение изначально поставленной задачи".


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 06, 2014 13:53 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
Не хватает только "заранее заложенного в него механизма, облегчающего решение изначально поставленной задачи".

"Профессорских" мозгов у "быдлокодера"? :))


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 13, 2014 02:30 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
gudleifr писал(а):
Но почему Вы считаете получившиеся FORTH-системы неполноценными?
Потому что он
gudleifr писал(а):
нестандартный, непереносимый
и оптимизирован для встроенных систем с малым количеством памяти.
Я бы еще и синтаксис чуть поменял - для уменьшения кол-ва вводимых символов.
Для программиста - FORTH будет нестандартным. Это непривычно. Требуется смена стиля программирования = время на переобучение.

А так да, для пользователя получится просто еще один проблемно-ориентированный язык... ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 13, 2014 02:36 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
KPG писал(а):
"Профессорских" мозгов у "быдлокодера"?
Ну, для работы быдлокодера можно более-менее сложный ИИ вставить в IDE - чтоб подсказывал, как лучше делать. И встроенную систему обучения без прохождения серии задачек нельзя было начинать работать. В общем, можно сделать достаточно надежную систему из ненадежных элементов. На глупеньких (но предварительно обученных основам) девочках должно работать хорошо. Главное, чтоб не кулхацкер попался - если цель будет не решать задачи, а ломать систему - сломает... :(

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 13, 2014 02:48 
in4 писал(а):
...и оптимизирован для встроенных систем с малым количеством памяти.
FORTH не может быть оптимизирован для систем с малым количеством памяти. Выше уже обсуждали. Равно как он не может быть сделан стандартным и переносимым.
in4 писал(а):
Для программиста - FORTH будет нестандартным. Это непривычно.
Программист привыкший к стандарту называется быдлокодером. Программист сам должен писать языки, а не использовать стандартные.
in4 писал(а):
А так да, для пользователя получится просто еще один проблемно-ориентированный язык...
Вы путаете: не проблемно-ориентированный FORTH, а проблемно-ориентированный, написанный на FORTH.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 13, 2014 07:50 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
Программист привыкший к стандарту называется быдлокодером. Программист сам должен писать языки, а не использовать стандартные.

"Ждёмс" Ваше творение - Оболочка на TCL/TK с внутреннастями LUA и рядом где то Perl
Cобственно ссылка на друглй форум c очередными гениальными измышлизмами

P.S. Хоть с кем то на том форуме соглашаетесь :) Прогресс в понимании Форт, всё же, есть.
Забросьте Форт, если это не ваше.


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

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
ArtemKAD писал(а):
Ну давайте разберём одну из моих железяк. Внутри контроллер на 64кБ флеш-памяти с возможностью страничной её перезаписи слегка через задницу, 8кБ оперативки и немного (1кБ) энергонезависимой памяти данных с по-байтным доступом. Снаружи GSM-модуль(текстовый поток), GPS-модуль(текстовый поток), ноги, двигатели, несколько датчиков. И из отладки один UART-порт(можно прикрутить Терминал). Ни экрана, ни клавиатуры в устройстве нет, да и возможности изнутри модифицировать свой код хоть и есть, но не стоит этим увлекаться (при записи байта переписывается вся страница, а число перезаписей не безгранично). И как ты предлагаешь действовать с перекомпиляцией ядра?

Я так понял, что возможность кодом во флеш переписывать код во флеш есть.

А тогда все просто. Форт на примерно такую железяку я закидывал и это делается в 2 этапа. Сначала на персоналке пишется свой Форт такой, какой бы хотелось тебе иметь на железяке. Пишется для персоналки на ассемблере с макросами, я писал TASM-ом COM-файл. Отлаживается. Главное, что при этом будут отлажены высокоуровневые определения. Потом полученный текст без изменения уже отлаженных алгоритмов переделывается на ассемблер целевой машины. При этом макросы останутся те-же, их только придется переоформить под стиль нового ассемблера. Высокоуровневые определения не изменятся вовсе. Надо будет переделать только низкоуровневые определения. Слова KEY KEY? заменяешь на прием по RS-232. Слово EMIT на передачу по RS-232. Слово SAVE делаешь переписывающим флеш. И закидываешь на железяку. Немножко трахаешься с отладкой. На все про все недели три. В итоге твой ФОРТ оказывается прямо на железяке, ты с ним работаешь терминальной программой, прямо в он-лайне работаешь с аппаратурой железяки, там же на железяке наращиваешь код и откатываешь по FORGET, собираешь свое приложение. Потом свою модель ФОРТ закидываешь на другую по архитектуре железяку, опять переписывая только низкоуровневые определения и слова KEY? KEY EMIT SAVE FORGET. Это если в твоей железяке код во флеш перекидывается в RAM и там запускается. Если он исполняется прямо из флеш, то дело чуть похуже, но тоже покатит. Сейчас покажу как. Вот тут мое портирование Форта на железяку в которой код исполняется прямо из флеш. viewtopic.php?f=39&t=2868 В нем как-раз при записи байта переписывается вся страница, да и черт с этим. Ресурс флеш ты при модификации своей программы все равно не выработаешь, жизни не хватит. Да и отлаживать можно на одном экземпляре процессора, а заказчику поставить другой. Можешь там почерпнуть идей. Например, идея того, что на ассемблере пишется только часть Форта, а другая часть пишется на самом Форте. И для сборки Форта вторая часть скармливается на компиляцию первой. Из-за такого подхода портировать приходится пол-Форта, а не весь Форт.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 13, 2014 13:25 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
gudleifr писал(а):
2. В случае непереносимой ОС (отсутствия ОС) вопрос о переносе FORTH просто не ставится т.к. потребные к написанию интерфейсы (драйвера) будут весить настолько больше самого FORTH, что написания нового ядра просто никто не заметит.
Это не так. Если отстутствует ОС, то Форт легко портируется и прекрасно ее заменяет. Драйвера никакие не нужны, потому как нет драйверов. С железом работа идет непосредственно, как опросом готовности, так и по прерываниям и это всего немножко строчек на ассемблере, которые легко пишутся при наличии документации. Для оценки - я портировал Форт на спутниковый приемник с ядром Motorola M-Core, выкинув операционку нахер. Самое сложное при этом из работы с железом было написание слова SAVE, сохраняющего образ Форт из ОЗУ во флеш. У меня это слово вышло в 70 строк на ассемблере.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 13, 2014 14:33 
Ethereal писал(а):
Это не так. Если отстутствует ОС, то Форт легко портируется и прекрасно ее заменяет...
Я, пардон, говорил о том, что это "замена" весит больше самого FORTH. И делать центральной частью проекта FORTH, а не ее нет смысла.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 13, 2014 15:08 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Во встроенных системах не весит. От отсутствия ОС к Форту в них почти ничего не добавляется. Сейчас посчитаю на своем примере с M-Core. В моем случае инициализация железа, копирование Форт-системы из флеш в ОЗУ и запуск ее там, организация прерываний от UART, таймера и инфракрасного пульта с их обработчиками у меня заняли 189 строчек на ассемблере. Вот многозадачности я не делал, каюсь, на прерывания все посадил и этого хватило. ОС во встроенных системах - это прежде всего организация многозадачности. Я как-то обошелся без нее. Но ее средствами Форта можно сделать, если замыслить в нем многозадачность.
gudleifr писал(а):
И делать центральной частью проекта FORTH, а не ее нет смысла.
А вот у меня имеется вруб, что во встроенных системах есть. Чужая ОС - чужие ошибки и чужие глюки, а нафиг они нужны ?


Последний раз редактировалось Ethereal Сб дек 13, 2014 15:21, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 13, 2014 15:19 
Ethereal писал(а):
меня заняли 189 строчек на ассемблере.
Вы забыли об организации входного потока для FORTH. Как там у Баранова и Ноздрунова: KEY CR EMIT TYPE (EXPECT) RBLK MBLK.
А сам FORTH у них же в текстовом откомментированном виде с кучей прибабахов - всего в 5 раз больше.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Сб дек 13, 2014 15:24 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Входной поток KEY? KEY ACCEPT QUERY + надо еще обработчик прерывания от UART, но я его в 189-и строчках перечислил и потому не привожу :
Код:
KEY:      lrw   r12,   [_UART_]   // KEY      CORE
      subi   r0,   4
      ldb   r13,   (r12)      // tail
      stw   r14,   (r0)
_KEY:      ldb   r14,   (r12, 1)   // head
      cmpne   r13,   r14
      bf   _KEY
      bseti   r13,   20
      ldb   r14,   (r13)
      addi   r13,   1
      andi   r13,   0x1F
      stb   r13,   (r12)
      NEXT

KEY_QUESTION:   lrw   r13,   [_UART_]   // KEY?      FACILITY
      subi   r0,   4
      ldb   r12,   (r13)      // tail
      stw   r14,   (r0)
      xor   r14,   r14
      ldb   r13,   (r13, 1)   // head
      cmpne   r12,   r13
      dect   r14
      NEXT

// : ACCEPT ( c-addr +n1 -- +n2 )
//   OVER + OVER
//   BEGIN
//      KEY DUP >R
//      CASE
//        8 OF
//            2 PICK OVER <> IF R@ EMIT SPACE R@ EMIT 1- THEN
//          ENDOF
//        13 OF
//             RDROP CR NIP SWAP - EXIT
//           ENDOF
//        DUP BL U< INVERT
//        IF
//          2DUP <> IF R@ EMIT R@ OVER C! CHAR+ THEN
//        THEN
//      ENDCASE
//      RDROP
//   AGAIN
// ;
// Ввести строку максимальной длины до +n1 символов.
// Исключительная ситуация возникает, если +n1 0 или больше 32767.
// Отображать символы по мере ввода.
// Ввод прерывается, когда получен символ "конец строки".
// Ничего не добавляется в строку.
// +n2 - длина строки, записанной по адресу c-addr.
ACCEPT:      THREAD            // ACCEPT   CORE
      .long   OVER, PLUS, OVER
_ACCEPT:   .long   KEY, DUPE, TO_R
      .long   LIT, 8, NOT_EQUALS
      .long   QUESTION_BRANCH, ___ACCEPT
      .long   R_FETCH, LIT, 13, NOT_EQUALS
      .long   QUESTION_BRANCH, ____ACCEPT
      .long   TWO_DUPE, NOT_EQUALS
      .long   R_FETCH, BL, U_LESS_THAN, INVERT, AND
      .long   QUESTION_BRANCH, __ACCEPT
      .long   R_FETCH, EMIT, R_FETCH, OVER, C_STORE, ONE_PLUS
__ACCEPT:   .long   R_DROP
      .long   BRANCH, _ACCEPT
___ACCEPT:   .long   TWO, PICK, OVER, NOT_EQUALS
      .long   QUESTION_BRANCH, __ACCEPT
      .long   R_FETCH, EMIT, SPACE, R_FROM, EMIT, ONE_MINUS
      .long   BRANCH, _ACCEPT
____ACCEPT:   .long   R_DROP, NIP, MINUS, NEGATE, CR
      .long   EXIT

// : QUERY  TIB C/L ACCEPT #TIB ! >IN 0!  ;
QUERY:      THREAD            // QUERY   CORE EXT
      .long   T_I_B, C_SLASH_L, ACCEPT, NUMBER_T_I_B, STORE
      .long   TO_IN, ZERO_STORE
      .long   EXIT

Все-же приведу. Вот обработчик прерывания от UART :
Код:
__vectored_fast_p0:            // UART interrupt
      subi   r0,   12
      stm   r13-r15,(r0)
      lrw   r14,   [SCICR]
      ldb   r13,   (r14, 0xB)
      bsr   UART_
UART:      .short   0
UART_:      ldb   r14,   (r15, 1)   // head
      bseti   r14,   20
      stb   r13,   (r14)
      addi   r14,   1
      andi   r14,   0x1F
      stb   r14,   (r15, 1)
      ldm   r13-r15,(r0)
      addi   r0,   12
      rfi

_UART_:      .long   UART


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 175 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12  След.

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


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

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


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

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