LINUX.ORG.RU

Вышла Lua 5.2

 ,


0

0

Завершена работа над новой версией популярного встраиваемого языка програмирования Lua. Выпущены руководство (reference manual) с описанием новой версии языка (5.2), набор тестов для реализаций Lua версии 5.2 и образцовый (референсный) интерпретатор версии 5.2.0.

Вот основные изменения в новой версии языка:

  • Можно вызывать yield из защищенного вызова (pcall) и метаметодов.
  • Новый метод работы с окружениями и глобальными переменными. В частности, функции getfenv/setfenv больше не работают.
  • Появилось стандартное API для битовых операций.
  • Изменение в C API: появились т.н. «облегченные нативные функции» («light C functions»), представляющие собой простые указатели на функции. В отличие от полноценных замыканий, они не имеют окружения, что позволяет экономить системные ресурсы.
  • В языке появился оператор goto.
  • Изменение в сборке мусора: таблицы со слабыми ссылками на ключи и с сильными ссылками на значения теперь будут работать как таблицы эфемеронов.
  • Теперь у таблиц могут быть финализаторы.
  • Помимо уже существующего инкрементного сборщика мусора, интерпретатор теперь имеет экстренный сборщик мусора, который освобождает память, если не удается выделить новую. Кроме того, появился экспериментальный сборщик мусора с учетом поколений (generational GC), но он по умолчанию отключен.

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

Нововведения в языке привели к несовместимости Lua 5.2 и 5.1. Возникшие проблемы совместимости задокументированы в руководстве. Впрочем, теоретически существует возможность написать программу так, чтобы она исполнялась и на Lua 5.1, и на 5.2. Lua не стремится сохранять обратную совместимость: например, версия 5.1 не была совместима с 5.0. Разработчики отмечают, что совершенно необязательно переводить существующие приложения со скриптингом на Lua на новую версию языка.

С момента выпуска Lua 5.1 прошло около четырех лет. Первая альфа-версия 5.2 вышла примерно год назад. Образцовый интерпретатор распространяется по лицензии MIT.

>>> Сайт Lua

★★★★★

Проверено: maxcom ()
Последнее исправление: proud_anon (всего исправлений: 4)

Lua - полезный язык. Делаю движок для платформера, думаю прикрутить консоль на lua.

CYB3R ★★★★★
()

Нововведения в языке привели к несовместимости Lua 5.2 и 5.1

Ну и меняли бы тогда первую цифру. Фокс вон раз в месяц инкрементирует.

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

вроде не пишут 'вышло Моно 4.2, вышло руби 5.0'

Mono — не язык программирования. Руби == рубин, он.

Но, например, Ада — она. «Я программирую на Аде».

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

Только хотел спросить, не для системного ли программирования они так оптимизируют и всякие goto делают, и тут на тебе.

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

Языка вся вышла?

«Вышла новая газета <<Гудок>>». Ты из этого ты получаешь «Вышла новая <<Гудок>>»?

Ты на каком языке общаешься?

Lua имеет явно указанный женский род. Без классификатора «язык» в русском языке Lua будет женского рода.

«Немцами был потопле_н_ корабль <<Королева Мэри>>», но «немцами была потопле_на_ <<Королева Мэри>>».

В _нашем_ русском оно так.

KRoN73 ★★★★★
()

образцовый (референсный)

Эталонный!

r ★★★★★
()

Кто нибудь использовал Lua в вебе ? Правда ли что он очень удобен для веб проектов и шустрый?

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

Тогда надо «взошла» :)

Вышла Lua из тумана...

А если серьезно, как-то я даже не подумал, чтобы написать в мужском роде. Как-то «Вышел Lua» не звучит.

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

А его ещё не включили в апстрим

Судя по тому, что его GSoC закончился почти 1.5 года назад, и не включат %) В любом случае, нет Lua в ядре NetBSD.

tailgunner ★★★★★
()

В языке появился оператор goto.

Еретики!
Lua разработан в Computer Graphics Technology Group of Pontifical Catholic University of Rio de Janeiro in Brazil.
Не написать ли багрепорт Папе Римскому об изгнании «диавольского» оператора? :)

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

goto рулит и педалит при правильном использовании. Учитывая, что в Lua ЕМНИП нет исключений, goto там весьма полезен.

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

goto рулит и педалит при правильном использовании

За последние ~17 лет ни разу не столкнулся с необходимостью применить GOTO. Как с ассемблеров слез, так больше уже и не применял. Даже на Си. И это не из фанатизма. Просто реально ни разу нужно не было.

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

может стоит начать писать что-то кроме хелловорлдов и кода на пхп? За 17 лет уже должно было надоесть, не?

и, да

grep -R goto devel/linux | wc -l

95063

anonymous
()

В языке появился оператор goto

Ну всё, теперь лиспу/хаскеллю/жабе/питону/С++/VB.NET точно капец.

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

может стоит начать писать что-то кроме хелловорлдов и кода на пхп? За 17 лет уже должно было надоесть, не?

На PHP я пишут только 10 лет. 17 лет назад, когда был нищим студентом, писал на десятке языков, от Си/Си++ и трёх-четырёх ассемблеров до Форта или Перла :)

95063

И по сколько долларов за строчку?

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

На PHP я пишут только 10 лет. 17 лет назад, когда был нищим студентом, писал на десятке языков, от Си/Си++ и трёх-четырёх ассемблеров до Форта или Перла :)

и на всех как на пхп? Ты вот что мне скажи: ты правда считает, что пара goto, перекидывающих к концу блока, где написаны обработка ошибок и деинициализация всякой шняжки, намного хуже, чем 100500 вложенных условий, заставляющих глаза вылезать из орбит? Ну и да, как ты в C/C++ вылезешь из вложенного цикла, мой наивный друг с 10-летним ПХП головного мозга?

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

Ну и да, как ты в C/C++ вылезешь из вложенного цикла

В си - да, гоуту. Либо return(!).

В плюсах можно и исключение кинуть :)

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

Дима, за исключение в kernel space необходимо бить по яйцам и увольнять этого программиста к чертям, ты и сам это прекрасно знаешь.

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

А про кернел спейс никто вроде и не говорил

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

Дима, за исключение в kernel space необходимо бить по яйцам и увольнять этого программиста к чертям

Что-то Катлера не уволили %)

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

Если про венду,

Да.

то там как раз таки исключения юзать не рекомендуют особо

Если верить Хелен Кастер, венда написана на расширенном Си, в котором есть исключения. По твоей же ссылке - исключения Си++, совершенно другая вещь.

it is important that large drivers be pageable

Бугага, чо.

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

goto рулит и педалит при правильном использовании. Учитывая, что в Lua ЕМНИП нет исключений, goto там весьма полезен.

Есть в некотором виде при помощи error() и pcall() / xpcall().

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

find win2k/ -type f -name «*.c» | wc -l

4667

find win2k/ -type f -name «*.cxx» | wc -l

1456

find win2k/ -type f -name «*.c» -exec grep -E "(throw|catch)" {} + | wc -l

467

чуть ли не половина из этих 467 приходится на комментарии или имена функций с этими словами. Про новые версии венды, увы, ничего не могу сказать.

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

чуть ли не половина из этих 467 приходится на комментарии или имена функций с этими словами

Еще раз - ты ищешь Си++-конструкции. Если у тебя есть исходники ядра венды, ищи в них try, finally и raise.

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

find win2k/ -type f -name «*.c» -exec grep -E «try {» {} + | wc -l

2682

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

anonymous
()

Ура! Годный язык, хорошая новость.

anonymous
()

API для битовых операции - фишка очень полезная, а goto - возвращение в каменный век. Зачем оно?

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

венда написана на расширенном Си, в котором есть исключения.

Какая именно «венда»? Если winapi, то это обыкновенный SEH, ёпт. Если native, то очень вряд ли.

LamerOk ★★★★★
()

Удивлён, что битовых операций раньше не было.

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

Если у тебя есть исходники ядра венды, ищи в них try, finally и raise.

facepalm.ps.gz

Это ты правильно фейспалмишь.

__try, __except и __finally

И что, греп на try не найдет __try? Правда?

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