Forth
http://fforum.winglion.ru/

Что же касается средств управления потоком интерпретации
http://fforum.winglion.ru/viewtopic.php?f=36&t=1786
Страница 4 из 5

Автор:  Hishnik [ Вс янв 04, 2009 20:09 ]
Заголовок сообщения: 

WingLion писал(а):
Короче, отсюда мораль: неудачные [IF] [THEN] [ELSE] из стандарта надо исключить.

Кто за?

А вполне. Тут можно поступить так - разъяснить возможный механизм их действия и реализацию. А раз имеется неоднозначность - не надо выбирать один из вариантов волеизъявлением "комитета".

Автор:  вопрос [ Вс янв 04, 2009 20:13 ]
Заголовок сообщения: 

Цитата:
отсюда мораль: неудачные [IF] [THEN] [ELSE] из стандарта надо исключить.
прежде, чем будет предложена замена, исколючать заведомо опасно.

Автор:  WingLion [ Вс янв 04, 2009 20:22 ]
Заголовок сообщения: 

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


Опасно для чего? для исходников, на ANSI94? Так они по-новому будут компилиться по-прежнему после подключения к ядру расширения forth.ANSY94

А в новый стандарт и предлагается не включать глючную конструкцию, без которой можно легко обойтись имеющимися средствами даже обрезанного F83

Автор:  mOleg [ Вс янв 04, 2009 20:26 ]
Заголовок сообщения: 

WingLion писал(а):
Так они по-новому будут компилиться по-прежнему после подключения к ядру расширения forth.ANSY94

вообще это не обязательно так.

WingLion писал(а):
А в новый стандарт и предлагается не включать глючную конструкцию, без которой можно легко обойтись имеющимися средствами даже обрезанного F83

F83 не лучше ANS94

Автор:  WingLion [ Вс янв 04, 2009 20:31 ]
Заголовок сообщения: 

: ?\ IF nop ELSE [COMPILE] \ THEN ; IMMEDIATE

flag @ ?\ здесь нечто, что компилируется, если flag=true иначе отбрасывается все до конца строки

чтобы не городить на каждой строчке три лишних слова:

Код:
[b]: mode1> flag @ 1 <> IF [COMPILE] \ THEN ; IMMEDIATE[/b]
[b]: mode2> flag @ 2 <> IF [COMPILE] \ THEN ; IMMEDIATE[/b]

mode1> компилится то что надо для режима 1 (можно и S"file1" INCLUDE сделать без проблем)
mode2> компилится то что надо для режима 2


и никаких сверхестественных манипуляций...

Автор:  WingLion [ Вс янв 04, 2009 20:33 ]
Заголовок сообщения: 

mOleg писал(а):
Цитата:
Так они по-новому будут компилиться по-прежнему после подключения к ядру расширения forth.ANSY94


вообще это не обязательно так.


Пока других предложений нет, я придерживаюсь того, которое есть ;)

mOleg писал(а):
F83 не лучше ANS94


лучше или не лучше - вопрос не об этом...
я же написал, что даже F83 позволяет, не утверждая, что он лучше

Автор:  вопрос [ Вс янв 04, 2009 20:37 ]
Заголовок сообщения: 

Цитата:
никаких сверхестественных манипуляций...
в этих манипуляциях нужно ещё разобраться, а стандартные [IF] [THEN] [ELSE] уже существуют

Автор:  mOleg [ Вс янв 04, 2009 20:39 ]
Заголовок сообщения: 

WingLion писал(а):
mOleg писал(а):Цитата:Так они по-новому будут компилиться по-прежнему после подключения к ядру расширения forth.ANSY94
вообще это не обязательно так.
Пока других предложений нет, я придерживаюсь того, которое есть

ага, вот сразу возник у меня вопрос каким в стандарте должно быть представление строк?

Автор:  in4 [ Вт янв 06, 2009 05:04 ]
Заголовок сообщения: 

А какие есть альтернативные техники условной компиляции?
Особенно если без блоков - там можно последовательностью блоков и списком используемых блоков управлять... Получается удобно. Разбивать текст на мелкие файлы - неудобно... :(
По идее, для текстовых файлов аналогом будут именованные части исходника...

Автор:  WingLion [ Вт янв 06, 2009 09:06 ]
Заголовок сообщения: 

Вот и разберемся.
Любая подобная:

Код:
begin-васькин-код

    кусок исходника

end-васькин-код


конструкция приведет к отступлению от одной из концепций форт-исходников, а именно - последовательному построению от-простого-к-сложному БЕЗ ЗАБЕГАНИЙ ВПЕРЕД по тексту исходника.

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

Код:
[IF] ля-ля-ля
  большая-ли-разница что-тут?
\ [ELSE] тру-ля-ля
ой-ой-ой
[THEN]


Знать все слова, которые могут помешать, [IF] физически не в состоянии, потому что про
: мой-любимый-коммент [COMPILE] \ ; IMMEDIATE ему рассказать некому.

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

Формально INCLUDE - есть средство структурирования исходников, а условность им придадут любые стандартные условные конструкции Форта.

почему IF S" file1" INCLUDE ELSE S" file2" INCLUDE THEN - не сработает? Сработает прекрасно, если эту строку заключить в "кавычки компиляции-исполнения".

NONAME: IF S" file1.src" INCLUDE ELSE S" file2.src" INCLUDE THEN ;EXECUTE

Не хочется разбивать исходник на кучу мелких файлов?
Ключевое слово - "мелких" - это значит, что неудобства конструкции вида:

Код:
FOR-PC> исходник кода, если он компилируется для PC. граница - конец строки
FOR-MAC> исходник, если он компилируется для MAC. граница - конец строки
FOR-ZX> исходник, если он компилируется для ZX. граница - конец строки


минимальны.

СВОИ Управляющие слова в этом случае определяются в начале исходника и используются везде, где нужны, без проблем и ограничений

Автор:  mOleg [ Вт янв 06, 2009 20:42 ]
Заголовок сообщения: 

in4 писал(а):
А какие есть альтернативные техники условной компиляции?

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

in4 писал(а):
По идее, для текстовых файлов аналогом будут именованные части исходника...

ну, это черезчур.

Автор:  mOleg [ Вт янв 06, 2009 20:43 ]
Заголовок сообщения: 

WingLion писал(а):
Вот и разберемся.
Любая подобная:
Код:begin-васькин-код
    кусок исходника
end-васькин-код
конструкция приведет к отступлению от одной из концепций форт-исходников, а именно - последовательному построению от-простого-к-сложному БЕЗ ЗАБЕГАНИЙ ВПЕРЕД по тексту исходника.

абсолютно не понял о чем речь :)
причем тут забегание куда-то?

Автор:  WingLion [ Вт янв 06, 2009 20:50 ]
Заголовок сообщения: 

mOleg писал(а):
абсолютно не понял о чем речь Smile
причем тут забегание куда-то?


обозначение начала и конца условно компилируемого исходника требует от компилятора "заглядывания вперед" по тексту, чтобы разобраться, где начало, а где конец.

Автор:  mOleg [ Вт янв 06, 2009 20:50 ]
Заголовок сообщения: 

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

Код:[IF] ля-ля-ля
  большая-ли-разница что-тут?
 \ [ELSE] тру-ля-ля
 ой-ой-ой
[THEN]

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

Автор:  WingLion [ Вт янв 06, 2009 20:54 ]
Заголовок сообщения: 

либо все должно быть просто как апельсин, и без банановых корок раскиданных на дороге

Страница 4 из 5 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/