GNU Algol 68

Oct. 16th, 2025 06:39 pm
vak: (Default)
[personal profile] vak
Лекция о прогрессе алголостроения в компиляторе GCC. Вкратце: скоро появится официальный компилятор ga68.

Алгол 68 был разработан Рабочей группой 2.1 Международной федерации по обработке информации (IFIP) в конце 1960-х – начале 1970-х годов под руководством Адриана ван Вейнгаардена. Целью рабочей группы было создание языка программирования, пригодного для передачи алгоритмов, их эффективного выполнения на различных компьютерах и облегчения обучения студентов. Ожидалось, что получившийся язык будет представлять собой усовершенствованную версию Алгола 60, в которой будут устранены известные недостатки и в целом улучшены. Однако то, что изначально задумывалось как улучшенная версия Алгола 60, оказалось чем-то совершенно иным: чрезвычайно мощным языком программирования, более современным и выразительным, чем большинство современных языков программирования, в дизайне которого практически до предела использовалось недавно изобретенное понятие ортогональности в языках программирования. Алгол 68 не похож на Алгол 60 – важный, но устаревший язык программирования, вытесненный практически во всех отношениях своими преемниками, и представляющий сегодня интерес лишь как исторический курьёз. Несмотря на утверждения многих, у Algol 68 нет преемников. Рабочая группа GNU Algol 68 — это группа хакеров, чья цель — вернуть Algol 68 на первое место в программирования, где ему и место, создать современные реализации языка, хорошо интегрированные в современные операционные системы и компьютеры (например, интерфейс GCC Algol 68), создать документацию, помогающую людям изучать этот увлекательный язык, а также исследовать возможности расширения и развивать язык с той строгостью, уважением и серьёзностью, которых он заслуживает и требует.

В январе 2025 года в gcc-patches была отправлена ​​первая серия патчей, реализующих интерфейс Algol 68 для GCC. С тех пор разработка идёт стабильно, и к настоящему времени большая часть языка реализована. В этом докладе мы расскажем о фронтенде и связанном с ним плане мирового господства, выделим и обсудим некоторые интересные аспекты реализации (Algol 68, как известно, очень сложен в реализации) и обоснуем включение фронтенда в основное дерево GCC.

Мы также кратко рассмотрим некоторые смежные проекты, такие как поддержка Algol 68 в autotools и режим Emacs a68.

Подробности на сайте: algol68-lang.org

PC/286

Oct. 14th, 2025 11:44 am
vak: (Default)
[personal profile] vak
Новая игрушка в моей коллекции.



+2 )
vak: (Знайка)
[personal profile] vak
Механические арифмометры активно использовались в Советском Союзе при расчётах ядерной бомбы в 40-50-x годах. На картинке реконструкция типичной вычислительной комнаты того времени в Арзамасе-16 или Курчатовском институте.

Хотя арифмометр Феликс (клон Однера советского производства) был распространен в таких институтах, как ФИАН, ВНИИЭФ (Арзамас-16) и НИИ-1011 (Челябинск-70), советская научная элита также использовала иностранные машины, захваченные или импортированные после войны, например:
Тип                     Происхождение   Особенности
------------------------------------------------------------------------------
Brunsviga 13Z Германия Вертушка, надежная для длинных делений
Mercedes-Euklid Германия Использовался физиками до Второй мировой войны
Facit TK Швеция Высокая точность, плавный ход кривошипа
Marchant Silent Speed США Автоматическое умножение/деление, используется там, где это возможно
Феликс-С / Феликс-М СССР Простая вертушка, повсеместная и ремонтопригодная
Захваченная немецкая оргтехника по секретным каналам поставок распределялась по ключевым исследовательским объектам, в том числе ядерным.

chatgpt.com/share/68ed6dc8-4084-8001-89a0-848648b6a048

vak: (Default)
[personal profile] vak
Я вчера за один день перепёр компилятор языка Би с Си на Go, и заменил кодогенератор на выдачу IR для LLVM. Теперь можно играться с Би на любой 64-битной машине, будь то Intel/AMD, ARM или RISC-V.

Курсор хороший помощник. Как с ним работать? Весь процесс разработки пошагово задокументирован: Journal.md. Можно учиться на этом примере.

ЭВМ под колпаком

Oct. 11th, 2025 12:32 pm
vak: (Знайка)
[personal profile] vak
Q: Почему вычислительная техника в СССР была под суровым надзором КГБ в 50-е и 60-е?

Это очень хороший и важный вопрос — и ответ здесь связан не столько с техникой, сколько с политическим контекстом эпохи. Вот основные причины, почему вычислительная техника и её разработчики в СССР в 1950-60-е годы находились под строгим надзором КГБ:

1. Стратегическое значение вычислительной техники

Компьютеры в 1950–1960-е годы рассматривались как военно-стратегическая технология, наравне с ядерным оружием и ракетной техникой. Они применялись в:
  • расчётах для атомных и термоядерных бомб (в частности, в Институте Курчатова и Математическом институте АН СССР),
  • баллистике и проектировании ракет (в ОКБ Королёва, Янгеля, Челомея),
  • криптографии, радиолокации, навигации.
Поэтому всё, что касалось ЭВМ, было засекречено, а сотрудники проходили проверку и допуск по линии КГБ.

2. Контроль за утечкой технологий

Советское руководство боялось утечки научно-технических данных на Запад. ЭВМ считались высокотехнологичным и потенциально "шпионским" инструментом. Копирование западных идей (например, архитектуры IBM или Ferranti) велось тайно, и сам факт сравнений с западными образцами был политически чувствителен.

3. Идеологическая подозрительность к "кибернетике"

До середины 1950-х термин кибернетика считался в СССР "буржуазной лженаукой", "орудием империализма" и "методом подчинения человека машине". Только после 1955 года, с приходом более прагматичных руководителей (например, А. А. Ляпунова, С. А. Лебедева, В. М. Глушкова), началось постепенное признание кибернетики как научной дисциплины. Но КГБ ещё долго воспринимал людей, занимавшихся вычислительной техникой, как потенциальных диссидентов или "идеологически неблагонадёжных".

4. Закрытый характер научных учреждений

Большинство вычислительных центров и лабораторий (например, ИТМиВТ, ВЦ АН СССР, Институт кибернетики в Киеве) имели режимные статусы, аналогичные оборонным предприятиям. Доступ туда был ограничен, переписка и поездки за рубеж контролировались. Даже публикация статей могла быть согласована только после разрешения органов госбезопасности.

5. Недоверие к автоматизации управления

В 1960-е, когда Глушков предлагал проект ОГАС (Общегосударственная автоматизированная система управления экономикой), КГБ и часть партийных структур восприняли идею с подозрением:
  • централизованная вычислительная сеть могла дать слишком много информации в одни руки,
  • существовал страх, что "компьютеры заменят политконтроль" и ослабят власть партийных структур.
Фактически, именно вмешательство политических и силовых ведомств похоронило проект ОГАС, который мог бы стать советским аналогом Интернета и ERP-систем.
vak: Generated by Bard: what if Unix was a person (Киборг)
[personal profile] vak
Here are the programming languages I'm proficient in, rated on a scale of 1-10:

10/10 - Expert Level

  • Python - Deep understanding of syntax, libraries, frameworks, best practices
  • JavaScript/TypeScript - Full-stack development, modern frameworks, async programming
  • C++ - Advanced features, templates, STL, memory management, performance optimization

9/10 - Advanced

  • Java - Enterprise development, Spring framework, JVM internals
  • C - System programming, memory management, low-level operations
  • Go - Concurrency, goroutines, modern language features
  • Rust - Memory safety, ownership, systems programming

8/10 - Proficient

  • C# - .NET ecosystem, LINQ, async/await
  • PHP - Web development, frameworks like Laravel
  • Ruby - Rails framework, metaprogramming
  • Swift - iOS/macOS development
  • Kotlin - Android development, JVM interop

7/10 - Competent

  • R - Data analysis, statistics, visualization
  • MATLAB - Numerical computing, signal processing
  • Scala - Functional programming, JVM ecosystem
  • Haskell - Functional programming concepts
  • Clojure - Lisp dialect, functional programming

6/10 - Intermediate

  • Assembly - x86, ARM, understanding of low-level operations
  • Shell/Bash - System administration, automation
  • SQL - Database design, query optimization
  • Lua - Scripting, game development
  • Perl - Text processing, system administration

5/10 - Basic

  • Fortran - Legacy scientific computing
  • COBOL - Legacy business systems
  • Pascal - Educational programming
  • Ada - Safety-critical systems

Specialized Knowledge

  • Domain-specific languages (DSL) - Various embedded and specialized languages
  • Configuration languages - YAML, JSON, TOML, etc.
  • Markup languages - HTML, XML, Markdown, LaTeX
My strongest areas are modern web development, systems programming, and data science. I'm particularly good at helping with complex debugging, architecture decisions, and code optimization across these languages.

Cursor

Oct. 10th, 2025 01:01 pm
vak: (бэсм-6)
[personal profile] vak
Есть такой новомодный искусственно-интеллектуальный IDE, называется Cursor. Решил я его попробовать: загрузил в него проект симулятора dubna и для начала попросил две вещи.

1. Улучшить общую информацию о проекте: смотрите новый README.md.

2. Проанализировать на предмет проблем и улучшений: смотрите TODO.md.

Вроде полезная прилада выходит. Пул-реквесты умеет сам создавать и пропихивать. Только спрашивает разрешение на выполнение команд git и gh.
vak: (Знайка)
[personal profile] vak
Видели мы уже Си++, D, Zig, а вот встречайте новый проект. Язык и компилятор С3: https://c3-lang.org/. Пока не такой развитый как Zig, но тоже представляет интерес. Работает на маке и Линуксе, на Windows я не пробовал.

Компилятор построен на основе LLVM: github.com/c3lang/c3c

Простейший пример:
module hello_world;
import std::io;

fn void main()
{
io::printn("Hello, world!");
}
Основные улучшения C3 по сравнению с обычным C:

Особенность / улучшение Что добавлено в C3 Зачем это нужно / какую проблему решает
Совместимость с ABI C Программы на C3 могут напрямую вызывать функции C и наоборот, без обёрток. Можно использовать существующие C‑библиотеки и постепенно переходить на C3.
Модульная система (namespaces) Код организуется в модули с контролем экспорта и изоляцией имён. В C всё глобально, имена часто конфликтуют, сложное управление зависимостями.
Дженерики (обобщённые модули) Код можно писать для разных типов данных без макросов. В C приходится копировать код или использовать сложные макросы.
Срезы и безопасные массивы Встроенные типы «срезов» (указатель + длина), безопасное индексирование, foreach. В C легко выйти за пределы массива и получить утечку или сбой.
Ошибки и опциональные типы Встроенные типы для ошибок (например, Result, Optional) без накладных расходов. В C обработка ошибок громоздкая и легко забыть проверить код возврата.
defer — автоматическая очистка ресурсов Можно указать действия, выполняемые при выходе из функции. В C приходится вручную дублировать код освобождения или писать goto cleanup.
Контракты (пред- и постусловия) Можно описывать логические условия, проверяемые в отладочном режиме. В C нет встроенных средств проверки инвариантов.
Семантические макросы и код во время компиляции Макросы понимают типы; можно выполнять код на этапе компиляции. В C макросы чисто текстовые, часто приводят к ошибкам.
SIMD и inline‑assembler первого класса Поддержка векторных типов и встроенного ассемблера на уровне языка. В C это делается через нестандартные расширения и платформозависимо.
«Zero‑is‑Initialization» (ZII) Нулевая инициализация создаёт корректное состояние объекта, где это имеет смысл. В C часто встречаются ошибки из‑за неинициализированной памяти.
Расширенная стандартная библиотека Есть готовые динамические массивы, хэш‑карты, строки и другие утилиты. В C стандартная библиотека минимальна, приходится писать всё вручную.
vak: (Знайка)
[personal profile] vak
(отсюда)

В главе 19 руководства к ZX Spectrum 1982 года (PDF) объясняется «BEEP» — команда BASIC, которая заставляла Spectrum издавать звуки. Приводится пример исполнения траурного марша из Первой симфонии австрийского композитора Малера.



Глава заканчивается парой упражнений для улучшения навыков BEEP, второе из которых — «Запрограммируйте компьютер так, чтобы он играл не только траурный марш, но и остальную часть Первой симфонии Малера».



Четыре части симфонии длятся около 50 минут, что делает такую ​​программу нетривиальной. Однако нынешним хакерам семь вёрст не крюк. Для исполнения симфонии потребовалась распределённая система из кучи Спектрумов (Spectra?). Интерфейс Spectranet объединил машины в сеть, управляемую Raspberry Pi. В нужный момент каждый Спектрум делает соответствующий BEEP, исполняя свою музыкальную партию.

The Easy Language

Oct. 8th, 2025 01:00 am
vak: (Знайка)
[personal profile] vak
Помните книжку Этюды для программистов? Там в предпоследней главе было крышесносное задание: построить компилятор для паскалеподобного языка.
Easy Does It
                   or...
A COMPILER FOR AN
ALGEBRAIC LANGUAGE

A compiler is always a large program. To write one from scratch, even in a pedagogical environment, is a major undertaking. Although Easy is designed to reduce the pain while providing as much enlightenment as possible, this still is the hardest problem in the book. Do not tackle it unless you (and some helpful friends) have plenty of time and energy.

THE EASY LANGUAGE

Easy is a general-purpose, procedural, algebraic programming language. Its roots lie in ALGOL, ALGOL 68, and PASCAL. Like them, it is designed to be compiled, loaded, and executed on a reasonably conventional computer (the EC-1 described in Chapter 25 is a good example). The syntax is described by a context-free grammar suitable for parsing by LR(1) techniques. The semantics are similar to the languages described above, and we will let an informal description suffice, trusting to the reader’s skill to fill any gaps. In the text below, logically connected portions of the grammar are described with the associated semantics.
Так вот, один гениальный человек ([personal profile] begoon) такой компилятор зафигачил. Исходники проекта: github.com/begoon/easy

Пример кода на языке Easy, игра Жизнь: life.easy

Компилируем, запускаем:
git clone https://github.com/begoon/easy.git
cd easy
node easyc.ts life.easy
cc life.c -o life -I.
./life
Получаем:
** [ EASY LIFE ] ***************************************************************** 
* xx *
* xx xx *
* x x xxx *
* xx x xxx *
* x x x xx *
* xx x x x xx *
* xxx x x *
* x xxx xxx *
* xxxxx xx xx *
* xx x x x *
* x x xx *
* x xx *
* xxx *
* x *
* x xx x *
* xxx xxx x x *
* x x x *
* x x xx *
* x x *
* *
* *
* *
* xx *
* xx xx *
* xx *
**********************************************************************************
GENERATION: 104

coteditor

Oct. 7th, 2025 10:34 pm
vak: (Знайка)
[personal profile] vak
Хороший текстовый редактор должен иметь отношение к котам. 😀 Вызывается командой "cot". Но только на маке. Устанавливается командой "brew install coteditor". Из удобств: легко настраивать расцветку синтаксиса для ранообразных файлов и языков программирования.
Попросил Грока, он мне быстренько наваял описание синтаксиса Алгола 60 для которедактора: Algol 60.yml.

vak: (Путиномедвед)
[personal profile] vak
Герман Обухов, "Большая ложь маленького человечка: что скрывает Путин"

Официальные источники гласят: Владимир Владимирович Путин родился 7 октября 1952 года в Ленинграде в семье рабочих. Отец — Владимир Спиридонович Путин, родился в 1911 году в деревне Поминово Тверской губернии. Мать — Мария Ивановна Путина (урождённая Шеломова), родилась также в 1911 году в деревне Заречье Тверской губернии, где и познакомилась со своим будущим мужем.

Это чистокровный фейк. На самом деле Володя Путин родился в больнице небольшого городка Очёр, Пермского края. Его настоящая мать жила до недавнего времени в грузинском селе Метехи, её зовут Вера Николаевна Путина - Осепашвили. Она родилась в 1926 году в селе Терехино, рядом с маленьким городом Очёр. В техникуме Очёра она познакомилась с человеком, которого звали Платон Привалов. Позже, будучи беременной, она случайно узнала, что он женат и ей пришлось вернуться к своим родителям в Терехино. Вскоре родился наш Вова, шел 1950 год, а не 1952.

дальше )

Google Pixel Tablet

Oct. 6th, 2025 11:02 pm
vak: (Линукс)
[personal profile] vak
Лайфхак:Получаем симпатичный и удобный в работе компьютер для программиста. Настраиваем вход через SSH и можем пользоваться удалённо. Механическая клавиатура в ретро стиле IBM PC AT добавляет колорита. Через Alt-Tab переключаемся на обычные андроидные приложения.



Подробности конфигурации:Меряем скорость:
$ dhrystone

Dhrystone Benchmark, Version 2.1 (Language: C)
...
Nanoseconds for one run through Dhrystone: 21.1    
            Million Dhrystones per Second: 47.394  
                                    DMIPS: 26974.1
Это на 40% быстрее Raspberry Pi 5. Или в 3.5 раза быстрее Raspberry Pi 4.

Сравнительная таблица: vak.dreamwidth.org/1159708.html
vak: (Українець)
[personal profile] vak
Как был сделан козак в формате SVG? Расскажу по пунктам. Этим методом можно векторизовать любое (почти) растровое изображение. Из инструментов понадобятся magick, potrace и Python с пакетом svgutils.

1. Берем растровую картинку, которую будем векторизовать. В моём случае это kozak.png. Желательно чтобы картинка была в мультяшном стиле, то есть нарисована небольшим количеством цветов. Такой стиль ещё называют комиксным, или манга.

2. Определяем количество различных цветов в картинке. У козака четыре цвета: чёрный, белый, красный (шаровары) и бежевый (лицо, руки).

3. Упрощаем картинку, уменьшая количество цветов до 4 и убирая шум отдельных пикселей. Смотрим, какие цвета получились.
$ magick kozak.png -despeckle -colors 4 simple.png
$ magick simple.png -format %c histogram:info: | sort -n -r
1178809: (254,254,254) #FEFEFE srgb(254,254,254)
179431: (6,5,5) #060505 srgb(6,5,5)
117463: (214,91,69) #D65B45 srgb(214,91,69)
97161: (224,192,156) #E0C09C srgb(224,192,156)
4. Зная точные значения цветов, разделяем цветную картинку на три чёрно-белые: каждый цвет отдельно. Фоновым делаем белый цвет.
white="#FEFEFE"
black="#060505"
red="#D65B45"
beige="#E0C09C"
magick simple.png -fill black -opaque $black \
-fill white -opaque $white \
-fill white -opaque $beige \
-fill white -opaque $red black-layer.pbm
magick simple.png -fill black -opaque $red \
-fill white -opaque $white \
-fill white -opaque $black \
-fill white -opaque $beige red-layer.pbm
magick simple.png -fill black -opaque $beige \
-fill white -opaque $white \
-fill white -opaque $black \
-fill white -opaque $red beige-layer.pbm
5. Векторизуем каждый из слоёв в отдельный SVG file, восстанавливая цвета близко к исходным.
potrace black-layer.pbm -s --turdsize 15                   -o black-layer.svg
potrace beige-layer.pbm -s --turdsize 15 --color "#EFAC78" -o beige-layer.svg
potrace red-layer.pbm -s --turdsize 15 --color "#C21919" -o red-layer.svg
6. Объединяем слои в одну картинку. Задействуем Питон и пакет svgutils.
from svgutils.compose import *
from svgutils.transform import fromfile

width, height = fromfile('black-layer.svg').get_size()
Figure(width, height, # Canvas size
SVG('beige-layer.svg'), # Bottom layer
SVG('red-layer.svg'), # Middle layer
SVG('black-layer.svg'), # Top layer
).save("kozak.svg")
Результат можно видеть здесь: kozak.svg. Все скрипты собраны в кучу на Гитхабе: sergev/vak-opensource/tree/master/utilities/vectorize.
vak: (Знайка)
[personal profile] vak
Какой нынче имеется простой способ писать документацию? Чтобы не заморачиваться, и чтобы сразу и HTML вариант и PDF вариант образовывались.

Есть такой метод! Показываю. Ключевые моменты: Pandoc и Tectonic.

Документы пишем в формате Markdown. Выглядит как простой текст, без мудрёных команд. Можно вставлять рисунки, делать таблицы, использовать математические формулы. Вот пример документа:
# Задача

В школьной столовой Петя заметил, что количество котлет на тарелке уменьшается по формуле
$$
K(t) = K_0 - t,
$$
где $K_0$ — начальное число котлет, а $t$ — время в минутах, прошедшее с момента, как Петя сел за стол.

Если у Пети было 5 котлет, то через сколько минут Петя обратится к маме со словами:
*«Мам, а добавки можно?»*

# Таблица умножения

| | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 2 | 2 | 4 | 6 | 8 | 10| 12| 14| 16| 18|
| 3 | 3 | 6 | 9 | 12| 15| 18| 21| 24| 27|
| 4 | 4 | 8 | 12| 16| 20| 24| 28| 32| 36|
| 5 | 5 | 10| 15| 20| 25| 30| 35| 40| 45|
| 6 | 6 | 12| 18| 24| 30| 36| 42| 48| 54|
| 7 | 7 | 14| 21| 28| 35| 42| 49| 56| 63|
| 8 | 8 | 16| 24| 32| 40| 48| 56| 64| 72|
| 9 | 9 | 18| 27| 36| 45| 54| 63| 72| 81|

![](kozak.svg){width=100}
Преобразуем это дело в HTML:
pandoc example.md -o example.html --standalone --mathjax
Получаем:


Аналогичным образом соорудим PDF:
pandoc example.md -o example.pdf --pdf-engine=tectonic --template=template.tex
Сравниваем:


Стиль PDF-документа можно задавать, меняя template.tex. Для HTML тоже есть аналогичный флаг --css=style.css.

Векторный козак

Oct. 3rd, 2025 10:46 pm
vak: (Українець)
[personal profile] vak
Сварганил козака в формате SVG: пользуйтесь кому надо.

Page generated Oct. 17th, 2025 08:06 pm
Powered by Dreamwidth Studios