Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.04.2008, 09:42
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 41  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от WindWalker
1. А откуда взялись классы в AS2? Да, реализованы они были не лучшим образом. Но тем не менее вы ими пользовались? И считали это эволюционным шагом?
Да, считал. Но это было недоклассы и проблем с ними было много. Но при этом, для писаны на AS2 были созданы прекрасные и удобные инструменты.

Цитата:
Сообщение от WindWalker
2. Мы уже убедились, что код с синхронными методами прекрасно переводиться в код на AS3 (в чём я в принципе и не сомневался). Вы лично выступали в роли транслятора. Осталось это лишь автоматизировать, поскольку обычно в роли транслятора приходиться выступать мне самому, а хочется свалить это на компилятор.
Компилятор не должен ничего транслировать, такие вещи должны быть реализованы нативно. Трансляция — полумера, если будут косяки, то контролировать их не получиться. E4X должен был быть реализован на более низком уровне, а не тучей циклов на AS3. RegExp тоже.
Многопоточность надо реализовывать как раз на низком уровне, иначе это будет псевдомногопоточность.

Цитата:
Сообщение от WindWalker
Но, видимо, выбрал не то место для серьёзных бесед.
Вы знаете, можно долго полемизировать по этому поводу, но лично вы компилятор не измените. Работайте с тем, что есть, здесь все-таки сидят практики, а не теоретики. Язык эволюционирует и это хорошо.
И надо не забывать, что флешовый runtime весит около двух мегабайт, а не пятнадцати, как Java. Для веба размер runtime очень критичен, поэтому не все сразу.

И что именно вы хотите обсудить? Как было было прекрасно, если… и повздыхать по этому поводу? Пути реализации runtime-транслятора на AS3? Если да, то лично я не вижу смысла в такой штуке, реализовывать на ней что-либо и потом бороться с глюками, теряя время и деньги неоправданно.


Последний раз редактировалось etc; 11.04.2008 в 10:03.
Старый 11.04.2008, 12:18
FlexOkeks вне форума Посмотреть профиль Отправить личное сообщение для FlexOkeks Найти все сообщения от FlexOkeks
  № 42  
Ответить с цитированием
FlexOkeks
 
Аватар для FlexOkeks

Регистрация: Sep 2007
Адрес: Путенбург
Сообщений: 147
Цитата:
Сообщение от WindWalker
И синхронный вызов методов - самый простой, самый интуитивно понятный метод её решения. Это не отбойный молоток, это как раз таки современная немецкая ультрозвуковая безконтактная бормашина.
Но у нас такой, увы, нет, поэтому приходится по старинке пользоваться обычной бормашиной со сверлом (ивенты, таймеры) и вздыхать, что чудеса техники есть только в Германии (в Java), а мы живём в России (в Flash) и не надо путать.
Есть одна маленькая деталь, самая современная безконтактная бормашина не будет работать без электричества! Вы же предлагаете строить целую электростанцию для небольшой партии ультрасовременных машин. Решить эту проблему проще съездить в германию (сделать на java) на уровне конкретно взятого примера, а на уровне всея Руси ( флеш плеера) это занятся строительством электростанций, компиляторов, теоретически это полезно, но практически полезно иметь для начала хотябы Flash Player SDK, к чему все идет. А тема поднята слишком возвышенная для данной ветки, если про стоматологов надо задавать на стоматолог ру, то и раскрывать тему многопоточности во флэш стоило бы в подходящем разделе и с самого начала по порядку.
__________________
<!-- КРЭКС ПЭКС ФЛЭКС -->

Старый 11.04.2008, 13:29
WindWalker вне форума Посмотреть профиль Отправить личное сообщение для WindWalker Найти все сообщения от WindWalker
  № 43  
Ответить с цитированием
WindWalker
[+1 18.03.08]

Регистрация: Nov 2006
Сообщений: 223
Давайте переживать трудности по мере их поступления (с) Жванецкий

Никто не застрахован от багов и глюков. В том же флеш-плеере, флексе и адобовском компиляторе их предостаточно.

Сейчас у меня, так сказать, стадия проектирования. Я как раз хочу заранее предусмотреть, с какими проблемами придётся столкнуться и либо найти путь их решения, либо всё-таки осознать, что да, действительно, вся затея обречена на провал. Но пока ни одной такой роковой проблемы озвучено не было.

Да, я не профессионал в области создания компиляторов, однако некоторый опыт всё же имеется. К тому же, в данном случае не нужно писать всё с нуля - только изменить существующие. Исходники haXe доступны давно, исходники флексового компилятора тоже недавно были открыты - есть из чего выбрать.
На худой конец сделать именно транслятор, на выходе у которго не байт-код, а код на AS3.

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

Старый 11.04.2008, 14:58
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 44  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
К сожалению, на тему конвееров я с вами не собеседник, у меня острой необходимости в их использовании не было.

Старый 09.01.2009, 15:30
Kolan вне форума Посмотреть профиль Отправить личное сообщение для Kolan Найти все сообщения от Kolan
  № 45  
Ответить с цитированием
Kolan

Регистрация: Jan 2009
Сообщений: 38
__etc, у меня к вам вопрос. В посте № 28 вы привели код
Код AS1/AS2:
…
    socket.addEventListener(IOErrorEvent.IO_Error, this.handler_ioError);
…
private var _attempts:uint = 0;
 
private var _timeoutID:uint;
 
private function connect():void {
    this._attempts++;
    try {
        socket.connect();
    } catch (error:Error) {
        this.attempt();
    }
}
 
private function attempt():void {
    if (this._attempts > 2) {
        clearTimeout(this._timeoutID);
        // bla-bla, показываем ошибку
 
    } else this._timeoutID = setTimeout(this.connect, 500);
}
 
private function handler_ioError(event:IOErrorEvent):void {
    this.attempt();
}
Который считаете аналогом кода:
Код AS1/AS2:
var connected:bool = false;
var attempts:int=0;
while (!connected && attempts<3) {
   if (sock.connect()) {
       connected = true;        
   } else {
       attempts++;
       sleep(500);
   }
}
Какой же это аналог? Тут же нет ожидания.

Пройдем по шагам.
Клиент (под клиентом подразумевается код, который вызывает ваш) вызывает connect()

Допусти ответа нет, тогда вызывается attempt() в котором выполняется this._timeoutID = setTimeout(this.connect, 500); и всё, на этом метод connect() заканчивается? В этом случае код клиента пойдет дальше, неизвестно куда.

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

Объясните, где же тут аналог?

Старый 09.01.2009, 16:12
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 46  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
Kolan, ждать будет один поток, а не весь клиент.

Старый 09.01.2009, 18:56
Kolan вне форума Посмотреть профиль Отправить личное сообщение для Kolan Найти все сообщения от Kolan
  № 47  
Ответить с цитированием
Kolan

Регистрация: Jan 2009
Сообщений: 38
BlooDHounD, помогите разобраться. Что значит один поток? Что это за поток и откуда он берется?

И главное, что заставит его ждать? setTimeout? Ведь это просто запуск таймера. Таймер просто запуститься и ждать его никто не будет.

Рассмотри пример того же WindWalker, который который он приводит в обсуждении на gotoandflash.ru:

Он говорит, что аналогом кода
Код AS1/AS2:
function test():void {
   trace ("Before");
   delay(1000);
   trace ("After");
}
В AS будет:
Код AS1/AS2:
function test():void {
   trace ("Before");
   setTimeout(test_part2, 1000);
}
 
function test_part2():void {
   trace ("After");
}
Но ведь это же неправда. Это же никакой не налог. Я реализовал второй вариант (привожу весь модуль):
Код AS1/AS2:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
	initialize="init()">
	<mx:Script>
		<![CDATA[
 
			private function init(): void {
				textArea.text = textArea.text + "1";				
				doTest()
				textArea.text = textArea.text + "2";
			}		
 
			private function doTest(): void {				
   				textArea.text = textArea.text + "Before";
   				setTimeout(test_part2, 1000);
			}
 
			private function test_part2():void {
   				textArea.text = textArea.text + "After";
			}
 
		]]>
	</mx:Script>
	<mx:TextArea x="32" y="37" width="333" height="233"
		id="textArea"/>
 
</mx:Application>
В результате в текстовое поле сначала записывается 1Before2, а потом, через секунду добавляется After. То есть строка получается такой: 1Before2After. Если бы блокировка была, то она, что логично, была бы 1BeforeAfter2.

Это означает, что никакого ожидания нет и такой вариант (с setTimeout(test_part2, 1000)) — это совершенно не аналог delay(1000);.

Совсем непонятно, почему и WindWalker и __etc говорят о их идентичности.

Старый 09.01.2009, 19:17
DarkLight вне форума Посмотреть профиль Отправить личное сообщение для DarkLight Посетить домашнюю страницу DarkLight Найти все сообщения от DarkLight
  № 48  
Ответить с цитированием
DarkLight
ветеран форума
 
Аватар для DarkLight

Регистрация: May 2006
Адрес: Москва
Сообщений: 2,978
Отправить сообщение для DarkLight с помощью ICQ Отправить сообщение для DarkLight с помощью Skype™
Было сказано про аналогичность в рамках конкретной локальной задачи. Если говорить о реальной реализации - флексовый компилятор опенсорсен, дорабатывайте под свои нужды(например, такой доработкой были реализованы вещи типа code coverage для flex) для симуляции delay.
__________________
4am is time to rock

Старый 09.01.2009, 19:51
Kolan вне форума Посмотреть профиль Отправить личное сообщение для Kolan Найти все сообщения от Kolan
  № 49  
Ответить с цитированием
Kolan

Регистрация: Jan 2009
Сообщений: 38
Я не хочу дорабатывать или флеймить, я хочу понять как устроен Флекс.

Даже в рамках конкретной задачи код __etc, о котором я говорил ранее в посте № 45 не решает задачу, которую просит решить WindWalker.

Старый 09.01.2009, 23:16
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 50  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Всё просто: в ActionScript нет ни sleep, ни delay, т. е. остановить поток нельзя. Но вместо остановки можно просто ничего не делать и повесить вызов нужной функции по таймеру.

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 16:03.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.