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

LeshaInc

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

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

  • Посещение

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

    68

Сообщения, опубликованные пользователем LeshaInc


  1. На этом.

    Язык компилируется в 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 и сделать отчет.

    А я пойду дальше употреблять вещества.

    • Нравится 8

  2. Строки иммутабельны в луа, при изменении твоего массива уйдет уйма времени на копирование строк, сборщик мусора будет орать как лютый негр. Я тестил.

     

    Пиковое потребление памяти при использовании строк было в несколько раз больше, чем при использовании массива.

    К тому же, в луа числа 64-битные, поэтому для эффективного хранения нужно упаковывать байты по числам. Небольшой оверхед памяти при таком подходе будет куда менее критичным, чем иммутабельность строк.

     

    Что за костыльная библиотека классов, которая не используя метатаблицы, создает копии всего класса на каждый инстанс пожирая память?

    • Нравится 5

  3. Почему бы не заменять вызовы require(file) на

    (function()
      -- file contents
    end)()
    

    таким образом получив возможность запускать программу без libci, захламляющего глобальное пространство имен своими функциями?


  4.  

    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"}
    
×
×
  • Создать...