Showing posts with label RU. Show all posts
Showing posts with label RU. Show all posts

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).
  • Программа на Аргентуме может напрямую вызывать код на Си.

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}"
В строку, заключенную в кавычки можно вставлять выражения в фигурных скобках. Они вычислятся, сконвертируются в строку и вклеются в нужные места строки.

Monday, January 30, 2017

В поисках идеальной клавиатуры - 32xe

Вот!
После четырех лет опытов, и двенадцати промежуточных и просто неудачных вариантов я таки-сделал свою идеальную клавиатуру.

Так она выглядит в программе 3d моделирования

Sunday, November 24, 2013

В поисках идеальной клавиатуры - 2. Вверх ногами.

Отличия от предыдущей модели:
  • Клавиатура плоская и горизонтальная, пальцам удобнее нажимать сверху вниз.
  • Для переключения регистров будет двигаться не корпус клавиатуры, а ладонь, лежащая на рычажке. Тогда единственным элементом, имеющим инерцию будет сама рука, что мало отличается от обычных клавиатур.

Monday, September 2, 2013

В поисках идеальной клавиатуры - 1

Зачем?

Несколько месяцев назад мне в руки попалась хорошая эргономичная мышь. В руке лежала как влитая, и была удобна настолько, что убирать руку с нее не хотелось.
Однако программисты работают пальцами по клавиатуре (и еще немного головой - в нее они пьют пиво).
Перенося руку с мыши на клаву и обратно, я стал задавать себе вопросы:
  • wat$^&*ck
  • и how^#%& it
И в конце концов сформировал несколько требований к своему будущему устройству ввода:
  • оно должно совмещать мышь и клавиатуру,
  • все действия должны выполняться не глядя на устройство и на собственные руки,
  • пальцы должны лежать естественно в максимально удобной позиции,
  • движения должны быть минимальными и удобными.

Saturday, August 31, 2013

CPU: Виртуальная память не обязана быть сложной

Это третья статья на тему процессора. Все статьи по теме - тут: label-CPU

Современный процессор должен иметь встроенный MMU, иначе это будет микроконтроллер какой-то.
C MMU можно делать много всяких полезных штук - виртуализацию, защиту, можно запускать Linux и ворочать огромными объемами памяти имея небольшое количество RAM.

Thursday, August 29, 2013

Регистры: Как это сделаю я.

Это вторая статья про самодельный процессор, который я задумал.
Все статьи собраны тут: label-CPU

Каким мог бы быть регистровый файл моего garage-made процессора?

  1. Небольшим. Т. к. у нас FPGA, и к тому же надо как-то менее заратно переключать потоки.
  2. Дружественным к компилятору. Внутри процедуры хочется иметь много взаимозаменяемых прямо адресуемых регистров. При входе в процедуру хочется иметь автоматическое резервирование пространства в регистровом файле.
  3. Автоматическим. Операции резервирования/освобождения должен делать процессор, а не приложение.
  4. Универсальным. Все типы данных - integer ALU, FPU, SIMD processing unit - должны обрабатываться в одном универсальном регистровом файле.

В качестве первого приближения:
В режиме пользователя доступны 32 32-разрядных регистра r0..r31 (позже мы сделаем их 64-разрядными).
4  из них - глобальные и не вращаются:
  • r31 - Program Counter - указатель текущей исполняемой инструкции.
  • r30 - Stack Pointer - Вершина стека.
  • r29 - TLS Pointer - Указатель на статический блок, уникальный для каждого потока. 
  • r28 - Data Segment - Указатель на статические данные, разделяемые между потоками.
r0..r27 - вращающийся регистровый стек на 28 регистров.

Wednesday, August 28, 2013

CPU of my dream (ru)

Я собираюсь поиграть в FPGA, и сделать простой и удобный процессор.
Некоторые решения будут оригинальными, но большинство - будут нещадно заимствоваться из разных интересных архитектур.

Начну пожалуй со сбора требований и пожеланий.

Регистры, регистры, регистры, регистры!

Прикладная архитектура процессора с точки зрения программиста крутится вокруг регистров и операций над ними.

Рассмотрим регистры общего назначения.
Если их много, человеку, компилятору и планировщику есть где разгуляться:
  • Не надо бесконечно перебрасывать обрабатываемые данные между памятью и регистрами.
  • Можно выполнять одновременно несколько независимых операций.
  • Можно анроллить циклы.
  • Можно уменьшить потребление стека при вызовах процедур.
Словом, много регистров - это хорошо.