LINUX.ORG.RU

Моно опережает Java на Linux Desktop


0

0

Моно(технология основанная на стандартах разработанных Майкрософт)стала более популярной на рабочих местах c Linux.

Такие приложения как Bansee, Tomboy, GNOME Do стали популярны среди пользователей Линукс за последние 2-3 года.

«Моно, безусловно, более популярно на десктопе, чем Java. За поледние 3-4 года использования Линукс-десктопа, как основного я пользовался единичными Java приложениями» - говорит Stephen O’Grady, аналитик из RedMonk. «Мы видим настоящий рывок в разработке Моно приложений для Линукс» сказал он.

Проблемы с лицензированием Java для Линукс, дали Моно преимущество в несколько лет и возможность закрепиться да десктопе.

С ним не согласен Ian Murdock вицепрезидент по развивающимся технологиям в Sun Microsystems. Хотя он и не смог привести популярных приложений для Линукс десктопа, но считает что ещё рано говорить о том, что Моно обогнало Java. «Я редко пользуюсь моно приложениями» сказал он и добавил, что моно приложения малопопулярны за пределами Линукс сообщества.

В опросе проведённом SDTimes среди разработчиков, практически все согласились с тем, что Моно является более популярной технологией для Линукс десктопа чем Java.

Моно опережает Java на Linux Desktop(google translate)

>>> Mono outpaces Java in Linux desktop development

★★☆☆

Проверено: hibou ()
Ответ на: комментарий от rmammoth

> Однако, чтобы отделить кусок строки до пробела, бить ее на куски всю -- это уметь надо!

Если это требует меньше кода и не критично по производительности - почему бы и нет?

yk4ever
()

> Вот ещё задачка для храброго пыонэра. Жду решений на крестах (и жабо). Для тех, кто успел-таки прочесть

Лень тыкать кнопки, но через указатели на члены структуры вполне можно сделать аналогично, и без дурацкого применения делегатов. Switch в данном случае вполне хватит сделать по первому символу строки. Короче будет!

rmammoth
()
Ответ на: комментарий от yk4ever

> Странная задача, никогда такой не возникало. Но у меня есть пара вариантов:

> s = s.Replace("_", "s");

Не, родной, не все подчерки!

> StringBuilder sb = new StringBuilder(s); sb[11] = 's'; s = sb.ToString();

Насколько ж короче и понятней получилось!

rmammoth
()
Ответ на: комментарий от yk4ever

> Если это требует меньше кода и не критично по производительности - почему бы и нет?

Да не вопрос, можно ухо пяткой чесать. Всё можно. Вопрос -- зачем?

Ви, кстати, в разработке Висты не участвовали? Очень на то похоже :)

rmammoth
()
Ответ на: комментарий от rmammoth

> Лень тыкать кнопки, но через указатели на члены структуры вполне можно сделать аналогично, и без дурацкого применения делегатов.

Продемонстрируйте. Мне-то было не лень писать. А потом сравним размерчики, ога.

> Switch в данном случае вполне хватит сделать по первому символу строки. Короче будет!

А понятнее ли?

yk4ever
()
Ответ на: комментарий от rmammoth

> Вопрос -- зачем?

Код должен быть 1) коротким 2) понятным 3) достаточно производительным. Экономить наносекунды на спичках - дебилизм и растрата рабочего времени.

yk4ever
()
Ответ на: комментарий от rmammoth

> Не, родной, не все подчерки!

Зато эта задача типичнее :] Замена плэйсхолдеров - в стопиццот раз более применяемое действие, чем замена символа по индексу.

> Насколько ж короче и понятней получилось!

За что и люблю хорошие языки. Разумные вещи на них выглядят разумно, а дурь - дурью.

yk4ever
()
Ответ на: комментарий от rmammoth

> Хм. А запости, плиз, еще раз свой варинт -- пропала часть постов.

Внизу кнопка "показать удалённые" спасает. Ну да ладно.

class MyStruct {
    long ID;
    double Foo;
    string Bar;
}


delegate IComparable SortKey<T>(T Item);
...
{
...    
    List<MyStruct> data = GetRecordsFromStorage();
    string sort = ReadSortDirectionFromClient();

    SortKey key = item => item.ID;
    switch (sort) {
        case "foo":
            key = item => item.Foo;
            break;
        case "bar":
            key = item => item.Bar;
            break; 
    }

    data.Sort((x,y) => key(x).CompareTo(key(y)));
}

yk4ever
()
Ответ на: комментарий от yk4ever

> Код должен быть 1) коротким 2) понятным 3) достаточно производительным. Экономить наносекунды на спичках - дебилизм и растрата рабочего времени.

Не думаю, что я плюсовый вариант дольше чем ты свой писал, умник. Но пример твоего кода я с ребятами обсужу, поржем.

rmammoth
()

полный пинцет! Можно подумать что баньши или томбой были бы менее популярны, если бы их написали на си.

Lennier ★★★★
()
Ответ на: комментарий от rmammoth

> Не думаю, что я плюсовый вариант дольше чем ты свой писал, умник.

Спасибо за умника. Вопрос тут не в том, "сколько писал", а сколько его потом читать будут. Код эта, его чаще читают, чем пишут, если кто не в курсе.

yk4ever
()
Ответ на: комментарий от black7

>>А чем вам лицензия на моно не нравится?

>слушай, ты бы не позорился, почитал историю некрософта, о том какими грязными методами он "мочил" конкурентов. почитай, почитай, может тогда твоя любовь к балмеру исчезнет


Вы на вопрос ответьте.
Какие у вас претензии к лицензии Mono?

Пока кроме потока расширенного сознания ничего не написали.

grim ★★☆☆
() автор топика
Ответ на: комментарий от Lennier

> полный пинцет! Можно подумать что баньши или томбой были бы менее популярны, если бы их написали на си.

В идеале, конечно, если всё написать на низкоуровневом языке, да без ошибок - было бы круто. Другое дело, что время и мозги разработчика - ресурс дорогой. И если их можно сэкономить - на них экономят.

Кстати, такую шнягу, как томбой, вообще лучче на питоне писать. Всё меньше ресурсев.

yk4ever
()
Ответ на: комментарий от rmammoth

> Ждем замыкания в C++0x

Вы ещё кипятите? А мы уже рубим!

yk4ever
()
Ответ на: комментарий от yk4ever

> Спасибо за умника.

Заходите еще

> Вопрос тут не в том, "сколько писал", а сколько его потом читать будут. Код эта, его чаще читают, чем пишут, если кто не в курсе.

Блиин... Если тебе сложно понять, что делает find_first_of() и substr(), то я тебе не завидую

rmammoth
()
Ответ на: комментарий от Lennier

> полный пинцет! Можно подумать что баньши или томбой были бы менее популярны, если бы их написали на си.

так вот , прикол в том ,что публике пишущей на с и с++ влом такое писать и придумывать . Но , когда это уже написали на С# и уже работает - они начинают вылазить из щелей, и начанают умничать и советовать:
Как лучше бы по-гемморней писать бесплатные программы.

elipse ★★★
()
Ответ на: комментарий от rmammoth

> Блиин... Если тебе сложно понять, что делает find_first_of() и substr(), то я тебе не завидую

А если бы я вёз патроны?

string[] parts = s.split(' '); string param1 = parts[0]; double param2 = double.Parse(parts[2]);

Наскока помню, STL так не умеет в принципе. Там надо с циклом возицо.

yk4ever
()
Ответ на: комментарий от rmammoth

> STL не умеет. Boost умеет и не такое.

А у нас брожениев умов нет, бублиотеки стандартные одни на всех. Лепота!

yk4ever
()
Ответ на: комментарий от no-dashi

>Уже оборжался. Там на over 99.9999% скринов виндовые обрамления окон :-)

Дай угадаю. Потому что десктопов под Linux меньше 1%? :))

iZEN ★★★★★
()
Ответ на: комментарий от sniper21

не не не. я же позже написал что маленько сильно ошибся.. ((

Odin
()
Ответ на: комментарий от elipse

Не надо тут петросянию разводить, думаю ты понял о чём я ;) Причём намёка, что это язык не было. На платформе тоже можно писать (:

Deleted
()
Ответ на: комментарий от PayableOnDeath

>ну-ка расскажи поподробнее, что же там так плохо в MVC?

Собственно чем написал. Неудобством. на Java/SWT у меня была в разы проще чем на Qt/C++. Вот, например, была у меня внутрення структура, деревянная, нужно её отобразить. В Java/SWT - два класса, один- с 3 тривиальными методами, для отражающими структуру. и класс с 2 методами, для полчения текста и иконки соответственно. И ещё класс с одним методом, когда нужно было и разными шрифтами отображать. В Qt сильно неудобнее (QAbstractItemView, QModelIndex).

theos ★★★
()
Ответ на: комментарий от baaba

>лизу мона?

У меня нету девочки лизы, и тебе бы её по любому не было бы мона ;)

theos ★★★
()
Ответ на: комментарий от yk4ever

> class MyStruct { long ID; double Foo; string Bar; } delegate IComparable SortKey<T>(T Item); ... { ... List<MyStruct> data = GetRecordsFromStorage(); string sort = ReadSortDirectionFromClient();

SortKey key = item => item.ID; switch (sort) { case "foo": key = item => item.Foo; break; case "bar": key = item => item.Bar; break; } data.Sort((x,y) => key(x).CompareTo(key(y))); }

Согласен, решение на С++ немного длиннее. Для начала определим оператор сравнения для строк.

bool operator < (const std::string &a, const std::string &b)

{

return a.compare(b) < 0;

}

Затем пропишем собственно сравнивание классов по элементам данных (кстати, а вот в шарпе с женериками такое не проканает):

template<class C, typename T, const T C::*member> bool Compare(const C &a, const C &b)

{

return (a.*member) < (b.*member);

};

Для полной кошерности, конечно, придется описать конструктор копии / оператор присваивания для нашей структуры (здесь опущено)

struct MyStruct

{

long ID;

double Foo;

std::string Bar;

// Here copy constructor & operator = must be implemented :-(

};

Ну а дальше все проще, чем в исходном примере.

void foo()

{ std::list<MyStruct> some_list = GetSomeListFromStorage();

std::string manner = ReadSortMannerFromClient(); bool (*compare)(const MyStruct &, const MyStruct &) = &Compare<MyStruct, long, &MyStruct::ID>;

switch(manner[0])

{

case 'f': compare = &Compare<MyStruct, double, &MyStruct::Foo>; break;

case 'b': compare = &Compare<MyStruct, std::string, &MyStruct::Bar>; break;

}

some_list.sort(compare);

}

Причем полученный "сравниватель по элементу данных класса" можно использовать для любого другого класса. ИМХО, не так все страшно -- уложились в несколько лишних строк, избавились от необходимости юзать замыкания, виртуальные вызовы и т.п., что, замечу, не даром в Моно дается.

rmammoth
()
Ответ на: комментарий от yk4ever

> За что и люблю хорошие языки. Разумные вещи на них выглядят разумно, а дурь - дурью

Да, понять иронию уже соображалки не хватило -- все на Моно ушло...

rmammoth
()
Ответ на: комментарий от yk4ever

> Зато эта задача типичнее

Класс! Человека просят просверлить дырку в стене, он сносит ее нафиг и говорит, что задача типичнее.

rmammoth
()
Ответ на: комментарий от yk4ever

Программеры должны писать нормально имхо. Юзеры тоже люди как бы ) Конечно и так съедят, если что памяти ещё купят или проапгрейдятся. Имхо это плохо. Пусть лучше пишут долго, но хорошо. Питоновые софтины тоже особой скоростью не отличаются имхо. Одно дело что-то автоматизировать - юзать скриптовые языки, что бы быстро и на коленке, а другое дело писать системный или прикладой софт - тут нужно что бы было легко и быстро (юзать, работать, а не писать), иначе получается Vista ^)

Lennier ★★★★
()
Ответ на: комментарий от Lennier

Добавка: Не юзаю ни баньши , ни томбой. Есть альтернативы пока что на си :)

Lennier ★★★★
()

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

jhgjhgj
()
Ответ на: комментарий от Aceler

>>Eclipse видимо, абсолютно не десктопное приложение.

Видимо, серверное... особенно с учетом того же xmind, построенного на его базе. Совсем забыл, wuala - аналог dropbox, но реализованный более интересно и грамотно, приятнейший клиент на Java- http://www.wuala.com/

nick_denry
()
Ответ на: комментарий от jhgjhgj

> Ну глупость же.Десктопных приложений в любом случае больше на джаве

Да, это было ооочень убедительное доказательство.

Вот Debian Popularity Contest
http://popcon.debian.org/
и сами сравните (да, и кадеешникам без валидола лучше не смотреть)

elipse ★★★
()
Ответ на: комментарий от yk4ever

>Код эта, его чаще читают, чем пишут, если кто не в курсе.

Это только у пухлых монотроллей так. Лично мой код, например, чаще запускают, чем читают.

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

> Это только у пухлых монотроллей так. Лично мой код, например, чаще запускают, чем читают

+100! :) А то эти моновозы и нетдотеры как-то забывают за самолюбованием, что программы вообще-то иногда как бы работать должны.

rmammoth
()
Ответ на: комментарий от yk4ever

> Экономить наносекунды на спичках - дебилизм и растрата рабочего времени

Не знаю, что ты там на спичках считаешь. А теперь представь: другой аналогичный деятель через год после твоего увольнения вызывает твой суперкод в достаточно длинном цикле. В детали, понятно, не вникает -- на фиг надо, вы ж с ним самые умные, а у машины внутри многа гигагерьцевь, процесор у ней большой, вот пусть она и думает. И твои тормозные наносекунды плавно перетекают в секунды и десятки секунд тормозов. Знакомая картина?

rmammoth
()
Ответ на: комментарий от yk4ever

> А у нас брожениев умов нет, бублиотеки стандартные одни на всех. Лепота!

Мозги у вас одни на всех -- те, что у Мигеля в тыкве. Что сотворит, то и хаваете.

rmammoth
()
Ответ на: комментарий от iZEN

>>Уже оборжался. Там на over 99.9999% скринов виндовые обрамления окон :-)

>Дай угадаю. Потому что десктопов под Linux меньше 1%? :))

о, бздуны уже причисляют себя к интеллектуальному большинству?

registrant ★★★★★
()
Ответ на: комментарий от Lennier

> Имхо это плохо. Пусть лучше пишут долго, но хорошо.

Платите вы? Или кто?

> Питоновые софтины тоже особой скоростью не отличаются имхо.

Эмм... чем вас Deluge или Mercurial по скорости не радуют? У меня лично - летают.

yk4ever
()
Ответ на: комментарий от rmammoth

> А теперь представь: другой аналогичный деятель через год после твоего увольнения вызывает твой суперкод в достаточно длинном цикле.

[зевает] мой код работает в цикле на 50 млн итераций. Правда, там и другого кода много, и боттлнек там, есесно, в саааавсем другом месте.

> а у машины внутри многа гигагерьцевь, процесор у ней большой, вот пусть она и думает.

Именно. Дядько Кнут что говорил про предварительную оптимизацию? Когда проблема возникнет, берёте профайлер - и ищете проблему. Проблемы не возникло - и НЕХРЕН портить красивый код всякими заковырками.

> И твои тормозные наносекунды плавно перетекают в секунды и десятки секунд тормозов. Знакомая картина?

Это полная хня и старпёрское нытьё. Куда более знакомая картина - это когда какой-то дятел делает в цикле попарное сравнение длинных массивов, запросы к базе без индексов и без кэширования, итеративную конкатенацию - ВОТ ЭТО ДА, вот это действительно интересно, потому что там не "секунды" тормозов получаются, а часы и сутки.

Эт самое, надо решать реальные проблемы, а не в мелочах копошиться.

yk4ever
()
Ответ на: комментарий от rmammoth

> Затем пропишем собственно сравнивание классов по элементам данных (кстати, а вот в шарпе с женериками такое не проканает):

[пожимая плечами] зачем, если есть более удобный способ? Но, при желании, можно сделать через рефлекшн.

> избавились от необходимости юзать замыкания, виртуальные вызовы и т.п., что, замечу, не даром в Моно дается.

[пожимая плечами] если профилирование покажет, что JIT не сумел это заоптимизировать - я мог бы определить не SortKey, а Comparer, и обошёлся бы без виртуальных вызовов и замыканий. Кстати, в чём проблема с замыканиями - мне неочевидно :]

Ну и, я пользуюсь не моно, а дотнетом. Ещё чего не хватало, недоделки в продакшн тащить :]

yk4ever
()

Типичная говноновость - я юзаю три моно-аппликухи и ни одной джава - значит моно в легкую заруливает джаву. А если тупо посчитать кол-во приложений для десктопа на моно и джава?

alex-w ★★★★★
()
Ответ на: комментарий от elipse

>Да, это было ооочень убедительное доказательство.

Зачем доказывать очевидный факт, что десктопных приложений на джаве было создано на порядки больше на всех ОС, чем на моно, хотя, может, отдельные из них пользуется меньшей популярностью, чем моновские на отдельном дистрибе линукса, но в сумме джавовских все равно больше.

>Вот Debian Popularity Contest >http://popcon.debian.org/

А дай мне ссылку где только десктопные приложения.

jhgjhgj
()

Только для разработки я использовал:
Eclipse, Netbeans,
Protege 3.4
Visual Paragirm for UML, DB Visual Architect
JProlog (интерпритатор пролога)

Плагины для ООо
Много мелких поделок - чаты...

А что Моно? Никогда ничего не использовал. Бред, короче.

vladymyrk
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.