LINUX.ORG.RU

С++. Стоит ли писать WM и DE на Java? (ей будет кто-то пользоваться?)

 , ,


0

2

РЕШЕНО: С++

Здравствуйте. Хочу попробовать написать свой WM для линукса. Так вот, стоит ли пробовать на джаве или лучше на плюсах? Просто боюсь, что будет жручее, тормозное, плюс в джаве нет ручного управления памятью. Но она мне привычнее, ибо я кое-что уже под андроид писал. С плюсами маленько сложнее будет.

P. S. Если что-то получится, хочу и до полноценной DE дойти.

★★

Последнее исправление: Dimez (всего исправлений: 5)

Ответ на: комментарий от s-warus

Параметры системы -> Особые параметры системы -> указываешь область, в которой будут запускать окна firefox. Не понравилось - передвинул, изменил размер, развернул, отправил на другой рабочий стол и вообще сделал с окном всё, что угодно. При этом не по желанию, эти действия затрагивают или нет другие окна. Смотря как настроишь или даже запрограммишь через KWin scripts. В тайловых же, возможностей значительно меньше отчего удобнее настроить поведение системы под себя сложнее. Вместо того, чтобы заставить компьютер работать так, как хочется, фанаты тайловых WM переучивают себя, а потом бегают по форумам, доказывая, что так и надо.

Tmux, screen(я по привычке именно его использую), dvtm прекрасны в консоли. Но они сделаны такими не от хорошей жизни, а из-за того, что там сложнее реализовать все возможности, доступные в иксах.

shell-script ★★★★★
()
Ответ на: комментарий от MrCookie

Нафига? Особенно если на java.

Если есть силы время и желание сделать что-то полезное - то включайся в порт xfce или mate на вейланд. Писать WM под иксы - так себе идея, там и так все хорошо. Писать WM(вернее композитор) под вейланд - ну тоже так себе, там говна наплодили вагон и тележку. Юзабельно из этого говна два с половиной калеки, а остальное «ну я вот такое новое придумал».

С DE примерно также. Есть тяжеловесы Gnome и KDE, легкие Mate, Xfce. LX(de)(qt). Все остальное - маргинальщина.

По уму чего сейчас не хватает - легкой альтернативы KDE и гному в вейланде. Пока рисуются 2 варианта более-менее рабочих комбинаций - wayfire как композитор (единственный адекватный не тайловый композитор ) и xfce или mate в качестве DE. И в xfce и в mate поддержка вейланда частичная и глючная. Вот туда бы и приложить силы и знания и время если есть. А не создавать нечто новое гениальное да еще на java что никому нахрен не надо и будет заброшено не дойдя даже до квази-юзабельной альфы

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

Я уже выбрал плюсы. Я просто хочу сделать по-настоящему удобную и уникальную DE. Все нынешние тайтловые wm — неюзабельное говно для клавиатуры. Мой будет для онли МЫШКИ. Точно так же как и стековые, там отдельный ад

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

Напиши, существенной разницы на чём писать нет, хотя как правило предпочтительнее писать на сишке, ибо X11 и wayland как правило написаны на ней, для java(или лучше уж использовать какой нибудь котлин), придётся обмазываться JNI или чем-то подобным. В целом тут всё привязано к желанию.

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

Все нынешние тайтловые wm — неюзабельное говно для клавиатуры. Мой будет для онли МЫШКИ.

И что в существующих нельзя сделать мышкой что у тебя можно будет?

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

Мой будет для онли МЫШКИ. Точно так же как и стековые, там отдельный ад

Ну какбы живу много лет на compiz и теперь на wayfire. Не знаю что можно в принципе сделать удобнее - но попробуй конечно.

Qui-Gon ★★★★★
()
Ответ на: комментарий от MrCookie

Зря. Большинство комментаторов джаву в глаза не видели, размер кучи ни разу не тюнили и дальше попыток запуска javac не заходили. Джава должна взлететь на ура, а если будет много жрать, так она хотя бы умеет это делать, умеет работать с огромными объёмами памяти и даже освобождать её.

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

да в том то и дело, что нет.

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

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

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

а если будет много жрать, так она хотя бы умеет это делать

Дожили, фанбои теперь это за плюс выдают.

умеет работать с огромными объёмами памяти и даже освобождать её

Чтобы работать с огромными объёмами памяти не нужно прикладывать вообще никаких усилий. А вот чтобы освобождать её сразу, а не когда-нибудь, подвесив в добавок на время сборки мусора приложение, это действительно нужно не быть жавой.

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

Дожили, фанбои теперь это за плюс выдают.

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

Чтобы работать с огромными объёмами памяти не нужно прикладывать вообще никаких усилий. А вот чтобы освобождать её сразу, а не когда-нибудь, подвесив в добавок на время сборки мусора приложение, это действительно нужно не быть жавой.

Да-да, было такое 15 лет назад, когда я только вкатывался в предметную область. С тех пор эти изъяны были решены.

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

Я хочу просто попробовать, а ЕСЛИ ВДРУГ что-то хорошее будет вырисовываться, то продолжать

Тогда надо на питоне пробовать, на нем уже даже прототипы драйверов разрабатывают, потом правда на rust переписали. Можно еще OCaml взять для прототипа, тоже часто начинают на нем и переписывают на что-то другое, хотя он вполне может и нормально потянуть WM, у него GC шустрый и экономный. А ява не кажется хорошим языком для прототипирования.

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

Я хочу просто попробовать, а ЕСЛИ ВДРУГ что-то хорошее будет вырисовываться, то продолжать

Да еще C++ для прототипирования тоже лучше чем ява.

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

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

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

Qui-Gon ★★★★★
()

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

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

…С раздельной сборкой вот только будет подвох для джависта. Полноценные модули и import появились только в C++20, который поддерживают не все компиляторы. Как написал один автор с хабра,

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

Если ты хочешь широкого распространения своего творения сейчас, придётся учить набор на костылях с изолентой (#include, стражи компиляции, набор объектных файлов, логически никак не связанный с заголовочными файлами и все потенциальные глюки и тормоза, кои оно за собой тащит), который применяется и применялся в плюсах, а ещё раньше в сишке последние 50 лет. Ну или можно сразу начать писать на C++20, предположив, что к моменту релиза проекта он будет поддерживаться уже везде :) (но если что, я тебя не заставлял, и вообще сейчас это путь сильно для джедая).

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 4)

Уже есть такой, в одну строчку скрипта на си пишется:

TBrowser *a = new TBrowser;

Ну и в .xinitrc добавить вызов скрипта.

Правда, окошки не подвигаешь, но это ничего.

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

А в этом есть что-то плохое?

Полноценно вроде вообще еще никакой компилятор не поддерживает, но рабочие варианты уже есть. Да и системы сборки еще толком не подтянулись, в том же cmake только недавно появилась поддержка.

anonymous
()

Если в DE входит оконный менеджер и элементы GUI, то очень важна гарантия отклика на действия пользователя. И потому языки со сборщиком мусора хреновый выбор. Лучше C++ или Rust.

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

Для тех, кто захочет твой проект из исходников собрать (в том числе мейтейнеров, которые захотят опакетить для какого-то дистрибутива) – да, очень плохое.

И судя по той же статье с Хабра, в реальных программах до сих пор приходится чередовать модули с инклудами. Я туда даже не суюсь пока, сижу на инклудах полностью, тем более, по работе я вообще выше C++11 стараюсь не соваться по причине необходимости сборки под всякую экзотику. В личных проектах свободы больше, но там тоже граблей не особо хочется.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 3)
Ответ на: комментарий от peregrine

не работают.

Там своя JVM, и вообще всё кроме ядра своё, ибо когда создавался Android, для слабых телефонов того времени нужно было писать свои альтернативы всего того, что мы имеем на «обычном десктопном дистрибутиве».

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

Гном сами кушайте. Нам говна не надо.

Kde уже портирован, но он тяжеловат. Awesome и openbox для гиков и любителей ковыряться в текстовых конфигах - сильно нишевая вещь, да и аналогов в вяленом хватает. А нормальной легкой среды нет. Мате в общем-то почти юзабелен уже - научить прятать панельку и drag-drop из архива - и пожалуй готово.

Qui-Gon ★★★★★
()
Ответ на: комментарий от MrCookie

Т.е. Java тоже фрагментирована. На мобилках одна, на десктопах другая. Тут уж даже C# смотрится более цельным. Авалония она конечно жрёт дофига на один процесс, память у неё подтекает (из-за рендеринга на gpu и тем как шарп с ним работает, мелкомягкие со времён 5 дотнета пофиксить не могут, хотя в WPF та же бага висит непофикшеная что и в авалонии, так что казалось бы в приоритете, но нет вместо 50-70 мегабайт что было в 5 дотнете нынче 150-600 на пустое окошко и скачет в процессе сборки мусора туда-сюда, подскакивая при изменении размеров окна), но даже так оно умеет и в десктоп и в мобилки и даже в webasm. При том особо ничего менять не надо. Конечно говна там много происходит, вроде магии на автогенераторах, когда часть кода генерируется на лету системой сборки (пресловутое InitializeComponent();) и тот факт что новый view размазывается по проекту как какая-то фигня.

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

Все тайтловые wm, какие я видел — под хоткеи заточены.

Разве это плохо, когда под все необходимые команды есть хоткеи?

Или ты хочешь, чтобы можно было не только хоткеями, но и мышкой, например, чтобы кнопочка закрытия окна в декорациях присутствовала? В тайловых тоже такое бывает, посмотри, например, галерею ЛОРа по тегу i3. А также вот этот дайджест от @Fizzika.

На более подробные вопросы не отвечу, я i3 не пользовался и вообще из тайловых только awesome щупал, который действительно больше конструктор. Но думаю, коллективный разум ЛОРа тебе поможет, если ты создашь отдельную тему, например, «Тайловые оконные менеджеры и управление мышью». :)

P.S. А вот, увидел это:

Мой будет для онли МЫШКИ.

Онли-то зачем? Я не против мышки как таковой, но лишать пользователя права выбора – плохая идея by design.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 3)
Ответ на: комментарий от MrCookie

Ну, так не интересно

Нет, если основной мотив для тебя – интерес, как разрабатываются WM, отговаривать тебя смысла нет, познание это святое.

Только я бы и в этом случае начал бы с изучения исходников какого-нибудь уже написанного WM. Причём покомпактнее, например, dwm. (Для чего, кстати, понадобятся даже не плюсы, а классическая сишка.) Тебе всё равно придётся думать про многие вещи «как это принципе реализуемо», и это проще и разумнее разбирать на работающих примерах.

А уже после этого можно решить, браться ли за принципиально новый WM или впрягаться (в крайнем случае форкнуть) в уже написанный.

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

Онли-то зачем?

Я имел в виду, что можно будет без клавы юзать, а так хоткеи будут конечно

Разве это плохо, когда под все необходимые команды есть хоткеи?

Конкретно в управлении окнами – да, на мой взгляд. Это неудобно. А в стековых WM сейчас для удобного управления надо «бегать» между мышью и клавиатурой, что тоже не очень.

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

Да почти никому не интересно, на чём оно написано. Если оно будет в принципе нормально работать, то и пользователи появятся. В GNOME вообще огромное количество JS, и это почти никого не парит.

anonymous
()

Proof-of-Concept можешь написать на чём угодно. Всё равно с очень большой вероятностью случится один из следующих исходов:

  1. ты забросишь написание своей WM через пару недель/месяцев;
  2. ты напишешь WM, но поймешь, что концепция нерабочая, и даже ты этим не можешь пользоваться;
  3. ты напишешь WM, но никто кроме тебя ею пользоваться не будет, так что проблемы с производительностью тоже никого волновать не будут.

Так что не трать бессмысленно время на поиск идеального языка для написания, а вместо этого лучше быстренько накостыль на коленке прототип, используя ЯП, который ты хорошо знаешь. На этом прототипе ты уже сможешь проверить рабоспособность своей гипотезы. Если же вдруг выстрелит, то переписать на более подходяшем языке будет гораздо быстрее и проще, имея перед собой мало-мальски рабочий проект в качестве образца.

theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 3)

Надо начать с того, зачем ты это делаешь. Я так понимаю, у тебя нет никакого заказчика и/или конкретного проекта, под который это делается, поэтому возможны две цели: 1) получить фан и набраться опыта; 2) сделать что-то полезное для других людей.

С первым всё просто: пишешь на чём нравится и плюешь на мнение хейтеров. Твой главный пользователь — ты сам.

Со вторым сложнее, и в случае с Java действительно будет много хейтеров, которые не станут пользоваться твоей поделкой из-за языка. Но, допустим, ты написал WM на C или C++, всё очень эффективно и трушно, даже утечек памяти удалось избежать. А пользователей всё равно не будет, если это стопицотый WM на C/C++, не имеющий никаких киллер-фич по сравнению с предшественниками.

Ради чего люди вообще ставят WM?

  • Ради набора фичей, которых у конкурентов либо нет, либо их нужно долго и муторно прикручивать. Допустим, юзер хочет тайлинг, а тайлинг можно организовать по-разному.
  • Ради возможностей кастомизации и расширения. Тут критичен язык файлов конфигурации и/или плагинов.

Я могу ошибаться, но мне кажется, если ты напишешь WM на Java и сделаешь ему возможность кастомизации с помощью Groovy-скриптов, то у такого проекта может быть пусть очень маленькая, но непустая ниша. А если Java заменить на Kotlin, то может даже какой-нибудь скучающий Android-девелопер заглянуть на огонёк.

Кстати, вот случайно в поиске попалось: https://github.com/moaxcp/x11. У них биндинги к x11 генерятся из тех же xml-файлов, что и в xcb. И есть пример простенького WM.

annulen ★★★★★
()

Если это будет что-то действительно оригинальное, типа EagleMode, по сравнению с сотней типовых WM/DE, то на чём угодно пиши, если идея стоящая и взлетит, то перепишут на чём-то более подходящем очень быстро.

А если нет, то опять же пиши на чём угодно, всё равно кроме как для собственного развлечения её написать не получится.

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

Мышь хороша только когда клавы нет например у планшета пальцем тыкать, почему трекпоинт у thinkpad популярен у некоторых, потому что от клавы отрывать руки не надо, и то при чтении книг в фбреадере клавишами регулятора громкости листают.
Что проще алт-таб нажать (у меня активизация приложений на сочетание клавиш повешано, win-s ide, win-f браузер, win-t терминал и тд) или искать и наводить курсор на надпись приложения не надо.
Что проще нажать клавишу чтобы окно максимизировалось-нормализовалось, или искать взглядом и наводить курсор на указанную кнопку.
Удел мыши это игры и рисование, в других случаях её использование не оправдано, медленно и неудобно.

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

Что проще алт-таб нажать (у меня активизация приложений на сочетание клавиш или искать и наводить курсор на надпись приложения не надо.

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

anonymous
()