Forth https://fforum.winglion.ru/ |
|
Nova Дневник разработчика https://fforum.winglion.ru/viewtopic.php?f=58&t=3227 |
Страница 1 из 15 |
Автор: | Victor__v [ Пт мар 01, 2019 23:12 ] |
Заголовок сообщения: | Nova Дневник разработчика |
Прежде всего надо определиться с концепцией использования форта. В Нове в силу исторических причин ![]() Такой подход вспомогательности привёл к нынешней в Нове архитектуре построения словаря. Именно по этой причине изначально каждый словарь может иметь свой обработчик нераспознанных строк. А с недавнего времени и обработчик компиляции определений. Пример последнего можно посмотреть в библиотеке поддержки лок. переменных (~er/locals/r-local.f) Но сам подход предполагающий кучу вспомогательных словарей может сильно замедлить поиск. Естественно, из-за большего времени поиска слов. Чтобы компенсировать это, поиск ведётся не по строке, а хешу от этой строки. В ходе философских бесед с mOleg я пришёл к выводу, что для ускорения трансляции неплохо подойдёт поиск по 4-м цепочкам, а не по 1-й. Почему 4, а не 8 или 16? Причина больше в целесообразности. Если цепочек 4, то на 100 слов в каждой в каждой цепочке будет 25. Но во всех вспом. словарях кол-во слов редко когда превышает 100. Если же цепочек будет больше, то некоторые из них будут пустовать. Можно, конечно, добить и более равномерного распределения, но тогда придётся переписывать слово для нахождения номера цепочки от хеша. Сейчас код такой: Код: : VOC-TH 3 AND ; \ в ядре реализовано на ассемблере Быстро, дёшево и сердито. Поэтому 4 цепочки, по моему скромному мнению, оптимальный вариант. В итоге скорость поиска выросла значительно, если считать в тактах ![]() Также на скорость трансляции влияет и сами операции парсинга. Однако связанные с этим слова никак не улучшались, чтобы в будущем не потерять портируемость. И раз коснулись портируемости, то поговорим и о ней. Вначале в Нове использовался стековый манипулятор как а-ля высокоуровневый ассемблер, благо он им и был. Использовался он для быстрого набора определений. Так на нём было написано слово COMPARE . Помимо этого стековый манипулятор является неплохим DSL для написания участка кода, который будет использован 1 раз и сложновыражаем на форте. К примеру в одном месте используется код для замены в строке всех символов, которые равны n на символ m Соотно, входные параметры n m addr u Вот что вышло на манипуляторе: 3/B1&3..?(1&2..<)1i0dU А теперь распишите это на форте. Но ассемблерность манипулятора мешает его портируемости. По этому в ядре от него потихоньку избавляюсь. На данный момент осталось несколько мест, где он используется. Как показывает скромная статистика в Нове с каждым обновлением количество слов становится всё меньше. Убираются в основном редкоиспользуемые слова, да и те переменные, которые на прямую использовать не нужно и/или не рекомендуется. При этом переменные "остаются" в ядре, но не явно. Они существуют в словах, которые их используют. Эти переменные де-юре и константы де-факто можно либо заменить, либо подменить на время. Хотя и синтаксиса для этого не предусмотрено, ибо требовалось аж 0 раз. |
Автор: | KPG [ Сб мар 02, 2019 01:33 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
Victor__v писал(а): Как показывает скромная статистика в Нове с каждым обновлением количество слов становится всё меньше. Убираются в основном редкоиспользуемые слова, да и те переменные, которые на прямую использовать не нужно и/или не рекомендуется. Сравнение, наверное, не в пользу GForth manual ![]() P.S. Заметил, что в сети много ресурсов изучения языков online (тестирования кода в веб-фреймворке) и в качестве Форта прикручивают GForth 0.7.3, но при этом функционал терминальной консоли не полный и не отрабатывает как слово PAGE так и команды управления курсором консоли и запуск того же банального консольного тетриса tt.fs из внутренностей GForth приводит к выводу Escape-последовательностей в диалоговое окно, хотя штатный Бенчмарк от VFX Forth отрабатывается, но с прохождение ANSI 94 Forth теста похоже (из-за консоли) возникают проблемы. А так, в online сессии запуска Форт кода можно запустить, наверное, разный Форт-скрипт. (какой нибудь майнер ![]() |
Автор: | Hishnik [ Сб мар 02, 2019 01:53 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
Victor__v писал(а): Прежде всего надо определиться с концепцией использования форта. Ну а где же ниже приведена концепция? Концепция системы - термин из ГОСТ 34-й группы, там можно посмотреть, что это такое и какие должны быть рассуждения на эту тему. Собственно, из-за пропуска этой стадии в нужном виде дальше получается масса чрезмерно детализированных частностей. Victor__v писал(а): концепция: "всё что нужно в основном словаре, всё вспомогательное во временных словарях, и после удаляется". Это и близко не тянет на концепцию. Это просто техническое решение, которое то ли корректно, то ли нет... а понять это можно, посмотрев как раз на концепцию системы. Какую задачу решает такой подход? Экономия памяти? Улучшение читаемости исходных текстов? Может быть, что-то еще? В зависимости от решаемой задачи (а набор решаемых задач служит достижению цели, определяемой в концепции) имеет смысл оценивать и принятые технические решения. Может быть, это прорыв, а может, временная затычка, сразу-то непонятно. Victor__v писал(а): Но сам подход предполагающий кучу вспомогательных словарей может сильно замедлить поиск. Естественно, из-за большего времени поиска слов. "Сильно" - это насколько? И относительно чего? И как это повлияет на потребительскую привлекательность программ? Victor__v писал(а): Но во всех вспом. словарях кол-во слов редко когда превышает 100. Почему? Откуда такая статистика? Victor__v писал(а): Вот что вышло на манипуляторе: 3/B1&3..?(1&2..<)1i0dU А теперь распишите это на форте. Если бы не было указано, что вообще нужно сделать, я бы в такой набор символов и не стал вникать. Стековый манипулятор, написанный "просто так", с аргументами, привлеченными позже, является по сути "информационным шумом". Инструменты такого типа можно писать десятками, заменяя каждый на последующий - где-то на 3 такта быстрее, где-то изящнее синтаксис, где-то еще что-то. А вот вопрос "а что такого в Форте сделано плохо, и чем тут помогает именно манипулятор" так и повис в воздухе. Victor__v писал(а): Но ассемблерность манипулятора мешает его портируемости. Зато ухудшается производительность? ![]() В принципе, вирусных идей не так уж мало. Например, бектрекинг был - все о нем писали, ждали каких-то откровений, а это просто вариант подхода, и никакой мистической связи с Фортом у него нет. Ходило словосочетание "насыщение словаря примитивами". То есть надо было обязательно в определенный момент "начать насыщать". По факту это не привело к каким-то заметным шагам вперед и получению продуктов, хотя ожиданий у людей было много. Поэтому кодинг - это далеко не первая и не главная стадия. Не имея проекта, можно плутать в подпрограммах, переменных, словарях, оптимизациях и прочем практически до бесконечности. Или до "наконец-то я нашел нормальную, настоящую работу, и теперь мне не приходится писать на Форте" - бывало в RuFIG и такое. |
Автор: | Victor__v [ Сб мар 02, 2019 03:10 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
Тов. Админ. Во первых, я академиев не кончал. Если считаете какой-то термин неудачным в использовании, намекните на более корректный, поправлю. Во вторых, Экономия памяти? - безъусловно. Улучшение читаемости исходных текстов? - спорно, но модульность мне ещё ни разу не мешала. Что-то ещё? - вполне может быть. В третьих, Цитата: "Сильно" - это насколько? И относительно чего? И как это повлияет на потребительскую привлекательность программ? Хм, когда-то замерял даже тут на форуме были результаты. Минимум в 50 раз поиск быстрее. Быстрее чего? Быстрее поиска в списке словаря по имени слова. По влиянию для потребителей никак. Хотя если приложение можно считать продолжением форта, и плагин это словарь, то быстрый поиск будет плюсом, но это не точно ![]() В четвёртых, Из собственного опыта. В библиотеках не так уж много ведущих слов, хотя смотря что писать. В пятых, "а что такого в Форте сделано плохо, и чем тут помогает именно манипулятор" Помог быстро набросать работоспособный код, над которым на форте ещё надо думать или долго набирать в ассемблере. Вот аналог на форте. : change-char \ ch1 ch2 addr u >R ROT >R BEGIN 1 RPICK WHILE DUP C@ R@ = IF 2DUP C! THEN 1+ -1 RP@ CELL+ +! REPEAT RDROP RDROP 2DROP ; Заметьте подобный код по функционалу располагается только в одном месте. Т.е это определение не востребовано в ядре Новы. В итоге код на манипуляторе проще (после подготовки), про размер и скорость не говорю, фиг с ними. Я ответил на Ваш вопрос? В шестых, Цитата: Зато ухудшается производительность? ![]() Скажем так, исторически сложилось. Когда начинал писать ядро некоторые механизмы прописывались, чтоб работали, а не чтоб работали и были понятны при этом. Манипулятор позволял реализовать что-то сложное в одном месте, а не домик из набора юного строителя. Когда начался пересмотр кода роль манипулятора начала снижаться. Теперь его роль минимальна. Хочу отметить, что в данном случае речь ведётся не о том, что есть в ядре, а о том что было. И почему этого сейчас нет. Цитата: В принципе, вирусных идей не так уж мало. Например, бектрекинг был - все о нем писали, ждали каких-то откровений, а это просто вариант подхода, и никакой мистической связи с Фортом у него нет. Это-то тут причём? Ну вот в Нове повсеместно используются откатные операции и итераторы. И что? Вирус эволюционировал ![]() Тот же манипулятор использовался не из-за крутости, а из-за своей лаконичности и возможности делать кодовые затычки. Ну и производительность хотел поднять, молодой был ![]() |
Автор: | KPG [ Сб мар 02, 2019 19:31 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
Victor__v писал(а): Тов. Админ. Во первых, я академиев не кончал. Не обращайте внимания на такие опусы админа, он, наверное, переходит в группу проект менеджеров в своей организации. (или давно уже в этой роли и положение обязывает) P.S. Да, и решения в дизайне по Кварку никто не сможет покритиковать т.к. это закрытый проект по исходникам. ![]() Сам, наконец то, завёл аккаунт на Github (буду сливать туда своё "непотребство" на радость еврофортёрам) ![]() Hishnik писал(а): Ну а где же ниж Или до "наконец-то я нашел нормальную, настоящую работу, и теперь мне не приходится писать на Форте" - бывало в RuFIG и такое. Надо признать, что и рынок сильнее Форт реалий и, например, переключится на использование Форт, как базового инструментария зачастую невозможно, да и не требуется после долгого цемментирования опыта в классике программирования. |
Автор: | Hishnik [ Сб мар 02, 2019 20:58 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
Victor__v писал(а): Во первых, я академиев не кончал. Если считаете какой-то термин неудачным в использовании, намекните на более корректный, поправлю. Ну а что тут такого, все понемногу что-то осваивают. Вопрос в том, что постоянно появляется какой-то новый уровень вопросов, и оставаться просто кодером означает сильно себя ограничивать. Упражнения на реализацию алгоритмов хороши для уроков информатики. Потом надо уже ставить задачи самостоятельно, причем уровень задач становится не сложнее в смысле "сейчас напишем оптимизацию", а выше в смысле "попробуем разработать программу, лучше соответствующую требованиям какого-то круга специалистов". Очень просто сказать "всем нужно быстрее, а мы как раз умеем делать замену кода на другой код", но это часто самообман. Дело тут как раз не в терминах, а в том, что попытка притянуть термин "концепция" при отсутствии самой концепции создаст лишнее впечатление, что все хорошо и весь написанный код улучшает систему в целом. Victor__v писал(а): Во вторых, Экономия памяти? - безъусловно. Улучшение читаемости исходных текстов? - спорно, но модульность мне ещё ни разу не мешала. Что-то ещё? - вполне может быть. Так а что из этого нужно? И зачем? И когда этим можно поступиться? И ради какого эффекта? Вот комплекс таких "если - то" уже ближе к понятию "концепция". А иначе будут фрагментарные решения, составленные из прочитанного, модного, освоенного и проч., а в сборе это будет непонятно для чего предназначено. Это как из мультфильма "Мадагаскар": "Это же водоросли!" - "На палочке!!!! ![]() ![]() Victor__v писал(а): Помог быстро набросать работоспособный код, над которым на форте ещё надо думать или долго набирать в ассемблере. Вот аналог на форте. Вот манипуляторы как раз пример, когда "ой, заработало, скорее берите". Очевидной пользы не видно, но автору нравится. Можно, конечно, присоединиться к такой секте и тоже писать манипуляторы, но за пределами искусственно созданной системы ценностей все эти вещи безразличны. Victor__v писал(а): В итоге код на манипуляторе проще (после подготовки), про размер и скорость не говорю, фиг с ними. Я ответил на Ваш вопрос? Не в том смысле, который я ожидал. Это опять набор аргументов вида "мне же нравится!". Никто не спорит, что можно пользоваться Фортом тысячами способов. Можно и манипулятор, причем десятками способов. Только не стоит после этого ожидать, что всем понравится именно такой вариант. А если я хочу кириллицей? А если я хочу другие слова? Важнее то, что каждая библиотека, прием или алгоритм должны быть соотнесены с тем, для чего они предназначены и что проверяем в итоге. Иначе получится или долгострой или просто веселая игра в программирование разных приятных штук. Victor__v писал(а): Ну вот в Нове повсеместно используются откатные операции и итераторы. И что? Да на здоровье, не в них же самих дело. Дело в том, что надо постоянно смотреть, те ли результаты получаются, и какие вообще нужны. Victor__v писал(а): Ну и производительность хотел поднять, молодой был Так кто ж в районе 20 лет не писал свой Форт? ![]() |
Автор: | Hishnik [ Сб мар 02, 2019 21:06 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
KPG писал(а): Не обращайте внимания на такие опусы админа, он, наверное, переходит в группу проект менеджеров в своей организации. (или давно уже в этой роли и положение обязывает) Ой, какое прелестное и симпатичное мелкое хамство ![]() ![]() KPG писал(а): Да, и решения в дизайне по Кварку никто не сможет покритиковать т.к. это закрытый проект по исходникам Так я давно и писал, что при открытых исходниках никто дорабатывать не будет, а будут скачивать и фыркать. Вот, пожалуйста, описка по Фрейду - "никто не сможет покритиковать". То есть не "никто не сможет подключиться и улучшить", а "никто не сможет покритиковать". KPG писал(а): Надо признать, что и рынок сильнее Форт реалий и, например, переключится на использование Форт, как базового инструментария зачастую невозможно, Не надо признать, потому что этого нету. Оно вообще из разных категорий. В мире тысячи языков программирования, и только поклонники "странных языков" сидят и охают. Очевидно, потому что культивирование исключительности и является для некоторых людей целью причисления себя к <...>-истам. Форт это дело тоже не обошло стороной, как и любое направление не из мейнстрима. Все там можно, если действительно хотеть разобраться, а не ждать, пока благодарные последователи столпятся вокруг и будут вопить "научите нас, что такое стек, а то мы в шоке". |
Автор: | KPG [ Сб мар 02, 2019 21:35 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
Hishnik писал(а): Ой, какое прелестное и симпатичное мелкое хамство ![]() ![]() Кто ж знает как оно у Вас устроено. ![]() P.S. На днях, в магазине Пятёрочки (в районе касс) прочитал такую табличку (размером с плакат) - "Место директора по свежести" Сфотографировать этот ... (маразм) у меня оказалось нечем. А, что бы сначала улучшать, необходимо критически рассмотреть существующее решения со своей субъективной точки зрения. ![]() На Github кучу проектов форкают для чего то, наверное покритиковать! Будут ли слиты изменения форка в оригинальную ветвь, тут уже как звёзды сойдутся. Мне, для примерa, ничего не помешало доработать исходники Форт системы от Михаила для KolibriOS и разместить в форуме сообщества. |
Автор: | KPG [ Сб мар 02, 2019 22:53 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
Hishnik писал(а): Все там можно, если действительно хотеть разобраться, а не ждать, пока благодарные последователи столпятся вокруг и будут вопить "научите нас, что такое стек, а то мы в шоке". Можно предложить использовать трубу (FIFO) или именованные переменные, но только захотят ли они их, после знакомства с концепцией стека и кратковременной жизни неименованных локальных данных? |
Автор: | zma [ Сб мар 02, 2019 23:08 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
Victor__v писал(а): Вот аналог на форте. : change-char \ ch1 ch2 addr u >R ROT >R BEGIN 1 RPICK WHILE DUP C@ R@ = IF 2DUP C! THEN 1+ -1 RP@ CELL+ +! REPEAT RDROP RDROP 2DROP ; В Нове есть цикл со счётчиком? Код: : change-char ( c1 c2 a u ) over + swap do over i c@ = if dup i c! then loop 2drop ; Уже не так страшно. Или имелось ввиду что-то другое? |
Автор: | zma [ Сб мар 02, 2019 23:16 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
KPG писал(а): Можно предложить использовать трубу (FIFO) или именованные переменные, но только захотят ли они их, после знакомства с концепцией стека и кратковременной жизни неименованных локальных данных? Именованными переменными (в том числе и локальными) большинство популярных языков пользуется, так что да, захотят. ![]() А FIFO или LIFO - это просто структуры данных, каждая для своей области применения. |
Автор: | Victor__v [ Сб мар 02, 2019 23:43 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
zma писал(а): В Нове есть цикл со счётчиком? Нет, DO LOOP в ядре отсутствует, поскольку требуется очень редко |
Автор: | Victor__v [ Вс мар 03, 2019 00:03 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
Hishnik писал(а): Так а что из этого нужно? И зачем? И когда этим можно поступиться? И ради какого эффекта? Вот комплекс таких "если - то" уже ближе к понятию "концепция". А иначе будут фрагментарные решения, составленные из прочитанного, модного, освоенного и проч., а в сборе это будет непонятно для чего предназначено. Это как из мультфильма "Мадагаскар": "Это же водоросли!" - "На палочке!!!! ![]() ![]() Что из этого нужно? Всё и побольше ![]() Зачем? Чтобы итоговое приложение было компактней (всё лишнее уже за бортом), стабильней (кодогенераторы не наслаиваются друг на друга), расширяемей (врем словари могут служить пралгинами, как уже указывалась выше). Когда поступиться: Ну если приложение изначально будет какой-то диалоговой средой, то можно накомпилировать в кодофайл всякие полезные определения для решения задачи (сравнение строки с маской, к примеру), естественно, ради удобства пользователя. |
Автор: | Hishnik [ Вс мар 03, 2019 00:10 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
KPG писал(а): Кто ж знает как оно у Вас устроено. P.S. На днях, в магазине Пятёрочки (в районе касс) прочитал такую табличку (размером с плакат) - "Место директора по свежести" Сфотографировать этот ... (маразм) у меня оказалось нечем. Да мне не жалко, я сейчас вот это все аккуратно разберу. Значит так. Программисты любят себя противопоставлять "менеджерам". Приятно считать себя профессионалом, в отличие от каких-то там управленцев, которые ничего не соображают, но почему-то пролезли в начальство. Это с точки зрения программистов. И оно же доходит до абсурда - любые попытки проанализировать деятельность с точки зрения формального контроля воспринимаются программистами как "ужас-ужас, наше ковыряние в коде сейчас предъявят общественности, и мы будем выглядеть лентяями и бездарями". Поэтому само понятие "менеджмент" принимается в штыки и активно низводится до презираемого и недостойного занятия для тех, кто не может кодировать. Почему такие намеки смехотворны конкретно в данном случае. У меня, видимо, больше мегабайта текстов на Форте, и даже на форуме можно найти мои куски ассемблера, С++ и VHDL. Поэтому не выйдет выстроить цепочку "предлагает формальные методы - значит менеджер - значит не умеет кодировать, потому и пишет про планирование". Почему оно вредно вообще. Потому что планирование имеет и оборотную сторону. Если запланированное выполнено, программист внезапно приобретает навыки менеджера, и прямой конфликт теряет основу. Плохой менеджер не умеет кодировать, но хороший программист умеет и кодировать, и управлять. Казалось бы, можно двинуться в эту сторону, обосновывая технические решения. Однако это невыгодно плохому программисту, который предпочтет оставаться на позициях "меня ругает менеджер - ну так он же управленец, он же ничего не понимает". KPG писал(а): А, что бы сначала улучшать, необходимо критически рассмотреть существующее решения со своей субъективной точки зрения. На Github кучу проектов форкают для чего то, наверное покритиковать! Нет, чтобы улучшать, надо обсудить идею и понять, принимается ли она. Скачивать код и высматривать там что-то - неблагодарное занятие. Можно наисправлять до полной потери исходной идеи, и можно заниматься выискиванием мелочей. Опять же, культивируя позицию "ой, я такой профессионал - там все было плохо, а я инициализировал переменные, исправил mov eax, 0 на xor eax, eax ну и вообще". Сколько там по статистике на гитхабе нафоркали? Ну и где этот мощный рывок мирового программирования вокруг нас? KPG писал(а): Мне, для примерa, ничего не помешало доработать исходники Форт системы от Михаила для KolibriOS и разместить в форуме сообщества. Оо, да, это конечно продвижение. ![]() Так что и Нову можно вполне легко превратить в нормальный рабочий инструмент, на котором будет писаться что-то полезное, но так же легко можно напрочь загубить, сгребая туда странные технологии, лишь бы окружающие заметили. |
Автор: | Hishnik [ Вс мар 03, 2019 00:20 ] |
Заголовок сообщения: | Re: Nova Дневник разработчика |
KPG писал(а): Hishnik писал(а): Все там можно, если действительно хотеть разобраться, а не ждать, пока благодарные последователи столпятся вокруг и будут вопить "научите нас, что такое стек, а то мы в шоке". Можно предложить использовать трубу (FIFO) или именованные переменные, но только захотят ли они их, после знакомства с концепцией стека и кратковременной жизни неименованных локальных данных? Ауу! Я о чем пишу-то тут? Надо чуть-чуть глаза поднять и осмотреться вокруг. Посмотреть, как все выглядит с точки зрения коллег, начальства, других программистов. Я что, именно про стек спрашиваю? Такие разговоры - это междусобойчики программистов, которые заканчиваются при наступлении общей усталости от разговора. Пока Форт преподносится окружающим в стиле "тут вот стек, но мы можем FIFO", в глазах непрофессионала это все выглядит очередной блажью, которая скоро кончится. Потому что окружающие смотрят очень просто - распространенность, книги, другие проекты. А тут ловить нечего, но можно (и нужно!) переходить к вещам, понятным непрофессионалу. Как будет выглядеть работа с Фортом. Что это даст на практике. Какие конкретно use case будут решаться на Форте существенно проще и эффективнее. Вот это движение в сторону "Форт для людей". А пока в Форт натаскиваются фрагментарные технологии, и все это подается под соусом "просто все боятся стека, а так бы перешли на Форт" - это все самообман, так можно годами сидеть и ждать. |
Страница 1 из 15 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |