Войти
ФлеймФорумОбщее

Holywar: AngelScript vs Lua (2 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#15
22:57, 8 июня 2006

Виндовый Тикль равно как виндовый питон, равно как и виндовый перл всегда можно найти не http://activestate.com/

#16
1:02, 9 июня 2006

Протупил :)  TCL у меня уже есть, вместе с MinGW вытянул как-то.

Но синтаксис там не совсем человеческий...
"set a 1"  вместо "а=1", квадратные скобки в непонятных местах и т.д.

Wolverrum, Jay-C
A TCL сохраняет/загружает откомпиленый байткод?  Lua может, как и питон. И без гемора, как в AngelScript.

#17
1:47, 9 июня 2006

RPGman
proc open {} {
music.open

play_intro
}

и т.п. ну да он все через set... ну норма вроде ниче...

Сохраняет/загружает..

#18
2:45, 9 июня 2006

Ужос: строгая типизация в скриптовом языке. Нафига, спрашивается, надо?
Lua бесспорно лучше.

#19
4:13, 9 июня 2006

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

#20
8:44, 9 июня 2006

nbkolchin
Чушь. Оверхед, накладываемый виртуальной машиной, всегда несравненно больше.

luajit.luaforge.net - Lua теперь ЕЩЕ БЫСТРЕЕ!

#21
11:07, 9 июня 2006

L00bis
>luajit.luaforge.net
Jit-компилер - это уже контрольный выстрел в голову AS :)
Блин, прозевал выход такой уматовой штуки...

Нет, ну как так можно писать? 2Мб(!) AS  против  180кб Lua+32кб jit-compiler?

#22
11:21, 9 июня 2006

Я, как геймдизайнер, ответственно заявляю что ЛУА - убер скриптовой язык.

#23
11:35, 9 июня 2006

RPGman
>"set a 1" вместо "а=1", квадратные скобки в непонятных местах и т.д.
Скобки как раз, как надо. Дело в том, что в TCL любое "левое" выражение воспринимается как строка, и чтобы придать ему смысл, оно заключается в квадратные скобки:

proc foo {a b}
{
            return [expr { $a+$b }]
}

#здесь надо писать квадратные скобки
puts [foo 1 2]

#а здесь нет
foo 1 2

Достаточно яркий пример :)

А то, что всё через set - не беда.
Вообще, язык не плохой, одни namespace'ы чего только стоят. А info, а переопределение любой функции (или переименование) в рантайме...эххх... Одна только проблема - если кто-то криворукий будет писать код на TCL, ты его ещё хрен поймешь.... Я не так давно под WoWEmu скриптов достаточно много написал, и чужие использовал - с этой проблемой сталкивался. Мне Python в этом отношении больше нравится.
Расширяемость у TCL тоже на высоте - написано множество модулей, которые легко биндится через сам интерпретатор. Также есть компиляторы в байт-код, например, платный от ActiveState. Скорость возрастает во много раз, хотя про info и придётся забыть.
С биндингами в качестве скрипт-языка всё не так уж и плохо, если составить список, что легче биндить (по возрастанию сложности), то получится так:
1. Lua
2. TCL
3. Python
(биндить питон - это вообще тихинький такой ужос;) )

EDIT: Основы TCL можно познать тут: http://tclstudy.narod.ru Но это не особо нужно, достаточно прочесть более-менее грамотно написанный исходник и всё становится понятно (я использовал оба подхода, но второй - в большей степени;) )

#24
12:08, 9 июня 2006

xpinguin
>а переопределение любой функции (или переименование) в рантайме...эххх...

В луа функция - переменная типа "функция"
Переопределяется по определению :)

>Одна только проблема - если кто-то криворукий
>будет писать код на TCL, ты его ещё хрен поймешь....

Минус для юзабельности геймдизайнером.

>Также есть компиляторы в байт-код, например, платный от ActiveState.

Всё сторонее? В луа байткод выгружается простым дампом "функциональной" переменной. Весь луашный компилер можно выразить на самом луа:

f=io.open("lua_script.out", "wb")
f:write(string.dump(loadfile("lua_script.in")))
io.close(f)

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

>(биндить питон - это вообще тихинький такой ужос;) )

Это я прочувствовал :) Когда стоял выбор, в сторону какого языка смотреть (Lua vs Python, хотелось Питона, как "более мощного"), все благородные начинания обломались о биндинг. С пол-пинка примеры не пошли, со второго тоже :) А вот луа пошел на ура. И синтаксис осваивается самым далеким человеком за полчаса по примерам. Доки по языку и апи оформлены не хуже ANSI/ISO.

#25
12:25, 9 июня 2006

RPGman
>>Одна только проблема - если кто-то криворукий
>>будет писать код на TCL, ты его ещё хрен поймешь....
>Минус для юзабельности геймдизайнером.
Бесспорно. Правда на луа можно не лучше наворотить... Питон тут, как я уже сказал - идеал.

>>Также есть компиляторы в байт-код, например, платный от ActiveState.
>Всё сторонее?
Не совсем. Т.е. конечно придётся кинуть разделяемую библиотеку с интерпретатором байт-кода (кстати, она - бесплатная; платный только компилятор) интерпретатору TCL, но для скрипта всё прозрачно: код загужается в текущий контекст просто командой source:

# обычный тектовый скрипт
source "script.tcl"

#скомпилированный скрипт
source "script.tbc"

Вообще, Lua гораздо быстрее Tcl.

#26
12:53, 9 июня 2006

L00bis

Молодой человек, вы когда-нибудь сами писали виртуальные машины? Ликбез для
безграмотных:

Допустим у нас есть следущий код (язык абстрактный):

func f()
{
  var a, b;
  a = f1();
  b = f2();
  return a + b;
}

func f_typed():int
{
  var a:int;
  var b:int;
  a = f1();
  b = f2();
  return a + b;
}

Нас интересует только представление "a + b" в виртуальной машине.

Представление кода в ВМ (в простейшем случае) будет таким

// untyped version
PUSH a
PUSH b
ADD

// typed version
PUSHI a
PUSHI b
ADDI

Ежу понятно, что в первом варианте мы сначала должны привести "a" и "b" к типу
numeric. Во втором, ADDI --- две ассемблерные команды. Разница в
производительности --- минимум 10 раз.

Оверхед накладываемый грамотно реализованной ВМ --- минимален. В качестве
руководства для начинающих, рекомендую почитать литературу о реализации языка
Форт (Forth).

Отдельной темой является выведение типов переменных при компиляции кода (см.
Ocaml). Но это достаточно сложно реализуемо и я не встречал ни одного
скриптового языка, в котором используются эти алгоритмы.

All:

Народ, не надо использовать TCL. Он мертв и его использование в новых
программах --- разновидность некрофилии.

P.S. Embedded Language нужно подбирать исходя из конкретной задачи.
Безусловными лидерами являются Lua и Python. Первый хорош производительностью и
небольшим размером, второй --- мощным набором библиотек.

P.P.S. Сам я в своих проектах использую Squirrel.

#27
13:15, 9 июня 2006

nbkolchin
Что-то подсказывает, что приведение "a" и "b" к нумерик не будет тормознее в 10 раз :)

И L00bis прав, говоря что строгая типизация для скриптования проекта ни к чему. Посмотрите сами на пример строгого скрипта для инициализации меню.
Lua и Python приятнее в разы.

Глянул на домашник Squirrel. Его прямо сравнивают с Python/Lua :)
Сразу вопрос (пока squirrel тянется и не рассмотрен детально) - в чем отличия от Луа? Преимущества, плюсы/минусы?

Насчет TCL согласен.

#28
13:27, 9 июня 2006

RPGman
> Что-то подсказывает, что приведение "a" и "b" к нумерик не будет тормознее в 10 раз :)

Будет. Введение жесткой типизации позволяет простым способом поднять производительность.

> строгая типизация для скриптования проекта ни к чему.

В большинстве случаев --- не нужна нафиг.  Есть ситуации, когда она полезна --- например GLSH от Unigine.

Про Squirrel: плюс --- Си-образный язык, API очень похожее на Lua, честный int. Минус --- меньшая чем у Lua производительность (по моим тестам, в среднем в два раза). По моему, я уже описывал Squirrel где-то на форуме.

http://wiki.squirrel-lang.org/default.aspx/SquirrelWiki/LuaCompar… Squirrel.html

#29
13:29, 9 июня 2006

RPGman
там есть статейка, в которой сравнивается squirrel и lua. Точно не помню, что-то вроде более сишного синтаксиса, классы, массивы (вроде как должны быть быстрее таблиц, но как-то сомнительно) и т.п.. По скорости вполе сопоставим с lua

Страницы: 1 2 3 4 5 6 7 Следующая »
ФлеймФорумОбщее

Тема в архиве.