You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(26) |
Nov
(14) |
Dec
(20) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(12) |
Feb
(15) |
Mar
(38) |
Apr
(57) |
May
(27) |
Jun
(59) |
Jul
(25) |
Aug
(12) |
Sep
(12) |
Oct
(16) |
Nov
(30) |
Dec
(58) |
2003 |
Jan
(43) |
Feb
(78) |
Mar
(43) |
Apr
(8) |
May
(1) |
Jun
(19) |
Jul
(10) |
Aug
(62) |
Sep
(126) |
Oct
(84) |
Nov
(51) |
Dec
(102) |
2004 |
Jan
(22) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(11) |
Sep
(110) |
Oct
(60) |
Nov
(13) |
Dec
(64) |
2005 |
Jan
|
Feb
(40) |
Mar
(60) |
Apr
(36) |
May
(18) |
Jun
(14) |
Jul
(124) |
Aug
(11) |
Sep
(2) |
Oct
(18) |
Nov
|
Dec
(5) |
2006 |
Jan
(41) |
Feb
(13) |
Mar
(2) |
Apr
(9) |
May
(24) |
Jun
(5) |
Jul
(2) |
Aug
(65) |
Sep
(34) |
Oct
(130) |
Nov
(175) |
Dec
(84) |
2007 |
Jan
(38) |
Feb
(20) |
Mar
(33) |
Apr
(57) |
May
(90) |
Jun
(31) |
Jul
(30) |
Aug
(51) |
Sep
(30) |
Oct
(113) |
Nov
(37) |
Dec
(43) |
2008 |
Jan
(32) |
Feb
(105) |
Mar
(23) |
Apr
(8) |
May
(12) |
Jun
(3) |
Jul
(16) |
Aug
(67) |
Sep
|
Oct
(3) |
Nov
(28) |
Dec
(2) |
2009 |
Jan
(47) |
Feb
(17) |
Mar
(12) |
Apr
|
May
(12) |
Jun
(2) |
Jul
(1) |
Aug
(2) |
Sep
(6) |
Oct
(2) |
Nov
(2) |
Dec
|
2010 |
Jan
|
Feb
(3) |
Mar
|
Apr
|
May
(4) |
Jun
(1) |
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
(16) |
2011 |
Jan
(62) |
Feb
|
Mar
|
Apr
(4) |
May
(1) |
Jun
(10) |
Jul
(8) |
Aug
(4) |
Sep
|
Oct
|
Nov
(7) |
Dec
(1) |
2012 |
Jan
|
Feb
|
Mar
(3) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
(5) |
Apr
|
May
(5) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
(12) |
Feb
(40) |
Mar
(88) |
Apr
(45) |
May
(7) |
Jun
(8) |
Jul
(18) |
Aug
(13) |
Sep
(6) |
Oct
|
Nov
(2) |
Dec
|
2017 |
Jan
(10) |
Feb
(10) |
Mar
(2) |
Apr
(9) |
May
|
Jun
(8) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(9) |
From: Бомбин В. <ww...@ya...> - 2016-03-30 16:18:20
|
Как минимум - like '%.%' Его же - как максимум -- С уважением, Бомбин Валентин тел 79114208298 30.03.2016, 19:01, "витя ерыгин" <vi...@ma...>: > Сам запрос предельно прост > S" select id, pole1 from basa.main where pole1 like '%.%' limit 0 , 10000000" Что здесь оптимизировать? > Относительно вывод в файл. Обнаружил такую хрень > Если файл с таким именем уже создан то результат -1 28 , к примеру, если нет, то 28 0. От результата параметры меняются местами, весело однако. > "Как происходит обработка данных в плане выделения-освобождения памяти?" Да никак, хип не использую Создал себе массив на 5000 байтов туда и складирую строки, и уже обработанный результат на вывод. Обработка строк такова: вставить слева кавычку, вставить саму строку, следом за ней кавычку и точку. Нужно для корректности результатов, ибо что точки, что кавычек может не быть Ищем через SEARCH точку, а потом кавычку, и уже от неё ищем кавычку снизу. Со стороны много лишних телодвижений, но, блин, корректность результатов. Подстановка слева строки-константы для поиска по FILE-EXISTS, вместо верхней кавычки ставим 0. Найден путь? Хрен с ним, не найден запись в файл. Вот так вот в общих чертах. Код на работе, завтра принесу. > > "написать критичный участок на другом языке (например, на Си)" > ??? > Си хороший язык, быстрый. А за счёт чего интересно? Манипуляций со стеком там меньше. Грубо говоря pick и всеобщий drop. Грубо говоря. Это только мои предположения, что там ещё для меня полный х.з. > >> Среда, 30 марта 2016, 2:29 +04:00 от Ruvim Pinka <ruv...@gm...>: >> >> 2016-03-29 20:04 GMT+03:00 витя ерыгин <vi...@ma...>: >>> Передавать в пределах слова... >>> Действительно, как то двусмысленно. >>> Для слова, к примеру, надо три параметра. Чтобы не манипулировать ими на стеке, легче и быстрее их куда-нибудь раскидать. Хоть стек возвратов, как пример. Вот и возникла мысль попытаться засунуть переменную в регистр, и уже потом, когда возникнет необходимость положить переменную обратно на стек. Надеюсь, так быстрее будет работать? >> >> Если кажется, что будет быстрей — надо просто взять и проверить измерением. >> >> Но во первых, лучше бы запусить под профилировщикок на небольшой выборке данных, чтобы понять, какие места кушают больше всего времени. Могу предложить мой старенький велосипед: ~pinka/lib/tools/profiler.f >> >>> У меня задача обработка запроса от mysql. Запрос выдаёт десять миллионов строк, потом их обработка и вывод в файл. Запрос длится чуть меньше часа, обработка длится 45 мин, а потом заново. Чем быстрее проходит обработка, тем быстрее выполнится поставленная задача. >> >> Это вопрос выгоды и рентабельности: выбор делается между разработкой (суммарным временем человека-программиста) и выполнением (суммарное время машины), помноженной на экономический эффект. >> >> Поэтому, следует понимать, сколько своего времени вы можете потратить на экономию каждой минуты машинного времени в этой задаче. И, может быть оправдано оптимизировать не только решение на стороне Форта, но и решение на стороне базы данных и SQL. Т.к. иначе, даже если обработка будет длиться 0 минут, 55 минут на запрос все-равно останется, и значит оптимизация в 45% — это теоретический предел. >> >>> 1) Оптимизировать алгоритм. - всё просто, оптимизировать некуда >> >> Как вывод в файл происходит? Это же вызов функций Win32 API, на которых следует экономить — буферизировать вывод. >> Как происходит обработка данных в плане выделения-освобождения памяти? Эти функции тоже лучше дергать по-реже. >> Обработка строк, например поиск подстроки — используются ли быстрые алгоритмы поиска? >> И, как верно заметил Валентин насчет параллельной обработки — разве все ядра проца уже задействованы? ;) >> >>> 2) Написать критичный участок на ассемблере. - плохо знаю ассемблер. Только к нему приступил >> >> Использовать регистры без базовых знаний никак. >> Но, есть еще похожий вариант: написать критичный участок на другом языке (например, на Си) и использовать через DLL. >> >>> 3) Использовать другой форт-транслятор (например, с более мощным оптимизатором). - Какой, если не секрет? >> >> Некоторые коммерческие форт-системы обладают хорошим оптимизатором — например SwiftForth, VFX Forth. Но, еще не известно, будут ли они быстрей — надо проверять и сравнивать на конкретной задаче. >> >>> 4) Апгрейдить железо. - Это не вариант, к несчастью. >> >> -- >> Ruvim >> >> ------------------------------------------------------------------------------ >> Transform Data into Opportunity. >> Accelerate data analysis in your applications with >> Intel Data Analytics Acceleration Library. >> Click to learn more. >> http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140 >> >> _______________________________________________ >> Spf-dev mailing list >> Sp...@li... >> https://lists.sourceforge.net/lists/listinfo/spf-dev > > , > > ------------------------------------------------------------------------------ > Transform Data into Opportunity. > Accelerate data analysis in your applications with > Intel Data Analytics Acceleration Library. > Click to learn more. > http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140 > , > > _______________________________________________ > Spf-dev mailing list > Sp...@li... > https://lists.sourceforge.net/lists/listinfo/spf-dev |
From: витя е. <vi...@ma...> - 2016-03-30 16:01:00
|
Сам запрос предельно прост S" select id, pole1 from basa.main where pole1 like '%.%' limit 0 , 10000000" Что здесь оптимизировать? Относительно вывод в файл. Обнаружил такую хрень Если файл с таким именем уже создан то результат -1 28 , к примеру, если нет, то 28 0. От результата параметры меняются местами, весело однако. "Как происходит обработка данных в плане выделения-освобождения памяти?" Да никак, хип не использую Создал себе массив на 5000 байтов туда и складирую строки, и уже обработанный результат на вывод. Обработка строк такова: вставить слева кавычку, вставить саму строку, следом за ней кавычку и точку. Нужно для корректности результатов, ибо что точки, что кавычек может не быть Ищем через SEARCH точку, а потом кавычку, и уже от неё ищем кавычку снизу. Со стороны много лишних телодвижений, но, блин, корректность результатов. Подстановка слева строки-константы для поиска по FILE-EXISTS, вместо верхней кавычки ставим 0. Найден путь? Хрен с ним, не найден запись в файл. Вот так вот в общих чертах. Код на работе, завтра принесу. "написать критичный участок на другом языке (например, на Си)" ??? Си хороший язык, быстрый. А за счёт чего интересно? Манипуляций со стеком там меньше. Грубо говоря pick и всеобщий drop. Грубо говоря. Это только мои предположения, что там ещё для меня полный х.з. >Среда, 30 марта 2016, 2:29 +04:00 от Ruvim Pinka <ruv...@gm...>: > > >2016-03-29 20:04 GMT+03:00 витя ерыгин < vi...@ma... > : >>Передавать в пределах слова... >>Действительно, как то двусмысленно. >>Для слова, к примеру, надо три параметра. Чтобы не манипулировать ими на стеке, легче и быстрее их куда-нибудь раскидать. Хоть стек возвратов, как пример. Вот и возникла мысль попытаться засунуть переменную в регистр, и уже потом, когда возникнет необходимость положить переменную обратно на стек. Надеюсь, так быстрее будет работать? > >Если кажется, что будет быстрей — надо просто взять и проверить измерением. > >Но во первых, лучше бы запусить под профилировщикок на небольшой выборке данных, чтобы понять, какие места кушают больше всего времени. Могу предложить мой старенький велосипед: ~pinka/lib/tools/profiler.f > > >>У меня задача обработка запроса от mysql. Запрос выдаёт десять миллионов строк, потом их обработка и вывод в файл. Запрос длится чуть меньше часа, обработка длится 45 мин, а потом заново. Чем быстрее проходит обработка, тем быстрее выполнится поставленная задача. > >Это вопрос выгоды и рентабельности: выбор делается между разработкой (суммарным временем человека-программиста) и выполнением (суммарное время машины), помноженной на экономический эффект. > >Поэтому, следует понимать, сколько своего времени вы можете потратить на экономию каждой минуты машинного времени в этой задаче. И, может быть оправдано оптимизировать не только решение на стороне Форта, но и решение на стороне базы данных и SQL. Т.к. иначе, даже если обработка будет длиться 0 минут, 55 минут на запрос все-равно останется, и значит оптимизация в 45% — это теоретический предел. > > > >>1) Оптимизировать алгоритм. - всё просто, оптимизировать некуда > > >Как вывод в файл происходит? Это же вызов функций Win32 API, на которых следует экономить — буферизировать вывод. >Как происходит обработка данных в плане выделения-освобождения памяти? Эти функции тоже лучше дергать по-реже. >Обработка строк, например поиск подстроки — используются ли быстрые алгоритмы поиска? >И, как верно заметил Валентин насчет параллельной обработки — разве все ядра проца уже задействованы? ;) > > >>2) Написать критичный участок на ассемблере. - плохо знаю ассемблер. Только к нему приступил > >Использовать регистры без базовых знаний никак. >Но, есть еще похожий вариант: написать критичный участок на другом языке (например, на Си) и использовать через DLL. > > >>3) Использовать другой форт-транслятор (например, с более мощным оптимизатором). - Какой, если не секрет? > >Некоторые коммерческие форт-системы обладают хорошим оптимизатором — например SwiftForth , VFX Forth . Но, еще не известно, будут ли они быстрей — надо проверять и сравнивать на конкретной задаче. > > > >>4) Апгрейдить железо. - Это не вариант, к несчастью. > > > >-- >Ruvim > >------------------------------------------------------------------------------ >Transform Data into Opportunity. >Accelerate data analysis in your applications with >Intel Data Analytics Acceleration Library. >Click to learn more. >http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140 >_______________________________________________ >Spf-dev mailing list >Sp...@li... >https://lists.sourceforge.net/lists/listinfo/spf-dev |
From: Бомбин В. <ww...@ya...> - 2016-03-30 15:15:24
|
На будущее можно попросить на гит ложить проекты? Так ведь всем удобнее будет -- С уважением, Бомбин Валентин тел 79114208298 30.03.2016, 18:13, "Мохов Геннадий" <mg...@ya...>: > Я тут собрал немного более продвинутый вариант консоли для форта на Asm D. > > Запуск: start.bat - как пример > Слово S" ABC" кладет на стек адрес указывающий на 4, 'A', 'B', 'C', 0 - специально под С функции > Операций с плавающей точкой НЕТ. > > История вопроса: http://fforum.winglion.ru/viewtopic.php?f=2&t=3044&p=41221 > > MGW |
From: Мохов Г. <mg...@ya...> - 2016-03-30 15:11:05
|
Я тут собрал немного более продвинутый вариант консоли для форта на Asm D. Запуск: start.bat - как пример Слово S" ABC" кладет на стек адрес указывающий на 4, 'A', 'B', 'C', 0 - специально под С функции Операций с плавающей точкой НЕТ. История вопроса: http://fforum.winglion.ru/viewtopic.php?f=2&t=3044&p=41221 MGW |
From: Ruvim P. <ruv...@gm...> - 2016-03-29 22:29:23
|
2016-03-29 20:04 GMT+03:00 витя ерыгин <vi...@ma...>: > Передавать в пределах слова... > Действительно, как то двусмысленно. > Для слова, к примеру, надо три параметра. Чтобы не манипулировать ими на > стеке, легче и быстрее их куда-нибудь раскидать. Хоть стек возвратов, как > пример. Вот и возникла мысль попытаться засунуть переменную в регистр, и > уже потом, когда возникнет необходимость положить переменную обратно на > стек. Надеюсь, так быстрее будет работать? > Если кажется, что будет быстрей — надо просто взять и проверить измерением. Но во первых, лучше бы запусить под профилировщикок на небольшой выборке данных, чтобы понять, какие места кушают больше всего времени. Могу предложить мой старенький велосипед: ~pinka/lib/tools/profiler.f У меня задача обработка запроса от mysql. Запрос выдаёт десять миллионов > строк, потом их обработка и вывод в файл. Запрос длится чуть меньше часа, > обработка длится 45 мин, а потом заново. Чем быстрее проходит обработка, > тем быстрее выполнится поставленная задача. > Это вопрос выгоды и рентабельности: выбор делается между разработкой (суммарным временем человека-программиста) и выполнением (суммарное время машины), помноженной на экономический эффект. Поэтому, следует понимать, сколько своего времени вы можете потратить на экономию каждой минуты машинного времени в этой задаче. И, может быть оправдано оптимизировать не только решение на стороне Форта, но и решение на стороне базы данных и SQL. Т.к. иначе, даже если обработка будет длиться 0 минут, 55 минут на запрос все-равно останется, и значит оптимизация в 45% — это теоретический предел. > 1) Оптимизировать алгоритм. - всё просто, оптимизировать некуда > Как вывод в файл происходит? Это же вызов функций Win32 API, на которых следует экономить — буферизировать вывод. Как происходит обработка данных в плане выделения-освобождения памяти? Эти функции тоже лучше дергать по-реже. Обработка строк, например поиск подстроки — используются ли быстрые алгоритмы поиска? И, как верно заметил Валентин насчет параллельной обработки — разве все ядра проца уже задействованы? ;) 2) Написать критичный участок на ассемблере. - плохо знаю ассемблер. Только > к нему приступил > Использовать регистры без базовых знаний никак. Но, есть еще похожий вариант: написать критичный участок на другом языке (например, на Си) и использовать через DLL. 3) Использовать другой форт-транслятор (например, с более мощным > оптимизатором). - Какой, если не секрет? > Некоторые коммерческие форт-системы обладают хорошим оптимизатором — например SwiftForth <http://www.forth.com/swiftforth/>, VFX Forth <http://www.mpeforth.com/vfxwin.htm>. Но, еще не известно, будут ли они быстрей — надо проверять и сравнивать на конкретной задаче. > 4) Апгрейдить железо. - Это не вариант, к несчастью. > -- Ruvim |
From: Бомбин В. <ww...@ya...> - 2016-03-29 20:12:34
|
Смотри план запроса. Где-то не оптимально у тебя что-то с индексами, или перестрой задачу полностью (например используй олап), сделай обработку параллельной. Может имеет смысл реляционные БД заменить на noSQL. В общем не зная задачи -только общие слова. И скорость обработки тут точно не причем пока -- С уважением, Бомбин Валентин тел 79114208298 29.03.2016, 21:34, "витя ерыгин" <vi...@ma...>: > Передавать в пределах слова... > Действительно, как то двусмысленно. > Для слова, к примеру, надо три параметра. Чтобы не манипулировать ими на стеке, легче и быстрее их куда-нибудь раскидать. Хоть стек возвратов, как пример. Вот и возникла мысль попытаться засунуть переменную в регистр, и уже потом, когда возникнет необходимость положить переменную обратно на стек. Надеюсь, так быстрее будет работать? > У меня задача обработка запроса от mysql. Запрос выдаёт десять миллионов строк, потом их обработка и вывод в файл. Запрос длится чуть меньше часа, обработка длится 45 мин, а потом заново. Чем быстрее проходит обработка, тем быстрее выполнится поставленная задача. > > 1) Оптимизировать алгоритм. - всё просто, оптимизировать некуда > 2) Написать критичный участок на ассемблере. - плохо знаю ассемблер. Только к нему приступил > 3) Использовать другой форт-транслятор (например, с более мощным оптимизатором). - Какой, если не секрет? > 4) Апгрейдить железо. - Это не вариант, к несчастью. > > Вторник, 29 марта 2016, 15:26 +04:00 от Ruvim Pinka <ruv...@gm...>: > > 2016-03-28 18:27 GMT+03:00 витя ерыгин <vi...@ma...>: >> Можно ли передавать в пределах слова переменные через регистры? Если да, то какие именно? > > Привидите пример такого слова, где хотелось бы передавать параметры через регистры. > > "передавать в пределах слова" — это немного двусмысленно, т.к. параметры всегда передаются между словами. > > Формат передачи параметров относится к ABI — application binary interface, и этот интерфейс фиксирован. Передавать параметры в одно и то же слово (в один и тот же экземпляр кода) по разным ABI (например, в одном месте через стек, а в другом месте через регистры) — весьма затруднительно. Поэтому, под каждый ABI должен быть сгенерирован свой экземпляр объектного кода. > > В SP-Forth/4 первый параметр (верхний) передается через регистр EAX. > > Кроме того, при inline-подстановке некоторого слова оптимизатором, передача параметров в это слово через стек может исчезнуть (при этом формируется свой экземпляр кода для исходного слова под конкретное место). > >> Если нет, то как ещё можно подъускорить программу на форте? > А каков размер программы (или фрагмента), которую требуется ускорить? Измерения проводились? Будет ошибой делать оптимизацию без проведения подробных измерений. > > Варианты подускороить в общем известны: > — Оптимизировать алгоритм. > — Написать критичный участок на ассемблере. > — Использовать другой форт-транслятор (например, с более мощным оптимизатором). > — Апгрейдить железо. > > -- > Ruvim > > , > > ------------------------------------------------------------------------------ > Transform Data into Opportunity. > Accelerate data analysis in your applications with > Intel Data Analytics Acceleration Library. > Click to learn more. > http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140 > , > > _______________________________________________ > Spf-dev mailing list > Sp...@li... > https://lists.sourceforge.net/lists/listinfo/spf-dev |
From: Dmitry Y. <ya...@gm...> - 2016-03-29 19:45:46
|
Привет, Думаю здесь только вариант 1. Индексы, кэши, сменить мускуль на вот эту например http://www.h2database.com/html/main.html несмотря что она на java у нее есть odbc драйвер. По тестам примерно в два раз быстрее мускуля. SPF4 очень быстрый, почти как Си. Дмитрий. |
From: витя е. <vi...@ma...> - 2016-03-29 18:34:12
|
Передавать в пределах слова... Действительно, как то двусмысленно. Для слова, к примеру, надо три параметра. Чтобы не манипулировать ими на стеке, легче и быстрее их куда-нибудь раскидать. Хоть стек возвратов, как пример. Вот и возникла мысль попытаться засунуть переменную в регистр, и уже потом, когда возникнет необходимость положить переменную обратно на стек. Надеюсь, так быстрее будет работать? У меня задача обработка запроса от mysql. Запрос выдаёт десять миллионов строк, потом их обработка и вывод в файл. Запрос длится чуть меньше часа, обработка длится 45 мин, а потом заново. Чем быстрее проходит обработка, тем быстрее выполнится поставленная задача. 1) Оптимизировать алгоритм. - всё просто, оптимизировать некуда 2) Написать критичный участок на ассемблере. - плохо знаю ассемблер. Только к нему приступил 3) Использовать другой форт-транслятор (например, с более мощным оптимизатором). - Какой, если не секрет? 4) Апгрейдить железо. - Это не вариант, к несчастью. Вторник, 29 марта 2016, 15:26 +04:00 от Ruvim Pinka < ruv...@gm... >: 2016-03-28 18:27 GMT+03:00 витя ерыгин < vi...@ma... > : >Можно ли передавать в пределах слова переменные через регистры? Если да, то какие именно? Привидите пример такого слова, где хотелось бы передавать параметры через регистры. "передавать в пределах слова" — это немного двусмысленно, т.к. параметры всегда передаются между словами. Формат передачи параметров относится к ABI — application binary interface, и этот интерфейс фиксирован. Передавать параметры в одно и то же слово (в один и тот же экземпляр кода) по разным ABI (например, в одном месте через стек, а в другом месте через регистры) — весьма затруднительно. Поэтому, под каждый ABI должен быть сгенерирован свой экземпляр объектного кода. В SP-Forth/4 первый параметр (верхний) передается через регистр EAX. Кроме того, при inline-подстановке некоторого слова оптимизатором, передача параметров в это слово через стек может исчезнуть (при этом формируется свой экземпляр кода для исходного слова под конкретное место). >Если нет, то как ещё можно подъускорить программу на форте? А каков размер программы (или фрагмента), которую требуется ускорить? Измерения проводились? Будет ошибой делать оптимизацию без проведения подробных измерений. Варианты подускороить в общем известны: — Оптимизировать алгоритм. — Написать критичный участок на ассемблере. — Использовать другой форт-транслятор (например, с более мощным оптимизатором). — Апгрейдить железо. -- Ruvim |
From: Ruvim P. <ruv...@gm...> - 2016-03-29 11:26:40
|
2016-03-28 18:27 GMT+03:00 витя ерыгин <vi...@ma...>: > Можно ли передавать в пределах слова переменные через регистры? Если да, > то какие именно? > Привидите пример такого слова, где хотелось бы передавать параметры через регистры. "передавать в пределах слова" — это немного двусмысленно, т.к. параметры всегда передаются между словами. Формат передачи параметров относится к ABI — application binary interface, и этот интерфейс фиксирован. Передавать параметры в одно и то же слово (в один и тот же экземпляр кода) по разным ABI (например, в одном месте через стек, а в другом месте через регистры) — весьма затруднительно. Поэтому, под каждый ABI должен быть сгенерирован свой экземпляр объектного кода. В SP-Forth/4 первый параметр (верхний) передается через регистр EAX. Кроме того, при inline-подстановке некоторого слова оптимизатором, передача параметров в это слово через стек может исчезнуть (при этом формируется свой экземпляр кода для исходного слова под конкретное место). Если нет, то как ещё можно подъускорить программу на форте? > А каков размер программы (или фрагмента), которую требуется ускорить? Измерения проводились? Будет ошибой делать оптимизацию без проведения подробных измерений. Варианты подускороить в общем известны: — Оптимизировать алгоритм. — Написать критичный участок на ассемблере. — Использовать другой форт-транслятор (например, с более мощным оптимизатором). — Апгрейдить железо. -- Ruvim |
From: Мохов Г. <mg...@ya...> - 2016-03-28 16:46:00
|
<div>Как раз для этих целей сделан ассемблер встроенный в форт. Смотри описание слова CODE</div><div> </div><div>28.03.2016, 18:27, "витя ерыгин" <vi...@ma...>:</div><blockquote type="cite">Можно ли передавать в пределах слова переменные через регистры? Если да, то какие именно? Если нет, то как ещё можно подъускорить программу на форте?<br /><br /><br />-- <br />Виктор Ерыгин ,<p>------------------------------------------------------------------------------<br />Transform Data into Opportunity.<br />Accelerate data analysis in your applications with<br />Intel Data Analytics Acceleration Library.<br />Click to learn more.<br /><a href="http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140">http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140</a></p>,<p>_______________________________________________<br />Spf-dev mailing list<br /><a href="mailto:Sp...@li...">Sp...@li...</a><br /><a href="https://lists.sourceforge.net/lists/listinfo/spf-dev">https://lists.sourceforge.net/lists/listinfo/spf-dev</a></p></blockquote> |
From: витя е. <vi...@ma...> - 2016-03-28 15:27:31
|
Можно ли передавать в пределах слова переменные через регистры? Если да, то какие именно? Если нет, то как ещё можно подъускорить программу на форте? -- Виктор Ерыгин |
From: Dmitry Y. <ya...@gm...> - 2016-03-28 07:32:39
|
Привет, 1. FICL 2. https://github.com/yarus23/SPF.JS/tree/master совместим с SPF только надо сделать виртуальную машину в Си, сейчас она в javascript, но это самое легкое :) 2016-03-27 23:15 GMT+03:00 Бомбин Валентин <ww...@ya...>: > Спасибо > > -- > С уважением, Бомбин Валентин > тел 79114208298 > > > 27.03.2016, 23:08, "Мохов Геннадий" <mg...@ya...>: > > https://github.com/MGWL/QtE5 > > > > forth.d - сам модуль форта. На его базе легко сделать DLL для C++ > > forthdll.d - изготовление DLL > > и т.д.... > > > > Я сейчас активно пишу связку D + Qt.5 и на примере консоли для своего > форта (console5_forth.d) испытываю новые > > фишки Qt-5. Даже иногда появляются мысли, не написать ли IDE (но это > скорее мечты). Сама консоль "разломана", > > так как пока только в задумках.... > > > > Обращаю внимание!!! Форт работает только в 32 разрядном режиме!!! так > как написан на 32 разрядном ассемблере. > > Ещё важный момент. Окружения (библиотек) НЕТ - написать или портировать > не успел. Фактически нет консольного (комманднострочного) режима. > Используется мной в основном, как средство изучения внутренностей Qt и > работы > > с функциями Dll и so. В основном задумывался, как плагин для программ на > D (C++). > > > > > ------------------------------------------------------------------------------ > > Transform Data into Opportunity. > > Accelerate data analysis in your applications with > > Intel Data Analytics Acceleration Library. > > Click to learn more. > > http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140 > > _______________________________________________ > > Spf-dev mailing list > > Sp...@li... > > https://lists.sourceforge.net/lists/listinfo/spf-dev > > > ------------------------------------------------------------------------------ > Transform Data into Opportunity. > Accelerate data analysis in your applications with > Intel Data Analytics Acceleration Library. > Click to learn more. > http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140 > _______________________________________________ > Spf-dev mailing list > Sp...@li... > https://lists.sourceforge.net/lists/listinfo/spf-dev > |
From: Бомбин В. <ww...@ya...> - 2016-03-27 20:15:22
|
Спасибо -- С уважением, Бомбин Валентин тел 79114208298 27.03.2016, 23:08, "Мохов Геннадий" <mg...@ya...>: > https://github.com/MGWL/QtE5 > > forth.d - сам модуль форта. На его базе легко сделать DLL для C++ > forthdll.d - изготовление DLL > и т.д.... > > Я сейчас активно пишу связку D + Qt.5 и на примере консоли для своего форта (console5_forth.d) испытываю новые > фишки Qt-5. Даже иногда появляются мысли, не написать ли IDE (но это скорее мечты). Сама консоль "разломана", > так как пока только в задумках.... > > Обращаю внимание!!! Форт работает только в 32 разрядном режиме!!! так как написан на 32 разрядном ассемблере. > Ещё важный момент. Окружения (библиотек) НЕТ - написать или портировать не успел. Фактически нет консольного (комманднострочного) режима. Используется мной в основном, как средство изучения внутренностей Qt и работы > с функциями Dll и so. В основном задумывался, как плагин для программ на D (C++). > > ------------------------------------------------------------------------------ > Transform Data into Opportunity. > Accelerate data analysis in your applications with > Intel Data Analytics Acceleration Library. > Click to learn more. > http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140 > _______________________________________________ > Spf-dev mailing list > Sp...@li... > https://lists.sourceforge.net/lists/listinfo/spf-dev |
From: Мохов Г. <mg...@ya...> - 2016-03-27 20:07:45
|
https://github.com/MGWL/QtE5 forth.d - сам модуль форта. На его базе легко сделать DLL для C++ forthdll.d - изготовление DLL и т.д.... Я сейчас активно пишу связку D + Qt.5 и на примере консоли для своего форта (console5_forth.d) испытываю новые фишки Qt-5. Даже иногда появляются мысли, не написать ли IDE (но это скорее мечты). Сама консоль "разломана", так как пока только в задумках.... Обращаю внимание!!! Форт работает только в 32 разрядном режиме!!! так как написан на 32 разрядном ассемблере. Ещё важный момент. Окружения (библиотек) НЕТ - написать или портировать не успел. Фактически нет консольного (комманднострочного) режима. Используется мной в основном, как средство изучения внутренностей Qt и работы с функциями Dll и so. В основном задумывался, как плагин для программ на D (C++). |
From: Бомбин В. <ww...@ya...> - 2016-03-27 19:36:55
|
Как можно посмотреть на исходный код? Если он открыт конечно -- С уважением, Бомбин Валентин тел 79114208298 27.03.2016, 21:52, "Мохов Геннадий" <mg...@ya...>: > У меня есть реализация форта написанная на встроенном ассемблере компилятора D (http://www.dlang.org). > Ядро этого форта, это портированный на D asm fork mOleg с http://fforum.winglion.ru. Данный форт работает > на 32 разрядных Windows и Linux. Его можно использовать прямо или как DLL. Можно выполнять вызовы > forth <=> (C, C++, D), в обе стороны. С самого форта можно грузить внешние DLL и so и работать с их функциями. > > Пример использования из D. > > // Проверка работы моего Форта > import forth; > import std.getopt; > import std.stdio; > import asc1251; > > string helps() { > return cast(string)toCON( > "Использование программы fortdos: > -------------------------------- > Запуск: > forthdos -f имяФайлаСфортКодом.f ---> Выполнить код форта из файла; > forthdos -e \"строка с форт кодом\" ---> Выполнить строку; > Если указаны оба параметра сразу, то сначала загружается файл, потом выполняется строка. > "); > } > > int main(string[] args) { > string fileForth; > string strEval; > // Вызов без аргументов, это подсказка > if(args.length == 1) { writeln(helps()); return 0; } > try { > auto helpInformation = getopt(args, std.getopt.config.caseInsensitive, > "f|forth", cast(string)toCON("Имя файла forth для выполнения") ,&fileForth, > "e|eval", cast(string)toCON("Строка для выполнения") ,&strEval); > if (helpInformation.helpWanted) defaultGetoptPrinter(helps(), helpInformation.options); > } catch { writeln("Error parsing args ..."); return 0;} > > // Выполним полученное в аргументах > initForth(); // Активизируем Форт > if((fileForth.length > 0) && (strEval.length > 0)) { > includedForth(fileForth); > evalForth(strEval); > } else { > if(fileForth.length > 0) { > includedForth(fileForth); > } else { > evalForth(strEval); > } > } > return 0; > } > > ------------------------------------------------------------------------------ > Transform Data into Opportunity. > Accelerate data analysis in your applications with > Intel Data Analytics Acceleration Library. > Click to learn more. > http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140 > _______________________________________________ > Spf-dev mailing list > Sp...@li... > https://lists.sourceforge.net/lists/listinfo/spf-dev |
From: Мохов Г. <mg...@ya...> - 2016-03-27 18:52:04
|
У меня есть реализация форта написанная на встроенном ассемблере компилятора D (http://www.dlang.org). Ядро этого форта, это портированный на D asm fork mOleg с http://fforum.winglion.ru. Данный форт работает на 32 разрядных Windows и Linux. Его можно использовать прямо или как DLL. Можно выполнять вызовы forth <=> (C, C++, D), в обе стороны. С самого форта можно грузить внешние DLL и so и работать с их функциями. Пример использования из D. // Проверка работы моего Форта import forth; import std.getopt; import std.stdio; import asc1251; string helps() { return cast(string)toCON( "Использование программы fortdos: -------------------------------- Запуск: forthdos -f имяФайлаСфортКодом.f ---> Выполнить код форта из файла; forthdos -e \"строка с форт кодом\" ---> Выполнить строку; Если указаны оба параметра сразу, то сначала загружается файл, потом выполняется строка. "); } int main(string[] args) { string fileForth; string strEval; // Вызов без аргументов, это подсказка if(args.length == 1) { writeln(helps()); return 0; } try { auto helpInformation = getopt(args, std.getopt.config.caseInsensitive, "f|forth", cast(string)toCON("Имя файла forth для выполнения") ,&fileForth, "e|eval", cast(string)toCON("Строка для выполнения") ,&strEval); if (helpInformation.helpWanted) defaultGetoptPrinter(helps(), helpInformation.options); } catch { writeln("Error parsing args ..."); return 0;} // Выполним полученное в аргументах initForth(); // Активизируем Форт if((fileForth.length > 0) && (strEval.length > 0)) { includedForth(fileForth); evalForth(strEval); } else { if(fileForth.length > 0) { includedForth(fileForth); } else { evalForth(strEval); } } return 0; } |
From: Абдрахимов И. <il...@in...> - 2016-03-27 18:36:35
|
27.03.2016 19:18, Бомбин Валентин пишет: > Можно ли встроить sp-forth как скриптовый язык? Если да - где глянуть пример. Если нет - то какой форт посоветуете под эту задачу. Целевая ось - виндовс > > ------------------------------------------------------------------------------ > Transform Data into Opportunity. > Accelerate data analysis in your applications with > Intel Data Analytics Acceleration Library. > Click to learn more. > http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140 > _______________________________________________ > Spf-dev mailing list > Sp...@li... > https://lists.sourceforge.net/lists/listinfo/spf-dev Вот хороший образец скриптинга на Форте nncron.ru -- Bye! Илья |
From: Бомбин В. <ww...@ya...> - 2016-03-27 17:01:24
|
Из проекта на С++ надо как-то свой скриптовый язык дергать. думаю пока в сторону форта. -- С уважением, Бомбин Валентин тел 79114208298 27.03.2016, 19:55, "Королев Виктор" <vic...@ya...>: > Смотря во что встроить.. я в своих программах запускаю скрипты с помощью слова > > : MARKER ( "<spaces>name" -- ) \ 94 CORE EXT > \ Пропустить ведущие пробелы. Выделить name, ограниченное пробелами. > \ Создать определение с семантикой выполнения, описанной ниже. > \ name Выполнение: ( -- ) > \ Восстановить распределение памяти словаря и указатели порядка поиска > \ к состоянию, которое они имели перед определением name. Убрать > \ определение name и все последующие определения. Не требуется > \ обязательно восстанавливать любые оставшиеся структуры, которые > \ могут быть связаны с удаленными определениями или освобожденным > \ пространством данных. Никакая другая контекстуальная информация, > \ как основание системы счисления, не изменяется. > HERE > \ [C]HERE , [E]HERE , > GET-CURRENT , > GET-ORDER DUP , 0 ?DO DUP , @ , LOOP > CREATE , > DOES> @ DUP \ ONLY > \ DUP @ [C]DP ! CELL+ > \ DUP @ [E]DP ! CELL+ > DUP @ SET-CURRENT CELL+ > DUP @ >R R@ CELLS 2* + 1 CELLS - R@ 0 > ?DO DUP DUP @ SWAP CELL+ @ OVER ! SWAP 2 CELLS - LOOP > DROP R> SET-ORDER > DP ! > ; > > Пример > > \ ---------------------------------- > > \ во внешнем файле > MARKER SKRIPТ > MODULE: TMP_SKR > \ Здесь ваши форт слова > > ;MODULE > SKRIPТ > \EOF > > \ --------------------------------------- > > \ ВЫПОЛНИТЬ СКРИПТ > : execskript ( a u ) ['] INCLUDED CATCH \ a u путь к файлу скрипта > ?DUP IF NIP NIP > CASE > 2 OF z" Не выполнить этот скрипт" ENDOF > 3 OF z" Не выполнить этот скрипт" ENDOF > -2003 OF z" Ошибка синтаксиса в скрипте" ENDOF > 0xC0000005 OF z" Нарушение общей защиты" ENDOF > \ >R <( R> DUP " Ошибка ~N (0x~06H)" )> > ENDCASE > msg \ BYE > THEN > ; > > 27.03.2016, 19:19, "Бомбин Валентин" <ww...@ya...>: >> Можно ли встроить sp-forth как скриптовый язык? Если да - где глянуть пример. Если нет - то какой форт посоветуете под эту задачу. Целевая ось - виндовс >> >> ------------------------------------------------------------------------------ >> Transform Data into Opportunity. >> Accelerate data analysis in your applications with >> Intel Data Analytics Acceleration Library. >> Click to learn more. >> http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140 >> _______________________________________________ >> Spf-dev mailing list >> Sp...@li... >> https://lists.sourceforge.net/lists/listinfo/spf-dev > , > > ------------------------------------------------------------------------------ > Transform Data into Opportunity. > Accelerate data analysis in your applications with > Intel Data Analytics Acceleration Library. > Click to learn more. > http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140 > , > > _______________________________________________ > Spf-dev mailing list > Sp...@li... > https://lists.sourceforge.net/lists/listinfo/spf-dev |
From: Королев В. <vic...@ya...> - 2016-03-27 16:55:24
|
<div>Смотря во что встроить.. я в своих программах запускаю скрипты с помощью слова</div><div><p>: MARKER ( "<spaces>name" -- ) \ 94 CORE EXT<br />\ Пропустить ведущие пробелы. Выделить name, ограниченное пробелами.<br />\ Создать определение с семантикой выполнения, описанной ниже.<br />\ name Выполнение: ( -- )<br />\ Восстановить распределение памяти словаря и указатели порядка поиска<br />\ к состоянию, которое они имели перед определением name. Убрать<br />\ определение name и все последующие определения. Не требуется<br />\ обязательно восстанавливать любые оставшиеся структуры, которые<br />\ могут быть связаны с удаленными определениями или освобожденным<br />\ пространством данных. Никакая другая контекстуальная информация,<br />\ как основание системы счисления, не изменяется.<br /> HERE<br />\ [C]HERE , [E]HERE ,<br /> GET-CURRENT ,<br /> GET-ORDER DUP , 0 ?DO DUP , @ , LOOP<br /> CREATE ,<br /> DOES> @ DUP \ ONLY<br />\ DUP @ [C]DP ! CELL+<br />\ DUP @ [E]DP ! CELL+<br /> DUP @ SET-CURRENT CELL+<br /> DUP @ >R R@ CELLS 2* + 1 CELLS - R@ 0<br /> ?DO DUP DUP @ SWAP CELL+ @ OVER ! SWAP 2 CELLS - LOOP<br /> DROP R> SET-ORDER<br /> DP !<br />;</p><p>Пример </p><p>\ ----------------------------------</p><p>\ во внешнем файле<br /> MARKER SKRIPТ<br /> MODULE: TMP_SKR<br />\ Здесь ваши форт слова </p><p>;MODULE<br /> SKRIPТ<br />\EOF</p><p>\ ---------------------------------------</p><p>\ ВЫПОЛНИТЬ СКРИПТ<br /> : execskript ( a u ) ['] INCLUDED CATCH \ a u путь к файлу скрипта<br /> ?DUP IF NIP NIP<br /> CASE<br /> 2 OF z" Не выполнить этот скрипт" ENDOF<br /> 3 OF z" Не выполнить этот скрипт" ENDOF<br /> -2003 OF z" Ошибка синтаксиса в скрипте" ENDOF<br /> 0xC0000005 OF z" Нарушение общей защиты" ENDOF<br /> \ >R <( R> DUP " Ошибка ~N (0x~06H)" )><br /> ENDCASE<br /> msg \ BYE<br /> THEN<br />;</p> </div><div> </div><div>27.03.2016, 19:19, "Бомбин Валентин" <ww...@ya...>:</div><blockquote type="cite"><p><br />Можно ли встроить sp-forth как скриптовый язык? Если да - где глянуть пример. Если нет - то какой форт посоветуете под эту задачу. Целевая ось - виндовс<br /><br />------------------------------------------------------------------------------<br />Transform Data into Opportunity.<br />Accelerate data analysis in your applications with<br />Intel Data Analytics Acceleration Library.<br />Click to learn more.<br /><a href="http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140">http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140</a><br />_______________________________________________<br />Spf-dev mailing list<br /><a href="mailto:Sp...@li...">Sp...@li...</a><br /><a href="https://lists.sourceforge.net/lists/listinfo/spf-dev">https://lists.sourceforge.net/lists/listinfo/spf-dev</a></p></blockquote> |
From: Бомбин В. <ww...@ya...> - 2016-03-27 16:19:00
|
Можно ли встроить sp-forth как скриптовый язык? Если да - где глянуть пример. Если нет - то какой форт посоветуете под эту задачу. Целевая ось - виндовс |
From: azekeprofit . <aze...@gm...> - 2016-03-22 18:05:15
|
Тьфу, там должно быть LEA EAX, [EAX*2]+1 On 3/23/16, azekeprofit . <aze...@gm...> wrote: > Приколы x86. > > Операции по адресной арифметике быстрее и гибче чем операции общей > арифметики. > > Гибче в плане того что оптимизатор видя такое: > > 2* 1+ > > может преобразовать это всё в одну операцию: > > LEA EAX, [EAX*2+1] > > Кроме того адресная арифметика не перебивает флаги процессора. > >> Так же памяти меньше требуется > Оптимизация по размеру кода никому не нужна. Если только > целенаправленно не ставится самоцель целиком поместиться в кэш > процессора (как ядро языка К). > > On 3/22/16, Королев Виктор <vic...@ya...> wrote: >> Да влияет на скорость, умножение на константу намного быстрее обычного >> сложения >> >> 22.03.2016, 18:35, "витя ерыгин" <vi...@ma...>: >>> >>> почему >>> CODE 2* >>> LEA EAX, [EAX*2] >>> RET >>> END-CODE >>> а не >>> CODE 2* >>> ADD EAX, EAX >>> RET >>> END-CODE >>> >>> Так же памяти меньше требуется. Быстрей что ли? Или защита от чего-то? >>> >>> >>> >>> -- >>> Виктор Ерыгин , >>> >>> ------------------------------------------------------------------------------ >>> Transform Data into Opportunity. >>> Accelerate data analysis in your applications with >>> Intel Data Analytics Acceleration Library. >>> Click to learn more. >>> http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140 >>> >>> , >>> >>> _______________________________________________ >>> Spf-dev mailing list >>> Sp...@li... >>> https://lists.sourceforge.net/lists/listinfo/spf-dev > |
From: azekeprofit . <aze...@gm...> - 2016-03-22 18:02:34
|
Приколы x86. Операции по адресной арифметике быстрее и гибче чем операции общей арифметики. Гибче в плане того что оптимизатор видя такое: 2* 1+ может преобразовать это всё в одну операцию: LEA EAX, [EAX*2+1] Кроме того адресная арифметика не перебивает флаги процессора. > Так же памяти меньше требуется Оптимизация по размеру кода никому не нужна. Если только целенаправленно не ставится самоцель целиком поместиться в кэш процессора (как ядро языка К). On 3/22/16, Королев Виктор <vic...@ya...> wrote: > Да влияет на скорость, умножение на константу намного быстрее обычного > сложения > > 22.03.2016, 18:35, "витя ерыгин" <vi...@ma...>: >> >> почему >> CODE 2* >> LEA EAX, [EAX*2] >> RET >> END-CODE >> а не >> CODE 2* >> ADD EAX, EAX >> RET >> END-CODE >> >> Так же памяти меньше требуется. Быстрей что ли? Или защита от чего-то? >> >> >> >> -- >> Виктор Ерыгин , >> >> ------------------------------------------------------------------------------ >> Transform Data into Opportunity. >> Accelerate data analysis in your applications with >> Intel Data Analytics Acceleration Library. >> Click to learn more. >> http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140 >> >> , >> >> _______________________________________________ >> Spf-dev mailing list >> Sp...@li... >> https://lists.sourceforge.net/lists/listinfo/spf-dev |
From: Королев В. <vic...@ya...> - 2016-03-22 16:29:07
|
<div>Да влияет на скорость, умножение на константу намного быстрее обычного сложения</div><div> </div><div>22.03.2016, 18:35, "витя ерыгин" <vi...@ma...>:</div><blockquote type="cite">почему<br />CODE 2*<br /> LEA EAX, [EAX*2]<br /> RET<br />END-CODE<br /> а не <br />CODE 2*<br /> ADD EAX, EAX<br /> RET<br />END-CODE<br /><br />Так же памяти меньше требуется. Быстрей что ли? Или защита от чего-то?<br /><br /><br /><br />-- <br />Виктор Ерыгин ,<p>------------------------------------------------------------------------------<br />Transform Data into Opportunity.<br />Accelerate data analysis in your applications with<br />Intel Data Analytics Acceleration Library.<br />Click to learn more.<br /><a href="http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140">http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140</a></p>,<p>_______________________________________________<br />Spf-dev mailing list<br /><a href="mailto:Sp...@li...">Sp...@li...</a><br /><a href="https://lists.sourceforge.net/lists/listinfo/spf-dev">https://lists.sourceforge.net/lists/listinfo/spf-dev</a></p></blockquote> |
From: витя е. <vi...@ma...> - 2016-03-22 15:34:41
|
почему CODE 2* LEA EAX, [EAX*2] RET END-CODE а не CODE 2* ADD EAX, EAX RET END-CODE Так же памяти меньше требуется. Быстрей что ли? Или защита от чего-то? -- Виктор Ерыгин |
From: Dmitry Y. <ya...@gm...> - 2016-03-20 18:03:48
|
Привет всем, https://github.com/yarus23/SPF.JS Работает в Node.js и в браузере. Совместим с SPF насколько это возможно отличаясь только типом шитого кода. Есть браузерная консоль. Можно сделать вирт машину не только на javascript а на чем угодно. Хоть на SP-FORTH :) С уважением, Дмитрий Якимов |