Forth http://fforum.winglion.ru/ |
|
Как можно эффективно использовать Форт http://fforum.winglion.ru/viewtopic.php?f=4&t=1065 |
Страница 2 из 17 |
Автор: | Forthware [ Пн дек 10, 2007 13:30 ] |
Заголовок сообщения: | |
K`[f писал(а): Нужно возвращаться назад по ходу движения программы и т.п. Кажется, небольшая проблема - все не раз так делали и достаточно успешно - но вспомните - так ли просто всегда определить, что данные на стеке - мусор, не относящийся к делу? Теперь сравните эту ситуацию с обычным "C" - строго заданный набор переменных. То есть: в С мы имеем, например:
iZink = iFuncx(bBig, bGood, dMass, iQuote); Типа все ясно. Если вам такой вариант нравится, почему бы не записать это на Форте таким образом: bBig bGood dMass iQuote iFuncx TO iZink Или: bBig @ bGood @ dMass @ iQuote @ iFuncx iZink ! Далеко откатыаваться не придется. Можете так же как и в С держать стек пустым между отдельными выражениями, никто не мешает. |
Автор: | K`[f [ Пн дек 10, 2007 14:28 ] |
Заголовок сообщения: | |
Pretorian писал(а): А что там "насрут" другие языки при компиляции, меня раздражает разбирать. А чего такого они срут-то? И заметьте - я не спрашиваю по какой такой надобности это вам понадобилось, хотя, может, стоило бы... Forthware писал(а): Если вам такой вариант нравится, почему бы не записать это на Форте таким образом:
Ну - первая причина - мне понадобилось несколько секунд, чтобы сообразить, что вы пытаетесь сделать. Вторая - если ОБЯЗАТЕЛЬНО пихать вычисленные значения в переменные и заводить для этого переменные (даже локальные) - это уже не Форт будет. |
Автор: | Mihail [ Пн дек 10, 2007 14:28 ] |
Заголовок сообщения: | |
Kopa писал(а): Прежде всего теряем гибкость при последующих возможных изменениях
текущего кода из-за фиксации синтаксиса Для этого, классический Форт остается в доступе. |
Автор: | Forthware [ Пн дек 10, 2007 14:46 ] |
Заголовок сообщения: | |
K`[f писал(а): стек чисел с плавающей точкой, Он и так везде есть в том числе и в ANSI предусматрен.K`[f писал(а): стек структур управления Предусмотрен ANSI (если я верно понял). Я его еще использовал для локальных переменных.K`[f писал(а): стек адресов, Вот только это что-то новое, собственно. Однако его внедрение сделает новый язык не совсем совместимым с Фортом. Если "!" будет брать адрес с AS а данные с DS. Тут или забить на половину общепринятого синтаксиса Форта, либо просто расширить его. То-есть, все слова что есть в ANSI будут работать с DS, как обычно, а мы просто добавим новые, которые будут уже работать с обеими стеками. Пожалуй такой вариант имеет право на существование, поскольку пятый (!!!) стек может оказаться вполне полезным. К тому же, если это расширение, и язык продолжает быть совместимым с другими, то мы ничего не теряем!
ЗЫ У х86 как раз есть 4 "индексных" регистра, таким образом все будут использованы в полной мере. Ээээ... Так может стоит взять и написать такое расширение? Для какого нить из существующих Фортов? Для эффективной работы и реального повышения производительности надо это делать в асме, поэтому результат будет совместим только с конкретной реализацией, поскольку регистровое распределение и особенности компиляции у всех свои. Я вас верно понял? |
Автор: | Forthware [ Пн дек 10, 2007 14:55 ] |
Заголовок сообщения: | |
K`[f писал(а): Ну - первая причина - мне понадобилось несколько секунд, чтобы сообразить, что вы пытаетесь сделать. Что именно вас смутило? Если непонятно что есть переменные а что функция, очень просто решается путем использования венгерской нотации. Я серьезно.K`[f писал(а): Вторая - если ОБЯЗАТЕЛЬНО пихать вычисленные значения в переменные и заводить для этого переменные (даже локальные) - это уже не Форт будет. Вах! А какая разница? Если вам не нравится писать так как пишут все (что вы заявили) пишите по другому! Нигде не сказанно как писать правильно а как нельзя. Если вы не можете держать в стеке инфу, не держите!
Каждый волен пользоваться языком так как это ему удобнее, если вам удобнее так, пожалуйста, думаю Броди не обидится . Кстати, тот же Броди, про те же локальные переменные говорит, что если у вас больше чем 3-4 аргумента, то часто бывает полезно тупо распихать их по переменных на входе и дальше использовать по мере надобности. Где то в "Thinking Forth" есть такое. Кстати, если писать так, что к концу каждой строчки стек пустой, то можно и определения на 200 строк вполне читабельными делать. И даже не надо Форт до С наращивать! Это, конечно, если кому надо. |
Автор: | K`[f [ Пн дек 10, 2007 20:37 ] |
Заголовок сообщения: | |
Forthware писал(а): Он и так везде есть в том числе и в ANSI предусматрен. Forthware писал(а): Предусмотрен ANSI (если я верно понял). Я его еще использовал для локальных переменных. Я говорю про ОТДЕЛЬНЫЕ стеки. И чтобы это было закреплено на уровне стандарта!!! Forthware писал(а): Вот только это что-то новое, собственно. Smile Однако его внедрение сделает новый язык не совсем совместимым с Фортом. Дык, повторяю, моё имхо тут - в нынешнем виде Форт популярности добиться НЕ МОЖЕТ. Forthware писал(а): Вах! А какая разница? Если вам не нравится писать так как пишут все (что вы заявили) пишите по другому!
Во-первых - можно цитату, где это я такое заявлял? Во-вторых - Форт должен оставаться Фортом, но не формально, а по сути! |
Автор: | Forthware [ Пн дек 10, 2007 22:25 ] |
Заголовок сообщения: | |
K`[f писал(а): Я говорю про ОТДЕЛЬНЫЕ стеки. И чтобы это было закреплено на уровне стандарта!!! В ANSI сказано что FS и CS предположительно существуют и операции для работы с ними предусмотрены и должны быть реализованы. Так что на уровне стандарта есть просто не является обязательным, поскольку CS может быть продублирован с помощью DS и операции на нем тоже, а FS может быть не реализован, однако в большинстве случаев FS все-таки отделен от DS.K`[f писал(а): Дык, повторяю, моё имхо тут - в нынешнем виде Форт популярности добиться НЕ МОЖЕТ. Не думаю что простое добавление одного (уже пятого) стека каким либо образом повлияет на его популярность. Может даже наоборот, оттолкнет некоторых существующих фортеров. А чем оно особенно более привлекательно за ANSI для новичков?K`[f писал(а): Во-первых - можно цитату, где это я такое заявлял? Вот тут: K`[f писал(а): Как мне кажется, в нынешнем Форте мало средств абстракции данных. Сравните - если в Форте на вход слова приходит непонятно что, то мы, в общем случае, не можем даже предположить, откуда оно пришло и что означает. Нужно возвращаться назад по ходу движения программы и т.п. Кажется, небольшая проблема - все не раз так делали и достаточно успешно - но вспомните - так ли просто всегда определить, что данные на стеке - мусор, не относящийся к делу? Теперь сравните эту ситуацию с обычным "C" - строго заданный набор переменных. И если в них что-то лежит, значит - компилятор по какой-то причине вычислил эти значения. Если там мусор - значит, по каким-то соображениям мы применяли "хак" системы (типа сложной адресной арифметики) и копать в первую очередь надо именно туда. Последняя ситуация в Форте является штатной. K`[f писал(а): Во-вторых - Форт должен оставаться Фортом, но не формально, а по сути! А по сути это как? Где эта суть задокументирована?
К тому же, где и кем сказано что "должен"? |
Автор: | вопрос [ Пн дек 10, 2007 23:00 ] |
Заголовок сообщения: | |
Mihail писал(а): Kopa писал(а): Прежде всего теряем гибкость при последующих возможных изменениях текущего кода из-за фиксации синтаксиса Для этого, классический Форт остается в доступе. Само собою, иначе зачем огород городить |
Автор: | Hishnik [ Пн дек 10, 2007 23:22 ] |
Заголовок сообщения: | |
Ilya писал(а): По поводу GUI и интерактивности. Требовалось срочно (дело было в командировке на объекте) выявить ошибку в протоколе обмена (RS-485), проблема была решена макс. за 1/2 часа написанием на SPF-е "шпиёна", который подслушивал (и писал в лог) обмен по магистрали! И ессно безо всякого GUI. А я GUI в чисто виндовом стиле как раз обычно и не делаю. Есть плоский графический экран, на него можно выводить в произвольном порядке. Это, по меньшей мере, дает возможность строить график... K`[f писал(а): Если у автора с головой всё в порядке, то получается решение не хуже, чем на Форте, к тому же не требующее танцев с бубном "как его прикрутить". Тогда уж надо, чтобы с головой было все в порядке. То есть настолько все, что проектирование языка с нуля прошло бы на ура и без явных и неявных ошибок. И не только без ошибок, а еще и эффективно. Думается, что знание Форта тут в любом случае не помешает. K`[f писал(а): У Форта и сейчас нет никаких проблем с расширяемостью. Однако популярности это ему не добавило. Определиться бы еще с понятием популярность. Какая-нибудь "муси-пуси" с фабрики звезд популярна? Не получится ли так, что популярность Форт приобретет, когда станет понятен и любим дилетантами за быстрое исчерпание возможностей при освоении? K`[f писал(а): стек чисел с плавающей точкой, стек адресов, стек структур управления - и они должны быть ИМЕНННО раздельными.
Они и так раздельные - стек данных, возвратов, управления, вещественных чисел, (опционально - циклов). |
Автор: | ygrek [ Вт дек 11, 2007 00:01 ] |
Заголовок сообщения: | |
K`[f писал(а): Я неоднократно уже на этом форуме предлагал попробовать ввести несколько стеков - в первую очередь, чтобы они ВСЕГДА были под контролем программиста - стек чисел с плавающей точкой, стек адресов, стек структур управления - и они должны быть ИМЕНННО раздельными. Важно - попробовать это решение в деле, я не призываю все всё бросить и заниматься этой идеей. Без опробации не стоит и рассматривать её серъёзно.
И? Дальше призывов к "опробации" сферически-вакуумной идеи дело пойдёт? Хинт : вероятность того что эту идею реализует кто-то кроме вас - почти ноль. Напишите расширение, опробуйте в деле, сделайте доступным для использования. Учитывая просто неисчислимое множество ничем-не-занятых-сидящих-без-дела фортеров ожидающих пока кто-нибудь придёт и подскажет им идею которую можно реализовать - одни только словесные рассуждения ничем не помогут в "опробации" этой идеи. |
Автор: | ArtemKAD [ Вт дек 11, 2007 01:30 ] |
Заголовок сообщения: | |
K`[f писал(а): Я говорю про ОТДЕЛЬНЫЕ стеки. И чтобы это было закреплено на уровне стандарта!!!
Стек структур управления в ANSI предусмотрен как таковой (даже стековая нотация отдельная начинающаяся с С: ). Но указано, что он в принципе (по желанию реализации) может быть размещен на стеке данных. |
Автор: | Pretorian [ Вт дек 11, 2007 07:02 ] |
Заголовок сообщения: | |
K`[f писал(а): Pretorian писал(а): А что там "насрут" другие языки при компиляции, меня раздражает разбирать. А чего такого они срут-то? И заметьте - я не спрашиваю по какой такой надобности это вам понадобилось, хотя, может, стоило бы... Привычка во все вникать, . А что "срут" ну типа STL и прочее. |
Автор: | K`[f [ Вт дек 11, 2007 09:22 ] |
Заголовок сообщения: | |
Forthware писал(а): В ANSI сказано что FS и CS предположительно существуют и операции для работы с ними предусмотрены и должны быть реализованы. Так что на уровне стандарта есть просто не является обязательным, поскольку CS может быть продублирован с помощью DS и операции на нем тоже, а FS может быть не реализован, однако в большинстве случаев FS все-таки отделен от DS. У... Похоже, у меня какие-то проблемы с объяснениями - меня в упор не понимают. Я говорю про ФИЗИЧЕСКИ раздельные стеки как средство повышения уровня абстракции данных. И чтобы это было закреплено на уровне стандартов. Аналогия с "C" - как там это сделано - операция, допустим, "+" для числа и для указателя - совершенно разные вещи. А в Форте - сами значете что (хотя, упаси Боже, я не призываю делать "как там" - явная адресация Форта, имхо, прозрачнее). И если мы признаем, что указатель, с точки зрения программной логики, не есть число - то мы тоже должны выделить и операции с ним и отдельный стек. Чем-то мне это напоминает ситуацию с VALUE и TO - я бы их вообще выкинул... Forthware писал(а): А чем оно особенно более привлекательно за ANSI для новичков? А ничем. Форт и так куда легче чем "С". Тем более - если человек ДЕЙСТВИТЕЛЬНО новичок, а не опытный программист, то порой ему бывает надо долго втолковывать зачем писать комментарии, а не то что там какая-то абстракция данных... Отдельные стеки нужны для разработки сложных систем. Имхо, конечно. Forthware писал(а): Вот тут: А причём тут "не нравится как всем"? Честно - не понимаю. Ситуация такая, что "нравится - не нравится..." - многие, думаю, даже не задумываются. Forthware писал(а): А по сути это как? Где эта суть задокументирована? shuffle Laughing К тому же, где и кем сказано что "должен"? Confused Всеми. Никем. Броуди тот-же... Для меня Форт - это, в первую очередь, слова и управление процессом компиляции с помощью IMMEDIATE-слов. Ну ещё идея стека, как простейшей реализации расширяемости. У каждого, думаю, что-то своё, но, подозреваю, все понимают про что я говорю. А "должен" - это моё имхо... Хищник писал(а): Определиться бы еще с понятием популярность. Какая-нибудь "муси-пуси" с фабрики звезд популярна? Не получится ли так, что популярность Форт приобретет, когда станет понятен и любим дилетантами за быстрое исчерпание возможностей при освоении? Мне в этом плане C++ на многое открыл глаза. Когда отношение затрат на написание к производительности, с учётом "текущего момента" в виде мощности средней машины, становится более привлекательным, чем предыдущий уровень - тогда никакая сложность людей не останавливает. К тому же - Форт гораздо проще тех же плюсов. И он действительно понятен любым дилетантам... Хищник писал(а): Они и так раздельные - стек данных, возвратов, управления, вещественных чисел, (опционально - циклов). Цитаты: "Стек потока-управления, может, но не обязательно, физически существовать в реализации. Если он существует, то может быть, но не обязательно, реализован с использованием стека данных." "Элементы на стеке возвратов должны состоять из одной или более ячеек. Система может использовать стек возвратов зависящим от реализации способом в течение компиляции определений, в течение выполнения do-loops, и для сохранения вложенной информации во время выполнения." А вот это - вообще шедевр "сильной связи", имхо: "Стек с плавающей точкой: По умолчанию стек с плавающей точкой отделен от стеков данных и возвратов; однако реализация может сохранять числа с плавающей точкой на стеке данных. Программа может определять, сохраняются ли числа с плавающей точкой на стеке данных передачей строки FLOATING-STACK в ENVIRONMENT?. Это опыт нескольких членов Технического Комитета, что с надлежащей практикой кодирования, возможно написать код с плавающей точкой, который будет работать тождественно на системах с отдельным стеком с плавающей точкой и с числами с плавающей точкой сохраняемыми на стеке данных." ygrek писал(а): И? Дальше призывов к "опробации" сферически-вакуумной идеи дело пойдёт? Хинт : вероятность того что эту идею реализует кто-то кроме вас - почти ноль Абсолютно с вами согласен. В этом-то и беда. Если накопилось критическое число людей, считающих, что нужно что-то кардинально изменить - то мы можем попробовать вместе. Один-другой-третий и т.д. вариант. Тестовые примеры, фрагменты существующих РЕАЛЬНЫХ программ - и выбрать что-то реально лучшее. Если нет - то, думаю, усилия одиночки тут бесполезны... ArtemKAD писал(а): Но указано, что он в принципе (по желанию реализации) может быть размещен на стеке данных. О - хоть кто-то понял про что я. Pretorian писал(а): Привычка во все вникать, . А что "срут" ну типа STL и прочее.
Гм? У меня никогда с этим проблем не было, правда, собственно дизассемблированием я не занимался со времён спектрума. Всегда можно создать некоторое "узкое место" в своей программе, через которое пройдут требуемые данные - и там их проконтролировать. |
Автор: | Гость [ Вт дек 11, 2007 10:15 ] |
Заголовок сообщения: | |
K`[f писал(а): Я говорю про ФИЗИЧЕСКИ раздельные стеки как средство повышения уровня абстракции данных. И чтобы это было закреплено на уровне стандартов.
Аналогия с "C" - как там это сделано - операция, допустим, "+" для числа и для указателя - совершенно разные вещи. ... Смысл в физическом отделении стека управления может быть есть, но нехватает только действительно примеров его использования в рантайме:) P.S. Ничто не мешает для адресов и данных ввести разные мнемоники операций. |
Автор: | true-grue [ Вт дек 11, 2007 12:02 ] |
Заголовок сообщения: | |
K`[f писал(а): У... Похоже, у меня какие-то проблемы с объяснениями - меня в упор не понимают. Я говорю про ФИЗИЧЕСКИ раздельные стеки как средство повышения уровня абстракции данных. И чтобы это было закреплено на уровне стандартов. Именно так и пишут на Форте. В большинстве серьезных расширений создаются пользовательские стеки для самых различных нужд. K`[f писал(а): И если мы признаем, что указатель, с точки зрения программной логики, не есть число - то мы тоже должны выделить и операции с ним и отдельный стек. В языке Forpost используется стек указателей, приобретен некоторый опыт его использования. В сборщике мусора для Форта ссылки аналогично помещаются на специальный стек. Позволю себе привести цитату из Ч. Хоара по поводу проектирования языков: "Если вы хотите, чтобы у языка не было подмножеств, создавайте маленький язык. Вы включаете только те свойства, о которых вы знаете, что они необходимы для каждого приложения языка, и о которых вы знаете, что они годятся для каждой аппаратной конфигурации, на которой этот язык реализован. Тогда там, где необходимо, должны быть разработаны расширения для конкретных аппаратных устройств и для конкретных приложений." Создать подобный маленький, но выразительный язык это настоящее искусство. И это гораздо труднее, чем соорудить очередного монстра с C-подобным синтаксисом, но зато по всем правилам Dragon Book. Почему же то, что вполне можно оставить для расширений, Вы так стремитесь внести именно в стандарт? K`[f писал(а): К тому же - Форт гораздо проще тех же плюсов. И он действительно понятен любым дилетантам... В этом состоит большое заблуждение дилетантов. На самом деле, проще написать ту же Форт-систему, чем научиться программировать на Форте. K`[f писал(а): Абсолютно с вами согласен. В этом-то и беда. Если накопилось критическое число людей, считающих, что нужно что-то кардинально изменить - то мы можем попробовать вместе. Один-другой-третий и т.д. вариант. Тестовые примеры, фрагменты существующих РЕАЛЬНЫХ программ - и выбрать что-то реально лучшее. Если нет - то, думаю, усилия одиночки тут бесполезны...
Тогда можно заняться чем-нибудь еще. Лучшие программные системы созданы одиночками. |
Страница 2 из 17 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |