LINUX.ORG.RU
ФорумTalks

[вещества] DE на Java

 


0

1

Как насчет того чтобы написать DE на Java? Текст далее крайне не рекомендуется читать людям со слабой психикой. Глубокое териотизирование.

Что останавливает? Это конечно же отсутствие Shared JVM. Каждая копия процесса java будет хранить код библиотеки классов. Отсюда толстота запущеных, например 50 приложений. Проверил только что. Оптимизаций никаких не произошло. Если бы такая вещь была бы реализована, то библиотека классов бы заняла может 20 МБ максимум, что даже меньше чем Gnome/KDE и после этого приложения были бы достаточно лековесными.

В принципе можно реализовать запуск остальных приложений в виде просто подгрузки из главного процесса DE необходимых классов с последующим вызовом main. Автоматически получаем Shared JVM, но нужно как-то ювелирно ограничивать классы, чтобы они не лезли к друг другу, не завершили весь DE и решить проблему синглетонов, статических переменных. Может кто-то знает как запустить классы внутри некоторой ограниченной области?

Зачем это все? Мощь фреймворков Java, вот одна причина. Даже самый большой фреймворк для C++ (и вообще нативного кода) - Qt, отдаленно не дотягивает до Java SE, не говоря уже о Hibernate, Spring. Можно еще вспомнить многочисленные проекты Apache, прекрасные фреймворки логирования, отличный SecurityManager Java (сразу фтопку SELinux/AppArmor), готовый прозрачный пакетный менеджер - Java Web Start. JWS позволил бы создать самый очевидный для обычных пользователей AppStore, запускаешь и устанавливаешь одновременно. Сюда еще можно добавить Preferences API и 100500 способ вызывать методы другого обьекта через сеть. Короче есть из чего выбрать. Еще есть интерестные вещи как OSGi, Eclipse RCP и т.д

Ко всему этому нужно добавить торт jvisualvm с возможностью полного дампа всех потоков, их состояний, их стектрейсов, состояний владения lock'ами, всех классов, всех экземпляров классов и связей между ними у любого процесса на лету, с возможностю подключения профилирования CPU и памяти у существующего и запущеного процесса.

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

Пока так, расплывчато, но в целом может быть. Вот такой вброс/не вброс. Модераторов прошу не удалять, все таки интересная теоретическая дискуссия

★★★★★

Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от annulen

Вам AOT нужен для скорости или для скорости загрузки? Если для скорости, то максимальная скорость в Java достигается -Xbatch. Это такой флажок в Java, который вкратце означает «Win programming language speed benchmark»

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

>Вам AOT нужен для скорости или для скорости загрузки?

Ну вообще-то для того и другого. а уж без PGO на десктопе обойтись можно :)

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

.NET какой бы он не был managed, все равно слой масла поверх хлеба WinAPI (черствого)

Ты mono видел? что там от winapi? Полностью своя библиотека классов. Так-же и в родном дотнете. А то, что мелкомягкие догадались нормально сделать возможность вызова внешних либ на сях (в отличие от уебищного jni) и в дотнете этим все кому не лень пользуются - это не проблема дотнета.

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

<сарказм>Ога. А в жабе оно конечно не так. Ню-ню. И различных архитектурных решений там нет, и фреймворков разных мало... </сарказм>

Ну допустим в МС в это не верят, но тогда еще .NET был феерически тормознутым, потому да, не вариант был.

Тогда был уже .net 2.0, который на винде пятую жабу уделывал.

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

Ну и что? Да, плюсы тоже унылы во многом. Но java от этого лучше не становится.

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

Ты mono видел? что там от winapi? Полностью своя библиотека классов. Так-же и в родном дотнете.

И нет ни разу технологий прибитых гвоздями к винде? С Windows Forms все ок? На Linux прекрасно работает виндовый гуй?

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

man jna

import com.sun.jna.Library;
import com.sun.jna.Native;
 
/** Simple example of Windows native library declaration and usage. */
public class BeepExample {
   public interface Kernel32 extends Library {
       // FREQUENCY is expressed in hertz and ranges from 37 to 32767
       // DURATION is expressed in milliseconds
       public boolean Beep(int FREQUENCY, int DURATION);
       public void Sleep(int DURATION);
   }
 
   public static void main(String[] args) {
	Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
	lib.Beep(698, 500);
	lib.Sleep(500);
	lib.Beep(698, 500);
   }
}

Ога. А в жабе оно конечно не так. Ню-ню. И различных архитектурных решений там нет, и фреймворков разных мало..

В Java в классе есть только конструктор, поле и метод. В C# ввалили Г типа свойств, перегрузки операторов, implicit conversion, event. Одни делегаты чего только стоят. Частный случай интерфейса. Лямбды - частный случай анонимных классов. Даже enumы слабенькие, все навсего надстройка над int.

Тогда был уже .net 2.0, который на винде пятую жабу уделывал.

Ну где же еще как не на винде, он же нигде больше не работает нормально. Но по теме: .NET никогда в среднем не уделывал Java. В основном наоборот, Java быстрее. Для того, чтобы он гарантированно уделал Java надо засунуть примитивный тип в generics. Это единственный случай.

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

И нет ни разу технологий прибитых гвоздями к винде? С Windows Forms все ок? На Linux прекрасно работает виндовый гуй?

Есть. Часть библиотек действительно прибита гвоздями. Ну так это на любой платформе так. Я посмотрю как ты будешь переносить приложение с ibm websphere на oracle weblogic.

man jna

Я в курсе про jna, но это не отменяет того, что он не входит в стандарт и его нет в поставке jdk. И так-же он не отменяет уебищности стандартного jni.

В Java в классе есть только конструктор, поле и метод. В C# ввалили Г типа свойств, перегрузки операторов, implicit conversion, event. Одни делегаты чего только стоят. Частный случай интерфейса. Лямбды - частный случай анонимных классов. Даже enumы слабенькие, все навсего надстройка над int.

Делегаты, проперти и лямбды - вполне удобный синтаксический сахар. А за отсутствие перегрузки операторов в жабе иногда хочется кого-нибудь придушить. Особенно после нескольких дней описания сложных вычислений с BigInteger/BigDecimal.

Ну где же еще как не на винде, он же нигде больше не работает нормально. Но по теме: .NET никогда в среднем не уделывал Java. В основном наоборот, Java быстрее. Для того, чтобы он гарантированно уделал Java надо засунуть примитивный тип в generics. Это единственный случай.

Proof needed! По нашим тестам на винде второй дотнет в среднем процентов на 15-20 уделывал пятую жабу. Если жабу пускали под линухом, то результаты были примерно одинаковы (в пределах стат. погрешности).

Да, кстати про корявые дженерики ты сам напомнил.

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

Есть. Часть библиотек действительно прибита гвоздями. Ну так это на любой платформе так. Я посмотрю как ты будешь переносить приложение с ibm websphere на oracle weblogiс

О, это мелочи. Совсем не так усугублено как в .NET. Но там ведь цель была ;)

Я в курсе про jna, но это не отменяет того, что он не входит в стандарт и его нет в поставке jdk. И так-же он не отменяет уебищности стандартного jni.

Оно самими санками делалось. Тебе что jarник жалко положить? А jni - это API для двустороннего склеивания. Тоесть Java вызывает С++, С++ вызывает Java и это двусторонне и с поддержкой ООП.

Proof needed! По нашим тестам на винде второй дотнет в среднем процентов на 15-20 уделывал пятую жабу. Если жабу пускали под линухом, то результаты были примерно одинаковы (в пределах стат. погрешности).

А Java 6 страшно запускать c .NET 4.0?

Да, кстати про корявые дженерики ты сам напомнил.

Ну это ведь только с примитивными типами. А так зато есть совместимость. Старые либы стали автомитисески generic, новые либы хорошо работают с старыми. В .NET все грустно

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

О, это мелочи. Совсем не так усугублено как в .NET. Но там ведь цель была ;)

Это совсем не мелочи. Чтобы переносить приложение между аппсерверами его надо писать переносимым. А тогда все вкусности платформы, которые расширяют стандарт (или вообще в него не входят) останутся недоступными. Ну так и на .net + winforms можно написать переносимое приложение.

Оно самими санками делалось. Тебе что jarник жалко положить? А jni - это API для двустороннего склеивания. Тоесть Java вызывает С++, С++ вызывает Java и это двусторонне и с поддержкой ООП.

Мне то не очень жалко положить лишнюю jar-ку в classpath. Только это не отменяет факта, что корявые стандарты платформы (jni) приходится обходить используя костыли.

А Java 6 страшно запускать c .NET 4.0?

Не страшно, а нафиг не нужно. Ты мне бабло будешь платить за двойную реализацию логики на двух разных платформах? Когда были люди, готовые оплатить такой R&D task, тогда и сравнивали. Было это в году 2006-2007, оттуда и версии платформ.

Ну это ведь только с примитивными типами. А так зато есть совместимость. Старые либы стали автомитисески generic, новые либы хорошо работают с старыми. В .NET все грустно

В дотнет нормальные дженерики появились в самом начале жизненного пути платформы. Поэтому не было кучи legacy неподдерживаемого говна, совместимость с которым надо было тянуть. Вот и поправили детские болезни. А в жабе они уже в неизлечимой форме :(

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

Мне то не очень жалко положить лишнюю jar-ку в classpath. Только это не отменяет факта, что корявые стандарты платформы (jni) приходится обходить используя костыли.

Ты не отличаешь встраиваемый интерпретатор пайтона и его ffi? Тогда и это не поймешь.

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

Как я уже говорил, большая запара будет с кодеками, видео, микшерами и т.д. Ничего аццки мощного в Java для этого нет

vertexua ★★★★★
() автор топика

Всё ясно, какой мелкоскоп в руки не дай, продолжают им гвозди забивать.. :-)))

Так и скажите, что дизайнеров нет, ученых нет... ДЕ создать не в силах :-))

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

Не распарсил относительно дизайнеров, но кажись интерестнось идеи я обосновал

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

Ты не отличаешь встраиваемый интерпретатор пайтона и его ffi? Тогда и это не поймешь.

Эмм. И причем здесь встраиваемый интепретатор?

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

При том, что с jni ты склеиваешь равноценно java и нативный код. Обьекты вызываю друг-друга. В программу на С++ можно встроить JVM и вызывать код оттуда

vertexua ★★★★★
() автор топика

Прекратил чтение после слова «териотизирование»

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

Не могу сейчас точно ответить, но разве использование разных класслоадеров для разных бандлов уже само по себе не изолирует статическую память? Ну и при использовании OSGi надо, естественно, менять подход к архитектуре - тот же синглтон: если он только для бандла такой - то никаких проблем, если для всего контейнера - то надо делать его сервисом - и тоже всё ок.

System.exit зло и убьёт весь контейнер, но возможно поможет модификация байт-кода при загрузке классов.

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

естественно, менять подход к архитектуре - тот же синглтон: если он только для бандла такой - то никаких проблем

Вот это я проверю на практике, так ли это

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

Угу. Замечательно. Ситуация такая-же, как и с большинством жабских стандартов. Куча никому нахрен не нужного функционала. И из-за этого простые задачи, которые нужно решать в 99% процентах случаев делаются либо сторонними костылями либо с редкостным pain in the ass (сразу вспоминаются EJB 2.x, особенно entity кусок спеки).

Сейчас конечно ситуация потихоньку выправляется, но 1 - медленно и печально 2 - до конца она не выправиться из-за тонны legacy с которым надо соблюдать совместимость.

Nagwal ★★★★
()

Ну, напиши на моно.
Hibernate и Spring работают и в моно.
Библиотеки в памяти разделяемые.

ps
По количеству взломов дестопа, Java давно обошла предыдущего рекордсмена - Flash

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

>эх скорее бы допилили VMKit, чтобы можно было комбинировать в жабе JIT и AOT...
Всё это уже есть в mono

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

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

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

>И нет ни разу технологий прибитых гвоздями к винде? С Windows Forms все ок?
WinForms даже на винде уже никто не пользуется. Кроме Java фанатиков, конечно-же.
Нафиг тащить в mono устаревшую технологию?

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

WinForms даже на винде уже никто не пользуется.

И чем там простите пользуются? Далеко не все еще переползли на WPF.

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

В Java в классе есть только конструктор, поле и метод. В C# ввалили Г типа свойств, перегрузки операторов, implicit conversion, event. Одни делегаты чего только стоят. Частный случай интерфейса. Лямбды - частный случай анонимных классов. Даже enumы слабенькие, все навсего надстройка над int.

Вы просто языка не понимаете.
даже var значительно ускоряет разработку, так как не нужно беспокоиться о типе.
Перегрузкой не пользуются там где она не нужна, но extension, lambda, LINQ это технологии делающие работу значительно проще.
простой пример - закрузить у data все name атрибуты и занчения ноды value из XML документа

var enNames = from x in XDocument.Load(filename).Descendants("data")
 select new Pair() { Key = x.Attribute("name").Value, Value = x.Descendants("value").First().Value };
обратите внимание, я не парюсь всеми промежуточными типами, их за меня сгенерирует компилятор.

а затем мне нужно сравнить какие ноды в отсутствуют во французской версии

var missingNames = from e in enNames
  join f in frNames on e.Key equals f.Key into names
  from n in names.DefaultIfEmpty( new Pair(){ Key = null, Value = null})
  where n.Key == null
  select e;
причём это рабтает раз 100 быстрее чем если осуществлять поиск каждого ключа

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

да, Pair() можно убрать из кода полностью. компилятор сгенерирует анонимный класс, только вот в выражении
new Pair(){ Key = null, Value = null}
придётся явно указать тип
new { Key = (string)null, Value = (string)null}

grim ★☆☆☆
()

Это конечно же отсутствие Shared JVM

Совершенно согласен.

Если запускаем одну Jvm и все под ней - то получаем жесткие тормоза при major garbage collection, или того хуже - Perm Gen Out Of Space.

Если запускаем кучу Jvm - то начинаются пляски с размером Heap.

Heap маленький -> низкая производительность .

Heap большой -> неэффективное использование памяти и жесткие тормоза при вытеснении отдельных приложений в swap.

Выхода пока не видно. Причем надо понимать, что это фундаментальный недостаток не только явы, а вообще любых managed виртуальных машин с автоматической сборкой мусора.

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

Но новые судя по всему делают на WPF.

Далеко не все. Многие так и продолжают клепать нетленку на обычных winforms или-же вообще на asp.net и веб-морду переползают.

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

>или-же вообще на asp.net и веб-морду переползают.
Вот это правильнее.
В корпоративном десктопу кроме ворда/эксела всё остальное уже вэб.
BTW, ASP теряет популярность а набирают Spring, MVC, monorail

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

Выхода пока не видно. Причем надо понимать, что это фундаментальный недостаток не только явы, а вообще любых managed виртуальных машин с автоматической сборкой мусора.

Есть такое дело. Языки со сборкой мусора предназначены либо для очень жирных проектов, либо для совсем мелких скриптов (где он отработает и будет грохнут операционкой вместе с освобождением ресурсов еще скорее всего до первого запуска gc).

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

Да, и это подтвердает то, что winforms отмирают даже на винде. А фанатики всё продолжают тыкать моно этой устаревшей библиотекой.

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

BTW, ASP теряет популярность а набирают Spring, MVC, monorail

Ну тут спорить не буду, поскольку никогда не интересовался относительной популярностью фреймворков для веба за пределами j2ee.

Nagwal ★★★★
()

Если и писать DE, то на питоне. ;)

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

А то, что мелкомягкие догадались нормально сделать возможность вызова внешних либ на сях


Знаешь, если ms-овцы хоть что-то свое способны были высрать, а не как советские инженеры только тырить чужое, они бы первые высрали жабу. И у их жабы был бы точно такой же уебищный jni. А Sun бы по их следам и на их ошибках сделал бы Java 2.0 но уже с толковым pinvoke.

Никто не виноват в том что мс подбирает чужие решения и улучшая их, выдает свои

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

Повторюсь. man jna. Тут товарищ доказывал что несмотря что есть jna и его использование не составляет трудности, то Java фигова, так как есть jni

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

и переписали к чертям все прототипы на unmanaged c++


И теперь эти идиоты продолжают не отказываться от своей затеи управляемого десктопа и пилят уже пятую версию Framework и даже центральную свою IDE студию написали полностью на .NET

Karapuz ★★★★★
()

Вроде в солярке модное ДЕ сделано на базе гнома с кучей явы.

А вообще предлагаю дописать xmonad до уровня ДЕ )

Ну или на лиспе.

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