Показать сообщение отдельно
Старый 04.06.2011, 02:11
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 1  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
По умолчанию Сравнение скорости разных языков

Пожалуйста, можете подтвердить результат? А то меня числа как-то засмущали... вот тест на других языках: http://blog.dhananjaynene.com/2008/0...-jruby-groovy/
И вот мой код на AS3, который его вобщем-то один в один повторяет, безо всяких попыток что-то оптимизировать. Результат получается совсем даже не плохой (у меня в релиз плеере 64 бит Убунту около 9.6 микросекунд). Но что-то мне не верится, что все так хорошо... может я что-то пропустил?
Код AS3:
package org.wvxvw.josef
{
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.utils.getTimer;
 
	public class JosefTester extends Sprite
	{
		private var _field:TextField = new TextField();
 
		public function JosefTester()
		{
			super();
			super.addChild(this._field);
			test(this._field);
		}
 
		private static function test(field:TextField):void
		{
			var count:int = 100000;
			var time:int = getTimer();
			var chain:Chain;
 
			for (var i:int; i < count; i++)
			{
				chain = new Chain(40);
				chain.kill(3);
			}
			field.text = "Time per iteration: " + (getTimer() - time) * 1000 / count + " microseconds";
		}
	}
}
Код AS3:
package org.wvxvw.josef
{
	public class Chain
	{
		public function get first():Person { return this._first; }
 
		private var _first:Person;
 
		public function Chain(size:int)
		{
			super();
			var last:Person;
			var current:Person;
			for (var i:int; i < size; i++)
			{
				current = new Person(i);
				if (!this._first) this._first = current;
				if (last)
				{
					last.next = current;
					current.prev = last;
				}
				last = current;
			}
			this._first.prev = last;
			last.next = this._first;
		}
 
		public function kill(nth:int):Person
		{
			var current:Person = this._first;
			var shout:int = 1;
			while (current.next != current)
			{
				shout = current.shout(shout, nth);
				current = current.next;
			}
			this._first = current;
			return current;
		}
	}
}
Код AS3:
package org.wvxvw.josef
{
	public class Person
	{
		public function get count():int { return this._count; }
 
		public function get prev():Person { return this._prev; }
 
		public function set prev(value:Person):void
		{
			this._prev = value;
		}
 
		public function get next():Person { return this._next; }
 
		public function set next(value:Person):void
		{
			this._next = value;
		}
 
		private var _count:int;
 
		private var _prev:Person;
 
		private var _next:Person;
 
		public function Person(count:int)
		{
			super();
			this._count = count;
		}
 
		public function shout(theShout:int, deadIf:int):int
		{
			if (theShout < deadIf) return theShout + 1;
			this.prev.next = this.next;
			this.next.prev = this.prev;
			return 1;
		}
	}
}
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 04.06.2011 в 02:14.