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

Holywar: AngelScript vs Lua (3 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#30
13:31, 9 июня 2006

nbkolchin
>> строгая типизация для скриптования проекта ни к чему.
>В большинстве случаев --- не нужна нафиг. Есть ситуации, когда она полезна --- например GLSH от Unigine.
там динамическая типизация :). Глотает даже такие отжиги : int a = "asdf"; :D


#31
13:36, 9 июня 2006

nbkolchin
>> Что-то подсказывает, что приведение "a" и "b" к нумерик не будет тормознее в 10 раз :)
>Будет. Введение жесткой типизации позволяет простым способом поднять производительность.

Я сам ВМ не писал, но разве ВМ с динамическими типами не юзают для переменных нечто вроде Variant типа? Тогда приведение всего-лишь означает выборку из поля с соответствующим типом. "Разов" тут никак не наберется.

keltar
>По скорости вполе сопоставим с lua
В виду последних новостей (для меня) о jit-компиляции Lua - уже нет :)

#32
13:37, 9 июня 2006

keltar
> там динамическая типизация

Опаньки. Я не знал, исходил из синтаксиса языка. А была бы полезна. :)
У них ВМ точно безтиповая?

RPGman
Все зависит от конкретной реализации. В Lua используется union. (я честно пытался вспомнить реализации языков где Variant --- struct, но не смог :) ).
Про приведение типов: смотри, в безтиповом языке у нас для сложения нужно выполнить два сравнения + возможные вызовы функции преобразования типа. Это против двух ассемблерных команд в реализации с явными типами.

#33
13:59, 9 июня 2006

nbkolchin
> + возможные вызовы функции преобразования типа.
Вот именно, "возможные". Т.е. потенциально 10-кратная разница в скорости возможна, но в реале разница незначительна. Не думаю, что проверку типа перед приведением делают на пи-коде ВМ. Скорее это хардкоднуто.

Глянул скрипты на Squirrel. Это как раз то, чем AngelScript привлекает некоторых, и чем AngelScript никогда не станет :)
Биндинг весьма и весьма похож на Lua'шный.
Вечерком покопаюсь детальнее...

Однозначно можно рекомендовать Lua-фобам в качестве единственной альтернативы. Целесообразность применения AS теперь вообще под баааальшим вопросом.

#34
14:30, 9 июня 2006

nbkolchin
Уважаемый, я не писал своей VM, но достаточно начитан всяких холиваров на comp.lang.*, поэтому предлагаю закончить нафиг спор. Желающие сами почитают comp.lang.* и другие источники и решат, кто прав.

#35
14:47, 9 июня 2006

L00bis
>предлагаю закончить нафиг спор
+1

Я, в принципе, хотел услышать аргументы почитателей AngelScript. Просто часто на вопрос новичка "какой скрипт-язык взять" они громче всех кричат "AngelScript - круто, AngelScript - для программеров, Lua - пацкаль ацтойный". Иногда мне пофиг, иногда раздражает - ну не туда зарулят человека, а ему потом расхлёбывать.

Добавлю:
L00bis
Спасибо за luaJit

nbkolchin
Спасибо за Squirrel.

To all nubs:
Прежде, чем слушать всякие "советы", просто попробуйте Lua и Squirrel.

#36
15:10, 9 июня 2006

nbkolchin
>Народ, не надо использовать TCL. Он мертв и его использование в новых
>программах --- разновидность некрофилии.
Почему? Проект развивается. Сейчас готовится ветка 8.5. Почему он мёртв-то?

#37
15:32, 9 июня 2006

RPGman
Это спасибо Open Source Community, а не мне.

#38
17:35, 9 июня 2006

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

Ты с чем кроме ЛУА работал? чем он лучше?

#39
20:42, 9 июня 2006

Вот, решил провести пару тестов трёх интерпретаторов (Lua, Python, TCL)
Что использовалось:
Python 2.3.5
Psyco 1.5
Lua 5.1
LuaJIT 1.1.0
TCL 8.4.6
ActiveState TclDevKit 3.2

Первый тест - числа Фибоначчи. Вот код из вычисления:
Python:

import psyco

psyco.full()

def fib_recur(n):
	if (n == 0): return 0
	elif (n == 1): return 1

	res = fib_recur(n-1) + fib_recur(n-2)

	return res

print fib_recur(40)
(psyco естественно отключается для тестов без psyco ;))

Lua:

function fib(n)
	if (n == 0) then return 0
	elseif (n == 1) then return 1
	end

	return fib(n-1) + fib(n-2)
end

print(fib(40))

TCL:

proc fib { n } {
	if { $n == 0 } {
		return 0
	} elseif { $n == 1 } { return 1 }

	set res [ expr { [fib [expr {$n-1}]] + [fib [expr {$n-2}]] } ]

	return $res
}

puts [fib 40]

Все тесты запускались по три раза.

Результаты этих тестов:
Lua: >3 мин
LuaJIT: 44.72 - 45.15 сек
Python: >3 мин
Python Psyco: 16.93 - 16.94 сек
TCL: >3 мин
TCL compiled: >3 мин

Тут следует отметить, что компилирование TCL в этих двух тестах призводительность не повысило, но даже понизило.
Также проводил тесты для N=30. Тут всех порвал Lua - 1 секунда, далее Python - 5 секунд и в аутсайдерах TCL - 7 секунд.

Следующий тест - цикл с большим количеством итераций и произволными арифметическими вычислениями внутри.
Вот код:
Python:

import psyco

psyco.full()

def calc(n):
	for i in xrange(n):
		res = i*5 + 12/(i+1) - i*(i+2)

	return res

print calc(300000)

Lua:

function calc(n)
	for i = 1,n do
		res = i*5 + 12/(i+1) - i*(i+2)
	end

	return res
end

print(calc(300000))

TCL:

proc calc { n } {
	for { set i 0 } { $i < $n } {incr i } {
		set res [expr { $i*5 + 12/($i+1) - $i*($i+2) }]
	}

	return $res
}

puts [calc 300000]

Тут всё оказалось весьма странно:
Lua: 0.2 - 0.21 сек
LuaJIT: 0.51 сек
Python: 17.5 сек
Python Psyco: 23.24 - 23.40 сек
TCL: 0.64 - 0.65 сек
TCL compiled: 0.7 сек

TCL отыгрался.... Python провалился. Lua всех рвёт...

Может эти тесты несовершенны и надо придумать что-то по-лучше, но определённые представления они дать могут.

#40
20:57, 9 июня 2006

xpinguin
Круто Lua всех рвет, но вот Python 2.4 уже есть как думаешь он чуть бстрей будет не пробовал?

#41
21:41, 9 июня 2006

Python 2.4 по скорости такой же тормознутый  как Python 2.3.5. Тут особо ни на что не расчитывай...

#42
22:02, 9 июня 2006

DaRT
>Python 2.4 по скорости такой же тормознутый как Python 2.3.5. Тут особо ни на что не расчитывай...
Ты думаешь он мне нужен?? я вот начал Lua использовать и мне ничего не надо для скриптов кроме его :))) Я просто спросил чтобы быть полностьтю уверенным что Lua самый быстрый скриптовый язык.

#43
22:38, 9 июня 2006

xpinguin
Ну чтож тесты убедительны, а как с их внедрением в движок/программу?

#44
22:44, 9 июня 2006

xpinguin
>TCL отыгрался.... Python провалился. Lua всех рвёт...

:) сравнил с собственной, самописной скрипт системой (Cи подобный типизированый скрипт) :

Первый тест: в 1.4 раза быстрее чем LUA (не Jit)
Второй тест: в 1.14 раза быстрее чем LUA(не Jit), (ну тут понятно, в Lua цикл обрабатывается как одна команда VM)

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

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