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

>>>Тормозят они из-за плохих алгоритмов. Следите за алгоритмами.

>>Оптимизируйте узкие места. +1000 Верно!


>Так а кто спорит? Просто возможности дотнет/моно в плане оптимизации этих самых узких мест довольно ограниченны.


Кхм. Алгоритмическая оптимизация мало зависит от языка.

«Не экономьте одну команду. Экономьте сразу 50!»

KRoN73 ★★★★★
()

>я не говорил что на Mono просто. но swing это не тот фреймворк на котором можно сделать приложение "my first cool GUI application", как следствие мало людей понимают как программировать на swing, все проблемы java на desktop ИМО от этого.

А вот это как очень и очень хорошо и правильно. Лучше пусть играют в плейстейшен, чем плодить на Swingе клоны дельфи-прог

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

> А вот это как очень и очень хорошо и правильно. Лучше пусть играют в плейстейшен, чем плодить на Swingе клоны дельфи-прог

Ну и почему же большинство программ страшные как инфляция в сбербанке ?
Ж)

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

> Не берусь судить, плохо это или хорошо, но почему бы просто не сказать: switch действует а-ля паскаль, break не нужен?

Первая буква в названии языка "C#" указывает на ориентацию на особую целевую аудиторию, которой лучше не рвать шаблон.

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

> Не берусь судить, плохо это или хорошо, но почему бы просто не сказать: switch действует а-ля паскаль, break не нужен?

ЗЫ. А вообще сишный синтаксис говно, это общеизвестно.

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

> Просто возможности дотнет/моно в плане оптимизации этих самых узких мест довольно ограниченны.

Вы просто не умеете их готовить.

"Оптимизация" - это не убрать проверку границ массивов, совсем нет.

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

> Не экономьте одну команду. Экономьте сразу 50!

Правильно! Итак, я решаю сэкономить команды путем вставки SSE кода в самое-самое узкое-узкое место, плюя на переносимость и т.п. Ну очень надо! Как это сделать в дотнет?

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

> Скажи прямо.

Прямо скажу вот что

1) Деплоймент Java приложений очень прост и логичен. Кроме того, нет "DLL hell", как в моне.

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

На каком язычке это было изначально написано?

  0:   iconst_2
  1:   istore_1
  2:   iconst_3
  3:   istore_2
  4:   iload_1
  5:   iload_2
  6:   iadd
  7:   istore_3
  8:   return

JVM это побарабану, на каком язычке я откомпилировал свой исходный код в байт код.

3) Инфраструктур для Java гораздо больше чем для моны. И функциональность их шире, чем шарпейных. Кроме того, фреймворки Джавы гораздо более архитектурно проработаны.


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

Ты все время путаешь системное и прикладное программирование. Даже неинтересно.

По теме: используй C++/CLI для вставки кода SSE.

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

> "Оптимизация" - это не убрать проверку границ массивов, совсем нет.

Ок, я не претендую на роль авторитета. Обратимся к авторитетам:

Дж. Бентли, Жемчужины программирования

"Профилирование программы показало, что 98% времени тратилось на выполнение одной функции. Эта функция была переписана на ассемблере, что увеличило скорость работы программы еще примерно в 2,5 раза"

Да, ранее в этом примере оптимизация структур и алгоритмов подняла скорость в 12 раз. Да, я согласен, что это наиболее существенная оптимизация. Но в совокупности эти две оптимизации подняли скорость в 30 раз, что куда лучше 12. Допустим, исходный вариант работал 30 часов. Оптимизация алгоритмов и структур данных -- 2,5 часа. Оптимизация переписыванием на ассемблере - 1 час, на 1,5 часа меньше промежуточного варианта. По-моему, выигрыш в 1,5 часа при времени работы 1 час -- очень немало. А?

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

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

Только не побарабану вот такое

invokeXXX

Потому что в текущей жабе есть 4 типа инвоков

invokespecial (<init>, super......, private this....)
invokeinterface interface/method
invokevirtual class/method
invokestatic class/static-method

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

Поэтому и планируется ввести invokedynamic который будет лукап символа делать в зависимости от фактически переданного класса - то есть реализовывать дактайпинг.


Второй момент - это языки поддерживающие структурные типы - типа скалы. Передача параметра обявленного структурным типом тоже сделана в виде рефлективного вызова.

И потому _имеет_ значение с какого языка компилили.

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

>"Профилирование программы показало, что 98% времени тратилось на выполнение одной функции. Эта функция была переписана на ассемблере, что увеличило скорость работы программы еще примерно в 2,5 раза"


Думаешь 98% времени исполнения программы тратится на проверку массива?

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

> 1) Деплоймент Java приложений очень прост и логичен. Кроме того, нет "DLL hell", как в моне.

Некоторые считают, что деплоймент нативных приложений в образах VM тоже прост и логичен.

> 2) JVM поддерживает фактически все модные язычки программирования, включая "скриптовые" и "динамические"

> 3) Инфраструктур для Java гораздо больше чем для моны

Спасибо, К.О.

> На каком язычке это было изначально написано?

ХЗ. Подозреваю, что на статически типизированном.

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

>Правильно! Итак, я решаю сэкономить команды путем вставки SSE кода в самое-самое узкое-узкое место, плюя на переносимость и т.п.

Не путай системное и прикладное программирование. Не завинчивай гвозди отвёрткой.

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

Страшные, потому что Sun сделал по дефолту ужасный корявый Metal, вместо небесного Ocean, когда будет Nimbus по дефолту, будет не так страшно

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

>Страшные, потому что Sun сделал по дефолту ужасный корявый Metal, вместо небесного Ocean, когда будет Nimbus по дефолту, будет не так страшно

Лучше бы они KDE L&F организовали (сейчас пользую в основном GTK).

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

> что на статически типизированном.

Ну тогда в качестве домашнего задания - сами изучите JVM.

   0:	invokestatic	#23; 
   3:	astore_1
   4:	getstatic	#63; 
   7:	astore_2
   8:	getstatic	#65; 
   11:	astore_3
   12:	aload_1

А вот исходничек

def i = 2;
def j = 3;
def k = i + j;

Узнаете язычок?

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

> Не путай системное и прикладное программирование. Не завинчивай гвозди отвёрткой

Кто-то что-то сказал о системной программе? Тяжелых прикладных задач не бывает?

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

> Думаешь 98% времени исполнения программы тратится на проверку массива?

Вопросы, на что именно что тратилось, к Бентли. Я хотел лишь сказать, что низкоуровневая оптимизация временами имеет смысл. И что дотнет/моно такой возможности не дает. Вот и все.

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

>> что на статически типизированном.

> Ну тогда в качестве домашнего задания - сами изучите JVM.

Это не тот фрагмент, который ты предъявил раньше.

> def i = 2;

> def j = 3;

> Узнаете язычок?

Не узнаю. Это не Питон, могу сказать точно. Похоже на Boo, но Boo сделан для .NET.

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

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

>Тяжелых прикладных задач не бывает?

При грамотном проектировании - наверное, нет. Тяжёлая часть ложится на систему. В худшем случае - это очень узкий класс задач, который не формирует мэйнстрим :)

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

>Я хотел лишь сказать, что низкоуровневая оптимизация временами имеет смысл. И что дотнет/моно такой возможности не дает. Вот и все.

Если кто-то скажет, что дотнет [или подставить любое другое по вкусу] пригоден и хорош для всех 100% задач - этот человек неадекватен, и спорить с ним смысла нет.

У любого продукта есть области, где эти продукты эффективны и где неэффективны.

И есть продукты, которые эффективны для основной массы задач сегодняшнего рынка.

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

$ cat C1.gr

class C1 {
  def hello() { 
    println "Java!";
  }
}


$ cat C1Test.java

public class C1Test {
    public static void main(String[] args) { 
        C1 c1 = new C1();
        c1.hello();
    }
}

$ groovyc C1.gr

$ javac C1Test.java

$ java -classpath .;groovy-1.6.3.jar;asm-2.2.3.jar C1Test

Java!

$ 

ЫЫЫ :)))


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

>Я хотел лишь сказать, что низкоуровневая оптимизация временами имеет смысл. И что дотнет/моно такой возможности не дает. Вот и все.

Ну да - подключение нативных либ уже отменили.

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

> ЫЫЫ :)))

Не понял восторга, если честно. Ну да, на JVM есть Groovy. В чем причина восторженного мычания - в том, что Groovy можно вызывать из Явы?

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

>ЫЫЫ :)))

Не ыыы.

class X {
    def a = 1
    def b = 2
    def c = a + b
}

=====     relevant cut start ============ >

   8:   getstatic       #33; //Field $const$0:Ljava/lang/Integer;
   11:  dup
   12:  aload_0
   13:  swap
   14:  invokestatic    #39; //Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.intUnbox:(Ljava/lang/Object;)I
   17:  putfield        #41; //Field a:I
   20:  pop
   21:  getstatic       #43; //Field $const$1:Ljava/lang/Integer;
   24:  dup
   25:  aload_0
   26:  swap
   27:  invokestatic    #39; //Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.intUnbox:(Ljava/lang/Object;)I
   30:  putfield        #45; //Field b:I
   33:  pop
   34:  aload_1
   35:  ldc     #46; //int 0
   37:  aaload
   38:  aload_0
   39:  getfield        #41; //Field a:I
   42:  invokestatic    #50; //Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.box:(I)Ljava/lang/Object;
   45:  aload_0
   46:  getfield        #45; //Field b:I
   49:  invokestatic    #50; //Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.box:(I)Ljava/lang/Object;
   52:  invokeinterface #56,  3; //InterfaceMethod org/codehaus/groovy/runtime/callsite/CallSite.call:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
   57:  dup
   58:  aload_0
   59:  swap
   60:  invokestatic    #39; //Method org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.intUnbox:(Ljava/lang/Object;)I
   63:  putfield        #58; //Field c:I
................relevant cut end..................

public class Y {
    int a = 1;
    int b = 1;
    int c = a + b;
}

=====     relevant cut start ============ >

   5:   iconst_1
   6:   putfield        #2; //Field a:I
   9:   aload_0
   10:  iconst_1
   11:  putfield        #3; //Field b:I
   14:  aload_0
   15:  aload_0
   16:  getfield        #2; //Field a:I
   19:  aload_0
   20:  getfield        #3; //Field b:I
   23:  iadd
   24:  putfield        #4; //Field c:I
................relevant cut end..................


ТАк что разница есь - и существенная.

К стати грувистам срочняк надо выкидывать этот их ход конем для
 боксинга и анбоксинга и воткнуть туда генерацию нормальных new 
java.lang.Integer(...) иначе эскейп анализис будет проходить мимо 
этого кода.

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

К стати они что - головой ударились?

Что это за хрень?

//Field $const$0:Ljava/lang/Integer;

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

>Тащить в Windows еще 400Мб KDE к 10Мб JRE как-то не с руки

В виндовсе оно не надо. Как и нимбус. В виндовсе есть свой лук энд фил - пусть его и трекают.

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

> Это Scala, только пишется без ;

*shrug* ну так Скала статически типизированная, и я правильно ответил.

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

это груви. В скале так писать не надо (это в скале обявление 2х 
методов). Там уж тогда var/val. И скала язык статический. 
Там код более эффективный:

class Z {
    val a = 2
    val b = 3
    val c = a + b
}


=================
   1:   iconst_2
   2:   putfield        #14; //Field a:I
   5:   aload_0
   6:   iconst_3
   7:   putfield        #16; //Field b:I
   10:  aload_0
   11:  invokespecial   #20; //Method java/lang/Object."<init>":()V
   14:  aload_0
   15:  aload_0
   16:  invokevirtual   #23; //Method a:()I
   19:  aload_0
   20:  invokevirtual   #25; //Method b:()I
   23:  iadd
   24:  putfield        #27; //Field c:I
==================

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

>>Не хомячить на домашней слаквари, делая по себя вечерами, а работать? За деньги?
>А что можно на этом наработать?

На этом можно много заработать. Даже на С++
В четверг звонил агент, искал С++ на 140к в год. IMHO весьма приличная зарплата(не котракт а постоянная работа).

>Ну так ниша разработчиков C++ исчезающе мала, в пределах погрешности

:)
Вы же не рабоатете с Линукс(как я понял из вашего высказывания), как вы можете рассуждать о том, чего не знаете?

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

>Да в данном теред собралась репрезентативная выборка линуксоидов, ага.
Я думаю, здесь отметились все фанбои, которым заголовок новости ущемил что-нибудь.

Соответственно они перечислили даже то, чем не пользуются. Не верю, что столько людей пользуется уродством Azureus, но включил его в список и 2х программ, так как доказательств обратного не имею.

Кстати, все эти пользователи Azureus пользуют его под виндой, так что на самом деле его нужно исключить из списка популярных Линукс программ.

Соответственно остаётся одна.

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

>Страшные, потому что Sun сделал по дефолту ужасный корявый Metal, вместо небесного Ocean

С чего ты взял про "корявый"? Metal — один из нормальных GUI (есть ещё Motif, но он на любителя), который одинаково выглядит на всех платформах, в отличие от недоделанных и непереносимых Aqua, Gtk и Windows L&F.

"Небесный Ocean" — это вообще страшный УГ, пожирающий лишие такты процессора. Делалось гомиками для гомиков.

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

>Я думаю, здесь отметились все фанбои, которым заголовок новости ущемил что-нибудь.

Все эти фанбои - репрезентативная выборка?

>Соответственно они перечислили даже то, чем не пользуются.


Телепат?

> Не верю, что столько людей


Железный аргумент в статистических исследованиях.

> Кстати, все эти пользователи Azureus пользуют его под виндой,


Телепат?

> Соответственно остаётся одна.


Железный метод стат исследований.

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

>В скале так писать не надо (это в скале обявление 2х методов). Там уж тогда var/val.

Но МОЖНО и методы, dummy-заглушки, а потом развернуть/дописать

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

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

В принципе, я уже начинаю привыкать к местным убогим, которые не умеют читать.

Объяснб ещё раз. Я написал, что не верю, но, так как у меня нет доказательств, я включил Azureus в победоносный список из 2х популярных программ.

Советую перечитать фразу, перед тем как отвечать.


>> Кстати, все эти пользователи Azureus пользуют его под виндой,

>Телепат?

Нет пользователи азуреуса это писали.
В этом-же треде.

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

>Вы же не рабоатете с Линукс(как я понял из вашего высказывания),

Как в этом можно работать? Вот скачал надысь Fedora-11-x86_64-DVD.iso, устанавливаю в VirtualBox 3.0.2, захожу под root-ом. Говорю, установить дополнения гостевой ОС. Ноль реакции. Разрешение естественно выше 800х600 не установить. Эх

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

Например если воспользоваться ohloh (хотя цифры там маленькие и репрезентативность тоже ни к черту) - то среди отметившихся там пользователей популярность одного vuze ~= tomboy+banshee+f-spot.

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

> В худшем случае - это очень узкий класс задач, который не формирует мэйнстрим :)

Да. Например, 3Д игры -- лёгкие, быстрые и не мейнстримные.

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

>Да. Например, 3Д игры -- лёгкие, быстрые и не мейнстримные.

Не ужто их пишут на ассемблере?

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

> Если кто-то скажет, что дотнет [или подставить любое другое по вкусу] пригоден и хорош для всех 100% задач - этот человек неадекватен, и спорить с ним смысла нет.

> И есть продукты, которые эффективны для основной массы задач сегодняшнего рынка

Класс. Мне понравилось. Вот не похвалил человек дотнет явно, а так контекстом, намеком дал понять, что второе утверждение -- это о дотнет. Хотя это самое второе сильно напоминает по степени обобщения первое... Типа не для 100% эффективен дотнет -- такое, конечно, только неадекватный человек скажет -- а для ОСНОВНОЙ МАССЫ ЗАДАЧ. Я умилился.

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

И вообще дотнет - изначально ущербный и не нужный. Т.к. есть Жава и Qt. А выезжает это убожество за счёт пеара и леммингов.

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