p^e's Friends
 
[Most Recent Entries] [Calendar View] [Friends View]

Below are the most recent 25 friends' journal entries.

    [ << Previous 25 ]
    Wednesday, October 21st, 2020
    ketmar
    3:55a
    UrForth уже почти настоящий компилятор!
    как известно, компилятор считается настоящим, если в примерах есть тетрис и медиаплеер. ну, и калькулятор, но поскольку у форта есть repl, то калькулятор — неактуально.
    пикчи )
    Tuesday, October 20th, 2020
    freir
    10:04p


    Current Music: Cauldron - Breaking Through
    Monday, October 19th, 2020
    ketmar
    7:36a
    интересно...
    …нынешний «кризис» (или давайте уже называть нормально — полный пиздец) приведёт к появлению пролетариев?

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

    нет, планктонины, даже обнаружившие, что их выкинули нахер — это не пролетарии, это холуи, обслуга. разноцветные нежногендерные снежинки тем более мимо, естественно.
    ketmar
    7:18a
    k8vavoom, важнофикс для вендомажоров
    новый билд. фиксит распиздос графония на свежих невидия-дровах.

    а потому что когда дяденька Кнут говорит, что нехуй оптимайзить то, что и так пиздато работает — его надо слушать и делать как сказано, а не выёбываться.
    Friday, October 16th, 2020
    freir
    6:10p
    рекурсія, ні, не чули
    опитування: що включити в опитування?

    Current Music: Molassess - I Am No Longer
    Wednesday, October 14th, 2020
    freir
    6:54p
    Timo Ketola
    https://tentaculaorg.tumblr.com/

    Current Music: Fides Inversa - I Glance You with a Touch, I Touch You with a Gaze
    Sunday, October 11th, 2020
    freir
    9:08p


    Current Music: Fides Inversa - Rite Of Inverse Incarnation
    Wednesday, October 7th, 2020
    freir
    9:35p
    добре сказано
    Вірменія - це і є кавказька Сербія. А Сербія - балканська Вірменія.
    Дві нації, які ненавидять всіх своїх сусідів, марять про "історичну
    велич" та намагаються відхопити шматочок сусідської землі. І обидві
    ці держави - союзники Росії і вороги України. "Співпадіння? Не думаю!"


    з коментів звідси

    Current Music: ORDINANCE - Purging Kremanation
    Saturday, October 3rd, 2020
    ketmar
    4:59a
    обожаю vt100
    парзер нажатой кнопочки (rxvt, частично xterm): ~11 кб. удобный редактор строки — ~4 кб.
    Friday, October 2nd, 2020
    ketmar
    4:38a
    и кстати про игры
    пока всякие… странные люди кидают деньги в поляков в надежде, что те вместо визуальной новеллы на этот раз выкатят таки игру (хинт: опять наебут), вышла Третья Часть Великого Шедевра.
    Thursday, October 1st, 2020
    ketmar
    5:37a
    urforth ещё пыхтит
    нашёл мощный баг в ассемблере (забыл, что 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.


    ну да, я немного упоролся: вспомнил, что писать код может быть просто и весело. особенно если забить на идиотские мифы про «портабельность» и «кроссплатформенность».
    Wednesday, September 30th, 2020
    freir
    10:13p
    норм
    https://twitter.com/Virus19Korona/status/1311358528020512768

    Current Music: ORDINANCE - Credo Sceleratum
    ketmar
    3:05a
    k8vavoom update
    новобилд. ничего особого, но если вы на винде — то обязательно обновитесь. в прошлом билде я решил дохуя оптимизировать, и поломал нахуй всю математику. это не особо заметно в стандартном режиме при беглых тестах, но генерирует дохуя хэйзенбагов в неожиданных местах.
    Monday, September 28th, 2020
    freir
    10:06p
    freir
    6:15p
    карабах-барабах

    Current Music: Fides Inversa - The Visit
    Sunday, September 27th, 2020
    freir
    8:42p
    Marionette
    https://youtu.be/kPaL1Oodeto

    раптово непоганий гностичний хоррор
    (як шотландці керують світом).

    Current Music: Ghost - I'm a Marionette
    Wednesday, September 23rd, 2020
    freir
    8:19p
    Monday, September 21st, 2020
    freir
    8:32p
    of course
    Dominus Spiritus Satanas!

    Current Music: ORDINANCE - The Kingdom of Nothing
    Saturday, September 19th, 2020
    freir
    7:40p
    Allzeit Bereit


    Current Music: Der Tod und die Landsknechte - Unzerstörbar
    Tuesday, September 15th, 2020
    freir
    8:18p
    де слово набуває вічності


    Current Music: Khors - Beneath the Keen Edge of Time
    freir
    7:23p
    угадайка на выходные


    что происходит на картинке?
    Monday, September 14th, 2020
    freir
    8:21p
    Ordinance
    https://youtu.be/TZbFGwQMkuA

    Current Music: ORDINANCE - Diabolopathia
    ketmar
    6:54p
    странные дела творятся, однако
    погонял урфортом бенчмарк от Forth Inc. в целом, UrForth примерно в 1.8 раз медленней, чем bigForth. учитывая, что bigForth генерит машинный код — результат меня вполне устраивает. а вот с SP-Forth вышло что-то странное: он почти не быстрее UrForth (т.е. значительно медленнее bigForth). это очень удивительно, потому что там тоже машинный код, и весьма навороченый оптимизатор. очевидно, я сделал что-то не так, потому что включение/выключение оптимизатора не повлияло ни на что. похоже, что в dev-сборке он сломан, и на выходе получается тупой лобовой stc. который да, не будет так уж сильно быстрее — почти все преимущества native code проебайтунг из-за щёлканья стеками.

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

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

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

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

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

    да, в форте можно делать локальные переменные (элементарно добавляются в компилятор), но никаких особенных выигрышей они не дают. наоборот, способствуют написанию плохого форт-кода, потому что позволяют вместо разбивания большого плохо контролируемого слова на части поменьше зафигачить огромную простыню. это не то, как имеет смысл писать на форте. именно поэтому в UrForth из коробки локалов нет: мне не нужно. и глобалов там тоже очень мало, но в Стратегических Местах я спокойно их создаю и использую. а, и ещё локалы медленней глобалов, потому что требуют пролога и эпилога, уменьшая этим преимущество разбиения на маленькие слова.
    Sunday, September 13th, 2020
    freir
    10:06p
    [ << Previous 25 ]
About LJ.Rossia.org