crypt of decay [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

пост для желающих помочь мне материально [Oct. 7th, 2032|04:48 am]
уважаемый анонимус всё‐таки убедил меня, что сделать такой пост стоит. итак.

это верхний пост для тех, у кого образовался избыток денег и очень хочется их кому‐нибудь (мне) отдать; или для тех, кому просто по каким‐либо причинам хочется мне помочь деньгами на жизнь. под катом реквизиты украинского приватбанка, на которые вы можете это сделать. а если вы по каким‐то причинам хотите помочь в USD или EUR, то это, в принципе, тоже решаемо, пишите в каменты. к сожалению, другие платёжные системы нит. извините.

каменты скринятся. если хотите расскрина — напишите это прямо в каменте.

также здесь будет текущий статус: жив, жопа приближается, полный пиздец, такое вот. это на тот случай, если вы хотите помогать на выживание, но предпочитаете выпить пива, если мне не критично. «жив» — это значит, что на текущий месяц мне хватит на еду, коммуналку и интернеты (а больше мне не надо). «жопа приближается» — это значит, что подходит конец месяца, а на следующий запасов ёк. это я постараюсь вешать за неделю‐полторы до. «полный пиздец» — это значит, что нужно прямщазсрочно, времени осталось в обрез считаные дни, потому что случилось что‐то непредвиденное (или никто не спас вовремя от приближающейся жопы).


статус: пиздец 5/10.
если кто удивляется долгой несмене статуса — так это потому что Стабильность.


спасибо тем, кто поддерживает (и/или поддерживал), и тем, кто просто не гадит здесь в каменты.

p.s.: спрятан. можно почитать в коде страницы. также уважаемый анонимус предложил повесить сюда CV, но я нафиг не знаю, что там писать. тупо список умений будет огромный и бессмысленный, а чем я хочу заниматься завтра — я и сам не сильно в курсе. это может быть каждый день разное, предсказать невозможно.

просто и удобно всё сделать через btc:
bitcoin: 3KiBU1Rk7Bny1CQKbrQ7WgaCo52fkBgNH8

Read more... )
Link251 абырвалг|абырвалг!

для матюгов [May. 5th, 2024|09:23 am]
оказывается, у меня был верхний пост для матюгов, а потом куда‐то проебался. искать лень, поэтому сделаю новый. каменты торадиционно скринятся.

загляни под кат, ну чего ты в самом деле? )
Link508 абырвалг|абырвалг!

k8vavoom, мой форк Vavoom [Dec. 28th, 2021|01:04 am]

idea by wrkq, artwork by ar888

ах, да. возможно, вы не знаете, что такое Vavoom. так вот: Vavoom — это один из сурспортов (движков) для игры в Doom. тот самый оригинальный дум почти тридцатилетней давности. да-да, он живее всех живых, и на думворлде каждую неделю появляется минимум один топик с анонсом новой карты.

репа вавум-форка тут.

и тема на DoomWorld. сайта у меня нет.

много текста подкотэ )
Link166 абырвалг|абырвалг!

k8vavoom, билд [Nov. 26th, 2020|01:53 pm]
[Tags|]

анонс. ничего интересного, в основном мелкофиксы.
Link11 абырвалг|абырвалг!

традиционный пост, по которому все соскучились [Nov. 13th, 2020|05:40 am]
я полагаю, некоторые аноны с нетерпением ожидают: «ну когда же, когда?!» таки вот: если у вас завелись лишние деньги, и вам очень хочется бесполезно их потратить — отдайте их мне, пожалуйста. я их потрачу на еду (и, возможно, наркотики), а вы сможете везде хвастаться тем, что можете себе позволить даже спонсировать неизвестно кого неизвестно зачем. а я потом ещё чего-нибудь интересного про форт напишу в виде спасибо.

спасибо. что-нибудь ещё про форт напишу потом. даже без поцелуя, просто так.
Link

scattering a colon — гениальная идея, на которую всем... [Oct. 31st, 2020|11:58 pm]
[Tags|]

примерно двадцать пять лет назад Майк Гассаненко придумал концепцию scattered colon. изначально — для удобного добавления всяких инициализаций в библиотеки. статья была в Forth Dimensions, Vol. XVII (N5), от Jan-Feb 1996.

вкратце — это очень простая штука. где-то в библиотеке мы определяем слово, примерно так:
: init … some-init-code ;
изначально оно выполняет только «some-init-code», а многоточие не делает ничего. но. вот тут начинается интересное. в любом месте дальше, и сколько угодно раз это слово можно «нарастить»:
..: init some-other-init-code ;..
это будет работать примерно так, как и ожидается: все добавленые фрагменты исполнятся друг за дружкой, потом исполнится финальное «some-init-code». всё это считается одним словом, а не вложеными вызовами.

ну да, то же самое можно сделать при помощи «DEFER», ручного запоминания и вызова предыдущего обработчика. но это неудобно и лишняя работа.

впрочем, это не единственное применение scattered colon. намного более крутое — добавление хуков для расширений системы. поскольку все добавленые кусочки ничего не кладут на стек возвратов, то в любом кусочке можно сделать «exit», чтобы прекратить вызовы дальнейших добавленых кусков. то есть, мы получаем классический hook chain, но без ручного вызова предыдущего обработчика, и с возможностью легко прервать исполнение цепочки. причём хуки могут как передавать параметры дальше нетронутыми, так и изменять, если им надо (например, в расширении интерпретатора можно заменять токены из входного потока на другие, и позволять стандартному интерпретатору это обрабатывать).

и сделано это в классическом фортовом стиле: используя уже имеющиеся механизмы. в данном случае — просто компилируя переходы, так что никакого дополнительного цикла по списку обработчиков не надо.

в UrForth scattered colon активно используется во многих местах: как во всяких инициализаторах, вызываемых при старте и прочих случаях, так и для механизма расширений. например, поиск интерпретатором слова в словаре — это scattered colon. система локальных переменных и ооп-система добавляют туда свои обработчики. слово «to» тоже вызывает scattered colon hook (опять таки, активно используется в локалах и oof). если слово не число, и не найдено в словаре… да, опять вызывается sc-colon hook. такие же хуки есть в catch/throw, для сохранения любых дополнительных значений в exception frame. практически всё, что потенциально может потребовать расширения в библиотеках, и традиционно делается через «DEFER», в общем.

естественно, никаких упоминаний про этот потрясающе удобный механизм на сайте стандарта форта нет. потому что стандарт — это не про удобство, а чтобы все заебались. по-моему, и реализаций из коробки нигде, кроме SP-Forth (и UrForth) нет. а этот механизм должен быть в коробке, потому что он подвязан на интимные подробности компилятора. а в стандарте он обязан быть в core word set.

нет, proposal я писать не буду: у меня аллергия на бюрократию.
Link35 абырвалг|абырвалг!

лол [Oct. 28th, 2020|10:36 am]
сайберупанцу продолжают откладывать. конечно, это исключительно потому, что надо десять последних пукселей вылизать, а не потому, что это адский ад адового говнища, который хуй знает как собрать к релизной дате.
Link56 абырвалг|абырвалг!

удивительное дело... [Oct. 26th, 2020|10:44 am]
[Tags|]

…ну, или не очень, зависит от точки зрения, конечно.

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

Чак Мур целую книжку написал, где рассказал, что такое форт. не поняли. Чак ещё раз наглядно показал первым оркадом. не поняли. Чак снова показал вторым оркадом и колорфортом. не поняли. потому что там группа необучаемых ментальных инвалидов. даже пайсан, казавшийся нормальным со своим бигфортом — в итоге испугался и вступил в нахуй бесполезное говно гфорт. а реально писать на форте софт никто из них уже не способен: они даже сраный сервер себе не смогли сделать, и держат сайт на уёбищном нодожысыговнище.

ещё там, похоже, никто так и не понял, почему scattered colons — это настолько круто, что Майку Гассаненко только за это уже можно ставить памятник. если они вообще в курсе про такую вещь. она должна быть в core wordset, безусловно — но нет даже упоминаний.

в общем, единственное, что там есть полезного (и ради чего можно немного заморочиться с поддержкой этого говностандарта) — набор тестов. который они тоже не своей инициативной группой запилили, а взяли у стороннего чувака и быстренько записали в «типа официальные».


я тем временем научил компилятор выравнивать заголовки, cfa и pfa на четыре байта. как и ожидалось, выигрыш по скорости — в пределах погрешности измерений. можно и по 16/32 — но мне лень, я вангую, что будет то же самое. в принципе, это мне всё равно нужно для потенциального арм-порта (поэтому и заморочился). к счастью, во все внутренние структуры словаря я хожу через специальные слова, так что изменил меньше десятка слов, а остальной код как работал — так и работает. естественно, систему можно собрать как в варианте с выравниванием, так и без, просто ключом метакомпилятора. на выравнивание, кстати, проёбывается около семи килобайт.
Link23 абырвалг|абырвалг!

повторю ещё раз... [Oct. 24th, 2020|02:37 pm]
…что нет ни одной причины не делать двоичное дерево сбалансированым. обычное двоичное дерево превращается в чудесное Andersson Tree написанием двух функций по 5 строчек каждая, и вставлением их вызовов в конец обычного кода для insert и delete в обычном двоичном дереве. и плюс одно поле в node. это настолько просто, что использование небалансированых двоичных деревьев надо приравнять по уровню лени и дебилизма к использованию пузырьковой сортировки.

(да, я добавил пример aatree в UrForth. просто чтобы показать, насколько это просто. код не самый оптимальный, но это не особо важно в данном случае — демонстрация принципа же.)
Linkабырвалг!

UrForth уже почти настоящий компилятор! [Oct. 21st, 2020|03:55 am]
как известно, компилятор считается настоящим, если в примерах есть тетрис и медиаплеер. ну, и калькулятор, но поскольку у форта есть repl, то калькулятор — неактуально.
пикчи )
Link4 абырвалг|абырвалг!

интересно... [Oct. 19th, 2020|07:36 am]
…нынешний «кризис» (или давайте уже называть нормально — полный пиздец) приведёт к появлению пролетариев?

в связи с развитием общества и производства есть нехилая возможность пролететь мимо появления революционного класса. что будет означать или сразу Тёмные Века, или заход на второй круг той же хуйни лет через сорок.

нет, планктонины, даже обнаружившие, что их выкинули нахер — это не пролетарии, это холуи, обслуга. разноцветные нежногендерные снежинки тем более мимо, естественно.
Link13 абырвалг|абырвалг!

k8vavoom, важнофикс для вендомажоров [Oct. 19th, 2020|07:18 am]
[Tags|]

новый билд. фиксит распиздос графония на свежих невидия-дровах.

а потому что когда дяденька Кнут говорит, что нехуй оптимайзить то, что и так пиздато работает — его надо слушать и делать как сказано, а не выёбываться.
Link3 абырвалг|абырвалг!

обожаю vt100 [Oct. 3rd, 2020|04:59 am]
парзер нажатой кнопочки (rxvt, частично xterm): ~11 кб. удобный редактор строки — ~4 кб.
Link42 абырвалг|абырвалг!

и кстати про игры [Oct. 2nd, 2020|04:38 am]
пока всякие… странные люди кидают деньги в поляков в надежде, что те вместо визуальной новеллы на этот раз выкатят таки игру (хинт: опять наебут), вышла Третья Часть Великого Шедевра.
Link6 абырвалг|абырвалг!

urforth ещё пыхтит [Oct. 1st, 2020|05:37 am]
[Tags|]

нашёл мощный баг в ассемблере (забыл, что imm8->imm32 делает sign extend, лол). к счастью, это особо нигде не проявлялось. также ассемблер считал, что «mov eax,imm8» лучше конвертировать в спецформу «imm32» для eax, а не оставлять imm8. не баг per se, просто можно команду короче сочинить.

перевёл почти все места, где сидели defer-хуки на scattered colon от Майка Гассаненко, это намного удобней.

: init-smth ... ;
..: init-smth some-init-code ;..
..: init-smth some-other-init-code ;..
( и так сколько угодно раз )


ошибки кидаются через throw, так что TLOAD/INCLUDE теперь может освободить память, куда прочитало файл, даже если что-то пошло не так. в честь чего перевёл всё, что использовало temp-pool, на обычный mmap. заодно добавил нормальный список директорий для поиска исходника.

также реализовал user area (в форте так называют TLS). через CLONE_SETTLS/set_thread_area, и регистр FS (потому что GS занят либцой, например). документация по этому делу отвратительная, в основном в виде: «а вот этот флаг нужен для библиотек, которые реализуют потоки. а тебе не нужен, потому что ты быдло.» кое-что пришлось угадывать, а кое за чем сходил в мусли. естественно, либца от факта, что на свете бывают потоки не через птреды, охуевает, и попытка сделать printf из фортового потока приводит к сегфолту. ну, не сильно и хотелось.

с удивлением обнаружил, что моя печаталка-парзилка флоатов делает раундтрип для f32. этих f32 немного, так что я тупо их циклом проверил. ну как «моя»… тупорылый парзер я сделал сам, а REPRESENT спиздил из другой системы, которая тоже его спиздила.

докинул два прнг в ядро (pcg32, bob jenkins' small), и ещё несколько в libs/ (включая ISAAC). хотел отправить исаака на розетту (временное помутнение разума), но там надо регистрироваться, так что не стал, и переписал его на асме.

также сделал кучу опций для метакомпилятора, включая возможность вырубить генерацию дебаг-инфы, отрубить TLS, и собирать статические бинарники. заодно добавил в мету простую работу со словарями, и поуносил разные куски в разные словари. (ужасно неудобно, кстати, писать об этом на русском: потому что dictionary и vocabulary — вещи разные, но не называть же второе «словарный запас»? а нормального термина никто так и не придумал.)

естественно, до написания кросс-компилятора на Z80, и создания Репла Мечты — так пока и не добрался. алсо, размышляю, форкать ли метакомпилятор и пилить отдельно Z80, или как-то получше его разбить и абстрагировать то, что ещё не, и вмонтировать кросс в то, что есть. тащемта, форк пока выглядит привлекательней.

также положил в libs/ две реализации ооп: очень простую, размером меньше килобайта, и посложнее, килобайт на десять, но с поддержкой приватных пространств имён и обращения к полям/методам внутри определений методов как к обычным форт-словам. реально это (ооп) нужно только чтобы делать всякие гуёвины, конечно. потом пригодится — когда сделаю бинды к иксам, например. более сложный вариант сделан через хук в interpret — но это не обязательно, на самом деле: можно было чисто стандартными wordlists обойтись. было бы даже покрасивей. но лень.

в связи с увеличившимся объёмом кода пересборка занимает примерно 230 мсек (примерно 150 без отладчика). всё ещё чуть быстрее, чем сборка минимальной l0-системы (даже без if/colon) фасмом. и не требует 30 мегабайт RAM.


ну да, я немного упоролся: вспомнил, что писать код может быть просто и весело. особенно если забить на идиотские мифы про «портабельность» и «кроссплатформенность».
Link2 абырвалг|абырвалг!

k8vavoom update [Sep. 30th, 2020|03:05 am]
[Tags|]

новобилд. ничего особого, но если вы на винде — то обязательно обновитесь. в прошлом билде я решил дохуя оптимизировать, и поломал нахуй всю математику. это не особо заметно в стандартном режиме при беглых тестах, но генерирует дохуя хэйзенбагов в неожиданных местах.
Link12 абырвалг|абырвалг!

странные дела творятся, однако [Sep. 14th, 2020|06:54 pm]
погонял урфортом бенчмарк от Forth Inc. в целом, UrForth примерно в 1.8 раз медленней, чем bigForth. учитывая, что bigForth генерит машинный код — результат меня вполне устраивает. а вот с SP-Forth вышло что-то странное: он почти не быстрее UrForth (т.е. значительно медленнее bigForth). это очень удивительно, потому что там тоже машинный код, и весьма навороченый оптимизатор. очевидно, я сделал что-то не так, потому что включение/выключение оптимизатора не повлияло ни на что. похоже, что в dev-сборке он сломан, и на выходе получается тупой лобовой stc. который да, не будет так уж сильно быстрее — почти все преимущества native code проебайтунг из-за щёлканья стеками.

в любом случае — меня такая скорость устраивает. я, конечно, мог бы переключиться на генерацию native code, но особого смысла в этом нет. а код усложнится весьма сильно (потому что без оптимизатора выигрыш будет никакой, так что оптимизатор тоже пришлось бы делать). в практическом смысле скорость отличная.

по ходу добавил поддержку floating point (с очень уёбищными парзером и печаталкой, которые не обеспечивают roundtrip), и даже собрал шахматную программку TSCP. на удивление — она заработала (после небольшой рихтовки).
Link5 абырвалг|абырвалг!

о бедном глобале замолвите слово... [Sep. 14th, 2020|12:08 am]
[Tags|]

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

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

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

если же вдруг есть переживания по поводу того, что вдруг придётся потоки тащить, а мы уставшие и с глобалом — то для этого в форте придуманы user variables. аналог thread locals. если понадобится — замените вашу variable на user-variable, и все дела.

да, в форте можно делать локальные переменные (элементарно добавляются в компилятор), но никаких особенных выигрышей они не дают. наоборот, способствуют написанию плохого форт-кода, потому что позволяют вместо разбивания большого плохо контролируемого слова на части поменьше зафигачить огромную простыню. это не то, как имеет смысл писать на форте. именно поэтому в UrForth из коробки локалов нет: мне не нужно. и глобалов там тоже очень мало, но в Стратегических Местах я спокойно их создаю и использую. а, и ещё локалы медленней глобалов, потому что требуют пролога и эпилога, уменьшая этим преимущество разбиения на маленькие слова.
Link2 абырвалг|абырвалг!

в удобной позе значительно приятней! [Sep. 8th, 2020|07:03 am]
с рабочим метакомпилятором пилить значительно удобней, однако. хоть фасмовый исходник и был похож на форт благодаря макросам, но всё же не оно. починил несколько мелких ошибок, заодно добавил в метакомпилятор возможность создавать новые словари. в фасме это тоже можно было сделать, но хлопотно. а поделить систему на дополнительные словари — удобно. заодно докинул реализацию search order wordset из стандарта. который наглухо ёбнутый всё равно: вот зачем FIND принимает не обычные «адрес длина», а byte-counted string? у меня такое было в самом начале — потому что тяжёлое наследие FIG. и я быстро от этого избавился. а они до сих пор тащуть.

также должен сказать, что я уже несколько отвык от того, что пока я отпускаю enter и вдупляю, что должно быть, система уже три раза успевает себя пересобрать, и два раза прогнать тесты. потому что сборка идёт так: «эталонный» компилер собирает новый, новый собирает ещё один новый, сравниваются их хэши, и оба этих новых прогоняют тесты.
Link2 абырвалг|абырвалг!

всё, переехал на полный селфхост [Sep. 7th, 2020|09:27 am]
исходники level 0 переместил в отдельный каталог (пусть лежат, вдруг с фасма бутстрапиться придётся когда-то, гыг). всё, что из того ядра повытаскивал наружу — затащил обратно в ядро level 1. время сборки версией с отладчиком — около 180 миллисекунд, без отладчика — около 120.

ну да, отладчик добавляет один indirect jump. в принципе, можно патчить напрямую «doforth» (разогрев интерпретатора форт-слов), тогда никаких тормозов не будет вообще. но потеряется простая и изящная реализация step/step-over: придётся впатчивать брейкпоинты.

в принципе, меня пока устраивает как есть, тормоза не такие большие (60 мсек на ~250 кб смешаных исходников на форте и асме). возможно потом реализую вариант с хотпатчингом как дополнительную опцию. посмотрим. тащемта, пора переходить к созданию Репла Мечты. но это долгое дело, я ещё даже не полностью уверен, каким именно я его видеть хочу.
Link16 абырвалг|абырвалг!

navigation
[ viewing | most recent entries ]
[ go | earlier ]