Перейти к содержимому

LeshaInc

Пользователи
  • Публикации

    777
  • Зарегистрирован

  • Посещение

  • Победитель дней

    68

Все публикации пользователя LeshaInc

  1. А если Factorio? Там и писать моды на Lua можно.
  2. На этом. Язык компилируется в Lua (поддерживаются версии 5.1, 5.2, 5.3 и даже возможно JIT). Предупреждаю — этот язык является диалектом Lisp. Если ваш дед не оставил в кладовке пачку скобок, возможно у вас не получится на нем писать. Из фич: pattern matching, прикольные циклы, фреймворк для тестов, красивые сообщения об ошибках. Hello world на Urn: (print! "Hello, world!") Работает также арифметика в стиле лиспа: (+ 2 (* 4 5)) Можно создавать функции: (defun times-two (x) (* x 2)) (print! (times-two 2)) (print! (times-two 3)) и макросы: (defmacro show (x) (print! "Compile-time" (pretty x)) `(progn (print! "Run-time" ,(pretty x)) (print! "Value" ,x))) ------------------------------------ > (show (+ 2 3)) Compile-time (+ 2 3) Run-time (+ 2 3) Value 5 Можно использовать библиотеки из Lua: (define bit32 :hidden (require "bit32")) (define & (.> bit32 :band)) (define ~ (.> bit32 :bnot)) и таблицы из Lua: > { :foo 1 . :bar 2 } out = {"bar" 2 "foo" 1} Компилятор языка написан на Lua UPD: компилятор написан на Urn и скомпилирован в Lua; предлагаю энтузиастам поиграться с ним в OpenComputers и сделать отчет. А я пойду дальше употреблять вещества.
  3. https://www.youtube.com/watch?v=5GQur67iKCg http://www.wizards-of-lua.net/ Работает только на Minecraft 1.12.2
  4. Большие растровые шрифты хорошо подходят для рекламных вывесок — бегающего текста. До появление этой библиотеки не было удобного способа использовать их в OpenComputers. Но теперь есть. pastebin get Mz7Ps5jQ /usr/lib/ocbf.lua Библиотека максимально прозрачна и сама по себе отрисовкой не занимается. Для отрисовки удобно использовать библиотеку Braille Bicycle от товарища @Totoro. Все шрифты хранятся по пути /usr/share/fonts в таком виде: /usr/share/fonts ├── IBM Plex Serif │ ├── Bold Italic.ocbf │ ├── Bold.ocbf │ ├── Italic.ocbf │ └── Regular.ocbf ├── Prosto One │ └── Regular.ocbf └── Roboto ├── Bold Italic.ocbf ├── Bold.ocbf ├── Italic.ocbf └── Regular.ocbf Для конвертирования новых шрифтов можно воспользоваться утилитой на языке Python: ocbf.py. Для ее работы необходимо установить библиотеки PIL, bitarray и tqdm (Python3). OCBF содержит в себе всего две функции: ocbf.load(family: string, style: string) — находит шрифт по указанному семейству и стилем, парсит его и возвращает объект шрифта. Если первый аргумент — это путь, то поиск производится не будет; вместо этого шрифт будет загружен из указанного файла (обязательно с расширением ocbf) ocbf.search(family: string, style: string) — находит шрифт и возвращает путь до него. Все функции ищут шрифт в директориях, указанных в переменной ocbf.path = "/usr/share/fonts:/home/.fonts:.". Из кода видно, что поиск осуществлятся в /usr/share/fonts, /home/.fonts и в текущей директории. Объект шрифта предоставляет следующие методы: font:drawChar(set: function, size: number, char: string, x: number, y: number) — отрисовывает один символ размером size используя шрифт по координатам (x; y). Функция set принимает три аргумента: координаты точки и значение 1 — точка заполнена и 0 — точка пуста. font:draw(set: function, size: number, str: string, x: number, y: number) — работает так же, как и font:drawChar, но отрисовывает сразу все символы. font:width(size: number, str: string — возвращает ширину строки с заданным размерам в точках. Помимо вышеперечисленных методов также есть свойства font.family, font.style и font.sizes. Все функции принимают аргумент size. Это высота шрифта в точках. Поскольку используя растровые шрифты невозможно обеспечить поддержку сразу всех размеров, size для разных шрифтов имеет разные допустимые значения. Для каждого размера в шрифте дублируются символы. Предоставляю также набор шрифтов Roboto — Regular Roboto — Bold Roboto — Italic Roboto — Bold Italic IBM Plex Serif — Regular IBM Plex Serif — Bold IBM Plex Serif — Italic IBM Plex Serif — Bold Italic Prosto One — Regular Все шрифты кроме Prosto One представлены в размерах 16 и 32 точек, Prosto One — 32 и 64. Имеется поддержка латиницы и кириллицы. Также стоит отметить, что для работы библиотеки необходим Lua 5.3 — используется string.unpack, побитовые операции, UTF-8. Для отрисовки текста на изображении в начале поста использовался следующий код: local ocbf = require("ocbf") local braille = require("braille") local matrix = braille.matrix(320, 200) local font1 = ocbf.load("Prosto One", "Regular") local font2 = ocbf.load("Roboto", "Bold") local font3 = ocbf.load("Roboto", "Regular") local function set(x, y, v) braille.set(matrix, x, y, v) end font1:draw(set, 64, "OCBF", 4, 1) font2:draw(set, 32, "Растровые шрифты", 4, 65) font2:draw(set, 32, "для OpenComputers", 4, 98) font3:draw(set, 32, "от LeshaInc", 4, 168) braille.render(matrix, 1, 1)
  5. NaN не равен, не больше и не меньше любого числа.
  6. А теперь сделай JIT-компилятор.
  7. LeshaInc

    OpenComputers 1.7.0

    > хотел немного славы
  8. Строки иммутабельны в луа, при изменении твоего массива уйдет уйма времени на копирование строк, сборщик мусора будет орать как лютый негр. Я тестил. Пиковое потребление памяти при использовании строк было в несколько раз больше, чем при использовании массива. К тому же, в луа числа 64-битные, поэтому для эффективного хранения нужно упаковывать байты по числам. Небольшой оверхед памяти при таком подходе будет куда менее критичным, чем иммутабельность строк. Что за костыльная библиотека классов, которая не используя метатаблицы, создает копии всего класса на каждый инстанс пожирая память?
  9. @@RccHD, а теперь делай сигналы, SIGTERM, SIGKILL, SIGINT и другие.
  10. @@RccHD, делай полноценную многозадачность с деревом процессов и сигналами.
  11. При попытке предпросмотра
  12. @@RccHD, делай конфиг на Lua и переключение кнопками.
  13. event.pull(TIMEOUT, "modem_message", nil, nil, PORT, nil, "nanomachines")
  14. Почему бы не заменять вызовы require(file) на (function() -- file contents end)() таким образом получив возможность запускать программу без libci, захламляющего глобальное пространство имен своими функциями?
  15. fileindex = {"none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none","none"}
×
×
  • Создать...