|
Тема |
Re: В събота вечер се мотая с такъв проект [re: NikB] |
|
Автор |
Nero () |
|
Публикувано | 01.09.04 21:44 |
|
|
Май малко съм се поотдалечил от типичните "бизнес приложения"... иначе промени има, софтуера трябва да може да се адаптира сравнително безболезнено, и сроковете които ти дават трябва да са разумни. Ако живеем в идеален свят.
Наскоро правихме порт на игри за мобилни телефони от Java (MIDP) към BREW платформа - C++. Java -> C++ порт е неблагодарна работа, а нещата се усложняват още защото BREW няма нишки, и всеки event трябва да върне управлението почти веднага. Логиката на игрите пък беше с една нишка която цикли и показва кадър по кадър, като в началото на цикъла се взима статус за event-ите които са се случили.
Решението мина през framework който реализира:
1. Java string в C++
2. Smart pointer който работи като autoptr в STL - за автоматично управление на паметта. Всички обекти декларирани в Java като локални променливи ги оставяме да се алокират на стека, или в smart pointer който е на стека. Стекът в BREW е ограничен на няколкостотин байта при най-лошите модели, така че smart pointera позволява да слагаме големи обекти и да избягваме излишно копиране.
3. Част от MIDP APIs, така че BREW съвсем заприличва на Java
4. Най-интересното - реализация на coroutines на C. Coroutines са специални процедурни обекти в някои диалекти на Lisp, които позволяват да се прекрати изпълнението в даден момент и управлението да се върне на извикващия... и следващия път да се продължи оттам докъдето сме стигнали. Ако имаш тредове, това може да се емулира с пускане на няколко треда и умното им блокиране и превключване. Ние като нямаме си го правим на C с един голям switch във всеки метод който ще е coroutine, маскиран с макроси.... ...
Резултата е че кода от Java вътре в методите се транслира на C почти 1:1, като на някои места се пишат макроси или се правят някои унифицирани конверсии.
|
| |
|
|
|