Mono приносит C# на iPhone и Wii

http://arstechnica.com/open-source/news/2009/01/open-source-mono-framework-brings-c-to-iphone-and-wii.ars
  • Перевод
Mono, open-source реализация платформы .NET была использована для разработки игр для iPhone и Wii. Посмотрим, как статическая компиляция сделала возможным, чтобы приложения на Mono удовлетворили требованиям Apple к приложениям, размещаемым в App Store.

Mono — открытая реализация платформы .NET привнесла технологии разработки от Microsoft на несколько неожиданные платформы — iPhone, Android и Wii.

По словам ведущего разработчика Mono из Novell Мигеля де Иказа, ряд приложений в Apple App Store разработан с применением Mono. Это будет сюрпризом для тех, кто знаком с ограничениями политики Apple на включение приложений в AppStore, так как компания Apple жестко ограничивает разработчиков в использовании интерпретируемых языков и сред выполнения сторонних разработчиков — и эти ограничения исключают использование таких платформ, как .NET и Java.

Статическая компиляция — это «финт ушами» который позволяет запустить Mono на iPhone. Mono позволяет разработчикам использовать прекомпиляцию (ahead-of-time, AOT), которая преобразует код на промежуточном языке .NET (CIL) напрямую в native-код во время компиляции. Это означает, что приложение не использует компиляцию на лету (Just-in-time, JIT) чтобы генерировать native-код в процессе выполнения.

Также, есть еще ряд трюков и фишек Mono которые позволят разработчикам уменьшить размер приложений и сборок Mono для развертывания на мобильных устройствах. Вы можете использовать Mono linker чтобы уменьшить размер библиотек, можете опустить JIT и движок генерации кода из исполняемых приложений и вы можете вырезать CIL команды из сборок.

Статическая компиляция делает возможным создавать одобряемые Apple приложения для iPhone с применением Mono, но накладывает определенные ограничения. Обобщения (generics) и динамически генерируемый код не поддерживаются, когда применяется AOT-компиляция.

Есть еще множество сложностей, чтобы прямо сейчас включить в Mono возможность кросс-компиляции под iPhone, но по словам Мигеля де Иказы разработчики, которые хотят начать прямо сейчас могут использовать Unity — сторонний комерческий фреймворк для разработки 3D игр, который построен на Mono. Unity поддерживает разные платформы, включая iPhone и Wii и поставляется с собственной встроенной средой Mono с поддержкой кросс-компиляции для различных платформ.

В своем блоге-посте, Иказа указывает почти на 40 приложений (большинство из которых — игры) в Apple's App Store которые построены на Unity и Mono. Он так же пишет о My Animal Center, немецкой игре для Wii, которая так же была создана с помощью Mono и Unity.

Однако, не iPhone'ом единым жив человек. Разработчики в порядке эксперимента портировали среду выполнения Mono на Android устройство T-Mobile G1. Хотя этот порт — всего лишь экспериментальное подтверждение идеи и не может использоваться для развертывания рельных приложений на платформе в ближайшее время, он обладает потенциалом и выглядит неплохо по сравнению с Google's Dalvik в некоторых предварительных тестах.

Большие возможности по портируемости Mono и расширенная поддержка некоторых особенностей, таких как статическая компиляция, позволяют разработчикам использовать платформу в некоторых совершенно новых направлениях, применение в которых реализации Microsoft .NET невозможно. Это показывает значимость и гибкость, присущую открытым реализациям.

Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 55
  • +7
    Вот вам и «некроссплатформенный» дотнет…
    • +6
      Ну тут не совсем .NET — а его open-source реализация. Но радует, радует.
      • +7
        В конце-концов, кого это волнует, если можно будет писать программы под все эти платформы на C# со всеми его преимуществами?
        • +1
          Волнует тех, кто уже давно привык к новшествам свежих версий .Net Framework, от которых покачто Mono отстаёт на год-два, поскольку разработчикам новелл нужно время чтобы повторить функциональность оригинального фреймфорка.
          • 0
            Тут еще тонкость, далеко не вся функциональность будет даже в принципе повторяться, к примеру, WPF, пока Мигель против даже попыток переноса на Моно ее.
          • +4
            Во-первых, Моно отстает от.НЕТ по спецификации. Говорят, писать универсальные приложения пока еще тяжело; то есть надо писать именно для него.

            Во-вторых, я никак не могу понять, чем же таким великим отличается.НЕТ от Джавы, которая уже есть и всегда был кроссплатформенной!

            В третьих… Мигель де Иказа всегда славился страстью к копированию чужых технологий :) Никто не слышал, как его прозвали в оупенсорс-тусовке? Miguel Copycat Ikaza :)
            • +2
              Во-первых — вы правы, отстает. Но тут МС задает такой темп в выходе новых версий .NET которые привносят кучу всего нового — что Моно просто не успевает =)

              Во-вторых — no holywar, plz. ".NET лучше, чем Java. Да чем, чем лучше то???? Чем Java"

              В-третьих, хм… т.е. делать по спецификациям платформы ее опен-сорс реализацию — это копипаст? Ну может, я о Мигеле чего-то и не знаю. И вобще он на Декстера похож =)
              • 0
                Дело даже не в новом.
                Фиг с ними, с WPF и WCF.
                Но в Моно, например, до сих пор почему-то не реализованы некоторые базовые вещи, вроде WaitHandle-ов, которые были с самых первых версий фреймворка.
                • 0
                  Странно, а это тогда что?
                  • +1
                    Не знаю.

                    Знаю, что:
                    * dev-lang/mono
                    Latest version available: 2.0.1
                    Latest version installed: 2.0.1
                    Size of files: 18,931 kB
                    Homepage: www.go-mono.com
                    Description: Mono runtime and class libraries, a C# compiler/interpreter
                    License: || ( GPL-2 LGPL-2 X11 )
                    и что у ManualResetEvent-а, к примеру, оверлоад WaitOne(int) вообще отсутствует, а вызов WaitOne() приводит к сегфолту.
                    • 0
                      А, пардон, сегфолтит у него вообще конструктор, до WaitOne() там дело даже не доходит.

                      Где-то там еще в похожем сценарии было FIXME: NotImplemented, только уже не вспомню, где именно.
              • +6
                .net отличается от Java хотя бы тем, что там никто вам не навязыывает java, пишите хоть на pascal
                • +3
                  JVM тоже не заставляет писать на Java.
                  * Ruby, with JRuby
                  * JavaScript, with Rhino
                  * Python, with Jython
                  * Common Lisp, with Armed Bear Common Lisp
                  * Groovy
                  * Scala
                  * Ioke
                  * Forth, with Misty Beach Forth
                  * Clojure
                  • 0
                    хм, что ж надеюсь, хоть один из них используется более широко чем просто ограниченным кругом лиц
                    у .net дела несколько получше
                    www.dotnetpowered.com/languages.aspx
                    • +2
                      Ммм… процентов 90 этих языков неюзабельна. В принципе в дотнете C# и VB используется в большинстве проектов. Я ещё вижу применение динамических языков (питон, руби), но остальные это всёже эксперементальные.
                      • 0
                        VB,C,C++,Java,Lua,Pascal,Cobol,Asm
                        те самый 10%? =)
                        .net отличается тем что библиотека скомпелированная на IronPython будет работаеть со всеми другими языками.
                        • +1
                          Ну, я смотрю ты асс.

                          Ты прочитай описание, допустим JRuby. И потом уже пиши.

                          # A 1.8.6 compatible Ruby interpreter written in 100% pure Java
                          # Most builtin Ruby classes provided
                          # Support for interacting with and defining java classes from within ruby
                        • 0
                          F# и Nemerle вполне usable.
                          • 0
                            Забыл про них. Наврное есть ещё.
                    • 0
                      Вот с этим как раз проблем нет. Для JVM написано огромное количество компиляторов самых разных языков. Вот подробности: www.is-research.de/info/vmlanguages/
                      И таки да, среди этих языков есть весьма популярные. Я например в своих проектах активно использую groovy.
                    • +1
                      Забавная ситуация mono отстает от .net, а .net от mono=) Про compiler as a service, реализованный в mono писали уже дважды: раз и два, а в .net'е эта возможность появиться только через версию.

                      В Java были совершены ошибки, которых нет в .net, одна из них это checked exception, другая их версия generic.
                • 0
                  Ага, а благодаря wine теперь можно и кроссплатформенным .exe назвать :-)
                  • 0
                    Вот если бы он под другими архитектурами работал, wine…
                  • +1
                    Ну пока ещё нет такой кроссплатформенности как в Java. Обычно приложения для .NET пишутся от приложений для Mono.
                  • +1
                    это уже интересно!
                    хотя mono не идеален, это лучше чем ничего.
                    особенно учитвая что с iphone и java пока ничего хорошего не вышло
                    • +1
                      Скоро можно будет написать проект на си шарпе в визуал студии, потом собрать его в моно, и запускать на любых виндовсках без дот нет)
                      • 0
                        А это давно можно.
                        • 0
                          Через моно? или как?
                        • 0
                          В смысле статически собрать .net екзешник, чтобы сам .net не требовался.
                          • 0
                            Хм, а можно по подробней, мини инструкцию как это можно сделать?
                            Потому что на сколько я знаю, это было не возможно, по крайней мере 4 месяца назад)
                            • 0
                              Это было возможно уже примерно лет пять минимум ;) Пример: www.xenocode.com/Products/Postbuild-for-NET/ И это только один пример, на самом деле таких тулзей сонм.
                              • 0
                                Нифигасе, я как то искал как это можно сделать, раздвигал на готДотНет целую дискуссию по этому поводу, и все пришли к выводу, что си шарпа без дот нет нету)

                                вот пост www.gotdotnet.ru/Forums/Common/543227.aspx#543402
                                • 0
                                  Видать я его пропустил :)

                                  Тут нужно понимать, что си за решёточкой без дотнету таки нету, тулзи просто собирают все зависимости (читай куски дотнета) в один файл с вашей программой, естественно соответствующего размера.
                                  • 0
                                    Если переложение серьезное, то все зависимости будут весить как дотНет, минус пару метров, а вот для каких то примитивов, эт не плохо)
                                    • 0
                                      Так это не для экономии на весе, а для экономии при внедрении.
                                      Мне в свое время очень сильно попортила кровь установка софта под .NET 1.1 на 300 машин с win2k, до дальней из которых было почти 1000 километров и очень плохая модемная связь. Пришлось писать батник, который пытался сначала установить netfw, потом приложение. Из-за общей загаженности машин фреймворк не встал примерно в 20% случаев. Короче коммандировки обошлись в гораздо большую, чем 1500$ сумму…
                                  • 0
                                    Этот моно, судя по описанию, делает ровно так же.
                                  • 0
                                    А есть бесплатные аналоги?
                                    • 0
                                      Не знаю, но даже если и есть, я бы не стал их использовать без поддержки производителя. Поддержка по любому платная, так что то на то и выходит…
                              • 0
                                Как минимум пространства имен поменять будет нужно.
                                • 0
                                  Ну наверно оно так и работает, все пространство именно System переделоно
                                  • 0
                                    Пространства имен Windows нету напирмер, и мне кажется были и другие изменения.
                                • 0
                                  Вопрос только в том, зачем это нужно.
                                  Рантайм придумали в том числе для того, чтобы каждая программа не таскала с собой чемодан компонентов, а могла повторно использовать существующие.
                                  • 0
                                    Ну есть машины с WinXP, на которых дотнет фрэймворк не стоит. Эт на висте и семерке он «из коробки» имеется, а вот на ХРюше его, возможно, прийдется поставить (что не всегда выходит с перового раза), вот тут-то и приходит на помощь программка, со всеми необходимостями (кусками .NET) внутри.
                                    • –2
                                      Если не ошибаюсь, в xp sp2 или 3 входит .net 2.
                                      • 0
                                        Фреймворк давно ставится через Windows Update как компонент системы.
                                        В SP3, кажется, он уже включен (вторая версия, по крайней мере).
                                        Еще всякие довольно распространенные вещи, вроде ATI Control Panel, ставят его вместе с собой.
                                        Процент машин без фреймворка уменьшается.
                                        • 0
                                          Некоторый софт ставит вместе с собой .Net framework еще раз. (Хотя уже имеется установленный, а наглядный пример в 10 метрах от меня стоит) Просветите, пожалуйста, зачем оно это делает?
                                          • 0
                                            Во-первых, может отличаться требуемая версия / сервис-пак.
                                            Во-вторых, установщик конкретного софта может быть глупым, и либо неправильно диагностировать наличие фреймворка, либо на самом деле ничего не устанавливать, хотя и писать что ставит.
                                            • НЛО прилетело и опубликовало эту надпись здесь
                                      • 0
                                        Есть Bartok мсовский компилятор в х86 .net кода
                                      • +1
                                        Это просто шикарно!
                                        • +3
                                          Когда я только начинал писать под .NET я сразу же смирился с мыслью, что мне всё равно придётся писать под Майкрософт. Честно? Меня это не мучало. Но, студенты начали приносить мне программы на моно под мак, кто-то начал говорить про Iron питоны и руби, потом я увидел последний крик с погибающего корабля — Delphi.NET. Ещё были выкрики о Nemerle и F#. потом я увидел, что мой друг — вэб кодер перелез с ПХП на Асп.Нет. Да ещё и JQuery случайно появился в новой версии MVC. Тут из маминой из спальни VisualStudio стала бесплатной в минимальной комплектации. Тут и там проскакивают новости, в которых сказано, что .NET в очередной раз метит на определённую сертификацию открытого стандарта…

                                          И тут мне стало не по себе от одной фразы: «Microsoft породила новый стандарт, который полюбился народу». Конечно, сам .NET является флагманом, на который ровняется Mono, но оно и понятно.

                                          Круто. Просто шикарно. C# на айфоне — это не только хорошее достижение для кодеров, но и, как мне сдаётся, лучшая подлянка для Эплла, которую могли себе только представить разработчики .NET
                                          • 0
                                            В чем подлянка? Вы думаете для айфона что-то происходит против воли Эпл? :) С учетом, что софт под айфон распространяется только через эпловский ресурс, который эпл оооочень строго премоделирует…

                                            ЗЫЖ не говоря о том, что майкрософт инвестировало в апл около 150 млн баксов (купив акции апла, в конце 90х)
                                            • 0
                                              ну и в каком месте тут подлянка? Что разработчики не используют SDK? Так 95% игр написано на C++ + OpenGL + 2 ObjC класса под инициализацию и мультитач/акселерометр.

                                              Вот если бы они сделали так, что можно бы было интерпритировать код в рантайме, или писать приложения с плагинами, при этом не противоречя эгрименту — то да. А так — ничего особенного
                                              • 0
                                                Ну собственно подлянка в том, что по замыслу Эппл — писать можно только в предоставляемой ими же среде и с помощью их средств — т.е. опять же, контроль рынка.

                                                А тут оказывается — можно на C# делать то же самое. Больших проблем для Эппл это не создаст, а разработчикам — все радость.
                                                • 0
                                                  И чё? Вы видели как в Unity это устроено? Клепаете проект, потом делаете экспорт, все экспортируется iPhone проект для XCode, через который уже все и заливается на айфон.

                                                  Так что ничего пдобного. Вот если бы придумали способ загружать свои программы на не джеилбрейкнутый телефон для тестов, тогда было бы что-то

                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.