среда, 12 ноября 2008 г.

Mono

Думаю уже нет людей не слышавших о проекте Mono. Замечательный проект, сама идея. Ведь это путь как раз к реальной кроссплатформенности .NET, а не только win серии, жаль правда, что за реализацию взялась не сама Microsoft. Я конечно не говорю о том, что OpenSource бесплатные проекты это совсем плохо, но качество зачастую не высшее, не то которым обладает проприетарное ПО. За 2 летний опыт работы с использованием C# .NET я не припомню ни одного бага в самой системе. Далее о ситуации с Mono...

Недавно возникла необходимость в переносе одной моей библиотеки на платформу Linux. Библеотека была на C#, соответственно первая мысль - "Mono". Да тут еще такое событие релиз 2ой версии Mono. Поддержка C# 3.0, что совсем замечательно. Бинарей не было, качаем, ставим из репозитория.
Компилим... и... да! с первого раза, без проблем, скомпилилось ) Ну собственно по ходу исследования успешности переезда на Mono выяснились следующие вещи...


  1. Библиотека активно использует SerialPort, он самый первый и начал сообщать о проблемах. От девайса ничего не приходило, он не отвечал... В чем проблема... Удалось выяснить тут. Оказывается в Mono реализации этого класса подписка на событие прихода данных с порта не работает... Искуственно эта проблема решилась конечно, но неприятно...

  2. 2 потока в одном домене приложения...Один валится с эксепшеном...Что произойдет ?.. Нет все приложение не свалится... Второй поток в Mono прекрасно продолжает работать ) Это я запостил в мэил рассылку Mono...Ответ пришел ОЧЕНЬ быстро...Что классно и за что огромная им благодарность. Это был баг, который правится патчем к исходникам...

  3. Оказывается в документе ссылка на который есть выше описаны не все проблемы с SerialPort в Mono. Он также игнорирует WriteTimeout...Проблема тоже вполне решаемая...но это уже 3 проблема по переносу...


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

2 комментария:

энерджи комментирует...

Уху, сложно, но можно :)

Степан комментирует...

Писал как то мессенджер сетевой консольный на Java, который конектиться по ip адресу. Пришел на работу и тестировал его запустив одну версию удаленно на маке, а вторую у себя на XP. Моё удивление когда все заработало вообще без всяких переносов и геммороя.
Вывод: кроссплатформенные вещи писать нужно на Java.