Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вс ноя 19, 2017 01:38

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Сб апр 25, 2009 23:01 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4831
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
A Web-Server in Forth

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 03, 2009 11:58 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1252
Благодарил (а): 3 раз.
Поблагодарили: 16 раз.
Второй выпуск сетевого журнала Практика функционального программирования, статья "История разработки одного компилятора".
Цитата:
Приоритетное направление деятельности нашей компании — разработка и внед-
рение решений, связанных с системами глобального позиционирования и навигации.
Основным продуктом является сервисная система для предоставления услуг монито-
ринга автотранспорта, ориентированная, в первую очередь, на операторов сотовой
связи.

При выборе ЯП для реализации как скриптого языка на контроллерах в финал попал и форт(написали на питоне в 2k строк кода, а контроллером был PIC18) - но далее он не прошел по причине отсутствия типизации и:
Цитата:
Еще одна проблема — наиболее компактный код на Форте получается, когда все вычисления проводятся на стеке. Но доступная глубина стека для вычислений в общем случае (не рассматривая Форты с командами типа pickn) ограничена приблизительно четырьмя его верхними ячейками. Более того, циклы со счетчиком организуются либо путем организации третьего «программного» стека для переменных циклов, что разрушает всю изящность языка, либо хранением переменной цикла в стеке адресов, что приводит к различным казусам в случае попытки возврата из слова,
вызываемого внутри цикла. Данная проблема приводит к нарушению двух важных требований сразу: безопасности и компактности байткода. Если для реализации некоторого алгоритма не хватает двух-трех переменных, то приходится прибегать к различным ухищрениям: использованию стека адресов для промежуточного хранения
данных, неуправляемой памяти — для хранения переменных, а также примитивов типа rot, swap или over. Это раздувает код и, в случае использования стека адресов, может приводить к непредсказуемым ошибкам времени исполнения, а также весьма затрудняет написание и прочтение кода. Как правило, чтобы понять некий алгоритм, реализованный на Форте, требуется его мысленно выполнить, что удаётся не всем.

Далее выбор пал на OCaml(и контроллер серии MSP430) и в итоге получили статическую типизацию и... :
Цитата:
Жёсткая типизация операций, например, арифметических. Если у нас есть целочисленные операции
+ − * /
то для того, чтобы пользоваться такими операциями для чисел с плавающей точкой, нам придётся либо ввести для них другие обозначения, например:
+. −. *. /.
либо сделать их полиморфными. При этом они станут бесполезны для выведения типов своих операндов, что сократит количество случаев успешного автоматического выведения типов и потребует большего количества аннотаций.
Можно ввести классы типов и применять другой, более сложный алгоритм выведения. С подобной проблемой сталкиваются и «большие» языки. При этом OCaml, например, выбирает наиболее простое решение — использование разных обозначений для таких операций. Тот же путь приемлем и для нашего языка.

... А чуть позже:
Цитата:
Поддержанию производительности компиляции на приемлемом уровне уделялось достаточно много внимания. Главной особенностью являлось периодически появлявшееся экспоненциальное поведение в самых разных местах компилятора. Оно проявлялось и при построении словаря, являясь просто алгоритмической ошибкой, но особенно много головной боли доставила система вывода типов.
Унификация — не самый дешевый в смысле производительности алгоритм, так что важно поддерживать количество данных, участвующих в унификации, минимальным и не допускать повторных вычислений того, что уже вычислено.
Этот момент стоит отметить особо, так как большую проблему с производительностью создала реализация полиморфных функций. Дело в том, что если мы полностью вычисляем типы для каждого выражения каждый раз, как оно встречается, то реализация полиморфных функций тривиальна — мы просто используем выведенные значения типов параметров и возврата полиморфной функции в том выражении, где мы её используем, не сохраняя значений для вычисленных типов. Функция действительно получается полиморфной, её тип различен в разных контекстах. Но перевычисление всех типов для каждого выражения приводит к абсолютно неприемлемой вычислительной сложности. Чтобы этого избежать, пришлось пойти на достаточно нетривиальные меры.
В остальном обычный профайлинг и не очень агрессивная мемоизация позволили удержать производительность на уровне, неформально определённом нами как «менее секунды на любом файле, который в состоянии написать человек». Это означает, что как только на каком-либо скрипте время компиляции превышает секунду, берётся в руки профайлер, и эта проблема устраняется. До сих пор это получалось.
.....
В целом производительность компилятора следует признать удовлетворительной, хотя до идеала далеко — в частности, компилятор OCaml работает существенно быстрее.


После долгих экспериментов получили нечто приближенное к си:
Код:
def main() {
   putsn(”GPS ON”);
   gps_power(true);
   while true {
      local nmea = collect_gps_data();
      if nmea.fx > 0 then {
         putsn(”Coords fixed”)
         puts(”Satellites: ”);
         putsn(utoa(nmea.gps_sat, 16));
         puts(”Latitude: ”);
         putsn(nmea.gps_lat);
         puts(”Longitude: ”);
         putsn(nmea.gps_lat);
      }
   }
}

И вот такие итоги:
Цитата:
Разумеется, Бип был разработан вовсе не как фан-проект для обучения написанию компиляторов. И его предтеча, Форт, и он сам применялись в разрабатываемых системах, даже будучи не совсем стабильными, развиваясь параллельно с основными системами.
Основные цели, которые ставились при разработке Бипа, были достигнуты, а по отдельным параметрам он даже превзошел связанные с ним ожидания.
Разрабатывать скрипты на нем оказалось гораздо быстрее и проще, чем, например, писать код на Си, что привело к тому, что часть логики работы устройства, которая изначально планировалась к реализации в прошивке, реализуется в скрипте.
.....
Еще один немаловажный аспект: байткод Бипа плотнее, чем машинный код, генерируемый компилятором Си. В то время, когда ресурсы code memory, отведённые под прошивку (около 32 КБ flash), практически исчерпаны, 8 КБ сегмента, отведённого под байткод, еще имеют резервы. В связи с этим нехватка функциональности прошивки
вполне может быть компенсирована за счет скрипта.
.....
Удалённое обновление скрипта уже многократно использовалось при пользова-
тельском тестировании, позволяя устранять различные проблемы на лету, практиче-
ски между двумя событиями трекинга, менее чем за 30 секунд. Пользователи даже не
замечали, что произошло что-то особенное.
Стоит упомянуть, что принятые в дизайне языка и рантайма решения — строгая статическая типизация, отсутствие неинициализированных переменных, отсутствие рантайм-исключений — полностью окупились: за полгода пользовательского тестирования не зафиксировано ни одного падения прошивки устройств, вызванного дефектами дизайна рантайма или компилятора. При этом не потребовалось разработки эмуляторов и длительного тестирования скриптов на них — скрипты пишутся сразу и тестируются непосредственно на самих устройствах. Благодаря типизации есть уверенность, что скомпилировавшийся скрипт будет нормально работать и не приведет к потере связи с устройством, что не может быть гарантировано при использовании, например, Форта или гипотетических динамических языков.

Цитата:
Количество кода живых проектов имеет тенденцию постоянно увеличиваться.
Чтобы этот рост контролировать, необходим рефакторинг, который, в свою очередь,
требует плотного покрытия кода тестами, требующими времени на написание и под-
держку.
Невозможно переоценить, насколько упрощается задача рефакторинга в случае применения языка с сильной типизацией.
Рост размера кода, увеличение его структурной сложности, количества предположений, соглашений и взаимосвязей, уменьшение его понятности — очень существенные негативные факторы, которые нельзя игнорировать.


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

Ох, что-то я разошелся :) Хотел привести линк и в паре слов описать содержание, а в итоге получилось нечто не совсем определенное...

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ссылка на статьи по Форту
СообщениеДобавлено: Сб мар 10, 2012 22:04 
Была ли раньше ссылка на данную статью? (оригинал)

На странице: Тр. СПИИРАН, 2002, выпуск 1, том 1, страницы 211–223 (Mi trspy81)
http://www.mathnet.ru/php/archive.phtml?wshow=paper&jrnid=trspy&paperid=81&option_lang=rus
Статья:
Код:
Одностековая реализация бэктрекинга для языка Форт

М.Л. Гасаненко

Аннотация: Предложена методика реализации механизма откатов (бэктрекинга, backtracking) для языка Форт, отличающаяся использованием только одного стека (стека возвратов) и совместимостью с механизмом локальных переменных. Обсуждается возможность применения аналогичных методов для расширения бэктрекингом языка Си. Бэктрекинг позволяет ввести в язык еще один вид модульности — модули, отвечающие за пере- бор.

pdf файл http://www.mathnet.ru/php/getFT.phtml?jrnid=trspy&paperid=81&what=fullt&option_lang=rus


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: ссылка на статьи по Форту
СообщениеДобавлено: Вс ноя 25, 2012 13:47 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Статья-сообщение
Разомнем мозг при помощи Forth?
Дата публикации: 19.11.2012г.
Место публикации: сайт harahabr.ru
Код:
Порой возникает желание размять свой погрязший в объектно-ориентированном программировании мозг чем-то новеньким и необычным. Конечно, на помощь в этой ситуации может прийти любой функциональный язык программирования, например, Haskell, Erlang, Lisp или OCaml. Но сейчас даже ими уже вряд ли кого-то можно удивить. Нет, хочется чего-то совершенно другого. В такой ситуации на помощь к нам спешит Forth — стековый язык программирования.

Читать далее...

P.S. Умилил один из комментариев "...Ну и спасибо. Это всетаки прорыв на хабре.:)"


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ссылка на статьи по Форту
СообщениеДобавлено: Вс мар 26, 2017 04:57 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 711
Благодарил (а): 3 раз.
Поблагодарили: 31 раз.
Конструирование оснастки для обработки оконных сообщений Windows
Windows Forth +

P.S. И ещё немного дополнительного чтива Почему программисты — отстой :shuffle;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ссылка на статьи по Форту
СообщениеДобавлено: Вс мар 26, 2017 17:57 
Не в сети
Аватара пользователя

Зарегистрирован: Вт авг 12, 2008 03:18
Сообщения: 204
Откуда: Москва
Благодарил (а): 24 раз.
Поблагодарили: 2 раз.
KPG писал(а):
И ещё немного дополнительного чтива Почему программисты — отстой :shuffle;


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

_________________
Линукс решает, винда глотает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ссылка на статьи по Форту
СообщениеДобавлено: Вс мар 26, 2017 22:01 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6087
Благодарил (а): 13 раз.
Поблагодарили: 96 раз.
vikt писал(а):
На мой взгляд, проблема не в программистах, а в ублюдочной концепции программного
обеспечения, когда программа должна быть сдана под ключ.

Это только одна из моделей разработки. Модели с активным (или не очень) привлечением заказчика тоже существуют - к примеру, итерационная или спиральная. Условно можно к ним отнести и модные направления типа Agile и Scrum, которые затрагивают в основном разработку, а не весь жизненный цикл продукта. Там как раз предусмотрены регулярные поставки очередных порций функционального наполнения, и скриптование оказывается вполне к месту.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2, 3

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


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

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


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

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