Подтвердить что ты не робот

Примеры очень сжатых приложений Forth?

В этом разговоре, Чак Мур (создатель Форта) делает очень смелые, широкие заявления, такие как:

  • "Каждое приложение, которое я видел, которое я не кодировал, имеет в нем в десять раз больше кода, чем нужно"
  • "О тысячах инструкций кажется мне право что-либо делать"
  • "Если вы пишете код, который нуждается в [локальных переменных], вы пишете неоптимальный код. Не используйте локальные переменные".

Я пытаюсь выяснить, является ли г-н Мур а) абсолютно блестящим гением или б) сумасшедшим. Но это субъективный вопрос, и я не ищу ответа на этот вопрос здесь. Я ищу примеры сложных, реальных проблем, которые могут быть решены в "1000 инструкциях или менее" с использованием Forth и исходный код, демонстрирующий, как это сделать. Пример, показывающий только одну нетривиальную часть системы реального мира, будет прекрасным, но никакие образцы кода "игрушек", которые могут быть дублированы в 5 или 10 строках другого языка высокого уровня, пожалуйста.

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

4b9b3361

Ответ 1

Вам нужно понять, что Chuck Moore немного отличается от вас и меня. Он обучался в эпоху, когда компьютеры мейнфреймов состояли из 16 килобайт или эквивалента в основной памяти, и он мог делать много вещей с компьютерами того времени. Возможно, самым большим успехом для Forth, вне его пакета дизайна чипов OKAD-II (который не является опечаткой), была многопользовательская многозадачная система Forth, ответственная за одновременное управление устройствами сбора данных и анализом данных/визуализацией на NRAO на компьютере с довольно скромным размером, который вряд ли сможет скомпилировать исходный код Fortran.

То, что он называет "приложением", мы можем считать "компонентом" более крупной, более туманной вещи, называемой приложением. В более общем плане, хорошо иметь в виду, что одно приложение "Moore" более или менее эквивалентно одному "представлению" в трианге MVC. Чтобы уменьшить потребление памяти, он в значительной степени опирается на наложения и методы компиляции точно в срок. При переключении с одного интерфейса программы на другой обычно требуется перекомпилировать все приложение/представление из источника. Это происходит так быстро, что вы не знаете, что это происходит. Как будто Android перекомпилирует Dalvik код на свой родной ARM код при активации приложения каждый сегодня.

В любой момент времени OKAD-II имеет не более 2,5 КБ своего кода, загруженного в память и работающего. Тем не менее, источник на диске для OKAD-II значительно больше 2,5 КБ. Хотя он все еще значительно компактнее, чем его ближайший конкурент, SPICE.

Мне часто любопытно смотреть взгляды Чака Мура и найти его бесконечное стремление к простоте, увлекательной. Итак, в MythBusters моде, я ставлю свои претензии на тест, пытаясь разработать мою собственную систему как минимально, как я мог бы это сделать. Я рад сообщить, что он очень спокоен в своих заявлениях по вопросам аппаратного и программного обеспечения. Дело в том, что в сентябре прошлого года Встреча в Силиконовой долине с интересной группой (SVFIG) я использовал сам Kestrel-2 для создания видео для слайдовой колоды. Это потребовало, чтобы я написал для него слайд-презентационную программу, которая заняла 4 килобайта памяти для кода и 4 KB для структур данных слайдовой колоды. Со средним пространством в шесть байтов на слово Forth (по причинам, которые я не буду здесь останавливаться), оценка "около 1000 (Forth) инструкций" для приложения - это просто то, что Чак Мур оценивает своими собственными приложениями "быть.

Если вам интересно поговорить с настоящими кортами Forth (или кто сделал это в прошлом, как это все больше кажется), и вы оказались в Bay Area, Сиднейская долина Forth Interest Group по-прежнему встречается каждую четвертую субботу месяца, за исключением ноября и декабря, что является третьей субботой. Если вы заинтересованы в том, чтобы посещать собрание, даже если бы только интервью с кодировщиками Forth и получить представление о том, что такое "реальный мир", как, например, проверить нас на meetup.com и пометить его. Мы также обновляем наши встречи на YouTube, но мы не очень хороши в этом. Мы злоупотребляем несоответствующим аппаратным и программным обеспечением для проведения наших торгов, так как у нас есть нулевой бюджет для такого рода вещей.:)

Ответ 2

Forth действительно удивительно компактен! Слова без формальных параметров (и инструкции с нулевым операндом на аппаратном обеспечении - например, GA144) значительно экономит. Другим основным фактором его компактности является абсолютно неумолимый факторинг избыточного кода, который дает условное соглашение и конкатенативный характер.

Я не знаю, относится ли это к примеру с не игрушкой, но Turtle Graphics для Fignition (на FigForth) просто 307 байтов скомпилирован и помещается в один блок источника! Сюда входят триггер с фиксированной точкой и все обычные команды черепахи. Это не лучший пример читаемого Forth из-за попытки сжать его в один блок источника с односимвольными именами и т.д.:

\ 8.8 fixed point sine table lookup
-2 var n F9F2 , E9DD , CEBD , AA95 , 7F67 , 4E34 , 1A c,
: s abs 3C mod dup 1D > if 3C swap - then dup E > if
  -1 1E rot - else 1 swap then n + [email protected] 1+ * ;

0 var x 0 var y 0 var a
0 var q 0 var w 
: c 9380 C80 0 fill ; \ clear screen
: k >r 50 + 8 << r> ! ;
: m dup q @ * x +! w @ * y +! ; \ move n-pixels (without drawing)
: g y k x k ; \ go to x,y coord
: h dup a ! dup s w ! 2D + s q ! ; \ heading
: f >r q @ x @ y @ w @ r 0 do >r r + >r over + \ forward n-pixels
  dup 8 >> r 8 >> plot r> r> loop o y ! x ! o r> o ;
: e key 0 vmode cls ; \ end
: b 1 vmode 1 pen c 0 0 g 0 h ; \ begin
: t a @ + h ; \ turn n-degrees

Использование его также очень кратким.

: sin 160 0 do i i s 4 / 80 + plot loop ;

Sine

: burst 60 0 do 0 0 g i h 110 f loop ;

Burst

: squiral -50 50 g 20 0 do 100 f 21 t loop ;

Squiral

: circle 60 0 do 4 f 1 t loop ; 
: spiral 15 0 do circle 4 t loop ;

Spiral

: star 5 0 do 80 f 24 t loop ; 
: stars 3 0 do star 20 t loop ;

Stars

: rose 0 50 0 do 2 + dup f 14 t loop ;

Rose

: hp 15 0 do 5 f 1 t loop 15 0 do 2 f -1 t loop ; 
: petal hp 30 t hp 30 t ; 
: flower 15 0 do petal 4 t loop ;

Flower

(бесстыдный блог-плагин: http://blogs.msdn.com/b/ashleyf/archive/2012/02/18/turtle-graphics-on-the-fignition.aspx)

Ответ 3

То, что сегодня не совсем понятно, - это то, как Форт ожидал подход к кодированию, который стал популярным в начале XXI века в связи с гибкими методами. В частности:

  • Форт ввел понятие крошечного метода кодирования - использование небольших объектов с помощью небольших методов. Вы можете сделать случай для Smalltalk и Lisp здесь, но в конце 1980-х годов оба Практика Smalltalk и Lisp имели тенденцию к более сложным и сложным методам. Форт всегда принимал очень маленькие методы, хотя бы потому, что поощрял делать так много в стеке.

  • В-четвертых, даже больше, чем Lisp, популяризировалось представление о том, что интерпретатор был всего лишь небольшим программным шаблоном, а не кирпичей типографии. У вас возникла проблема, сложная для кода? Решение Forth должно было быть "писать немного языка", потому что это то, что программировало Forth.

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

Ответ 4

Определения ассемблера Forth Inc polyFORTH/32 VAX/VMS взяли около 8 блоков источника. Ассемблер VAX, в 8 КБ источника. Ответил. Я все еще поражен, 30 лет спустя.

Я не могу проверить на данный момент, но я предполагаю, что количество команд для анализа этих определений CODE будет в низких сотнях. И когда я сказал, что "взял около 8 блоков", он по-прежнему принимает, приложение, использующее это ядро, находится в прямом эфире и в производстве, спустя 30 лет.