Skip to main content

Блог инженера

Блог о минимализме, инжинерии и программировании.



Понял, почему я увлёкся именно программированием на Форт.

  | #Форт#программирование

Думаю, я сделаю небольшую паузу с публикациями про форт-программы. Опыт показывает, что она может стать и большой. Я на том этапе, когда небольшая программа не вызывает сложностей. Но вот мне понадобились тригонометрические функции на Форт. Скорее быстрые, чем точные и для операций с фиксированной точкой. Я без особых проблем нахожу, как это сделать. Но не понимаю, как это работает.

\ trig 99.12.10 11:46 am NAB
: table create does> swap 2* + @ ;
table tsin
0 , 175 , 349 , 523 ,
698 , 872 , 1045 , 1219 ,
1392 , 1564 , 1736 , 1908 ,
2079 , 2250 , 2419 , 2588 ,
2756 , 2924 , 3090 , 3256 ,
3420 , 3584 , 3746 , 3907 ,
4067 , 4226 , 4384 , 4540 ,
4695 , 4848 , 5000 , 5150 ,
5299 , 5446 , 5592 , 5736 ,
5878 , 6018 , 6157 , 6293 ,
6428 , 6561 , 6691 , 6820 ,
6947 , 7071 , 7193 , 7314 ,
7431 , 7547 , 7660 , 7771 ,
7880 , 7986 , 8090 , 8192 ,
8290 , 8387 , 8480 , 8572 ,
8660 , 8746 , 8829 , 8910 ,
8988 , 9063 , 9135 , 9205 ,
9272 , 9336 , 9397 , 9455 ,
9511 , 9563 , 9613 , 9659 ,
9703 , 9744 , 9781 , 9816 ,
9848 , 9877 , 9903 , 9925 ,
9945 , 9962 , 9976 , 9986 ,
9994 , 9998 , 10000 ,
: (sin) ( n -- n')
  dup 90 > if  180 swap -  then
  tsin ;
: sin ( n -- n')
  360 /mod drop dup 0 <
  if  360 +  then  dup 180 >
  if  180 - (sin) negate  else  (sin)  then ;
: cos ( n -- n')  360 /mod drop 90 + sin ;

При этом - это действительно работает. Кажется, создаётся таблица, со стека снимается угол (в градусах), умножается на два и это используется, как указатель на таблицу с значениями синуса угла. Надо разбираться, как работает CREATE DOES>. Сведений из Starting Forth должно быть вполне достаточно, но читать даже по главе в день у меня не получится.

Уже во введении в Starting Forth я нашёл фрагмент, который и объясняет, что же меня увлекло.

One principle that guided the evolution of Forth, and continues to guide its application, is bluntly: Keep It Simple. A simple solution has elegance. It is the result of exacting effort to understand the real problem and is recognized by its compelling sense of rightness. I stress this point because it contradicts the conventional view that power increases with complexity. Simplicity provides confidence, reliability, compactness, and speed.

В эволюции языка Форт есть один руководящий принцип, который распространяется и на форт-программы тоже. Он простой: Сделай это проще, дурачок (KISS). Простые решения - элегантны. Это результат серьёзных усилий, направленных на понимание реальной проблемы и признанию её правильности. Я сделал ударение на этом месте, потому что оно противоречит общепринятым взглядам, что мощность увелчивается со сложностью. Простота придаёт уверенности, надёжности, краткости и скорости.

Перевод мой и основное предложение приведено отвратительно. К сожалению, лучше не смог. Но суть ясна. Форт - о простоте. В конечном счёте, девиз моего блога “не только о минимализме”, но почти всё, что я пишу - само собой сводится к простоте решений, в программировании ли, в охране труда или в жизни.

В статье FORTH: THE HACKER’S LANGUAGE автор заостряет внимание на том, что Форт даёт лёгкость и гибкость за счёт безопасности. Расширять Форт легко, у него есть все средства для этого.

Ещё больше нашлось в The Evolution of Forth.

The evolution of Forth prior to 1978 was completely dominated by Moore himself. As we have seen, Moore was and is a fanatic minimalist, dedicated to the principle of zero-based design in which every feature and every instruction must justify its existence or be ruthlessly scrapped.

В эволюции языка программирования Форт до 1978 года главную роль играл (Чарльз) Мур. Как мы видели, Муры был и остаётся фанатичным минималистом, верный принципу нулевого дизайна в которой каждая черта и каждая инструкция должна оправдать своё существование или быть безжалостно выброшена.

P.S. Причины, по которым код выше мне был плхо понятен в том, что так писать не следует. Хорошая новость - аналогичного результата можно добиться простой командой CREATE. Плохая новость - у меня это пока не работает.

About Mikhail Kiselev

Photo of Mikhail Kiselev

Приветствую в моём блоге! 😄 Меня зовут Михаил. Я инженер и программист. Живу в Израиле. Но мой блог связан с работой в Сибири и на Сахалине, путешествую где придётся. Я предпочитаю пост в блог посту в твиттер. Описание полезной технологии или гаджета предпочитаю описанию заката или посиделок в кафе.