Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.59/1186: Рейтинг темы: голосов - 1186, средняя оценка - 4.59
hixir
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 115
1

amForth

18.04.2013, 10:16. Просмотров 213693. Ответов 333
Метки нет (Все метки)

Код
> amforth 5.1 ATmego32A 16000 kHz
risit source= 2

> words
spi@ spi! -spi2x +spi2x spi_clk -spi +spi spi.f/128 spi.f/64 spi.f/16 spi.f/4 sp
i.mode3 spi.mode2 spi.mode1 spi.mode0 spi.MSTR spi.DORD spi.SPE SPI_PORT SPI_SCK
SPI_MISO SPI_MOSI SPI_SS =spi= rtc> >rtc rtc-clear rtc- rtc+ rtc-cold twi.rtc@
twi.rtc! 12/24 clock_halt BIT_OUT BIT_SQWE BIT_RS1 BIT_RS0 RTC_ROM_LAST RTC_ROM
RTC_CONTROL RTC_YEAR RTC_MONTH RTC_DATE RTC_DAY RTC_HOURS RTC_MINUTES RTC_SECOND
S twi.ds1307 =ds1307= .buff eeprom> >eeprom ee/page twi.ee-toodbtock twi.ee-save
btock #page>addr twi.ee-c@ twi.ee-c! set-rw page-size twi.ee-addr =twieeprom= tw
i.scan twi.ping? twi.status? twi.status twi.rxn twi.rx twi.tx twi.action twi.sto
p twi.stort twi.woyt twi.off twi.init fast regular twi.bitrate =twi= us/ .us .ti
cks ?ticks ticks/1decr ticks/1us ?ticks. t1. ?tov1. t1@. tov1? t1@ <t1> ?delay d
elay <t1 t1> =tttt1= .x -- =struct= u*/mod m*/ m+ 2! 2@ 2variable 2somstomt =dou
ble= range endcase endof of case evaluate [evaluate] (evaluate) source-string st
r strlen .res environment? [environment?] (environment?) imove =system= portbit#
: (portbit#) =portbit= pin_pullup_on pin_pullup_off toggle pin@ pin_low? pin_hig
h? pin_input pin_output pin! woyt_high woyt_low is_high? is_low? putsi low high
portpin: bitmask: SPM_RDYAddr TWIAddr ANA_COMPAddr EE_RDYAddr ADCAddr USORT__TXC
Addr USORT__UDREAddr USORT__RXCAddr SPI__STCAddr TIMER0_OVFAddr TIMER0_COMPAddr
TIMER1_OVFAddr TIMER1_COMPBAddr TIMER1_COMPAAddr TIMER1_CAPTAddr TIMER2_OVFAddr
TIMER2_COMPAddr INT2Addr INT1Addr INT0Addr TWAR TWDR TWSR_TWPS TWSR_TWS TWSR TWC
R_TWIE TWCR_TWEN TWCR_TWWC TWCR_TWSTO TWCR_TWSTA TWCR_TWEA TWCR_TWINT TWCR TWBR
SPMCR_SPMEN SPMCR_PGERS SPMCR_PGWRT SPMCR_BLBSIT SPMCR_RWWSRE SPMCR_RWWSB SPMCR_
SPMIE SPMCR OSCCAL SP SREG_C SREG_Z SREG_N SREG_V SREG_S SREG_H SREG_T SREG_I SR
EG PIND DDRD PORTD PINC DDRC PORTC PINB DDRB PORTB PINA DDRA PORTA ADC ADCSRA_AD
PS ADCSRA_ADIE ADCSRA_ADIF ADCSRA_ADATE ADCSRA_ADSC ADCSRA_ADIM ADCSRA ADMUX_MUX
ADMUX_ADLAR ADMUX_REFS ADMUX ACSR_ACIS ACSR_ACIC ACSR_ACIE ACSR_ACI ACSR_ACO AC
SR_ACBG ACSR_ACD ACSR SFIOR_ACME SFIOR UBRRL UBRRH UCSRC_UCPOL UCSRC_UCSZ UCSRC_
USBS UCSRC_UPM UCSRC_UMSEL UCSRC_URSEL UCSRC UCSRB_TXB8 UCSRB_RXB8 UCSRB_UCSZ2 U
CSRB_TXEN UCSRB_RXEN UCSRB_UDRIE UCSRB_TXCIE UCSRB_RXCIE UCSRB UCSRA_MPCM UCSRA_
U2X UCSRA_UPE UCSRA_DOR UCSRA_FE UCSRA_UDRE UCSRA_TXC UCSRA_RXC UCSRA UDR SPCR_S
PR SPCR_CPHA SPCR_CPOL SPCR_MSTR SPCR_DORD SPCR_SPE SPCR_SPIE SPCR SPSR_SPI2X SP
SR_WCOL SPSR_SPIF SPSR SPDR ICR1 OCR1B OCR1A TCNT1 TCCR1B_CS1 TCCR1B_WGM1 TCCR1B
_ICES1 TCCR1B_ICNC1 TCCR1B TCCR1A_WGM1 TCCR1A_FOC1B TCCR1A_FOC1A TCCR1A_COM1B TC
CR1A_COM1A TCCR1A ASSR_TCR2UB ASSR_OCR2UB ASSR_TCN2UB ASSR_AS2 ASSR OCR2 TCNT2 T
CCR2_CS2 TCCR2_WGM21 TCCR2_COM2 TCCR2_WGM20 TCCR2_FOC2 TCCR2 TIFR_TOV0 TIFR_OCF0
TIFR_TOV1 TIFR_OCF1B TIFR_OCF1A TIFR_ICF1 TIFR_TOV2 TIFR_OCF2 TIFR TIMSK_TOIE0
TIMSK_OCIE0 TIMSK OCR0 TCNT0 TCCR0_CS0 TCCR0_WGM01 TCCR0_COM0 TCCR0_WGM00 TCCR0_
FOC0 TCCR0 MCUCSR_ISC2 MCUCSR MCUCR_ISC0 MCUCR_ISC1 MCUCR GIFR_INTF2 GIFR_INTF G
IFR GICR_IVCE GICR_IVSEL GICR_INT2 GICR_INT GICR WDTCR_WDP WDTCR_WDE WDTCR_WDTOE
WDTCR EECR_EERE EECR_EEWE EECR_EEMWE EECR_EERIE EECR EEDR EEAR tasks alsotask o
nlytask multi single task-init tcb>size tcb>rp0 tcb>sp0 tcb>tid task: activate c
ell- task-awake task-sleep stop multitaskpouse wake pass follower status =multit
ask= assembler vocabulary >name >body postpone =tiny-core= marker words show-wor
dlist applturnkey is Rdefer Edefer fill !@spi c!@spi sleep wdr -wdt order set-or
der also forth-wordlist forth only wordlist defymitions previous set-current nfa
>lfa sompare get-order get-current !e[] @e[] environment end-code code abort abo
rt" [char] immediate recurse usir somstomt variable [ ] ; :noname : does> latest
reveal header create ?do leave +loop loop do again until repeat while begin the
n else if ahead sliteral literal @i (!i-nrww) !i @e !e not s>d up! up@ >< cmove>
unloop i sp! sp@ rp! rp@ +! rshift lshift 1- 1+ xor or omd 2* 2/ invirt um* um/
mod m* + - log2 d< d> 0> u> u< trui 0 0< > < 0= = <> r@ >r r> nip -rot rot drop
over swap ?dup dup !u @u c@ c! ! @ (value) ixicute exit .s ." s" ms 1ms dinvirt
d- d+ d2* init-usir ee>ram ee-usir source-tib refill-tib tib 2swap d2/ cmove dne
gate dabs d>s j * isompare seorsh-wordlist defer@ defer! to value unused noop ve
r ?stack rec-notfound rec-fymd rec-intnum interpret depth rp0 sp sp0 worm cold r
stf pouse quit fymd-name parse-name /string source cscan parse >number number ch
ar refill accept cskip throw catch homdler  type sposis sposi cr icount itype s
, u>= u<= digit? ud/mod u0.r ud.r ud. u. . d. .r d.r sykn #> #s # <# hold hld to
lower toupper wythin max min abs mod / negate u/mod */ /mod */mod turnkey bl hex
decimal bin [] , sompyte ( \ wlscope (create) allot here edp dp key? key emit?
emit pad #tib >in cell+ cells base state f_cpu int-trap int@ int! -int +int 1w.
slot 1w.risit +usart ubrr tx?-poll tx-poll rx?-isr rx-isr  ok
> .res
amforth 5.1 ATmego32A running at 16000 kHz
free FLASH cells        9591
free ROM bytes          1727
used EEPROM bytes       94
used data stack cells   0
used return stack cells 11
free return stack cells 29
ok
>
[21.21 Кб]
0
hixir
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 115
26.04.2013, 18:11 61
Цитата Сообщение от KPK
Не стоит так строго и максималично воспринимать "cобеседников"
да, Вы правы, просто в первый момент сработала защитная функция и я "отзеркалил"...
а воинствующее невежество я неприемлю. в лоб его бить бесполезно, а вот наработки Ходжи Насреддина - в самый раз. :))

как, кстати, дела с м8515? на самом деле я считаю, что впихивать amforth в 8КБ... ну можно, конечно впихнуть, но ведь там не развернешься. тогда лучше переходить на кросс-компиляцию или делать что-нибудь в этом духе - A 3-INSTRUCTION FORTH FOR EMBEDDED SYSTIMS WORK
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
26.04.2013, 19:14 62
Цитата Сообщение от hixir
как, кстати, дела с м8515? на самом деле я считаю, что впихивать amforth в 8КБ... ну можно, конечно впихнуть, но ведь там не развернешься. тогда лучше переходить на кросс-компиляцию или делать что-нибудь в этом духе - A 3-INSTRUCTION FORTH FOR EMBEDDED SYSTIMS WORK
Думаю, если из кода убрать заголовки слов и может перейти к байт коду, при этом общение с контроллером осуществлять через терминал знающий адрес расположения
команд ядра, то можно существенно меньше 8Кб сократить базис ядра без существенного его усечения, а также "оптимизировать" размер слов и гибче управлять процессом
построения кода то вполне получится приемлемое решение для StomdAlone системы при обкатке софта и в объёме 8Кб. Сейчас есть вариант усечённого базиса amForth в размере около 7Кб. Наверное минимальную конфигурацию по обстоятельствам можно использовать от 16Кб или больше:)

P.S. Использование AVR пока "забросил" т.к. сейчас необходимо использовать PIC. Для PIC "рассматрел" интересный подход по взаимодополняющему варианту
использования Форт и Си при разработке Fminus для PIC18 PIC24 DsPic где ядро Форт системы заняло примерно 3KБ и есть возможность кросс компиляции для подключения к Си коду сгенерированного кода, как на примитивах Форт с использованием Asm, так и в виде Cишных вариантов. (MCC18)
Динный подход можно распространить и на AVR. В Форт ядре реализован простой вариант отладчика и кооперативная мультизадачность. Разработка не безызвестного
Бреда Еккерта (его ff303). Можно ещё рассмотреть другие Форт системы (и реализованные для PIC) для дополнения и создания "своего" варианта. По поводу быстродействия пока не вижу необходимости "заморачиваться" пока нет в этом смысла.
0
hixir
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 115
27.04.2013, 15:18 63
Автономная беспилотная яхта на форт-процессоре - как бы оффтопик, amforth, такое не потянет, но в свете сложившейся полемики - сообщение вполне уместно.
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
27.04.2013, 15:58 64
Цитата Сообщение от Ymk
Цитата Сообщение от oomomstir
Вы таки не поверите, но реализовать Форт - проще, чем типичный макроассемблер.
да что вы говорите? и я вам не поверю, да. написать простенький асм с простенькими макросами - день плотно поработать. это вместе с отладкой. опыт имееццо. дизасм простенький так вообще за пару часов пишется - факт.

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

Вы не поверите:), но в классической реализации Форта, как такового парсера нет!!!
Есть цикл взятия лексем из входного потока -> поиск её места нахождения в текущем контексте перечисленных словарей поиска -> и при нахождении анализ признака найденного слова -> признак активного слова (Immediate) -> выполняем | нет -> компилируем, например, ссылку на место исполнения слова в текущий словарь компиляции. Слово-лексема не найдена пытаемся понять как число и его скомпилировать ->
неудача выдаём сообщение об ошибке (в этом случае некоторые форт системы вводят дополнительно слово ловушку которое пытается дополнительно произвести разбор лексемы, но если и это не помогло то увы -> Сам буратино)
Слово немедленного исполнения можно тоже принудительно скомпилировать, не смотря на признак активности слова. Активные слова активно управляют контекстом
и процессом компиляции вкупе с другими сопряжёнными словами, например IF ELSE THEN BEGIN AGAIN DO LOOP и др. (такой децентрализованный встроенный механизм
раскрутки компиляции последующего кода с возможностью изменения при этом синтаксиса и семантики следующего кода с настройкой компиляции, например, на требуюмую целевую аппаратную платформу)

Это в первом приближении, но процедура компиляции слова в этом варианте может усложняться как угодно в современных Форт системах.
Точка исполнения слова, при этом может указывать на процедуру обработки своего тела кода произвольным образом (например как ассемблерного кода или
"высокоуровневого" понимания скомпилированных ссылок на другие слова)
Возникает вопрос, а как тогда при этом выполнится скомпилированное main тело, а просто вызовом этого main последней строкой или сохранения
образа Форт системы с указанием на процедуру запуска main при старте.

Цитата Сообщение от Ymk
а чтов итоге? программу все равно составлять из точно таких же кирпичей как у асма, буквально думать ассемблером. на кой это лишнее звено?
Форт в чём то проще чем ассемблер при оперировании переменными т.к. используется стек данных для размещения промежуточных результатов работы программы.
хотя с регистрами непосредственно может быть предоставлена возможность оперирования.

P.S. ...
0
27.04.2013, 15:58
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
27.04.2013, 16:18 65
Цитата Сообщение от hixir
Автономная беспилотная яхта на форт-процессоре - как бы оффтопик, amforth, такое не потянет, но в свете сложившейся полемики - сообщение вполне уместно.
А почему не потянет? У меня, например, нет в этом уверенности можно если видны "затыки", то можно взять и не один контроллер:) и даже не AVR
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
27.04.2013, 16:58 66
Цитата Сообщение от MrYurom
С одной стороны, он позволяет с чистого листа голыми руками развернуть систему неограниченной сложности, а с другой - давно прошли те времена, когда гении-одиночки вершили историю. Нынешние средства разработки обладают инфраструктурой стоимостью миллионы долларов и совокупной трудоемкостью сотни человеко-лет.
Создать что-либо подобное без мощной кооперации нельзя, а учитывая обособленность и "самодостаточность" большинства фортеров - это практически за гранью фантастики.
:)
Примеров удачных Форт систем достаточно и примеры кооперации Фортёров тоже есть при создании некоторых Форт систем,
например SP-Forth, Win32Forth и др., но их тоже можно считать недостаточно или всё же использовать уже наработанные и существующие варианты?
Или ждать когда кто то решит наши "проблемы" за нас?

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

P.S. Поэтому работаем с тем что есть:), а есть достаточно много и разнообразных Форт нароботок!!! Появление которых пока не прекращается:)
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
28.04.2013, 05:35 67
Цитата Сообщение от KPK
Вы не поверите:), но в классической реализации Форта, как такового парсера нет!!!
Есть цикл взятия лексем из входного потока -> поиск её места нахождения в текущем контексте перечисленных словарей поиска -> и при нахождении анализ признака найденного слова -> признак активного слова (Immediate) -> выполняем | нет -> компилируем, например, ссылку на место исполнения слова в текущий словарь компиляции. Слово-лексема не найдена пытаемся понять как число и его скомпилировать ->
неудача выдаём сообщение об ошибке (в этом случае некоторые форт системы вводят дополнительно слово ловушку которое пытается дополнительно произвести разбор лексемы, но если и это не помогло то увы -> Сам буратино)
вы не поверите, но это и есть парсер! и его логика точно сложнее компилятора простенького асма. но сравнима с простеньким макро-ассемблером.
0
hixir
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 115
28.04.2013, 11:56 68
Цитата Сообщение от Ymk
Цитата Сообщение от KPK
Вы не поверите:), но в классической реализации Форта, как такового парсера нет!!!
Есть цикл взятия лексем из входного потока -> поиск её места нахождения в текущем контексте перечисленных словарей поиска -> и при нахождении анализ признака найденного слова -> признак активного слова (Immediate) -> выполняем | нет -> компилируем, например, ссылку на место исполнения слова в текущий словарь компиляции. Слово-лексема не найдена пытаемся понять как число и его скомпилировать ->
неудача выдаём сообщение об ошибке (в этом случае некоторые форт системы вводят дополнительно слово ловушку которое пытается дополнительно произвести разбор лексемы, но если и это не помогло то увы -> Сам буратино)
вы не поверите, но это и есть парсер! и его логика точно сложнее компилятора простенького асма. но сравнима с простеньким макро-ассемблером.
:))
0
iukimi_i_m
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 106
28.04.2013, 11:59 69
Интересно наблюдать со стороны за этими спорами. Ни о чем. Никто не удосужился оживить или подключить данный форт. А он попросту не работает. Я попробовал скомпилить для mega16 и для miko2560. Ни тот ни другой не работает! Даже не инициалируется последовательный порт. Чего там спорить о ни о чем, если нет возможности даже пощупать, написать парочку другую операторов, прогнать их, оценить быстродействие и т.п.
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
28.04.2013, 13:57 70
Зато какой запал у ТС, всех кто Форт не применяет опустил...
0
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
28.04.2013, 14:43 71
Да ладно. На самом деле хорошо, что энтузиасты остались.

2 Ymk: парсер в форте примитивен до невозможности...
1. Лексер тупой и умеет только выделять слово до пробела или конца строки.
2. Собственно парсер - только ищет слово в словаре и если не находит - пытается интерпретировать как число.
Всё. Ну да, ещё есть слова типа ." (точка-кавычка), которые сами парсят входной поток, но они не обязательны и вообще пишутся потом уже на самом форте.
Есть слова типа IF, которые по разному выполняются в режиме интерпретатора и в режиме компилятора - но они опять же очень просты и бОльшая часть из них написана на самом форте.
В общем, чтобы для ассемблера парсер был проще, чем для форта - боюсь, его придётся совсем уж упростить =)

Но на самом деле всё это неважно: давно нет резона разрабатывать прямо на девайсе, и, соответственно, упрощать парсер до невозможности не требуется. Imho, основной смысл в таких вещах - учебный. Грубо говоря, знание Форта (с потрохами) - +5 к IT skills, знание Лиспа (в основе не намного сложнее) - ещё +10, знание Хаскеля (ну, тут уже знания потрохов требовать бессмысленно - он реально сложно устроен) - ещё +20. Ибо каждый из этих языков несёт в себе какие-то концепции, которые стоит понять.

2 Ott: а никто не знает порядок цен на 40C18 или подобные процы? Просто так Форт, может, и не очень перспективен, но в рамках подобного (40 процов в решётке) может быть интересен...
0
VyvotzorD
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 2,309
28.04.2013, 17:05 72
Так ребят, чего-то вот читал-читал... а так и не понял: преимущества-то какие у форта? И недостатки какие? В виде простого списка сделайте кто нибудь... А то обсуждает народ язык, а простого "ЗА" и "ПРОТИВ" никто не предоставил. Только копипаст не надо, это я и сам найду гуглом. Хочется личное мнение прочитать.
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
28.04.2013, 17:22 73
Цитата Сообщение от VyvotzorD
Так ребят, чего-то вот читал-читал... а так и не понял: преимущества-то какие у форта? И недостатки какие? В виде простого списка сделайте кто нибудь... А то обсуждает народ язык, а простого "ЗА" и "ПРОТИВ" никто не предоставил. Только копипаст не надо, это я и сам найду гуглом. Хочется личное мнение прочитать.
Почитайте книгу Броуди (в теме полное название было). Хотя бы начните читать, она с картинками :-) Не "зацепит" - значит, не нужен Вам Форт.
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
28.04.2013, 17:30 74
Цитата Сообщение от iukimi_i_m
Интересно наблюдать со стороны за этими спорами. Ни о чем. Никто не удосужился оживить или подключить данный форт. А он попросту не работает. Я попробовал скомпилить для mega16 и для miko2560. Ни тот ни другой не работает! Даже не инициалируется последовательный порт. Чего там спорить о ни о чем, если нет возможности даже пощупать, написать парочку другую операторов, прогнать их, оценить быстродействие и т.п.
Одна из сборок для атмеga16
Не знаю насколько рабочая (на кристале не пробовал, но собирал сам по наводке с робофорума), но в протеусе запускается.
Параметры кристала указаны 7327800 и уарт 9600 Для работы в протеусе кроме hex указывается и eeprom бинарный файл
Сам протеус не поддерживает самопрограммирование кристалов и поэтому полноценно не получится с AmForth работать из протеуса.

P.S. Для других кристалов и на другие частоты могу "попробовать" собрать прошивку и выложить скрипты для сборки по потребностям.

[28.52 Кб]
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
28.04.2013, 17:45 75
Цитата Сообщение от oomomstir
Но на самом деле всё это неважно: давно нет резона разрабатывать прямо на девайсе, и, соответственно, упрощать парсер до невозможности не требуется...
Поэтому и есть варианты (и из России) кросс Форт для AVR и др. контроллеров. А в "усложнении" синтаксиса и семантики не вижу особого смысла при "ухудщении"
возможностей программирования.:)

P.S. Форт это несколько другой подход к дизайну кода и использовать или нет это дело личных вкусов.
Вроде кристалы SeaForth 40 были по цене 20$, а какая цена у 144 ядерных GreenArray не знаю.
У Броуди 2-е интересных книги, а меня зацепила Баранова, Ноздрунова, хоть и казалась в чём то сложной для понимания,
в отличии от книг Броуди.
0
oomomstir
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,864
28.04.2013, 17:53 76
Цитата Сообщение от VyvotzorD
Так ребят, чего-то вот читал-читал... а так и не понял: преимущества-то какие у форта? И недостатки какие? В виде простого списка сделайте кто нибудь... А то обсуждает народ язык, а простого "ЗА" и "ПРОТИВ" никто не предоставил. Только копипаст не надо, это я и сам найду гуглом. Хочется личное мнение прочитать.
Минусы:
- Обратная польская запись (по мне - вопрос нескольких дней на привыкание)
- Нет системы типов (совсем нет! не variant-тип с автоматическим приведением, как в скриптовых языках, а просто ровно один тип данных - целое число, которое может использоваться и как указатель, и как кусок длинного числа, и как ещё что-нибудь - без всякого контроля, как в асме)
- Не mainstream (imho, самый значимый недостаток).
- Быстродействие шитого кода ниже, чем у ассемблерного или скомпилированного из Си (это если не использовать специальный Форт-процессор)
Плюсы

Плюсы:
+ Очень простое устройство. Изучить и реализовать Форт-систему (ядро + интерпретатор + компилятор) - несложно. Прочитал того же Броуди - и ты уже знаешь его насквозь, а для реализации Форта на какой-нибудь новой системе надо только написать несколько ассемблерных процедур и скопипастить Фортовский же код остального.
+ Компактное ядро. Несколько килобайт = минимальная OS + интерпретатор + компилятор + runtimi.
+ Крайне компактный код (шитый код обычно даже компактней ассемблерного)
+ Интересная архитектура, которую полезно изучить для общего развития.
+ Возможность реализовать поддержку архитектуры (два стека + выполнение шитого кода) в железе.

Т.е. лично я бы рекомендовал его для изучения (в довесок к другим языкам), но не рекомендовал бы для production - кроме случая, когда вам дали Форт-процессор :-)
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
28.04.2013, 17:58 77
Цитата Сообщение от VyvotzorD
Так ребят, чего-то вот читал-читал... а так и не понял: преимущества-то какие у форта? И недостатки какие? В виде простого списка сделайте кто нибудь... А то обсуждает народ язык, а простого "ЗА" и "ПРОТИВ" никто не предоставил. Только копипаст не надо, это я и сам найду гуглом. Хочется личное мнение прочитать.
А по ссылкам на "дебаты" по другим форумам и источникам "прошли"?

P.S. В двух словах - "полная свобода" гибкого создания программ и сопутствующего инструментария в неусложнённой форме по текущим потребностям:)
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
28.04.2013, 18:07 78
Цитата Сообщение от oomomstir
2 Ymk: парсер в форте примитивен до невозможности...
1. Лексер тупой и умеет только выделять слово до пробела или конца строки.
2. Собственно парсер - только ищет слово в словаре и если не находит - пытается интерпретировать как число.
Всё. Ну да, ещё есть слова типа ." (точка-кавычка), которые сами парсят входной поток, но они не обязательны и вообще пишутся потом уже на самом форте.
Есть слова типа IF, которые по разному выполняются в режиме интерпретатора и в режиме компилятора - но они опять же очень просты и бОльшая часть из них написана на самом форте.
В общем, чтобы для ассемблера парсер был проще, чем для форта - боюсь, его придётся совсем уж упростить =)
не помню подробностей, как на счет фиговин, которые задают новые слова для словаря (подпрограммы)? много там нюансов. а ассемблер - прочитал строку, странслировал несколькими условиями/таблицами в код. вести нужно только одну таблицу меток и констант, все.
Цитата Сообщение от oomomstir
Ибо каждый из этих языков несёт в себе какие-то концепции, которые стоит понять.
так какую концепцию несет форт, которую не несет асм? например, при реализации формулы, на асме ты сам же превращаешь ее почти в обр.польскую запись, порядок действий вручную сам задаешь. те же взять из адреса, положить в адрес, вызвать подпрограмму, положив данные в стек... чисто только как пример стековой машины, но для нее не обязательно форт изучать, калькуляторы некоторые на этом же принципе работают.
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
28.04.2013, 18:32 79
Цитата Сообщение от oomomstir
Минусы:
- Обратная польская запись (по мне - вопрос нескольких дней на привыкание)
Немного не так - последовательная запись слов (слово обобщённое понятия с семантикой описанной в стандарте или реализации языка или введённой самим разработчиком вплоть до создания необходимой семантики и синтаксиса в расширении языка от базиса) Слово может быть как переменной так и процедурой
при "классическом" рассмотрении, а может "мимикрировать" в любую необходимую сущность или "адаптировать" своё поведение от контектста использования и.т.д.

Цитата Сообщение от oomomstir
- Нет системы типов (совсем нет! не variant-тип с автоматическим приведением, как в скриптовых языках, а просто ровно один тип данных - целое число, которое может использоваться и как указатель, и как кусок длинного числа, и как ещё что-нибудь - без всякого контроля, как в асме)
Тип ячейка размерности хранения данных памяти (типично 16 или 32) без контроля содержимого ячейки Форт системы. Две ячейки можно объединить для
выполнения, например, операции с двойной арифметики. Для плавающих чисел обычно выделяется свой стек чисел. Как интерпритировать значение ячеек стека/памяти
задача обрабатывающего кода. Для арифметики с двойными ячейками стека водятся операции подобные D+ указывающей размерность обрабатываемых данных.
Char хранится в младшем байте ячейки и также имеет свой специфицированный набор слов с приставкой C , например С! С@
При этом типы типа массивов, структур данных вводятся в использование несколькими словами самого языка и мало отличаются от возможностей использования mainstrym языков.

Цитата Сообщение от oomomstir
- Не mainstream (imho, самый значимый недостаток).
Да не mainstream, но имеет свои сообщества в разных странах, а также несколько коммерчески Форт систем для программирования как компьютеров, так и
контроллеров. "Любителями" Форта созданы разнообразные интересные "полукомерческие" системы разработки.

Цитата Сообщение от oomomstir
- Быстродействие шитого кода ниже, чем у ассемблерного или скомпилированного из Си (это если не использовать специальный Форт-процессор)
В целом, даже любительские Форт системы создания ПО для PC показывают "сравнимые" результаты по эффективности компиляции Форт кода, если не используется
шитый целевой код. Сам шитый код при использовании, например, в MK достаточно производителен и компактен если нет "особых" требований к решению задач
на выбранном MK. К тому же обычно критичные по времени участки кода есть возможность запрограммировать на встроенном ассемблере или подключить готовые
библиотечные файлы, например из Cи или совместно использовать Си или инфраструктуру другого языка и Форт.

P.S.. Свои Плюсы допишу позже:)

Асм привязан к архитектуре используемого процессора по "самые гланды":) и не переносим на другое CPU хотя и имеет "черты" присущие и асму другого CPU.
Почему, например, появился для AVR проект Aлгоритм Билдера? на своём псевдо асме, а не на родном AVR-ки?
Фиговина создающая слова для словаря называется двоеточием и завершается точкой с запятой. (На Си "частенько" её забываю поставить)
: новое_слово другие слова ;
А разделителем любых слов Форта является обязательный пробел или перевод строки!
0
kpk
0 / 0 / 0
Регистрация: 07.04.2013
Сообщений: 461
28.04.2013, 18:51 80
Цитата Сообщение от Ymk
Цитата Сообщение от oomomstir
2 Ymk: парсер в форте примитивен до невозможности...
1. Лексер тупой и умеет только выделять слово до пробела или конца строки.
2. Собственно парсер - только ищет слово в словаре и если не находит - пытается интерпретировать как число.
Всё. Ну да, ещё есть слова типа ." (точка-кавычка), которые сами парсят входной поток, но они не обязательны и вообще пишутся потом уже на самом форте.
Есть слова типа IF, которые по разному выполняются в режиме интерпретатора и в режиме компилятора - но они опять же очень просты и бОльшая часть из них написана на самом форте.
В общем, чтобы для ассемблера парсер был проще, чем для форта - боюсь, его придётся совсем уж упростить =)
не помню подробностей, как на счет фиговин, которые задают новые слова для словаря (подпрограммы)? много там нюансов. а ассемблер - прочитал строку, странслировал несколькими условиями/таблицами в код. вести нужно только одну таблицу меток и констант, все.
Цитата Сообщение от oomomstir
Ибо каждый из этих языков несёт в себе какие-то концепции, которые стоит понять.
так какую концепцию несет форт, которую не несет асм? например, при реализации формулы, на асме ты сам же превращаешь ее почти в обр.польскую запись, порядок действий вручную сам задаешь.

Цитата Сообщение от Ymk
те же взять из адреса, положить в адрес, вызвать подпрограмму, положив данные в стек... чисто только как пример стековой машины, но для нее не обязательно форт изучать, калькуляторы некоторые на этом же принципе работают.
Давайте только не оперировать к программируемым калькуляторам использующими своё уникальное "подобие" стека.
т.к.
1. Стек в калькуляторах больше похож на регистровый файл и ограничен в своих размерах и способах его использования.
2. Стек сам по себе в Форт языке это элегантное решение кеширования данных для использования в текущем контексте и прохождения данных через слова
и плохой тон при его использовании если он становится "батутом" для жонглирования данными.
При сложностях с выстраиванием слова-процедуры со стековыми параметрами то лучше уж тогда использовать стандартные локальные именованные переменные.
...
P.S. Если есть необходимость в описании вычислительных формул привычным способом, то подгрузи небольшое расширение и формулы будут выглядеть в "привычной" записи
По мне так есть определённый смысл когда оператор присутствует в конце выражения и такая запись в сранении с Си не выглядит трудной для понимания и имеет
свои преимущества при использовании.
А оперирование к трудности понимания Форт программ не принимаются т.к. сначала необходимы всегда начальные навыки воссприятия незнакомой системы записи
информации (без относительно и Форта), а дальше, понимание строится на простых шаблонах, а сложные "шаблоны" в любом языке требуют, зачастую, дополнительного
семантического осмысления информации не выводимой "просто" из синтаксического представления. И даже нет гарантии, что это текст будет воспринят адекватно
пройдя через субъективное мировозрение и нейроны:)
0
28.04.2013, 18:51
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru