Здравствуйте, DJ KARIES, Вы писали:
DK>Здравствуйте, Gaperton, Вы писали:
G>>Здравствуйте, DJ KARIES, Вы писали:
DK>>>Но, по-моему, Форты никогда не были "взрослыми" компиляторами. Они оригинальны, мощны, но ПРИМИТИВНЫ. DK>>>И в этом их сила. Всё даётся с трудом, никто за тебя ничего не сделает и не соптимизирует, т.е. так-сказать "НЕ НРАВИТСЯ — НЕ ЮЗАЙ!". G>>Это так... Но хочется-то чуда DK>Хочется чуда — используй MSIL. Тот же форт, но вид с попы.
Не получится чуда. Гранульрность загрузки кода — сборка, и сборку нельзя выгружать. Только домен целиком — сразу налетаешь на маршалинг данных (~10x penalty), плюс выгрузка домена дает мемори лик, в случае, если каждый раз при загрузке используются разные сборки (что при нашем скриптинге — типичный сценарий). Вывод — #$%#@^ неюзабельное.
Для скриптинга форева у нас JVM, там гранулярность загрузки — класс, определение которого автоматом подбирается сборщиком мусора, и он выгружается сам, когда не нужен. Но тогда все должно быть написано на Java, а то опять будет попандос на маршалинг. Вот такие дела.
Здравствуйте, Gaperton, Вы писали: DK>>Хочется чуда — используй MSIL. Тот же форт, но вид с попы. G>Не получится чуда. Гранульрность загрузки кода — сборка, и сборку нельзя выгружать. G>Только домен целиком — сразу налетаешь на маршалинг данных (~10x penalty), плюс выгрузка домена дает мемори лик, в случае, если каждый раз при загрузке используются разные сборки (что при нашем скриптинге — типичный сценарий). Вывод — #$%#@^ неюзабельное.
G>Для скриптинга форева у нас JVM, там гранулярность загрузки — класс, определение которого автоматом подбирается сборщиком мусора, и он выгружается сам, когда не нужен. Но тогда все должно быть написано на Java, а то опять будет попандос на маршалинг. Вот такие дела.
Ничего. Во втором дотнете появилась специальная возможность емиттить темпорари статик методы. Они, в отличие от сборок, подвергаются GC. Ну и сам емит упрощен — не надо обкладывать емит кода "инкремент параметра" всякими ассемблибилдерами, классбилдерами и методбилдерами.
Так что чудо не за горами.
... << RSDN@Home 1.1.4 beta 4 rev. 347>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, DJ KARIES, Вы писали:
DK>Кстати, по моей (Alexey Abramov) наводке, автор (Chris Childers) взялся делать новый проект TetraForth (хе-хе, я придумал бренд ), более комплексный, чем RetroForth.
Взяться-то взялся, а выпустит ли?
DK>А. Ещё ретрофорт юзается как мультиплатформенный веб-сервер (forth-wiki) DK>Нехилая штучка, сервер в 8 кб, да притом, что в standalone exe-шнике (или dll-ке) видны его же исходники.
А где взять посмотреть? Сам сайт РетроФорта на апачах работает, и его wiki написан на PHP:
>>> GET /wiki/ HTTP/1.1 >>> Host: retroforth.org:80
HTTP/1.1 206 Partial Content
Date: Tue, 02 May 2006 20:22:43 GMT
Server: Apache/2.0.54 (Debian GNU/Linux) PHP/4.3.10-16 mod_perl/1.999.21 Perl/v5.8.4
X-Powered-By: PHP/4.3.10-16
Сравнить:
>>> GET / HTTP/1.1 >>> Host: www.forth.org.ru:80
HTTP/1.1 200 OK (add to script headers)
Server: Eserv/3.6854
Connection: close
Content-Type: text/html
X-Powered-By: ForthScripter/$Id: cgi.f,v 1.25 2004/12/02 02:08:29 spf Exp $
И этот Eserv/3, и ForthScripter — написаны на Форте. Но не на Ретро, конечно, а на русском SP-Forth.
Здравствуйте, Sinclair, Вы писали:
S>Ничего. Во втором дотнете появилась специальная возможность емиттить темпорари статик методы. Они, в отличие от сборок, подвергаются GC. Ну и сам емит упрощен — не надо обкладывать емит кода "инкремент параметра" всякими ассемблибилдерами, классбилдерами и методбилдерами.
Здравствуйте, DJ KARIES, Вы писали:
DK>Хотя, Форт — язык для создания прикладных языков...
...Вы не находите господа, что о чём бы ни начали разговор в этом форуме, всё в итоге сводится к DSL.
Здравствуйте, VladGalkin, Вы писали:
VG>Здравствуйте, DJ KARIES, Вы писали:
DK>>Хотя, Форт — язык для создания прикладных языков... VG>...Вы не находите господа, что о чём бы ни начали разговор в этом форуме, всё в итоге сводится к DSL.
Дык мода
Хотя форт это совсем другая философия, ее современные любители DSL обычно не признают
Здравствуйте, VladGalkin, Вы писали:
S>>Ничего. Во втором дотнете появилась специальная возможность емиттить темпорари статик методы. Они, в отличие от сборок, подвергаются GC. Ну и сам емит упрощен — не надо обкладывать емит кода "инкремент параметра" всякими ассемблибилдерами, классбилдерами и методбилдерами.
VG>А можно про это поподробнее и линков кинуть?
Смотри System.Reflection.Emit.DynamicMethod
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, otrad, Вы писали:
DK>>Кстати, по моей (Alexey Abramov) наводке, автор (Chris Childers) взялся делать новый проект TetraForth (хе-хе, я придумал бренд ), более комплексный, чем RetroForth.
O>Взяться-то взялся, а выпустит ли?
Товарищ RON перехватил идею и сделал "reva" http://ronware.org
O>И этот Eserv/3, и ForthScripter — написаны на Форте. Но не на Ретро, конечно, а на русском SP-Forth.
SP-Forth громоздкий, и из-за стандарта ANSI страдает CAPS-шифтами
...
см. мою поделку http://giref.forthworks.com , зачатки OpenGL-приблуды на основе "ref" — моего потомка RetroForth.
Здравствуйте, FR, Вы писали:
DK>>>Хотя, Форт — язык для создания прикладных языков... VG>>...Вы не находите господа, что о чём бы ни начали разговор в этом форуме, всё в итоге сводится к DSL.
FR>Дык мода FR>Хотя форт это совсем другая философия, ее современные любители DSL обычно не признают
Я вот сейчас ваяю конструктор со своим скриптом, редактором формочек, всё это в мскульной БД.
Стековая машина на дельфях.
Пара тысяч строк кода.
Как основной тип данных Variant.
Удобно.
И скорость не особо низкая, т.к. компиляция + вызов не опкодов, а реальных процедур в виде методов объектов.
Retroforth, Retroforth... Удивительно мне смотреть на его восхваления. Не то чтобы я ошущал какие-то к нему личные неприязни, но, но, но...
Цель я понял так -- "разрушить всё до основанья и новый, лучший, мир построить". То есть те вещи которые они не понимали (принимали), ребята решили выкинуть. Прийти к истокам. Отсюда, видимо и название.
При этом и без того исключительная распылённость фортеров только не снижается а только ещё больше растёт. Ведь даже семейство Retroforth уже довольно обширно: Reva, HelFORTH (с недо-оптимизатором, кстати), 4p, QuickForth, и т.д. и т.п.
И насчёт "идей". Ничего нового там нет. Большинство идей в системах и в их реализациях взяты из концептуальных MachineForth и ColorForth Чака Мура (словари forth и macro, раскладка по регистрам и применение lodsd как drop, ; как EXIT, включение видимости слова во время его определения).
При этом всё богатство всё ещё так и остаётся инструментом не работы, но сублимации и самореализации (хотя и не без исключений в виде иглоточечных внедрений энтузиастов).
По сути, есть только одна форт-система (буду рад узнать что ошибаюсь), применяемая на промышленной основе для программ "из этой жизни" -- SPF. Программы с десяткотысячными аудиториями, соответственно: nnCron и eServ. При этом система больше чем за десятилетие медленно но верно заточилась под нужды программ которые писали на SPF (например, для HTTP/FTP/SNMP/IMAP/ЧЁЕЩЁТАМ-сервера eServ написаны/промышленно-отлажены были доселе не существовавшие в природе Форта средства для работы с протоколами интернета). Это кстати и не очень хорошо, но вот например SPF_DEVEL должен давать некоторое представление.
И для желающих концептуально-пальцы-веером идей, например есть bac4th, ForthML (хотя у этого-то как раз перспективы более чем вдохновляющие для полезных применений за счёт представления исходников в виде XML). Или вот, на днях например, сляпал подключаемой библиотекой к SPF ещё один вариант colorForth'а, нечто среднее между Питоном и Фортом (чисто прикола для). Пример кода для факториала:
fact ( n -- fact(n)
1 SWAP \ Ставим аккумулятор на стек внутренней функции
$0 ( acc n ) \ Метка
?DUP 0= if \ Краевой случай "рекурсии" (он же условие выхода из цикла)
return
TUCK * SWAP 1-
$0 return \ Это GOTO $0 , по-сути
Генерируемый код (заодно и на результат работы оптимизатора SPF'а посмотрите):
565470 C745FC01000000 MOV FC [EBP] , # 1
565477 8D6DFC LEA EBP , FC [EBP]
56547A 0BC0 OR EAX , EAX
56547C 7406 JE 565484
56547E 8945FC MOV FC [EBP] , EAX
565481 8D6DFC LEA EBP , FC [EBP]
565484 0BC0 OR EAX , EAX
565486 8B4500 MOV EAX , 0 [EBP]
565489 8D6D04 LEA EBP , 4 [EBP]
56548C 0F8501000000 JNE 565493
565492 C3 RET NEAR
565493 8B5500 MOV EDX , 0 [EBP]
565496 894500 MOV 0 [EBP] , EAX
565499 8955FC MOV FC [EBP] , EDX
56549C F76DFC IMUL FC [EBP]
56549F 8B5500 MOV EDX , 0 [EBP]
5654A2 894500 MOV 0 [EBP] , EAX
5654A5 8D42FF LEA EAX , FF [EDX]
5654A8 E9CDFFFFFF JMP 56547A
Здравствуйте, Sinclair, Вы писали:
S>Ничего. Во втором дотнете появилась специальная возможность емиттить темпорари статик методы. Они, в отличие от сборок, подвергаются GC.
Маловато будет
Хотя... Для прикладных языков уже можно будет эмулировать ООП, используя те же паттерны, что и для С.