Thursday, April 13, 2023

Язык программирования Аргентум

(Argentum programming language: aglang.org)



Пару месяцев назад я начал новый проект - это язык программирования Argentum.
А как же Фламберг, спросите вы и будете совершенно правы. Фламберг был хорошим оценочным проектом, на котором обкатались идеи, многие из которых стали основой Аргентума - это объектная модель, интерполяция строк, легковесные лямбды. Вместе с тем было выброшено и переделано все, что мешает в больших структурированных проектах - синтаксис основанный на отступах, модульность через текстовые инклуды, тяжелый interop с Си.

Итак новый язык:

  • Работает без сборщика мусора, поэтому не запинается в лучайные моменты времени, не жрет двух- трехкратный объем памяти, и не тратит лишнего процессорного времени.
  • Гарантированно удаляет объекты в предсказуемые моменты времени.
  • Гарантирует отсутствие утечек памяти (в отличие от Java, Rust, Swift и т.д.)
  • Язык безопасен:
    • Проверки типов -только динамические (но очень быстрые).
    • Синтаксически невозможно обратиться по null-указателю или optional none.
    • Нет висящих ссылок, и двойного удаления объектов.
    • Нет race между потоками.
    • Изменяемые объекты не могут шарится между иерархиями объектов, а разделяемые объекты не могут изменяться.
    • Неизменяемость объектов - гарантирована. Нет const_cast, нет взлома финальности через рефлексию.
  • Язык очень быстр:
    • Прямая компиляция в машинный код.
    • Динамическая проверка типов - пара машинных инструкций.
    • Вызов методов интерфейса и приведение к интерфейсу имеет такой же порядок сложности, что и вызов обычного метода класса.
    • Работа с делегатами и лямбдами не требует аллокаций.
    • Счетчики в шареных объектах не используют атомарные инструкции (вообще примитивы синхронизации используются только при передаче объектов между пртоками).
  • Язык компактен (hello_world.exe может быть собран в 12Kb без дополнительных DLL).
  • Программа на Аргентуме может напрямую вызывать код на Си.

Saturday, January 8, 2022

Alien Die - летопись проекта с картинками и советами

Как я будучи полным нубом дизайнил и паял свой первый проект на голом микроконтроллере


Жил был программист, и случился у него кризис среднего возраста.
Подобрался и потребовал сделать что-то новое, и безбашенное:
  • разработать с нуля печатную плату
  • сделать устройство с голым микроконтроллером, чтоб никаких Arduino
  • спаять микроскопические SMD компоненты
  • и всё это на часовой батарейке.
В общем, взял он в руки паяльник и стал думать.

Sunday, July 18, 2021

Улучшаем условный оператор - if-then-else

Как сказал один автор на хабре, условный оператор if-then-else приобрёл свою финальную идеальную форму и его уже нельзя улучшить. Давайте из вредности попробуем что-нибудь с ним сделать.

Friday, January 4, 2019

Latinski alfavit dlia russkogo iazyka


Зачем?

Во-первых, латиницу удобнее читать:
  • Кириллица имеет широкие буквы (ЖЩШ) и глифы, состоящие из нескольких фигур (Ы). Латинские буквы ỳже, их удобнее схватывать взглядом при быстром чтении. К тому же более короткие слова уменьшают потребность в переносах.
  • Латинские символы имеют более различимые формы, больше выносных элементов, за которые цепляется глаз (splint).
    С другой стороны кириллица это частокол квадратных букв одной высоты (шплинт),
Во-вторых, латиницу проще писать:
  • Не нужны клавиатуры с несколькими буквами на каждой клавише.
  • Отпадает переключение режимов клавиатур.
  • Не нужно несколько раз заново учиться быстрой печати вслепую.
В-третьих, это приходится делать все равно.
  • В документах международного образца, вывесках и указателях латинскими буквами записываются русские имена и топонимы.
  • Кириллический шрифт есть далеко не везде, и приходится пользоваться костылями в виде транслита.

А как же вековое наследие предков?

Его нет.
Тот алфавит, который мы сегодня называем кириллицей, не имеет ничего общего с буквами, придуманными Кириллом и Мефодием.
  • Во-первых, они придумали глаголицу (ⰀⰁⰂⰃ...)
  • Во-вторых их звали не Кирилл и Мефодий, а Константин и Михаил.
  • В третьих даже приписываемая им более поздняя кириллица выглядела так: ѦѪѮѰѲѼ
Современный алфавит - это продукт двадцатого века. Он введен правительством Керенского. До него было множество алфавитов:
  • древнеславянский,
  • церковно славянский устав,
  • полуустав,
  • петровский гражданский, который реформировался три века подряд: XVII, XVIII, XIX.
Убирались и добавлялись буквы, менялся их смысл, упрощались правила.
Непонятно, почему в XX веке этот процесс остановился. Война за букву Ё, да незначительная ожеговская реформа - вот и все, пожалуй.

А между тем, в современной кириллице множество нелогичностей и неоднозначностей:
  • Звук Й в половине случаев не произносится, а в половине - не отличается от И.
  • Гласные "е, ё, ю, я" - это двойные звуки "йэ, йо, йу, йа". Почему например, "Ёж", но "Йод"?
  • Твердый знак, это на самом деле звук Й: объединение = обйединение.
  • Мягкий знак - это тоже звук Й, правда, очень краткая его форма (серйёзно, оригиналйно).
  • Щ - это мягкая Ш (то есть Шй)
Если убрать эти дублирования, это не только сократит алфавит, но и упростит правила, что в свою очередь облегчит и письмо, и чтение.

Реформировать надо все равно. Буквы "ЕЁЮЯЙЪЬЩ" - лишние. Как лишними были в свое время фита, еръ, ять и десятеричная и. Когда их убирали, было много воплей, но по прошествии лет, все увидели, что они действительно не нужны.

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

Почему не взять транслит?

История знает множество попыток перевести русский язык на латинский алфавит. Но никогда авторы не ставили целью сделать латиницу главным алфавитом.

Латинской транслитерации всегда отводилась второстепенная роль. Думали только о том, чтобы передать каждый символ кириллицы одним или несколькими латинскими символами. А между тем, если совместить переход на латинские начертания и сокращение алфавита, букв хватит и так. Сдвоенные символы будут не нужны.

Как это будет выглядеть?

  • Буквы "АБВГДЖЗИКЛМНОПРСТУФХЦЫЭ" напрямую отображаются в латинские "ABVGDJZIKLMNOPRSTUFHCYE".
  • Буква "Й" - или вообще не пишется (если она не звучит), или записывается как I, или если она и вправду корраткая, передается апострофом.
  • Твердый знак - всегда и везде звучит как Й. Поэтому см. предыдущий пункт.
  • Мягкий знак передается апиострофом, это сверхкраткая И.
  • Гласные "ЕЁЮЯ" - передаются комбинацией I и не-йотированной парной гласной (IE IO IU IA) причем, во многих словах этот апостроф можно вообще не писать, т.к. й-отированность в них - дань исторической традиции, и уже давно не произносится (напр. proiznosica).
  • Остаются две проблемные буквы Ч и Ш. Их нет в латинице. И даже использующие латиницу европейские языки передают эти звуки парами ch sh или специальными диакритическими знаками. Мы не будем изобретать новую версию латиницы, но мы также не можем использовать буквосочетания, т.к. в отличие от того же английского языка, в славянских языках это весьма распространенные звуки.
    • У нас есть буква q, которая в курсиве мало отличается от ч (чq).
    • Звук Ш получает последнюю неиспользованную латинскую согласную X.
    • А Щ, как мы уже знаем, - это просто мягкая Ш, она будет записываться как X'.

Итоговый алфавит:

А-A
Б-B
В-V
Г-G
Д-D
Е-IE
Ё-IO
Ж-J
З-Z
И-I
Й-I
К-K
Л-L
М-M
Н-N
О-O
П-P
Р-R
С-S
Т-T
У-U
Ф-F
Х-H
Ц-C
Ч-Q
Ш-X
Щ-X'
Ь-'
Ы-Y
Ъ-I
Э-E
Ю-IU
Я-IA

Примеры

Tot alfavit, kotory my segodnia nazyvaem kirillice', ne imeet niqego obxego s bukvami, pridumannymi Kirillom i Mefodiem.
  • Vo-pervyh, eti gospoda pridumali glagolicu (ⰀⰁⰂⰃ...)
  • Vo-vtoryh, ih zvali ne Kirill i Mefodi, a Konstantin i Mihail.
  • V-tretih, daje pripisyvaemaia im bolee pozdniaia kirillica vygliadela tak: ѦѪѮѰѲѼ
Sovremenny alfavvit - eto produkt XX veka, on vveden pravitel'stvom Kerenskogo. Do nego bylo mnojestvo peredelok: drevne-slavianski, cerkovno-slavianski ustav, poluustav, petrovskaia reforma, reformy XVII, XVIII, XIX vekov. Ubiralis' i dobavl'alis' bukvy, menialsia ih smysl i uprox'alis' pravila.

Neponiatno, poqemu v XX veke etot process ostanovilsa. Vo'na za bukvy Io i neznaqitel'naia ojegovskaia reforma, vot i vse, pojalui.

A mejdu tem, v sovremennoi kirillice mnojestvo netoqnoctei i neodnoznaqnostei:
  • Glasnye е, ё, ю, я - eto sdvoenye zvuki ie, io, iu, ia. Eto porojdaet putanicu. Poqemy, naprimer, Ioj eto Ёж, no Iod eto Йод?
  • Tverdy znak, eto na samom dele zvuk i: obъedinenie = obiedinenie.
  • Miagki znak - eto tot je zvuk i, pravda, bolee kratkaia ego forma (seriozno, original'no).
  • X' - eto m'agka'a X.
Zvuk (') ispol'zueca v russkom iazyke tak qasto, qto ego stoit oboznaqit' kakoi-to melkoi zakoruqkoi, soobrazno ego kratkosti i vspomogatel'nosti. V evropeiskih iazykah est' simvol apostrof (') vypolniaiux'i kak raz takuiu funkci'u.

Poprobuem zapisat' "йеёюяьщъ" s ispol'zovaniem apostrofa, a "Э" zapixem kak "Е":
«V qax'ah iuga jil-byl citrus, da, no fal'xivy ekzempliar»
M-da, s neprivyqki glaz slomaiex'. Odnako dlia neofitov - inostrancev, detei, tol'ko naqavxih izuqat' gramotu - nesux'ectvenna kategori'a privyqno-neprivyqno. Dlia nih eta zapis' toqneixim obrazom peredaiot zvuki, kotorye proiznosiaca pri proqtenii: slovo iex'o ne imeet niqego obx'ego c bukvami "е-щ-е" (exx'e).

Odnako privyqka - vtoraia natura. I mejdu logiqnym i privyqnym liudi vsegda vybiraiut privyqnoe. I eto odna iz doponitel'nyh priqin pereiti na latinicu: pod pokrovom sloma privyqnogo mojno sokratit' alfavit na vosem' bukv, uprostiv pravila zapisi.

No osnovnye priqiny, koneqno, drugie. Oni lejat v socio-kul'turnom i tehnologiqeskom plane:

  • Vozvratit' russkuiu kul'turu v semiu evropeiskih narodov.
  • Uprostit' ispol'zovenie tehniki: nikakih dopolnitel'nyh raskladok klaviatur, xriftov i proxivok ustroistv.
  • Sdelat' tekst bolee kompaktnym: latinski alfavit ủge.
  • Povysit' udoboqitaemost': kirillica - sploxnoi zabor iz odinakovyh kvadratnyx bukv: (шщцеплин - xx'ceplin).
Istori'a znaet mnojestvo popytok perevesti russki iazyk na latinski alfavit. I vsegda avtory latinskoi transliteracii staralis' sohranit' koliqestvo simvolov i odnoznaqnoe otobrajenie. Poetomu i tak ne oqen' udobny tekst "zaxixaia qexuxeesia oxuxenie" v transliteracii stanovica neqitaemym "zaschischaya cheshusheesya oschyschenie".

My ne budem sohraniat' alfavit. My ego budem sokrax'at':
  • Bukvy "АБВГДЖЗИКЛМНОПРСТУФХЦЫЭ" napriamuiu otobrajaiuca v latinskie "ABVGDJZIKLMNOPRSTYFHCYE".
  • Bukva "Й" - kogda ona  deistvitel'no oboznaqaet korotki zvyk, peredaetsa apostrofom, inogda ona proiznosica dlinno, togda ona peredaeca kak I, a inogda ona voobx'e ne proiznosica, zaqem ee togda voobx'e pisat'?
  • M'agki' i tverdy' znaki - apostrofom ili kak I, v zavisimosti ot dlitel'nosti.
  • Glasnye "ЕЁЮЯ" - pereda'uca kombinaciei I i parno' glasno' (IE IO IU IA) priqem vo mnogih slovah etot I mojno ne pisat', t.k. on uje davno ne proiznosica.
  • Ostaiuca dve problemnye bukvy "Ч" i "Ш". Ih net v latinice. I daje evropeiskie iazyki ispol'zuiuxie latinski alfavit eti zvuki peredaiut parami "ch" "sh" ili special'nymi diakretiqeskimi znakami. My ne budem izobretat' novu'u versi'u latinicy, no my takje ne mojem ispol'zovat' pary bukv, t.k. v otliqie ot togo je angliiskogo iazyka, v slavianskih iazykah eto ves'ma rasprostranennye zvuki.
    • U nas est' bukva "q", kotoraia v kursive malo otliqaeca ot "ч" (чq).
    • Zvuk "Ш" poluqaet poslednuiu neispol'zovannuiu latinskuiu soglasnuiu "X".
    • A "Щ" - eto prosto miagkaia "Ш", ona budet zapisyvaca kak X'.
Glavnye svoistva alfavita:
  • Ispol'zuiuca tol'ko bazovye latinskie bukvy, nikakih dopolnitel'nyh znakov net.
  • Glasna'a peredaeca glasnoi. Soglasnaia - soglasnoi.
  • Vse simvoly imeiut privyqnoe naqertanie (krome Ч-Q, Ш-X).
  • V otliqie ot original'noi kirillicy ubrany neodnoznaqnosti: ioj/iod (ёж/йод).
  • Tekst stal koroqe. Korotkie slova prox'e qitat' i perenosit'.
  • V otliqie ot translita tut net dvuhbukvennyh simvolov tipa SH, CH. Obratite vnimanie, qto dvuhbukvennye simvoly tipa IA - eto ne special'nye digrafy, a priamaia zapis' zvukov, iz kotoryh sostoit Я.
Otobrajenie znakov v zvuki stalo priamee.

Povtoriu iex'o raz, primenenie apostrofov i simvola I - eto ne priqudlivaia popytka zakodirovat' nesux'estvuiuxie bukvy. Eto odnoznaqnoe kodirovanie zvukov, kak oni proiznos'aca po-russki.

Thursday, February 8, 2018

Игра

Это идея компьютерной игры в стиле пост-модерн.
Сначала игра выглядит как платформер или метроидвания, но потом она открывается новыми гранями.

Кратко: песочница с открытым миром, сценой которой являются уровни видеоигр.

Friday, February 10, 2017

Flamberg: лексика

Исходный текст фламберга - это текстовый файл в utf-8 с расширением ~ или flam.

Комментарии

Комментарии начинаются с символа ";" и следуют до конца строки.

Пример:
a = 42 ; от символа ';' до конца строки - всё это - комментарий

Поскольку в Фламберге операторы не заканчиваются на точку с запятой и не бывает нескольких операторов в одной строке, я счел возможным вернуть символу ";" древнеассемблерный смысл.

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

Sunday, February 5, 2017

Flamberg: tutorial

Первое знакомство

Hello world.

"Hello world"

Корневой уровень файла (код вне всех функций) является телом основной функции программы.
Результат этой функции выводится в консоль.
Поэтому не требуется никакого подготовительного кода (бойлерплейта) - ни объявления классов, ни объявления функции main. Не требуется даже вызывать какую-либо функцию. Достаточно просто вернуть из программы строку, и она будет напечатана.

Можно использовать Flamberg в качестве калькуллятора
2*2
Все, что возвращено из программы будет напечатано в консоль, если это конвертируется в текст.

То же, но с форматированием строки
"result={2*2}"
В строку, заключенную в кавычки можно вставлять выражения в фигурных скобках. Они вычислятся, сконвертируются в строку и вклеются в нужные места строки.