Comments 20
Спасибо, интересная статья!
0
Вы не могли бы развить тему по поводу thread? Когда я имел дело с Lua — coroutine/thread были моделью stackful "продолжений". При resume происходило переключение стека и выполнение участка кода до следующего yield или завершения. Но никакого планировщика не было и в помине. Т.е. выглядело как непрозрачный вызов функции. Если же Corona SDK добавляет планировщик — неясно, как происходит ожидание асинхронного результата.
0
Насколько я понимаю в Corona SDK нет ничего нового для корутин и resume блокирует основной поток (и отрисовку экрана). Соответственно приложение будет зависать на время выполнения resume. (Небольшой пример)
Resume возвращает boolean флаг указывающий произошла ли ошибка. Если флаг установлен в false то вторым возвращаемым значением будет сообщение с деталями ошибки.
При использовании есть один существенный минус, если в коде перенесенном в нить возникнет ошибка вы об этом не узнаете
Resume возвращает boolean флаг указывающий произошла ли ошибка. Если флаг установлен в false то вторым возвращаемым значением будет сообщение с деталями ошибки.
0
Не могли бы вы пояснить пример с coroutine.create?
Согласно документации network.request уже является асинхронной функцией и смысла выносить её в отдельный поток я не вижу.
Согласно документации network.request уже является асинхронной функцией и смысла выносить её в отдельный поток я не вижу.
0
В действительности запросы network.request завешивают приложение и пример я приводил именно из личного опыта. По замыслу творцов Corona SDK таймер то же должен выполняться в отдельном контексте но вы можете сами провести эксперимент, разместите этот замечательный код где-нибудь в main, соберите приложение и попробуйте им пользоваться:
Так же можно попробовать грузить файл на сервер по таймеру каждый тик таймера будет завешивать приложение. Мне короутины помогли. А вообще в примере нужно было просто привести пример объекта типа thread…
timer.performWithDelay(100, function()
network.request( урл ресурса с плохим пингом )
end)
Так же можно попробовать грузить файл на сервер по таймеру каждый тик таймера будет завешивать приложение. Мне короутины помогли. А вообще в примере нужно было просто привести пример объекта типа thread…
0
Возможно вы путаете network.request с библиотекой socket входящей в состав Corona? Код с использованием этой библиотеки выполняет синхронный (блокирующий) запрос:
Единственная моя претензия: текущий пример thread не показывает преимущество корутины (если вы не используете coroutine.yield то весь код функции всё-равно выполнится за один раз и заблокирует обновление экрана до конца выполнения).
local http = require( "socket.http" )
http.request{ ... }
Единственная моя претензия: текущий пример thread не показывает преимущество корутины (если вы не используете coroutine.yield то весь код функции всё-равно выполнится за один раз и заблокирует обновление экрана до конца выполнения).
+1
боюсь вы правы в обоих случаях… чуть позже доработаю статью. спасибо…
да я проверил в том случае где была проблема я действительно использовал http.request на тот момент опыт был совсем никакой и использовал первое что попалось под руку… http.request действительно лагает и короутины решают с ним вопрос.
да я проверил в том случае где была проблема я действительно использовал http.request на тот момент опыт был совсем никакой и использовал первое что попалось под руку… http.request действительно лагает и короутины решают с ним вопрос.
0
100501-я статья "lua-для-самых-маленьких". А где про корону-то?
0
На русском статей чуть меньше. В статье делается акцент на особенности применения Lua именно в короне. Да для совсем маленьких, но я нахожу такой вариант более приемлемым чем сразу начинать с 100 страницы. На мой взгляд корона в русскоязычном сообществе редкий гость, чего стоят группы в ВК с 500 подписчиками, т.е. писать статьи для «совсем больших» несколько преждевременно.
0
Самое то, что надо, чтобы не совершать неочевидных ошибок на первом этапе освоения нового движка. Так-то Lua красивый и мощный, но реализации стека в разных движках имеют особенности. И прошлый опыт может внезапно подкузьмить.
+1
Корона — это просто частный вариант реализации Lua. И как бы далеко не ушел в самом SDK, однажды упираешься в то, что без знания матчасти — никуда. А данная статья — как раз об этой самой матчасти. Просто и понятно.
0
+1
Да вы правы, но эти тонкости я думал обсудить уже в разрезе изучения Corona SDK. Добавил пояснение. Спасибо.
-1
Спасибо :) Этим вы выгодно отличите свою доку от великого множества остальных. Где функция уверенно приведена и якобы работает в полный рост, а за решением — все равно приходится идти на официальный форум, где люди работают преимущественно с латиницей и с такой проблемой никогда не сталкивались. У них итак все хорошо.
0
Как-то смутно описано удаление содержимого таблиц и ключей таблиц: «Это неправильно! Вот так правильно! Это хороший способ. А этот плохой.» Роберто в своей «Programming in Lua» утверждает что все способы хорошие, только по разному применимые. Или Вы описываете относительно Corona SDK? Тогда имеет смысл акцентировать на этом.
0
Статья рассчитана для новичков. Lua замечательный язык, но исходя из своего опыта мне кажется что не все одинаково допустимо. Я делаю советы типа «плохо / хорошо» и надеюсь что это поможет реже допускать сложные логические ошибки. Касаемо автора книги и языка, я ни в коем случае не оспариваю его авторитет, но нередко творение великих начинает жить своей жизнью сразу после первого выхода в свет и становится не ясно так ли действительно хотел творец. Взять к примеру не простую судьбу оператора goto который из версии в версию мигрирует в угоду просьбам пользователей и почти всегда является злом, пожалуй, кроме случая выхода из вложенного цикла.
+1
Sign up to leave a comment.
Язык Lua и Corona SDK (2/3 часть)