K-9 16.06.2010 19:11
Coding — Изучаем Mono - Серия первая
Итак, поехали! Открываю цикл статей по Mono для полных чайников. Цикл будет "многосерийным", то есть состоять из кучи маленьких статей. Первая - пилотная, исправления и замечания приветствуютсяДля работы нам понадобятся собственно Mono и любой удобный блокнот текстовый редактор.
В *buntu все нужное идет "из коробки", остальные качают из репов или собирают из исходников (скачать).
Для начала, напишем самую простую программу, которую можно придумать - Hello World.
Итак, создаем файл HelloWorld.cs и заполняем его следующим текстом:
using System;
namespace HelloWorld {
class HelloWorld {
public static int Main(params string
args)
{
Console.WriteLine("Hello, Mono World!");
return 0;
}
}
}
Ничего сложного тут не должно быть. Единственная оговорка: в каждой программе должен быть статический метод Main, с которого и начнется ее выполнение. Сейчас он просто выводит "Hello, Mono World!" на экран, после чего выходит (с кодом возврата 0).
Теперь скомпилируем нашу программу. Открываем терминал и вводим команду:
gmcs HelloWorld.cs
На выходе получаем файл HelloWorld.exe - это и есть наша программа, скомпилированная в CIL (Common Intermediate Language). CIL - язык, чем-то похожий на ассемблер, который выполняется Mono Runtime (или .NET Framework). Чтобы запустить программу, вводим:
./HelloWorld.exe
Hello, Mono World!
Итак, на сегодня все. Особо долго писать не могу, но постараюсь выпускать по серии раз в день-два.
В следующей серии:
Переменные
Управление процессом выполнения программы - простые вещи с длинным названием
P.S. Скриншоты будут по мере надобности (тут не вижу смысла), но если нужны, добавлю

+ 2 -
спасибо :) но если не трудно и Вы в теме, хорошо бы увидеть статью про лицензионную чистоту Mono.
Абсолютно чисто. C# - открытый ISO стандарт, Microsoft там ничего не принадлежит (в Mono). Возможно, будут проблемы, если использовать сборки Microsoft (Windows Forms, например). Кстати, лучшее доказательство чистоты Mono - продолжительное партнерство Novell и Microsoft. А значит, взаимных претензий у них друг к другу нет
То есть если они завтра поругаются, претензи могут найтись? я просто имела неосторожность в нашей конфе упомянуть banshee - сказали, что с лицензия там неладное.
Вообще, Novell утверждает, что все чисто. Что там внутри - другой вопрос...
Вот тут и есть некоторая загвоздка. Дело в том, что C# как стандарт полностью свободен. А вот mono - это уже конкретная реализация и платформа. И некоторые из идей(а в США по сути разрешено патентовать идеи), использованных в процессе создания этой реализации частично пересекаются с аналогичными идеями в реализации .NET Framework. Именно тут теоритически и могут быть проблемы с патентами. Есть, конечно microsoft Promise, но это всего лишь обещание. Юридической силы оно не имеет. Именно поэтому сообщество настороженно относится к mono. Ну, я тоже, честно говоря.
Повторюсь: Novell утверждает, что все чисто. А что взбредет в голову запатентовать Microsoft - уже другое дело. Хотя язык свободный, так что я думаю, что Novell найдет, как выкрутиться, даже если будет суд.
Что маловероятно, т.к. Microsoft влом делать .NET для других платформ. А так есть теоретическая возможность портировать их софт под другие ОСи
с moonlight та же картина? хм, зачем же тогда Икаса все время ходит по такой зыбкой почве, учитывая все это юридическое крючкотворство?
Майкрософт всегда может забить на моно и выкатить .NET под линукс. А моно засудить - от греха подальше. Вот Икаса и выкручивается, чтобы не пропало зря
Отвечаю одновременно на все коменты по поводу позиции Novell.
Честно говоря, тут я, как и все остальные, могу только догадываться в чём реально загвоздка. Но была такая новость, что одним из пунктов соглашения Novell и Microsoft была защита пользователей Novell от патентных нападок со стороны мелкомягких. Это даже отдельно рекламировалось(именно тогда Балмер начал говорить о неких имеющихся патентованных технологиях в GNU/Linux, список которых он так и не привёл, кстати). Но со временем заглохло.
Честно говоря, тут я, как и все остальные, могу только догадываться в чём реально загвоздка. Но была такая новость, что одним из пунктов соглашения Novell и Microsoft была защита пользователей Novell от патентных нападок со стороны мелкомягких. Это даже отдельно рекламировалось(именно тогда Балмер начал говорить о неких имеющихся патентованных технологиях в GNU/Linux, список которых он так и не привёл, кстати). Но со временем заглохло.
Давайте не будем моно продвигать в массы? Для кросс-платформенности есть питон и жава и прочие. А если вы будете писать под моно, мелокософт будет утверждать, что теперь виндовые приложения кроссплатформенны, в то время как они не будут таковыми (моно всегда отстает на два поколения от .NET). И юзеры, у которых программа на линуксе не запустится, будут думать, что это линукс кривой и переходить на винду.
Вот все тысячи аргументов против Моно:
http://techrights.org/2008/03/24/mono-danger-to-linux/
Вот все тысячи аргументов против Моно:
http://techrights.org/2008/03/24/mono-danger-to-linux/
Понятное дело, что каждый останется при своем мнении. Но в то же время, каждый в праве его высказать. Вопрос в том - как. Человек написал то, что думает без лишних эмоций и троллинга, и это его право.
Вообще я тоже очень сдержанно отношусь к MS и к их технологиям, ладно, когда они еще что-то делают на винде для винды, меня это абсолютно не касается, но когда их вещи начинают пихать в линукс, то это уже как-то не так. Тем более да, мне не понятно зачем тратить столько усилий по впиливанию моно, когда есть масса готовых инструментов для разработчика (те же КуТи, Питоны, Жавы и т.д. и т.п.).
И да печальный опыт от MS уже есть, хотя бы взять GetTheFacts...
Вообще я тоже очень сдержанно отношусь к MS и к их технологиям, ладно, когда они еще что-то делают на винде для винды, меня это абсолютно не касается, но когда их вещи начинают пихать в линукс, то это уже как-то не так. Тем более да, мне не понятно зачем тратить столько усилий по впиливанию моно, когда есть масса готовых инструментов для разработчика (те же КуТи, Питоны, Жавы и т.д. и т.п.).
И да печальный опыт от MS уже есть, хотя бы взять GetTheFacts...
Пара вопросов.
> статичный метод
Здесь это имеет такое же значение, как и в сишке? Т.е. статичный символ - тот, который не определён за пределами своей единицы трансляции?
> HelloWorld.exe
А вот в каком формате этот файлик? PE? ELF? Или что-то родное?..
И да, в следующих частях хотелось бы прочитать о внутренностях создаваемого gmcs-ом приложения (что внутре, как запускается, как подцепляется к внешним библиотекам и т.д.) и поподробнее о сборках.
> статичный метод
Здесь это имеет такое же значение, как и в сишке? Т.е. статичный символ - тот, который не определён за пределами своей единицы трансляции?
> HelloWorld.exe
А вот в каком формате этот файлик? PE? ELF? Или что-то родное?..
И да, в следующих частях хотелось бы прочитать о внутренностях создаваемого gmcs-ом приложения (что внутре, как запускается, как подцепляется к внешним библиотекам и т.д.) и поподробнее о сборках.
О внутренностях будет потом. Статичный - русский перевод static, как работает в чистом C - не знаю. Файлики в своем формате Common Intermediate Language.
Да, static - метод, который можно вызвать без создания экземпляра класса
Статичные методы еще называют методами класса, а не его экземпляров (как то так).
А есть разница? Короче, суть:
class Class
{
public static void StaticThing() {}
public void Thing() {}
}
class AnotherClass
{
public void Works()
{
Class.StaticThing();
}
public void Fail()
{
Class.Thing()
}
public void AlsoWorks()
{
Class something = new Class();
something.Thing();
}
}
Пока Андроид и Google AppEngine живы, Java будет.
И Питон тоже.
И Питон тоже.
Я не имею ничего против Java и даже хотел его изучить, но как-то всё больше мне попадается информации по C#... Не к добру это.
Автор, безусловно продолжайте писать, если Вам это интересно. Хотя конечно можно было бы и рассказать хотя бы в первой статье немного о лицензионной чистоте (ведь первый же коммент к статье был на эту тему). Ну, и по ходу изложения <�будущих> статей упоминать про необходимость избегания Windows Forms и пр. я думаю будет не лишним.
бр... какая читаемость)
ЗЫ можно в следующий раз по подробний, а то обещали для полных чайников и вдруг без обьяснений
вот что тут происходит я лично смутно понимаю
>>public static int Main(params string<> args)
ЗЫ можно в следующий раз по подробний, а то обещали для полных чайников и вдруг без обьяснений
вот что тут происходит я лично смутно понимаю
>>public static int Main(params string<> args)
Столько кода ради того чтобы вывести одну строку и вернуть код выхода? Ужас!
И таки да - моно как то не родно.
Я не к тому что писать много(хотя тоже), а в большей степени из-за потерь читаемости.
Да-да, фломастеры =.)))
ЗЫ
Это я с точки зрения любителя python'а так "придираюсь".
ЗЫ
Это я с точки зрения любителя python'а так "придираюсь".
Статичный и статический - таки разные термины. Методы/переменные обычно статические (во всяком случае, в большинстве переводных изданий).
Моно нужен кажется только Мужику с лора...
А для людей есть джава, с которой собственно С# слизан целиком и полностью.
А для людей есть джава, с которой собственно С# слизан целиком и полностью.
Java очень выбивается из ДЕ. И мне кажется, что "статичный" подходит лучше, т.к. статическое у нас электричество
Откуда-откуда ява выбивается?..
Вы эклипс, например, видели?
Хотя для меня ява все-таки больше серверная, а для клиента лично мне нравится C++/QT. Хотя QT поддерживала (не знаю, живо ли еще) Java-биндинги, и на них получаются очень даже красивые приложения (собственно, как и на QT).
И да, у явы уже как минимум с 1.5 есть нативные стили, чтобы никуда не выбиваться.
Насчет статичного - с точки зрения русского языка я согласен, но исторически сложилось, что переводчики используют слово "статический", поэтому я бы предпочел не вносить путаницы...
Вы эклипс, например, видели?
Хотя для меня ява все-таки больше серверная, а для клиента лично мне нравится C++/QT. Хотя QT поддерживала (не знаю, живо ли еще) Java-биндинги, и на них получаются очень даже красивые приложения (собственно, как и на QT).
И да, у явы уже как минимум с 1.5 есть нативные стили, чтобы никуда не выбиваться.
Насчет статичного - с точки зрения русского языка я согласен, но исторически сложилось, что переводчики используют слово "статический", поэтому я бы предпочел не вносить путаницы...
Ну, тролли на Jambi забили, так что не Qt. А насчет нативных стилей - к сожалению, ими мало кто пользуется =(
Статичный исправлю, наверное действительно лучше не путать людей...
Кстати, может потом и до Java руки дойдут =)
Статичный исправлю, наверное действительно лучше не путать людей...
Кстати, может потом и до Java руки дойдут =)
А насчет нативных стилей - к сожалению, ими мало кто пользуется =(
Не согласен... Многие банковские приложения написаны на свингах, и вполне себе нативно выглядят. (я в банке работаю, да).