2025-04-04

vak: (Default)
Пару лет назад один крутой чувак сделал компилятор языка Би для архитектуры x86_64 под Линуксом. Генерится ассемблерный код для GNU ассемблера. Однако в компиляторе обнаружились ошибки. Я взялся довести его до ума, пофиксил кое-что. Неожиданно наткнулся на серьёзную проблему с массивами. Товарищ реализовал массивы как в Си. Оказалось, что так оно не работает. Представление массивов в Би отличается. В частности, Би разрешает присваивание значения переменной массива. В Си такое невозможно: имя массива является константой.

Я спросил у Грока, и он поначалу не врубался. Но когда я показал ему, что Би разрешает код наподобие "auto a[3]; a = 123;", он понял и выдал подробное объяснение. Приведу его целиком.
vak: (Default)
Вдогонку про представление массивов в языке Би. Поддерживались только одномерные массивы, и назывались они векторами. Из описания языка Би:

7.2 Vector Definitions

An external vector definition has one of the following forms:

name [ ] ;
name [ constant ] ;
name [ ] ival , ival . . . ;
name [ constant ] ival , ival . . . ;

The name is initialized with the lvalue of the base of an external vector. If the vector size is missing, zero is assumed. In either case, the vector is initialized with the list of ivals (See 7.1). The actual size of the vector is the maximum of constant+1 and the number of initial values. Any vector elements which are not explicitly initialized have undefined values.

Туманная фраза "The name is initialized with the lvalue of the base of an external vector" означает, что переменная name изначально содержит адрес начала массива.

vak: (Default)
Новый гаджет в моей коллекции: карманный компьютер ProCalc. Внутри процессор RP2040, 8 мегабайт дополнительной памяти, дисплей, клавиатура, карточка SD, спикеры, аудио выход, аккумуляторы 18650. Размером примерно с калькулятор TI 84. Предлагается за $75 с сайта производителя в Гонконге.



Девайс идёт с предустановленным бейсиком.



Исходники на Гитхабе: clockworkpi/PicoCalc

Имеется несколько альтернативных прошивок на выбор:
  • PicoMite - интерпретатор Бейсика на основе MMBasic
  • FUZIX - юниксоподобная операционка
  • NES emulator - эмулятор классической игровой приставки
  • uLisp - интерпретатор языка Лисп
  • MP3Player - аудиоплеер на базе YAHAL
Прикольно будет портонуть сюда FP/M. Можно было бы даже и симулятор PDP-11 с юниксом 2.11 BSD. А ещё в текстовые игрушки неплохо играть.