LINUX.ORG.RU

Lua Jit 2.0


1

5

Вышел компилятор для Lua — LuaJit 2.0.

Основные изменения для релиза были в исправлении багов.

Изменения и улучшения по сравнению с первой версией:

  • Возможность использования конверсии исключений C++ для всех платформ с помощью функций-обёрток.
  • Обёртки для libm функций.
  • Сборка static и shared библиотек на POSIX.
  • Компилирование рекурсивного кода.
  • Портирование интепретатора и JIT компилятора на x86-64.
  • Разметка текущего трейса, даже если компилятор не доступен.
  • Оптимизация для and/or операторов.

И много других здесь.

Также доступны бенчмарки.

>>> Подробности

anonymous

Проверено: catap ()
Последнее исправление: Binary (всего исправлений: 1)
Ответ на: комментарий от AVL2

Нормальным программистам более чем достаточно уже имеющихся в языке возможностей. Нормальные программисты всегда думают о том, как их код будут потом поддерживать. Нормальным программистам не наплевать на читаемость кода и на его простоту. Поэтому ни один нормальный программист никогда не воспользуется метапрограммированием.

anonymous
()
Ответ на: комментарий от anonymous

ой блджад, теперь еще блоки полезли, на раби тут без них правильно ну никак не сделать... раби такой раби во всей красе

anonymous
()
Ответ на: комментарий от anonymous

Каких конструкций в Питоне тебе не хватает, ламер?

Можно я, можно я отвечу? Мне не хватает pattern matching. Правда, вводить его самостоятельно - это не просто расширить синтаксис.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Мне не хватает pattern matching.

На кой хер? Прекрасно без него жили десятилетиями. Его нет ни в одном приличном мейнстримном языке. На кой тебе еще один способ прострелить себе ногу?

anonymous
()
Ответ на: комментарий от anonymous

Хороший, годный тред. Казалось бы, при чем тут luajit?

anonymous
()
Ответ на: комментарий от anonymous

На кой хер?

Потому что это удобно.

Прекрасно без него жили десятилетиями.

Люди тысячелетиями жили без канализации.

На кой тебе еще один способ прострелить себе ногу?

Я умею не стрелять себе в ноги.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Я не троллю питонщиков, а твое упоминание ничего не умеющего Lua _и_ мощного Lisp (CL?) как «нормальных языков» - это больше всего похоже на троллинг.

У тебя свои понятия о троллинге. Я имел ввиду, что говоря о «скудных возможностях», надо иметь ввиду предназначение языка и возможности расширения. Lua встраиваемый язык, и легко цепляет C-либы, например. Lisp - это семейство языков, например scheme, picolisp, newlisp. Common lisp язык не для встраивания в приложение.

И как, есть примеры расширения?

Примеры OOP на Lua http://lua-users.org/wiki/ObjectOrientedProgramming Кстати в Lua нормальные лямбды + оптимизация хвостовой рекурсии. Неплохо для «скудного языка» ?

Python, кстати, тоже можно до некоторой степени расширить, не меняя «ядро языка» (за счет перегрузки токенизатора).

Я не говорил, что питон нельзя расширять, до некоторой степени можно расширять любой язык. Но в этом он уступает луа, и тем более лиспу.

Ну, это и в Питоне можно - ботай метаклассы и создавай.

Похоже на метатаблицы в Lua, но больше ограничений.

А Питон, очевидно, для тех редких случаев, когда не нужно расширять ядро языка.

Для встраиваемого языка возможность расширения один из основных критериев.

anonymous
()
Ответ на: комментарий от tailgunner

Потому что это удобно.

Это адски неудобно для тех, кто потом будет читать твой код. if или switch поймет кто угодно. Хитровывернутый pattern matching и ты сам через неделю не поймешь.

anonymous
()
Ответ на: комментарий от anonymous

Кстати в Lua нормальные лямбды + оптимизация хвостовой рекурсии. Неплохо для «скудного языка» ?

Это как раз критерий маргинального говноязыка. В приличных языках этого говна нет.

anonymous
()
Ответ на: комментарий от mva

А если не ориентироваться на всякие левые бенчмарки, а сравнивать производительность на реальных задачах, то моя интерпретация генерации $6$ (с использованием sha512) shadow-паролей (aka sha512_crypt), написанная на Lua (даже без JIT) по руквоводству Ульриха Дреппера работает в несколько раз быстрее той, что написана им самим на Сях и приведена в конце того руковоства.

От така фигня, малята.

Код и методику тестирования в студию. Ошибка либо там, либо там.

Deleted
()
Ответ на: комментарий от anonymous

Lisp - это семейство языков, например scheme, picolisp, newlisp

И какой ты имел в виду?

Ну, это и в Питоне можно - ботай метаклассы и создавай.

Похоже на метатаблицы в Lua, но больше ограничений.

Ты хотел «новую объектную модель»? Ты можешь это сделать. И об ограничениях было бы интересно узнать.

Примеры OOP на Lua http://lua-users.org/wiki/ObjectOrientedProgramming

Ну, берем наугад:

> String = {}
> mt = {}
>
> function String:new(s)
>>   return setmetatable({ value = s or '' }, mt)
>> end
>
> function String:print()
>>   print(self.value)
>> end
>
> mt.__add = function (a,b) return String:new(a.value..b.value) end
> mt.__mul = function (a,b) return String:new(string.rep(a.value, b)) end
> mt.__index = String -- redirect queries to the String table

(пожимая плечами) если это об определении своих операций, то вот:

class A:
  def __add__(self, a):
    return self.val + a.val
  def __mul__(self, a):
    return self.val * a
  def __init__(self, s): self.val = s

v1, v2 = A("xx"), A("yy")

print v1 + v2
print v1*3

в этом он уступает луа

Пример расширения, которое сделать невозможно - в студию.

Для встраиваемого языка возможность расширения один из основных критериев.

Так Lua решил ограничиться нишей встроенного языка? И всё же примеры «расширений» - в студию. Потому что после «расширений, не меняющих ядро языка» хочется знать, о чем же идет речь - о расширении синтаксиса, новой объектной модели или легком вызове Си-процедур.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

if или switch поймет кто угодно.

В цепочке if, реализующих pattern matching, может быть какой угодно код. Ты только что сказал «кто угодно поймет что угодно», что очевидно неверно. Специальная конструкция pattern matching'а _упростит_ код.

Хитровывернутый pattern matching и ты сам через неделю не поймешь.

Это проблема любого хитровывернутго кода.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Где гарантия того, что после добавления в pattern-matching, тебе на всю жизнь всего хватит ? Скорее всего ты всю жизнь будешь выбирать язык программирования, который тебя абсолютно устроит.

anonymous
()
Ответ на: комментарий от anonymous

Где гарантия того, что после добавления в pattern-matching, тебе на всю жизнь всего хватит ?

WAT

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

Такого языка нет, но это не мешает мне пользоваться существующими. Я просто осознаю их ограничения.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

что есть в приличных языках

if, for, while, do, switch. Есть функции и процедуры, иногда классы и методы.

и их список.

Pascal, Oberon, Modula-*, Ada, C, C++, Java.

anonymous
()
Ответ на: комментарий от anonymous

Не нужно

Нормальные программисты не нужны.
Нужны мета программисты.

Int0l ★★
()
Ответ на: комментарий от anonymous

Тред полон анонимных дебилов

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

anonymous
()
Ответ на: комментарий от anonymous

if, for, while, do, switch

Как там живётся в шестидесятых?

anonymous
()
Ответ на: комментарий от anonymous

А вы верите в то, что хоть кто-то допилит JIT-копиляцию для Python в ближайшие 10 лет? Поверьте, зря надеетесь. Не на тот ЯП ставку делаете. Учите Lua, или JavaScript - за ними будущее.

lucentcode ★★★★★
()
Ответ на: комментарий от anonymous

Python имеет гораздо более развитой синтаксис, гораздо больше конструкций и т.п. Простота написания кода != простоте устройства интерпретатора(чему меньше у ЯП конструкций и различного синтаксического сахара - тем проще писать интерпритатор и компилятор для данного ЯП). Lua - это вообще гениально простой ЯП, у него такой маленький интерпретатор, и весьма небольшое количество синтаксических конструкций.

lucentcode ★★★★★
()
Ответ на: комментарий от tailgunner

И какой ты имел в виду?

Я имел ввиду scheme в первую очередь (bigloo, gambit, guile), во вторую picolisp. У этих реализаций совершенно разная семантика (lexical vs dynamic binding) и «вес», Picolisp сопоставим с Lua.

Ты хотел «новую объектную модель»? Ты можешь это сделать. И об ограничениях было бы интересно узнать.

Где я говорил, что в питоне этого нельзя ? Ты назвал Lua «говном», если помнишь, я ответил, что Lua для встраивания, и умеет расширяться и отлично взаимодействует с C. Ты кстати пропустил момент про лямбды и хвостовую рекурсию, где питон «сосет».

(пожимая плечами) если это об определении своих операций, то вот:

Это не столько определение плюса и минуса, сколько вот это : mt.__index = String — redirect queries to the String table Короче, как переопределить "." и расширить семантику в питоне ? http://lua-users.org/wiki/MetamethodsTutorial

Так Lua решил ограничиться нишей встроенного языка? И всё же примеры «расширений» - в студию. Потому что после «расширений, не меняющих ядро языка» хочется знать, о чем же идет речь - о расширении синтаксиса, новой объектной модели или легком вызове Си-процедур.

Речь шла в первую очередь о расширении семантики, для этого луа и предназначен изначально. Это отсюда http://en.wikipedia.org/wiki/Lua_(programming_language) «is a lightweight multi-paradigm programming language designed as a scripting language with „extensible semantics“ as a primary goal.»

anonymous
()
Ответ на: комментарий от anonymous

Ты кстати пропустил момент про лямбды и хвостовую рекурсию, где питон «сосет».

Да надоело и про лямбды, и про TRO (TCO, кстати). Лямбды есть, часто их достаточно, а когда недостаточно - сделай локальную функцию; TCO нет, потому что Python - не ФП-язык и не притворяется им.

Ты хотел «новую объектную модель»? Ты можешь это сделать. И об ограничениях было бы интересно узнать.

Где я говорил, что в питоне этого нельзя ?

А где я сказал, что ты это говорил?

Короче, как переопределить "."

Точку - никак. Обращение к атрибутам - __getattr_ и __getattribute__.

http://lua-users.org/wiki/MetamethodsTutorial

«Lua has a powerful extension mechanism which allows you to overload certain operations on Lua objects». И что? Certain operations я и в Питоне могу перегрузить. Для Lua там приводится тот же пример со строкой.

Это отсюда http://en.wikipedia.org/wiki/Lua_(programming_language) «is a lightweight multi-paradigm programming language designed as a scripting language with „extensible semantics“ as a primary goal.»

Это маркетинг. Чем тебе процедуры, функции и классы не extensible semantics? Есть практически полезные примеры?

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

В python есть TCO http://habrahabr.ru/post/158385/

В Питоне можно вручную оптимизировать TCO, да. Но TCO на декораторах обычно имеет какое-нибудь неочевидное ограничение.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Да надоело и про лямбды, и про TRO (TCO, кстати). Лямбды есть, часто их достаточно, а когда недостаточно - сделай локальную функцию; TCO нет, потому что Python - не ФП-язык и не притворяется им.

Да нет проблем, я не фанат ФП, но вопрос для меня в том, где удобен/полезен Python ? Чем тогда Lua хуже, особенно для встраивания ? Получается, что Lua меньше весит, быстрее (особенно с JIT) и по возможностям частично превосходит Питон.

Это маркетинг. Чем тебе процедуры, функции и классы не extensible semantics? Есть практически полезные примеры?

Ну я уже говорил, что в луа нет встроенного ООП, но он реализуется с использованием метатаблиц и метаметодов. Плюс к этому если работать с C-данными (массивами или структурами) можно реализовать удобный доступ к данным. Кстати Luajit тоже неплохой пример, например функция : function f(s) return s.x + s.y end может работать как с C-структурой, скажем : typedef struct { int x, y; } P; так и с таблицами луа, в которых данные хранятся совершенно в другом формате.

anonymous
()

что за хрень

print(a==1)

false

print(a+0==1)

true

fidoman
()
Ответ на: комментарий от quantum-troll

А TCO средствами языка можно? без перекомпиляции Ruby YARV?

anonymous
()
Ответ на: комментарий от anonymous

где удобен/полезен Python ?

Везде, где не нужно выжимать процессор до последнего цикла (хотя математика на нем тоже вполне приличная). Единственная насквозь опенсорсная высокоуровневая платформа разработки приложений в Linux.

Чем тогда Lua хуже, особенно для встраивания ?

Для встраивания - наверное, лучше (хотя зависит от опыта пользователя).

Получается, что Lua меньше весит, быстрее (особенно с JIT) и по возможностям частично превосходит Питон.

Если под «частично превосходит» имеется в виду малый размер и JIT-компилятор, то да. В остальном, как средство разработки программ, Lua... ну ты понел.

Это маркетинг. Чем тебе процедуры, функции и классы не extensible semantics? Есть практически полезные примеры?

Ну я уже говорил, что в луа нет встроенного ООП, но он реализуется с использованием метатаблиц и метаметодов.

Я уже понял, что на метатаблицах можно сделать ООП (вообще, такое впечатление, что протоЛуа был ООП-языком, но потом создатели решили соригинальничать и убрали классы). И что, ООП сделали и пользуются?

Плюс к этому если работать с C-данными (массивами или структурами) можно реализовать удобный доступ к данным.

Вот, практический пример (наверное). Но в Python тоже есть удобный доступ к Си-данным, и тоже за счет средств метапрограммирования.

tailgunner ★★★★★
()
Ответ на: комментарий от alienclaster

тем что NaN некогда не должен быть равен не себе не любому другому значению. Может увас какаято другая логика с массивами?

>>> a=float('NaN')
>>> b=float('NaN')
>>> a==b
False
>>> [a]==[b]
False

st4l1k ★★
()
Ответ на: комментарий от st4l1k

тем что NaN некогда не должен быть равен не себе не любому другому значению

А NaN и не равен, на равенство проверяются массивы. [a] и [a] - массивы из одинаковых элементов, эквивалентны. [a] и [ b] - два различных массива, проверяем равенство по значению - а там NaN, значит не равны. Но:

>>> a, b, c, d = 1, 2, 3, 4
>>> a2 = 1
>>> a == a2
True
>>> [a, b, c, d] == [a, b, c, d]
True
>>> [a, b, c, d] == [a2, b, c, d]
True
alienclaster ★★★
()
Ответ на: комментарий от tailgunner

Если под «частично превосходит» имеется в виду малый размер и JIT-компилятор, то да. В остальном, как средство разработки программ, Lua... ну ты понел.

Нет не понял. У тебя Питон основной язык разработки ? На динамическом языке, без статической типизации, хотя бы частичной, тяжело добиться скорости и надежности. Luajit требует для C-данных объявлений типов. Философия таких языков как Луа - встраивание в программы, которые написаны на языке со статической типизацией, например - C или C++ и использование библиотек этого языка. Я думал, что ты используешь Питон в этом качестве.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.