Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт апр 18, 2024 17:36

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 85 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 26, 2006 17:47 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
wormball писал(а):
А как тебе нужно? Вызовов функций из ДЛЛ недостаточно?


Где-то на форуме есть мое сообщение wm_paint hell :) Вызовов функций, конечно, достаточно, но жутко неудобно. Должен быть прозрачный интерфейс программиста, который допускал бы и самое высокоуровневое задание интерфейсных компонентов (нечто вроде tcl/tk), и безболезненное "опускание" до уровня системных вызовов. Самое главное - я не должен постоянно вспоминать, что и в каком порядке надо вызывать для получения результата.
wormball писал(а):
Есть у меня мысль сделать плавающую точку перегружаемой точности. Точнее я её уже сделал, но там размер переменных в памяти всегда равен размеру в стеке, тогда как это не лучший выход. Плюс хочу, чтобы точность можно было менять в процессе работы. Например, ежели всё считать только в стеке сопроцессора, вычисления будут летать, но стек сопроцессора не безграничен - поэтому надо иметь возможность переключения на стек в памяти. Такое где-нибудь есть?

Двойной точности почти всегда хватает. Есть еще внутреннее представление сопроцессора, 80-битное число. Считать же лучше именно на стеке, жестко контролируя глубину в compile-time. Стек с плавающей точкой в памяти - жуткая по производительности вещь, лучше уж завести отдельный набор слов для него.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт окт 26, 2006 18:34 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 16, 2006 23:02
Сообщения: 65
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
tcl/tk

Слышал, но не разбирался.

Цитата:
Самое главное - я не должен постоянно вспоминать, что и в каком порядке надо вызывать для получения результата.

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

Цитата:
жестко контролируя глубину в compile-time.

Это как? :shock: Откудова компилер может знать, что я там собрался на стек класть?

Цитата:
Стек с плавающей точкой в памяти - жуткая по производительности вещь

Это я уже заметил. Только что делать, ежели, скажем, надо вычислить нечто рекурсивное?

_________________
Я знаю только то, что я ничего не знаю. /(с) Сократ/
Мой форт | Мой проект ИИ


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт окт 27, 2006 00:48 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
wormball писал(а):
Цитата:
tcl/tk
Слышал, но не разбирался.


Что-то навроде этого:
button .generate -text "Создать" -command { тут команды }

wormball писал(а):
Так на то он и форт, что ежели ты что-нить один раз сделал, можешь это в одно слово запихнуть. То, что мне было нужно - я реализовал (например, считывание зараз текстового файла и его разбор по словам), а реализовывать всё, что может понадобиться - никакой жизни не хватит, к тому же это далеко не основное моё занятие.

Все правильно. Именно потому я и писал, что главное - обеспечить нормальную возможность делать то, что требуется в каждой конкретной задаче. А еще бывают попытки привлечь людей к пользованию транслятором или библиотекой, аргументированные именно количеством определений, которые там имеются.
wormball писал(а):
Цитата:
жестко контролируя глубину в compile-time.

Это как? Shocked Откудова компилер может знать, что я там собрался на стек класть?

Не знаю :) Но было бы хорошо. Самый простой способ - не контролировать вообще, заранее предупреждая о том, что ячеек на стеке сопроцессора мало.
wormball писал(а):
Это я уже заметил. Только что делать, ежели, скажем, надо вычислить нечто рекурсивное?

Мне сильно кажется, что попытка обеспечить компромисс очень негативно скажется на вычислениях, которым рекурсия не нужна. Это все равно что контролировать глубину стека в каждом слове. Надежность повышается, да, но появляется масса дополнительных проверок, причем и в тех местах, где программист мог бы отладить код и "вручную". Сопроцессор и его стековая организация хороши именно там, где надо обеспечить интенсивные вычисления при минимальном числе обращений в память. Расширяемый в память стек заставит производить постоянные проверки "а не превысили ли мы объем аппаратного стека?". Лучше уж завести дополнительный словарь для рекурсивных вычислений, переопределив там базовые операции с плавающей точкой - F@ F! F+ F- и т.д. В этом словаре можно будет работать, когда требуется рекурсия (или иные алгоритмы, требовательные к объему стека).


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
wormball писал(а):
что мне такого в свой форт добавить, что уже есть в других фортах или ещё нет, но очень не хватает?

По другому организовать словари. Для слов с похожим, но все-таки разным действием организуется только одна словарная статья с одним заголовком. Код варианта исполнения вытаскивается во время компиляции
по слову-префиксу стоящему перед словом. Такое уже использовалось раньше, например была раньше переменная QUAN.
QUAN Q1 - определили переменную Q1
Q1 - кладет на стек свое значение
AT Q1 - кладет на стек адрес в котором хранится это значение, здесь AT - слово префикс
То есть контекст выполнения (префикс) задает не словарь, а поле кода.

например, есть операция сложения
+ ( n1 n2 --> n1+n2) - так она работает по первому варианту
STACK-OFF + ( n1, n2 --> n1, n2, n1+n2 ) - так она работает по второму варианту (исходные параметры со стека не убираются)
здесь STACK-OFF слово-префикс, которое выбирает для слова + новое поле кода в словарной статье слова +.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн окт 30, 2006 12:49 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Вопрос, конечно, интересный (с)...

прежде чем добавлять навороты в Форт, надо бы четко определиться, а что же хочется от этого Форта?

Универсальный язык на все случаи жизни? - Боюсь, что такого сделать не удастся. Хотя, пофантазировать никто не мешает.

Вот, например, списочек добавлений, которые я был бы не прочь добавить в "Свой Форт":
Цитата:
1. 32-хбитный режим (с доступом ко всей памяти компьютера)
2. Графические режимы VESA
3. Звуковые возможности (как минимум, вывод WAV-файлов и синтезированных Wave-форм)
4. Интерфейсные возможности по вводу через всевозможные устройств, от мыши и клавиатуры, до оцифроаванного звука и видео.
5. Прямую возможность работы с HDD, CD, DVD и т.д. и т.п на уровне хотя бы секторов.

6. Прозвачная работа с Esernet, Internet.

и т.д. и т.п. (все не перечислить)

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Пн окт 16, 2006 23:02
Сообщения: 65
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Все правильно. Именно потому я и писал, что главное - обеспечить нормальную возможность делать то, что требуется в каждой конкретной задаче.

А в чём это должно выражаться?

Цитата:
Лучше уж завести дополнительный словарь для рекурсивных вычислений, переопределив там базовые операции с плавающей точкой - F@ F! F+ F- и т.д. В этом словаре можно будет работать, когда требуется рекурсия (или иные алгоритмы, требовательные к объему стека).

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

Цитата:
По другому организовать словари. Для слов с похожим, но все-таки разным действием организуется только одна словарная статья с одним заголовком. Код варианта исполнения вытаскивается во время компиляции

Не очень понял, для чего это нужно, к тому же, я думаю, это будет весьма геморроидально. Ещё дедушка Броуди писал, что злоупотребление словами, сканирующими входной поток, ведёт к потере гибкости, и лично я с ним в этом согласен. А в случае
Цитата:
STACK-OFF + ( n1, n2 --> n1, n2, n1+n2 )

легче и понятнее написать 2dup + .

Цитата:
прежде чем добавлять навороты в Форт, надо бы четко определиться, а что же хочется от этого Форта?

Хочется, чтобы было легче программировать, и желательно, чтобы работало побыстрее.

Цитата:
Универсальный язык на все случаи жизни? - Боюсь, что такого сделать не удастся. Хотя, пофантазировать никто не мешает.

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

Цитата:
Вот, например, списочек добавлений, которые я был бы не прочь добавить в "Свой Форт":

1. Ретрофорт (а значит, и мой форт) и так 32-битный. Насчёт доступа ко всей памяти - винда не пущает, но и того, что есть, более чем достаточно.
5. Для чего?
2, 3, 4, 6. Это всё вопросы к библиотекам, надо просто потратить некоторое время и изучить те средства, которые для этого предлагает windows. К языку это имеет мало отношения. Меня больше интересуют выразительные средства, такие, как ООП, массивы, перегрузка слов и т. п.

_________________
Я знаю только то, что я ничего не знаю. /(с) Сократ/
Мой форт | Мой проект ИИ


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
wormball писал(а):
Не очень понял, для чего это нужно, к тому же, я думаю, это будет весьма геморроидально. Ещё дедушка Броуди писал, что злоупотребление словами, сканирующими входной поток, ведёт к потере гибкости, и лично я с ним в этом согласен. А в случае
Цитата:
STACK-OFF + ( n1, n2 --> n1, n2, n1+n2 )

легче и понятнее написать 2dup + .


Тут входной поток не сканируется, просто в код вставляется другая операция сложения-без удаления исходных параметров. А вот использование 2dup замедляет скорость исполнения итак крайне медленную. Пример приведен от балды - без малейшего смысла. Обычное + сложение затрачивает время на удаление параметров со стека, а 2dup их опять предвосстанавливает - 2 раза делается лишняя работа. В этом тормоза Форта. И такие тормоза в Форте на каждом шагу. :o

_________________
С уважением, chess


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

Зарегистрирован: Пн окт 16, 2006 23:02
Сообщения: 65
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Тут входной поток не сканируется

А каким образом тогда это делается?

Цитата:
А вот использование 2dup замедляет скорость исполнения итак крайне медленную.
Мне хватает, хотя у меня довольно критичная ко времени область. Дело в том, что верхушка стека фактически всегда лежит в кэше процессора, так что обращений к памяти при этом не происходит. Если уж гнаться за производительностью программы, то не ценой производительности программиста и потери читаемости. Как известно, 10% кода исполняются 90% времени, так эти 10% можно и вручную оптимизировать.

_________________
Я знаю только то, что я ничего не знаю. /(с) Сократ/
Мой форт | Мой проект ИИ


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн окт 30, 2006 19:00 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
wormball писал(а):
Меня больше интересуют выразительные средства, такие, как ООП, массивы, перегрузка слов и т. п.


В Форте это тоже, всё вопросы к библиотекам.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн окт 30, 2006 21:46 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
wormball писал(а):
Скорость нужна далеко не всегда , да и уменьшается она не более чем в два раза. А вот писать рекурсивную функцию, постоянно помня, что слова должны быть другими - это удовольствие не из приятных. Я думаю, что лучше "по умолчанию" держать стек в памяти, а когда нужна скорость, переходить на стек сопроцесора.


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


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

Зарегистрирован: Пн окт 16, 2006 23:02
Сообщения: 65
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Эх, лучше бы при разработке новых х86 не инструкции добавляли, а стек сопроцессора увеличили хотя бы в 10 раз.

_________________
Я знаю только то, что я ничего не знаю. /(с) Сократ/
Мой форт | Мой проект ИИ


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 00:21 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
wormball писал(а):
Эх, лучше бы при разработке новых х86 не инструкции добавляли, а стек сопроцессора увеличили хотя бы в 10 раз.
НЕТ, лучше бы поделали несколько аппаратных стеков с 1 тактом на push и pop


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

Зарегистрирован: Пн окт 16, 2006 23:02
Сообщения: 65
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Точно, а ещё лучше все эти миллиарды транзисторов разместили бы в форме 1024 форт-процессоров. :D

_________________
Я знаю только то, что я ничего не знаю. /(с) Сократ/
Мой форт | Мой проект ИИ


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 07:48 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
wormball писал(а):
Точно, а ещё лучше все эти миллиарды транзисторов разместили бы в форме 1024 форт-процессоров. Very Happy

1024 - мало :) - 10<sup>24</sup>!

п.с. доктор, выпишите мне таблеток от жадности, и побольше ПОБОЛЬШЕ!

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт окт 31, 2006 09:10 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
wormball писал(а):
Хочется, чтобы было легче программировать, и желательно, чтобы работало побыстрее.


Тогда, вместе с"Мой Форт" должен быть еще и "Мой проц" и "Мой комп" :)

wormball писал(а):
С формальной точки зрения все языки программирования универсальны. Конечно, идеального языка не бывает, с другой стороны, всегда есть пространство для роста.


В данном случае, главный смысл в том, что придумать все на все случаи - нереально, поэтому, стоит подумать, как сделать механизм дополнений простым и прозрачным.

Обвешать Форт либами, как новогоднюю елку игрушками можно, но надо еще сделать и так, чтобы "при навешивании новых елка не кололась и старые игрушки не падали и не разбивались" :)

wormball писал(а):
5. Для чего?

Ну, можно посчитать, что это моя личная блажь - (Надо по работе).
wormball писал(а):
2, 3, 4, 6. Это всё вопросы к библиотекам, надо просто потратить некоторое время и изучить те средства, которые для этого предлагает windows. К языку это имеет мало отношения.


Однако, если язык не научить мяукать и махать хвостом, то он кошкой никогда и не станет :)

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

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


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

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


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

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