Electron это Flash для десктопа

https://josephg.com/blog/electron-is-flash-for-the-desktop/
  • Перевод
Почему в настольном приложении Slack, скорее всего, есть драйвер для работы игрового контроллера Xbox и чего, действительно, плохого в использовании Electron для построения настольных приложений.

image

На скриншоте ниже, согласно профайлеру, Slack занимает почти все ресурсы процессора. Интересно, чем это он там занимается?

image

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

Но это нормально для Slack. В фоновом режиме Slack часто потребляет 5% процессора. Что он делает? Я без понятия.

Я готов поспорить, что команда разработчиков Slack тоже не знает. Сколько строк кода им пришлось написать чтобы их клиент работал? Я думаю в районе 50 тысяч. Возможно, 100 тысяч. Но Slack — не нативное приложение. Или не обычное нативное приложение. Он работает поверх Electron, а это значит, что когда вы его скачиваете, вы на самом деле скачиваете полную копию Google Chrome (скорее, Chromium — прим. пер.). Chrome на момент написания содержит 15 миллионов строк кода, не являющимися комментариями. Код непосредственно Slack составляет менее 1% объема загрузки.

Chrome сам по себе — тот ещё боров. Он большой и сложный. Он использует ОЗУ и процессор как будто больше на них никто не претендует и сильно уменьшает время жизни от батареи.

Вы можете думать о Slack как о маленькой программе на JavaScript, которая работает внутри другой операционной системы (виртуальной машины) Chrome, которую вы запускаете чтобы, в сущности, пользоваться аналогом IRC. Даже если сам Chrome у вас уже запущен, то каждое приложение на Electron разворачивает свою, дополнительную копию.

И называть Chrome операционной системой — это не преувеличение. По количеству строк кода Chrome практически такого же размера как ядро Linux. Как и у ядра Linux у него есть API для различного оборудования, включая OpenGL, VR, MIDI. Он содержит встроенную копию SQLite, систему управления памятью и свой собственный диспетчер задач. На macOS в нём даже есть драйвер USB для игрового контроллера Xbox 360. (Я знаю что он там, потому что я его и написал. Извините.)

Содержит ли Slack мой код для контроллера Xbox? Знает ли команда Slack об этом? Знает ли об этом хоть кто-то? Slack занимает 160 Мб на диске. Это порядка 70 несжатых копий Властелина Колец. Другие приложения Electron на моем компьютере — Spotify (200 Мб) и Atom (260 Мб). Linux я впервые установил при помощи дискет. Понадобится 450 дискет, чтобы записать эти три простых приложения. Все вместе они весят как настольный дистрибутив Ubuntu. Который, думаю, содержит в себе клиент IRC, текстовый редактор и музыкальный проигрыватель. Полноценная операционная система, пользовательское окружение и веб-браузер.

Вы скажете, что дисковое пространство сейчас ничего не стоит. Да, но не оперативная память. Новенький блестящий MacBook Pro по умолчанию укомплектован 8 Гб ОЗУ. В связи с продолжительностью работы от батареи вы не можете приобрести модель с более чем 16 Гб. И прямо сейчас Slack находится где-то между 300 Мб и 1 Гб в памяти моего ноутбука:

image

Come on. Это приложение для обмена текстом.

Другая вещь, которой всегда не хватает — заряд батареи. Современные процессоры сохраняют заряд путём остановки когда это возможно (когда нет никаких задач). Проклятие power management это программы, которые постоянно используют процессор всего на пару процентов. Они заставляют процессор постоянно просыпаться, разгоняться и снова останавливаться. Это идеальный способ уничтожить драгоценный заряд батареи. Если у кого-то есть время (просто оставьте их запущенными) — я бы посмотрел как сильно Spotify, Slack и Atom уменьшают время работы от батареи на современных ноутбуках. Это невероятно.

image

И нет, Spotify не проигрывает музыку. Он просто… запущен. Делает свои загадочные хромовские дела. И он тоже использует несколько процентов процессора. Просто, чтобы существовать.

(Во время написания этой заметки Chrome в отместку решил занять 100% ресурсов процессора. Во встроенном диспетчере задач это был загадочный процесс «Browser». Спасибо, Chrome.)

Если быть честным, то JavaScript вне браузера не является проблемой. На самом деле я думаю, что API, которые предоставляет современный веб гораздо лучше существующих API операционных систем. Мы должны ими пользоваться.

Но нам необходимо найти возможность использовать эти новые парадигмы (React и его друзья) на настольных платформах без необходимости запускать больше чертовых копий Chrome. Мне просто не настолько интересно ваше приложение, чтобы это оправдывало запуск очередного инстанса Chrome. Разработчику легко попасть в ловушку ощущения того, что ваше приложение или сайт это подарок человечеству и самое важное, чем они могут заниматься. Почему бы не воспользоваться избыточными ресурсами? Нам нужно бороться с таким образом мышления. Такой путь приводит к миру, где у нас не может быть хороших вещей. Такой путь приводит к миру, где батареи наших ноутбуков должны вырасти, чтобы обеспечивать питанием процессоры, чтобы они выполняли ещё больше бесполезной работы. Такой путь приводит к возвращению Shockwave Flash и нагревающихся в карманах телефонов, которые загадочным образом оказываются разряжены когда мы хотим ими воспользоваться. К паранойе по отношению к заряду батареи и закрытию приложений как только мы закончили с ними работать. (Я смотрю на вас, iTunes и Mischief.)
Просто скажите Electron НЕТ
Разработчики, не позволяйте своим друзьям писать приложения на Electron. Если вы хотите использовать JS и React — воспользуйтесь React Native. Это как Electron, но только у вас нет необходимости распространять копию Chrome всем пользователям и запускать ещё одну копию Chrome чтобы использовать ваше приложение. Оказывается, современные операционные системы уже имеют хорошие и быстрые UI библиотеки. Используйте их, олухи!

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

Может, мы должны покупать более медленные компьютеры, чтобы почувствовать боль. Facebook намеренно ограничивала скорость интернета в своих офисах раз в неделю, чтобы вызвать сочувствие их пользователям в других странах третьего мира (кхе-Австралия-кхе). Может, как разработчики, мы должны тоже делать это со своими компьютерами, например, заставлять код работать гораздо медленнее, чем обычно, чтобы вооружиться интуицией в отношении производительности. Пару лет назад я оставил свой ноутбук на работе на долгие выходные. Вместо поездки за ним я решил подключить мой Raspberry Pi (чертовски медленное 1 поколение) и использовать его для разработки. Внезапно, множество операций, которые осуществлялись мгновенно на моём обычном ноутбуке с i7 стали ужасно медленными. И я потратил выходные, чтобы сделать свой рабочий процесс более гладким. Все эти твики производительности также переносятся и на обычные устройства. Уменьшение времени запуска с 5ти секунд до 2х на Raspberry Pi ощущалось невероятным прыжком. Это исправление точно так же стало прыжком с 0.5 секунд до 0.2 или вроде того. Это всё равно очень заметно для пользователя. Время запуска в 0.5 секунд достаточно мало, чтобы упустить этот факт при разработке, но падение до 0.2 очевидно ощущается как намного быстрее.

Пользователи: Пожалуйста, жалуйтесь на медленные программы. На дворе 2016 год (… — прим. пер.). Мы носим суперкомпьютеры в наших карманах. Для программ недопустимо быть медлительными.

Разработчики: Производительность имеет значение. Память имеет значение. Мне не важно, что ты самая привлекательная девушка на танцполе, Slack. Я закрываю тебя как только покидаю офис. Я удаляю тебя с компьютера как только имею такую возможность. Медлительность это баг. Самая быстрая программа это та, которую ты не запускаешь. Так что хватит встраивать целый Chrome в своё приложение.

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

И да, почитайте про кризис ожирения сайтов (перевод на Habr). Это очень смешно. И очень грустно. И очень жизненно.

Edit: Spotify на самом деле использует Chromium Embedded Framework вместо запуска через Electron. Но он всё равно встраивает Chrome. Я не знал об этом когда писал статью, но не забираю свои слова по поводу конечной производительности.
Поделиться публикацией
Комментарии 457
    +47
    Совершенно справедливая статья.

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

      –30
      Те, кто говорят Электрону нет, писали ли софт под Электрон? Я придерживаюсь мнения, что тормоза из-за самой реализации кода на JS, от неумения или не желания балансировать с рендерингом и запросами. А то, что покдачивается весь Электрон, ну с другой стороны и всякие NET Framework-и тоже подкачиваются.

      И хотел бы добавить про Оперативку, многие говорят, что типа JS — Браузер сам мусор убирает, потому память и растет, ну он очистит ее, но разработчики на самом деле могут предопределить количество нужной памяти, создав массив, в который бы сохраняли что хотели, а потом сами бы очищали. Грубо говоря, если вы хотите экономить оперативку и чаще ререндерить, то вы можете завести массив, к примеру из 20 ячеек и постоянно их переписывать актуальными данными для рендеринга, тогда сохраните оперативку, но нужно ли это )

      Я так делал, когда для 4 айпада писал на JS интерактивную книгу на 100+ страниц (PDF трансформировался в PNG и накладывались звуковые и анимационные эффекты), так как на Айпаде было мало оперативки, а JS и Webview прожорливые — можете представить, но я справился. Считаю Электрон — удачная платформа, а Slack — не самый качественный софт. В тоже время мне не нравится React (субьективно), предпочитал EmberJS, сейчас на свежем Angular.
        +6
        хром даже пустой прилично кушает. а память, как верно сказано — весьма не резиновая
          +16

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

            +7
            На это и расчет: вы не можете отказаться…
            +2
            Вообще, это известный факт: в языках со сборкой мусора потребление памяти будет выше. Так как сборка обычно производится при достижении какого-то порога, а не постоянно. Но зато не надо тратить время на ручное управление и исключены всякие неприятные ошибки типа use-after-free.
              +6
              В хороших языках нет обязательного ручного управления памяти и нет конкурентного GC, и ошибок вида use-after-free тоже нет. Привет, Rust.
                +2
                В хороших языках со сборкой мусора тоже не будет потребления памяти выше, потому что те же JVM/CLR не пытаются целый браузерный мир эмулировать.

                Я не знаю, как надо считать, чтобы приложение на Electron у человека ело меньше, чем аналог на каком-нибудь Avalonia.
                  +3
                  >> В хороших языках со сборкой мусора тоже не будет потребления памяти выше
                  Будет и в разы. Но конечно не так сильно как с браузером.
                    +5
                    Значит, будет выше потребление CPU.

                    Баланс между потреблением памяти и процессора для gc — давно известный факт в теории этих самых gc.
                      0
                      Я сравнивал с cromium, а не с нативными языками, что из контекста должно было быть понятно. Прошу прощения, если криво написал.
                +7
                А то, что покдачивается весь Электрон, ну с другой стороны и всякие NET Framework-и тоже подкачиваются.

                1. Необязательно. .Net Framework предустанавливается в ОС начиная с WindowsXP SP1. Если, например, в минимальных требованиях Windows 7, можно использовать .NET Framework 3.5.1. Приложения получаются очень компактные (например, окно с надписью Hello world на WPF — 4 кб)
                2. Все приложения .net разделяют общий фреймворк, а каждое Electron приложение включает в себя свой собственный инстанс хромиума. Отсюда разный размер и потребление памяти.
                3. Вообще сравнивать эти 2 платформы нечестно, т.к. .net framework работает только под windows (а .net core не имеет UI библиотек в составе). Кросплатформенный фреймворк всегда тяжелее нативного
                  +1
                  Хаха, я тут видел одну поделку, назовем её «видеословарь». Так вот. В Win7 оно потянуло какой-то .net на полтора гига + захотело ms sql server express, потому что данные были типа в базе. И запускалось через раз даже после всего этого. Угробищность UI я вообще передать не смогу. Ну и понятно, на XP оно вообще не работало. От слова совсем.

                  Переделанный на nwjs вариант запускается везде, начиная от XP, кончая OS X. Ах, да, еще и на сайте работает на той же кодовой базе. Хотя там ее собственно 50 строк
                    +1

                    Ну и какие выводы я должен сделать из этой истории?

                      0
                      Ну наверное, что не всегда .NET и вот это все бывает так хорошо
                        0

                        А я нигде не писал что .Net всегда хорошо, и даже что Электрон это всегда хорошо.
                        Я лишь пытался донести до человека, что можно сделать на нем компактное приложение под винду, которое не требует ничего предустановленного

                          0
                          Ну извините, мне показалось «восхваление .net»
                          0
                          Это история про то, как кто-то взял микроскоп забивать гвозди, уж извините.

                          Во-первых .Net есть предустановленный.
                          Во-вторых .Net ставится один раз, как какой-нибудь DirectX или C++ Redistrutable. Нет ведь проблем с установкой игр из стима, которые требуют версии от 2008 до 2016 включительно?
                          В-третьих если у вас стоят AMD/NVidia драйверы, то наверняка у вас и их маркетингова тулза типа Experience стоит, что тоже доказывает, что можно писать удобные Net-приложения, которые ничего не выкачивают и просто работают.
                            0
                            Читайте ниже.
                            Какие-то не очень адекватные (с моей точки зрения) люди, сваяли продукт «на коленке». Используя для этого вот эти вот ваши MS технологии.
                            Другие люди, ЦА этого продукта и в некотором роде заказчики, попросили меня посмотреть что получилось. Ибо никто из получивших DVD с этой поделкой не смог его запустить и посмотреть.
                            Ввиду того, что у меня OS X, мне пришлось поставить в Parallels чистую Win7 Pro SP1. При установки продукта было предложено скачать и установить какие-то части .Net/C++ Redistrutable/MS SQL Server Express, что в сумме и набежало гиг-полтора со всеми сопутствующими обновлениями. Под WinXP оно так и не завелось.

                            Я не говорю, что .net это плохо, плохо то, что не все могут его использовать правильно. И данный пример лишь иллюстрирует, что и на .net можно написать гигантский кусок говна.
                              0
                              s/.net/%techstackname% :)

                              Понятное дело, что серебрянной пули нет и сделать хрень можно на чем угодно.
                        +1
                        какой-то .net на полтора гига

                        .Net 4.7.2 весит 80 Мб. Причем это самый новый из всех .Net'ов.


                        А можете дать ссылку на тот .Net в 1.5 Гб?

                          +1
                          Возможно это субъективное восприятие автора комментария. Во времена XP до первого сервиспака выкачивание 80мб с теми скоростями интернета было куда более серьезным испытанием чем 1.5Гб сегодня.

                          Вот кстати Volkov Commander занимал 64кб, а сколько будет весить его аналог на Electron или на .NET?
                            +2
                            Вы же понимаете что все эти электроны нужны тогда, когда у вас UI не текстовый?
                              0
                              Не очень понял. На мой вкус по количеству графических элементов тот же VC не сильно отличается от VSCode или тот же centericq от slack.
                                0
                                > На мой вкус

                                Это очень субьективно, если сравнивать vscode и какой-нибудь neovim + tmux то в целом я может быть и согласился бы что различия несуществественны, но вот слэк с стерминалом сравнивать…

                                По сути, вы либо слэком не пользуетесь (к слову, пользуетесь ли?) либо у вас очень интересные вкусы. Нет, если вы представите концепт того как слэк в терминале сделать — мне будет любопытно (даже очень). Повторюсь — слэк это не только чатики.
                                  0

                                  Слаком { \ˈslak \ } увы пользуюсь — корпоративный стандарт. А вы пользовались centericq?


                                  Повторюсь — слэк это не только чатики.

                                  Да ради бога. В придачу поиск и медиаконент. Посмотрите на Far с conemu. Вы все еще считаете что гигабайт оперативки не перебор, даже с учетом всех ваших киллер-фич?

                                0
                                Но терминал на Electron — состоявшийся факт, тем не менее.
                                  0

                                  нет.
                                  запустить под облочкой winpty-agent.exe и cmd.exe — это не терминал. При том, что сожрала эта поделка 50 мб поверх 0,8 того, что спрятала под себя…
                                  А еще при запуске стандратного виндового ssh до сервера не смогла нормально при изменении окна отрисовать запущенный mс.
                                  Сравните это с ConEmu, что ли....

                                    0
                                    Я говорил про другое, и не особо намерен выяснять продвинутость и каноничность Hyper как, собственно, терминала. Исходный комментарий постулировал, что Electron нужен, когда UI не текстовый, на что я дал пример программы с текстовым UI, которая сделана через Electron, несмотря ни на что. И да, жрёт память. Как и всё на электроне. Зато можно темки писать на CSS. Прогресс, что.
                                      0
                                      Так стили и Qt и GTK поддерживает.
                              +2
                              Там, скорее всего, инсталлер всех этих якобы бесплатных говнопрограмм, которые вместе с собой ставят всякие браузеры амиго, оптимизаторы винды и прочий сброд, никакого отношения все это к дотнету не имеет.
                                0
                                Там еще всякие SQL Server Express и все остальное, я не знаю на чем и как это было написано, что система предлагала скачать для запуска, то и качалось.
                                Ставилось на чистую Win 7 Pro SP1
                                  0

                                  А причем тут .Net тогда? Для UI-only приложений достаточно .Net. Просто этому продукту требуется серьезная база данных (SQLite недостаточно).

                                    +1
                                    Этому приложению не требовалась никакая серьезная база, да и вообще база.
                                    Повторюсь — сейчас это так же «на коленке» для теста собрано мной на nwjs (тот же Electron, вид сбоку). Данные вообще в json в файлике лежат. И 50 строк универсального кода, работающего как под node, так и в чистом браузере с web-сервера. И при этом сборка под XP/Win7+/OS X вообще без проблем
                                      +3
                                      Этому приложению не требовалась никакая серьезная база, да и вообще база.


                                      Левое приложение, которому не требуется база, устанавливает SQL Server Express, который не имеет никакого отношения к дотнету, но во всем у вас дотнет виноват. Почему именно он, а не ящирики с планеты Нибиру?
                                        0
                                        Использование базы просто потому, что те, кто делал приложение сделали так. Я не знаю почему. Само приложение на .net. Выглядит как поделка левой пяткой секретарши.
                                          0
                                          Что мешало Sql Server Express использовать в приложении на C++? Java?
                                        0
                                        Этому приложению не требовалась никакая серьезная база, да и вообще база.

                                        А что это за приложение такое, приведите ссылку, пожалуйста? Я не спорю, что иногда разработчики тянут ненужное, но чтобы устанавливать базу и не использовать — это что-то новое.


                                        И непонятно, что вы отстаиваете? .Net весит немного, тут мы согласились. Если есть какая-то задача решается в 50 строчек на JS и требует аж целой базы на .Net — я с радостью бы посмотрел на неё, так как попахивает вымыслом.


                                        Если же вы хотите сказать, что некоторые разработчики устанавливают много всего на комп — ну так Politura объяснил выше как минимум одну причину. Так Google Chrome изначально распространялся, т.е. Adobe Flash устанавливал этот самый хром, если не убрать галку.

                                          –1
                                          Имелось ввиду, что приложение, изначально написанное на MS технологиях под Windows на .net использовало для своих данных базу MS SQL Express или как там ее. По факту оно запустилось только под Win7+ путем установки еще пачки софта. Ссылки не будет, оно давно стерто у меня, да и в интернет не выкладывалось. Я его получил на dvd чисто оценить и попробовать и принять решение, что так не годится и подумать над другими вариантами.
                                          Мой быстрый прототип на 50 строчек js кода + html конечно никакую базу не использовал. Тупо грузится json и этого достаточно. Суть показать список слов-терминов и показать видео для каждого.
                                            +1
                                            То есть вы по какому-то непонятному приложению, неизвесто кем и с какой целью написаному судите по всему дотнету. Дайте тогда уж оценку качеству всех веб-технологий вот по этому сайту, припример: www.constellation7.org/Constellation-Seven/Josiah/Index.htm (не знаю что это, гуглил уродливые сайты).

                                            С большой долей вероятности то, что вы сделали на электроне в 50 строчек js кода можно сделать под дотнет со сравнимым количеством строчек кода и получить приложение, которое будет занимать десятки килобайт и работать на всех Windows начиная с XP с третьим сервис паком и заканчивая самой последней 10-кой без каких либо доустанавливаний чего-нибудь еще. Просто запускаете экзешник в десятки килобайт и он работает. Ну да, будет стандартный windows-интерфейс, если нужны будут украшательства, за счет картинок и прочего размер наверняка вырастет, но врядли будет больше сотен килобайт.
                                              0
                                              Не, просто он на 50 строчек кода набросал прототип, ну и фигня ваш дотнет.
                                              А если бы начал пилить уже полноценное приложение, тот тут был бы и электрон и БД какая-нибудь.
                                    0
                                    Насчет полтора гигабайта это конечно вопрос. Но в целом мне помнится (могу ошибаться) раньше дотнет надо было качать последовательно. На ту же XP. Просто 4й скажет что нужен 3й итд. Может отсюда и большие объемы? не берусь утверждать. Лет 5 сижу на маке. Дотнет вижу только когда время от времени пытаюсь родной keepass запустить на mono
                                  0
                                  А я пользуюсь HEX-редактором Bless, написанным на C# + GTK+. Запускается почти моментально, mono потребляет 17 мегабайт RAM, а сам bless — 200 кбайт.
                            +33
                            15 лет пишу под винду десктопный софт, но JS-приложения для десктопа… Не могу этого понять. Зачем? То есть нафига? Это такой способ поиздеваться над пользователяли? Троллинг? Или это полноя и окончательная победа Идиократии? У меня только непонимание и одни вопросы… Наверное безнадежно я устарел. Могу написать софтинку на VCL под Дельфи, или MFC. На нелюбимом WPF под шарпы. С Qt тоже знаком. Да хоть на голом WinAPI, сделаю вам красивый UI и все будет летать со скоростью блокнота. И даже в сотню кбайт скомпилированного EXE с зависимостями только виндовых библиотек. Но эти кривые и монструозные жс приложения в сотни мегабайт. Так и хочется крикнуть — Господь жги, тут уже нечего спасать…
                              +33
                              Может быть чтобы была одна кодовая база на все популярные ОС: win, macOS, linux, iOS, Android, web?
                              Это же выбор между скорость и стоимостью разработки и количеством сжираемых ресурсов железа пользователя. Кто-то готов потратиться и пожалеть юзера, кто-то не готов. Особенно это становится актуально, во времена, когда «Мы носим суперкомпьютеры в наших карманах.» Почему бы не использовать бесплатно эти суперкомпьютеры и платить за разработку только одной программы, а не пяти?

                              И уж тем более глупо советовать «подите выучите С или Rust, вы, веб-разработчики». Не думаю, что Slack пишут макаки, выбор писать на веб-стеке — это осознанный выбор, а не от того, что «ничего другого не умеем».
                                +29
                                Это просто экономия, в ущерб конечным пользователям.
                                Разработчики написали одну веб-версию, и вместо того что бы написать нормальный десктопный клиент, обернули вебверсию электроном, Готово.
                                Для стартапа это нормально, но Slack Technologies уже зрелая компания с огромной базой корпоративных клиентов, пора и о них подумать.

                                Даже не вижу смысла качать их клиент, просто держу открытую вкладку Slack в браузере.
                                  +10

                                  Да, это экономия в ущерб конечным пользователям. Я это и сказал. Глупо ожидать от бизнеса, что он не будет снижать затраты, когда он может их снижать. Бизнес — не альтруизм.

                                    0

                                    я бы не сказал что в ущерб


                                    чтобы написать быструю прогу, нужны ресурсы, хорошие ресурсы и время


                                    это намного большие деньги, чем на js


                                    и если например чтобы пользоваться этой прогой вам нужно заплатить 100 баксов в месяц вместо например 10, вы заплатите?

                                      0
                                      На самом деле, в конечном счете, мы заплатим по 100 баксов, так как программа будет отъедать все больше ресурсов на разработку и поддержку. И тариф будет увеличен.
                                      Ну или пользователь будет вынужден заплатить 100 баксов, чтобы купить дополнительную память\процессор\итд.
                                        0
                                        просто все те, кто ноют, что памяти мало и скорость мала, пусть вспомнят о том, что в 1995 году были спектрумы с 64 кб памяти

                                        а в 2000 году (18 лет назад) pentium с непомню-уже-сколько памяти (наверное 256 Мб), и windows 98 работала на этом компе, хотя и со скрипом.

                                        а сейчас компы такой же мощности, если не выше, умещаются в задний карман джинсов и можно в браузере запустить виртуальную windows 98 и в автобусе ехать и работать по несколько часов =)
                                    +5
                                    Вот тоже умa нe приложу — нафига все качают Слаковское приложение (по сути запускают еще один хром)??
                                    Веб версия же всe умеет (кроме шаринга десктопа нa видеозвонках)
                                      +7
                                      Слаком не пользуюсь, но все же удобнее когда есть разные приложения на панели задач, чем куча вкладок в браузере.
                                        +6

                                        PWA нас всех спасет.

                                          0
                                          Чем именно? Даже если будет в отдельном окне — все равно та же унылая веб фигня. Ладно дома у меня i7, ссд и 16 гигов ддр4, а на ноуте, который покупался в дополнение к пк на сумму которую не жалко, двухядерный целерон и 3 гига памяти.
                                            +2

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

                                              0
                                              Хром выделяет по процессу на вкладку или их группу.
                                                +1

                                                Нативное приложение это тоже минимум 1 процесс

                                          0
                                          Ну так можно же ярлык добавить.
                                            0
                                            Эм, ярлык на что? Как будто будет открыто отдельное окно которое не будет стакаться с окном огнелиса, не будет затирать последние открытые вкладки при неправильном порядке закрытия окон и т.д.
                                              0
                                              Я имел ввиду PWA, но да, лиса не умеет
                                                +1

                                                В Firefox есть профили, можно параллельно запускать несколько независимых инстансов с разными профилями. Например запуская:


                                                firefox --new-instance -P foo

                                                Где foo — произвольное имя профиля (если такого профиля ещё нет, откроется окно с управлением профилями).


                                                Каждый профиль имеет свой набор расширений и настроек браузера.

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

                                              Мне наоборот нравится поменьше открытых программ :)
                                              А вкладки вроде слака/почты и т.п. я обычно делаю «Pin Tab» тогда они занимают меньше горизонтального места и их труднее нечаянно закрыть.
                                              0
                                              Веб версия же всe умеет (кроме шаринга десктопа нa видеозвонках)

                                              вроде и это реализуется через расширение устанавливаемое в браузер.
                                                –2
                                                Потому что Маки например не умеют в нормальное переключение окон одного и того же приложения, например. Только «Показать все окна». Довольно неудобно на мой взгляд.
                                                  +2
                                                  Вы сейчас про Cmd+` или про что-то другое?
                                                    0
                                                    Вероятно оно. Я обычно через ПКМ по нужному приложению щелкаю
                                                      0
                                                      Ну то есть не умеете «вы», а не «Маки»
                                                        0
                                                        Разница между переключением окон и навигацией по всем окнам сразу несколько отличается, так что нет, это именно маки не умеют.
                                                          0
                                                          навигацией по всем окнам сразу

                                                          Ctrl+Expose

                                                0
                                                Это просто экономия, в ущерб конечным пользователям.

                                                на минуточку, Slack это коммерческое приложение. Пользование им стоит денег. Вы готовы платить в 5 раз больше, чтобы получить быстрые и качественные нативные приложения под 5 платформ? Даже сейчас у слака не самая приятная ценовая политика, а за 5х никто им не будет пользоваться вообще
                                                  +2
                                                  Да не будет оно стоить x5. Уже поясняли что расходы на дизайн, логику работы, бэкенд часть одни.
                                                    0

                                                    А еще общие для все клиентов части можно вынести в переиспользуемый модуль/компонент

                                                    +5
                                                    Сейчас у Слака 193 открытые вакансии: slack.com/careers#openings Из них разработчиков два-три десятка от силы. Они могут прямо сейчас нанять по десять разработчиков на каждую платформу, из-за этого цена вырастет на 2%, не больше.
                                                    –1
                                                    Не пойму почему все приводят приложение Slack как пример насколько Electron плох. Скачайте приложение Discord, оно очень крутое, сделано на том же Electron.
                                                      0
                                                      Не пользовался слаком, но пользовался дискордом. И могу сказать, что, на мой взгляд сисадмина, он тормозит. А ещё лезет по процессам, да и вообще куда не просят.
                                                        +1
                                                        Ок, VSCode. Функционально — круто. Можно быстро поднять себе удобную IDE под любой ЯП. Поднимал под C++. Я понятия не имею, что, но томозило оно знатно. Пустым (ну, м.б. с 1-3 плагинами) пользоваться ещё можно, но чуть больше и всё.
                                                          0
                                                          может быть тупил какой-нибудь криво написанный плагин или может быть language server для вашего языка тупил. Мало ли.
                                                            +1
                                                            А вот Sublime предлагает отключать плагины, которые тупят.
                                                              0
                                                              Может и так конечно, но именно по этой причине пока забросил её в долгий ящик.
                                                            +1
                                                            4790 проц, 16 Гб, эта хрень стартует секунд 15. Телега в которой у меня в 10 раз больше групп и каналов меньше секунды.

                                                            Каким раком дискорд попал в крутые приложения?
                                                          +3

                                                          Есть Slack, а есть к примеру Discord, оба на электроне, но просто сравните скорость их работы и отзывчивость интерфейса.

                                                            +1
                                                            Я пока видел только vs code из таких приложений которым хоть как то пользоваться можно. Дискорд тоже непозволительно много ресурсов сжирал для задач которые выполняет и не сказать что быстро на слабом железе работал.
                                                              0
                                                              Меня больше всего убивает скорость запуска — что того, что другого.
                                                                0
                                                                не можно, не может открыть лежащий рядом файл, долго что-то ищет ( этот же файл ), а потом начинается самое веселое, разваливается на ходу, плагины перестают работать один за другим
                                                                  0
                                                                  Я пока видел только vs code из таких приложений которым хоть как то пользоваться можно.

                                                                  Несколько плагинов в него влепи и посмотри на результат.
                                                                    +1
                                                                    К счастью я вовремя одумался и вернулся к более нормальным IDE (тем более что это не IDE в общем то). А если просто редактор текста нужен то есть vim который и под виндой неплохо работает.
                                                                      0
                                                                      При допиливании плагинами её вполне можно считать IDE (позиционируется, на сколько знаю, тоже как универсальная IDE): дебаггер есть, подсветка есть, автодополнение есть, что ещё надо?
                                                                      Ну, судя по всему, под линукс нормальная IDE — это та, которую собрал по сути сам (тот же Emacs). Остальное мне не зашло. Основная фишка, которая мне нравилась в VSCode и которой не было в других IDE — это кастомные команды сборки и запуска. С учётом того, что мне не зашёл ныне популярный CMake, а зашёл Premake — это было очень весомой фичей.
                                                                        0
                                                                        Основная фишка, которая мне нравилась в VSCode и которой не было в других IDE — это кастомные команды сборки и запуска.

                                                                        Это ксть в абсолютно всех IDE, которые я видел.

                                                                          0
                                                                          Увы, но нет. Точнее есть, но путём написания плагинов. Какие смотрел особо подробно:
                                                                          • QtCreator — autotools, qmake, cmake (м.б. что-то ещё). Для premake есть знатно протухший плагин (время от времени искоса поглядываю на него с целью обновить до текущих версий). Опять же, всё это плагины, да расширения.
                                                                          • Eclipse — условно из коробки видел только cmake. Есть тонны плагинов, но это опять таки плагины. Для premake не находил.
                                                                          • Anjuta — дико под GTK заточенная IDE и довольно минималистична. Систему сборки не помню (м.б. и кастомные были), но много чего не хватало.
                                                                          • KDevelop — аналогично Anjuta.


                                                                          Code::Blocks и CodeLite ещё смотрел, но что в них было не так — не помню. NetBeans честно не глядел.

                                                                          Geany, Emacs (vim ещё некоторые рекомендуют) — по сути, как и VSCode — нужно потрать сколько-то времени, дабы настроить под себя. Собственно, чем и хочу заняться как-нибудь в свободное время.

                                                                          Если знаете ещё какие, поделитесь пожалуйста.

                                                                          Так вот, с VSCode получилась какая-то удобная середина: с одной стороны сильно кастомизуема без написания плагинов (в отличие от Eclipse, QtCreator и др.), с другой стороны проста в освоении и кастомизации (в отличии от Emacs).
                                                                            0

                                                                            Возможно, я вас как-то не так понял, но кастомные команды для сборки и запуска в QtCreator задать конечно же можно безо всяких плагинов. Идёте на страницу Projects -> Build & Run -> Build -> Build steps. Там можно задавать свои шаги сборки. Точно также с запуском. Я так работал с проектом, который использовал совершенно самописную систему сборки.


                                                                            Если же вы имеете ввиду, чтобы IDE сама распознала вашу систему сборки и автоматически запускала бы её, то тут да, кроме Cmake, qmake, qbs ничего из коробки вроде нет.

                                                                              0
                                                                              Что-то не натыкался на эту настройку. Спасибо. Попробую. Единственное, совсем маленький минус: как понимаю, будет всё равно использовать pro файл для учёта файлов, которые являются частью проекта. Или можно настроить так, что бы файлами проекта считались все файлы в каталоге проекта и его подкаталогах?
                                                                                +1

                                                                                В корне проекта нужно создать файлы <имя_проекта>.files и <имя_проекта>.includes в кторых поместить просто список всех файлов исходников и список всех инклюд-директорий, соответственно. Я их создавал с помощью чего-то вроде find -name *.C > myproject.files.


                                                                                Upd: проект нужно создавать с помощью File -> New File or Project -> Import Project -> Import existing project

                                                                                  0
                                                                                  Ясно. Спасибо. Очень помогли. Если с этим никаких более проблем не возникнет, надеюсь закончу странствия от IDE к IDE.
                                                                              0
                                                                              KDevelop — аналогично Anjuta.

                                                                              Ну и что, что она позволяет разрабатывать для KDE? Делать кастомные проекты это нисколько не мешает. Тем более, что она совсем не минималистичная.


                                                                              NetBeans позволяет настроить кастомный билд, Eclipse, я уверен, тоже это умеет.

                                                                                0
                                                                                В этом одновременно проблема поддержки множества утилит сборки. По крайней мере, когда я последний раз пробовал qtcreator, он поддерживал cmake скорее для галочки: конфигурацию выбрать нельзя, один конкретный таргет (и уж тем более их подмножество, а это киллер-фича kdevelop) выбрать нельзя, и так далее.
                                                                        0
                                                                        Насколько я помню VSCode на менее чем 8Gb оперативки, даже для маленьких проектов не вариант (в отличии от того же rider который на 4gb на мелких проектах вполне выживает), т.к. когда вышло — пробовал. Может быть сейчас уже не так.

                                                                        Самое неприятное, что все эти приложения на электроне из всех сил пытаются выглядеть как будто они легковесные, а по факту — очень тяжелые решения. Ну это как если взять Ford Granada Station Vagon 1982, прикрутить спойлер, покрасить красным тормозные колодки, раскрасить кузов яркими красками и налепить стикеры а-ля ралли. Нелепо.
                                                                        +6
                                                                        Отвратительно у обоих — имхо.

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

                                                                          Да телеграм напомнил мне о старых временах, когда всё работало быстро, как в старом скайпе.

                                                                            0
                                                                            Так телеграмм Программисты писали, а не «программисты»
                                                                              +5

                                                                              ТГ на c++ + qt написан. Чтобы программа на плюсах тормозила, надо очень сильно постараться)

                                                                                +1
                                                                                Дай «программистам» титановый шар — они и его сломают
                                                                              +1
                                                                              Telegram теперь тоже запускается минут 10, спасибо ломающим изменениям в Fontconfig 2.13 и ихним кастомным костылями ради отображения своих эмодзи — читает мимо кэша весь /etc/fonts. И оперативку жрёт будь здоров: если в чатах с кучей картиночек и стикеров обитать, почти до гигабайта подтекает за пару дней.
                                                                                0
                                                                                FONTCONFIG_FILE=/etc/fonts/ telegram
                                                                                  0
                                                                                  Я с этой переменной и запускал, как только поломалось — без неё окно вообще не появлялось, и вроде даже процесс в итоге крашился, точно не помню. Причём с ней тоже стартовало долго, и большая часть диапазонов Юникода отваливалась, а в файловом диалоге вообще все символы квадратиками были, даже ASCII — выбирал вслепую или копипастил из автодополнения баша. Через несколько недель случайно запустил без переменной и обнаружил, что уже и так работает, причём лучше.
                                                                                  0
                                                                                  А может лучше с Miranda сравнивать? там и телеграмм пролетает мимо.
                                                                                    0
                                                                                    Миранду толком не видел; я с винды слез раньше, чем начал активно пользоваться жаббером.
                                                                                +3

                                                                                Discord от релиза к релизу иногда течет просто ужасно:


                                                                                  +7
                                                                                  Ой, выколете мне глаза, веб-общалка на 1 гиг? Что она такое делает что не могут другие? Нее, это безумие нужно остановить.
                                                                                    +1

                                                                                    Очевидно же, там анимированные аватарки и магазин с играми.

                                                                                      0
                                                                                      А зачем магазин?
                                                                                        +1

                                                                                        Чтобы привлекать платных пользователей через подписку.

                                                                                          0
                                                                                          Это такая шутка?
                                                                                            +1

                                                                                            Это такой маркетинг.


                                                                                              +2
                                                                                              Ohh, sh… Даже в кошмарном сне я не мог себе такое представить.
                                                                                      0
                                                                                      видел тех у кого тек телеграм в оперативу на 14 ГБ
                                                                                        0

                                                                                        Например, сканирует список процессов, чтобы показывать в статусе, в какую игру играет пользователь, рисовать оверлей. Плюс собирает некоторую телеметрию

                                                                                          0
                                                                                          image

                                                                                          Если открыть чаты и покликать по разным каналам то поднимается и держится в пределах 130-140 МБ (зависит от количества GIF). После закрытия окна через 5 секунд потребление 94-95 под вантузом. Всего скорее сабж на скриншоте выше под macOS течет по памяти сильно. Ну оно и очевидно это же JS/Electron.
                                                                                          0
                                                                                          WindowServer это что за процесс?
                                                                                            0
                                                                                            XWindows или его аналог, вестимо.
                                                                                              +1

                                                                                              OSX'овый аналог X11

                                                                                                0
                                                                                                А это нормально для Макоси, что «иксы» жрут гиг оперативки?
                                                                                                  0

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

                                                                                                    0
                                                                                                    Макось сама явно больше винты жрёт оперы, у меня MBP в 8 гигами ОЗУ в режиме просмотра веб страниц, всегда на подкачке сидит в районе ещё одного гига.
                                                                                            0
                                                                                            Ну, VLC и LibreOffice как-то же на разных платформах существуют.
                                                                                              0

                                                                                              У LibreOffice свой графический тулкит для этого.

                                                                                                0
                                                                                                Так не весь же код переписывать надо.
                                                                                                  0

                                                                                                  Ну так они когда-то заморочились и написали его.

                                                                                                  +2

                                                                                                  А LibreOffice не на джаве написан? Он такой тормозной в сравнении с MS Office, что я на джаву грешил.

                                                                                                    0

                                                                                                    Он на C++, как ни странно.

                                                                                                    +2
                                                                                                    Там есть много ньюансов:
                                                                                                    1. В OpenOffice.org Sun долго пытался напихать кучу Java в разнае места.
                                                                                                    2. После того, как LibreOffice отпочковался — они её выкорчевали и интерфейс стал быстрее.
                                                                                                    3. Главное: с тех пор вышло много новых версий MS Office — и они стали сильно тормознее.

                                                                                                    Так что про стереотип «тормозной LibreOffice» стоит забыть: он и в самый момент появления (то есть отпочковывания от OpenOffice.org) не был особо тормозным, а сейчас — так и вообще «летает». В основном за счёт пункта номер 3, правда…
                                                                                                      0

                                                                                                      MS Office не заметил тормознутости

                                                                                                        0
                                                                                                        Если у вас стокгорьмский синдром и вы уже ничего не замечаете, то есть простой способ: примените тот же метод, что и автор статьи. На Raspberri Pi MS Office не встанет, но можно использовать Pentium MMX 233MHz (да, там работает и Windows 7 и последний офис). Если нет железного — возьмите PMem и запустите всё хозяйство там.

                                                                                                        То, что вы «не видите» тормозов не обозначает, что их нет, увы. Проихводители софта за последний лет 20 приучили большинство пользователей к тому, что весь софт работает катастрофически медленно.

                                                                                                        Даже исключений (типа того же Хрома) хватает ненадолго: да, 10 лет назад, когда Хром только появился — он был реально быстрым и маленьким. Но к современному монстру слова «быстрый» и «маленький» неприменимы от слова «совсем».
                                                                                                –2
                                                                                                по большому счету С++ это уже кодовая база на win, macOS, linux, iOS, Android.
                                                                                                в 99 из 100 достаточно API вызовы для каждой из платформ в обертки завернуть не затрагивая основной код.
                                                                                                  +3
                                                                                                  Чистый C++ и UI — это боль. Но Qt сильно спасает.
                                                                                                    +1
                                                                                                    Я попробовал вспомнить варианты где бы был чистый C++ и UI. Везде либо просто C, либо какие-то препроцессоры, либо другие виды C — не C++. Разве что WTL, который и правда удовольствием не назовешь. А вы что имели в виду?
                                                                                                      0
                                                                                                      По чистым C++ с UI — я понимаю использование наиболее нативных вариантов. С Windows всё ясно: WinAPI. Под Linux не так однозначно. Наиболее нативным думаю там является XLib. И вот без какой-то монструозной штуки слабо представляю, как это можно обернуть чем-то, сделав кроссплатформенным (как описал комментатор выше).
                                                                                                        0
                                                                                                        Ну так и WinAPI и XLib сами по себе кроссплатформенные уже.

                                                                                                        WinAPI — через wine
                                                                                                        XLib — в принципе есть на многих платформах нативно.

                                                                                                        Но и то и другое опять же именно плюсов не требует. Обычный C, можно даже pascal
                                                                                                          0
                                                                                                          Wine — это уже по сути костыль. Плюс мне интересно, как вы собрались используя WinAPI собрать тот же ELF.
                                                                                                          Касательно XLib, где-то когда-то слышал про реализацию XLib для Windows, но сам не наталкивался.

                                                                                                          >Но и то и другое опять же именно плюсов не требует
                                                                                                          А кто и где говорил, что обязательно требует?
                                                                                                            0
                                                                                                            > Плюс мне интересно, как вы собрались используя WinAPI собрать тот же ELF.

                                                                                                            Я не собираюсь. Нужды такой не было. Я пользовался тем, что другие делали, если интересно как — вот нашел вам пару ссылок.
                                                                                                            wiki.winehq.org/Winelib_User%27s_Guide#What_is_Winelib.3F
                                                                                                            www.drdobbs.com/dropping-windows-with-winelib/184401635

                                                                                                            > Касательно XLib, где-то когда-то слышал про реализацию XLib для Windows, но
                                                                                                            > сам не наталкивался.

                                                                                                            Если хочется без гемороя, то проще всего конечно будет либо wsl либо docker, но это читерство; X11 сервер есть например в виде Xming или VcXsrv. Исходники, собирающиеся VS есть например здесь sourceforge.net/u/mikedep333/vcxsrv/ci/master/tree/libX11

                                                                                                            Ну и кроме того есть cygwin и mingw

                                                                                                            > А кто и где говорил, что обязательно требует?

                                                                                                            Ну я так понимаю «Чистый C++» — значит с плюсами. Ну потому, что он C++.
                                                                                                              0
                                                                                                              Про библиотеки гляну. Про winelib что-то не подумал. И за X-ы для Windows спасибо. Про cygwin'овские X-ы тоже что-то забыл. А вот в mingw — не припомню X-ов. Помню что-то из линуксового пытался собрать для msys2. Оно в зависимости тянуло xlib. В конечном итоге в это и упёрся.
                                                                                                              Но по факту — это уже дополнительные библиотеки. В этом случае обычно проще уже взять что-то более подходящее. Тот же Qt.

                                                                                                              Под «Чистый C++» я понимаю C++ с STL и какой-нибудь C библиотекой. Т.е. без использования дополнительных зависимостей, в т.ч. и сборочных.
                                                                                                              C++ — это нынче всё же не расширение C, а вполне независимый язык с частичной поддержкой C.
                                                                                                              К чистому C++ в рамках конкретно взятой платформы логично добавляется какой-нибудь её интерфейс (без этого уж точно далеко не уедешь, т.к. UI в языки редко тащится). На Windows — это WinAPI, в котором есть UI. На Linux — боль. Если совсем честно, то только голый шлюз. Если чуть менее честно, то glibc, который тоже далёк от UI. Таким образом, честно в Linux с UI не выйдет. Поэтому опять же сделал допущение в виде X-ов (плохо знаком с wayland, поэтому тут не смотрю на него), т.к. более низкоуровневого UI в Linux не припоминаю (хот.
                                                                                                              В рамках таких рассуждений я и пришёл к двум интерфейсам: xlib и WinAPI, притягивание за уши которых к чему-то общему то ещё занятие. В данном случае реальнее и выгоднее взять что-то более абстрактное.
                                                                                                                0
                                                                                                                > Помню что-то из линуксового пытался собрать для msys2.

                                                                                                                На мой взгляд для такого — wsl или docker. Конечно это доп. зависимость в OS.

                                                                                                                > В этом случае обычно проще уже взять что-то более подходящее. Тот
                                                                                                                > же Qt.

                                                                                                                Я вообще после появления QT воспринимаю его как часть языка. Очень уж хорошие у них интерфейсы классов, документация и даже инструментарий. Если доведется что-то писать на C++ нынче, то у меня даже мысли нет делать это на STL или на чем-то другом. Контейнеры, многопоточность, сериализация, UI, регулярные выражения, скрипты, даже html/css — все в одной упаковке и все унифицировано. Бери и делай. Даже если платформа одна.
                                                                                                                  –1
                                                                                                                  >На мой взгляд для такого — wsl или docker. Конечно это доп. зависимость в OS.
                                                                                                                  Дело было на работе. Там админских прав нет. Мне когда-то для чего-то (уже не помню) поставили msys2. Собственно, его и взял. В принципе, wsl вообще не тыкал палкой. Docker тоже, но на сколько понял, это виртуалка. Их без большой необходимости обхожу стороной, ибо оверхед.

                                                                                                                  С Qt да. STL ещё использую в совокупности, но скорее по привычки и только если для себя. С Qt познакомился при переходе с windows на linux. На windows выбор не такой сильный. В те времена вообще использовал C++ Builder. У него с UI проблем нет, поэтому и не рыпался. При переходе на linux возник серьёзный вопрос, а чем здесь вообще пользоваться? Вопрос касался и IDE и UI. Что там, что там тонны пересмотрел, что-то даже пробовал. Вот например накопанный мной список UI библиотек или фреймворков, имеющих UI, для C++:
                                                                                                                  Qt
                                                                                                                  GTK/gtkmm
                                                                                                                  wxWidgets
                                                                                                                  FLTK
                                                                                                                  FOX toolkit
                                                                                                                  LessTif, Motif, Open Motif (ныне уже дохлые или почти дохлые)
                                                                                                                  Xaw
                                                                                                                  GLUI
                                                                                                                  Elementary
                                                                                                                  IUP
                                                                                                                  Juce
                                                                                                                  CPPTk
                                                                                                                  Ultimate++
                                                                                                                  EFL
                                                                                                                  Nana
                                                                                                                  TnFOX (форк FOX Toolkit)
                                                                                                                  XVT
                                                                                                                  MyGUI
                                                                                                                  µGFX
                                                                                                                  Nuklear, ImGUI, CEGUI, Flat UI, Zahnrad (Immediate mode)

                                                                                                                  Некоторые даже пробовал тыкать палкой (в частности Nana, FLTK, и совсем немного FOX). Но то функций мало, то доки скудные. Так я и остановился на Qt. В принципе, если мне будет нужен UI уровня «две строчки и две кнопочки», то Qt брать не стану, т.к. тяжеловесно как-то. В таком случае думаю хорошо пойдёт что-нибудь из FLTK, FOX, Nana и подобных.
                                                                                                                  Immediate mode UI оказались довольно интересной темой, например для игр. Собственно, это UI библиотеки без рендера. Для десктопного UI по большей части бессмысленно, но вот игры и какие-нибудь хитрые архитектуры — самое оно. Особо приятно то, что некоторые из них вообще не имеют каких-либо зависимостей.
                                                                                                +3
                                                                                                Оффтоп:

                                                                                                Примерно 15 лет назад читал книжки, как писать софт под Windows. Про все эти оконные процедуры, windows-сообщения, объекты ядра, и еще упоминается MFC как красивая обертка над этим делом. Потом пересел на Linux и от этого дела отстал, но чувствую, что знания надо освежить. Но вот сейчас не могу найти современных книг по Windows-разработке, которые именно про нативные приложения, и которые начинают с азов. Не посоветуете ли чего толкового?
                                                                                                  +11
                                                                                                  Так ничего не поменялось. WinAPI стабилен как пирамида Хеопса и это очень правильно. Сгодится даже учебник времен Windows 95.
                                                                                                    0
                                                                                                    некоторые новые веяния — появились.
                                                                                                    местами вполне удобные
                                                                                                      0
                                                                                                      Не спорю, но основы и вот это вот все:
                                                                                                      оконные процедуры, windows-сообщения, объекты ядра
                                                                                                      никуда не делось. А красивости можно потом уже изучить отдельно.
                                                                                                        0
                                                                                                        основы, конечно, прежние.
                                                                                                        но многое стало можно делать гораздо удобнее
                                                                                                      –1
                                                                                                      А как же .NET? Выше его сравнили с Electron, но (сугубо имхо) — это реально крутая вещь, особенно учитывая то, что под linux есть mono. Я сам давно не писал под винду, но когда заканчивал, вроде был курс на уход от winapi в сторону .net для всего пользовательского софта, для которого это возможно.
                                                                                                        –10
                                                                                                        под Linux .NET будет выглядеть как flash под винду.
                                                                                                          –1
                                                                                                          gtk#/mono уже больше 10 лет зависимостью для gnome desktop modules был.
                                                                                                            +1
                                                                                                            с gui там все грустно
                                                                                                          +3
                                                                                                          Уже более 2-х лет существует .Net Core, работающий под Linix, MacOS и Windows.
                                                                                                          .net core sdk
                                                                                                          для любителей собрать самостоятельно
                                                                                                            +2
                                                                                                            А в версии 3.0 обещают завезти WPF. Но, думаю, только под виндой. Есть еще проект Авалония — кроссплатформенная WPF.
                                                                                                            +1
                                                                                                            Кор это круто, но тут речь про десктоп — в коре нет и пока не будет UI при поддержки Microsoft. WPF в core — это скорее убийство FullFramework с переездом самого нужного в кор. Как выше заметили есть AvaloniaUI, что отлично подойдет для пет проджекта, но я бы поостерегся писать на ней что то для бизнеса.
                                                                                                      +16

                                                                                                      К сожалению программистов такая вещь как Electron пользуется спросом у бизнеса именно по причине оптимизации денежных трат. Сегодня количество веб разработчиков в разы превышает количество других прикладных программистов. Писать софт на JavaScript попросту быстрее и дешевле, чем использовать специализированные технологии.


                                                                                                      Electron действительно сжирает всю память и процессорное время. Однако это дает возможность бизнесу быстро вводить в строй новые продукты.


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


                                                                                                      Закон перехода количественного в качественное никто не отменял :)

                                                                                                        +3
                                                                                                        Закон перехода количественного в качественное никто не отменял :)

                                                                                                        напомните мне примеры выполнения этого закона.

                                                                                                          –9

                                                                                                          Пример: язык Go. Раньше все писали сетевые сервисы на чем попало, то есть Python, Perl, Node.js, C++ и т.д. Сегодня для этого берут Go. Компилируемый язык со встроенной кооперативной (а также вытесняющей) многозадачностью.


                                                                                                          Посмотрите на проект Сentrifugo: https://github.com/centrifugal/centrifugo
                                                                                                          Раньше был написан на Python (Tornado), теперь на Go. В итоге производительность увеличилась на порядки, а потребление памяти снизилось, не сильно при этом потеряв в простоте поддержки кода.

                                                                                                            +1

                                                                                                            Простите, но где тут количество и о каком качестве идет речь?


                                                                                                            Если говорить о количестве и качестве — посмотрите на увеличение количества разработчиков на Go. А теперь проанализируйте тренд уровня этих разработчиков.


                                                                                                            То что у нас появился компилируемый эрланг (да, я сейчас ооооочень сильно утрировал, без децентрализации это все не сильно нужно) это замечательно, однако качественного скачка я не вижу. Люди как и раньше писали на Java/Perl/Python/Node/C++ так и продолжают писать. Просто теперь есть еще Go и Rust. А еще есть D, Elexir, Kotlin и многие другие штуки. Но что-то как-то люди продолжают писать микросервисы на php.


                                                                                                            p.s. центрифугу юзаю, и рад что кто-то ее написал. Но будь она написана на эрланге, хаскеле или ocaml — мое отношение к ней не сильно бы отличалось.

                                                                                                              –7

                                                                                                              Качественный скачок — новый специализированный язык, поддерживающий многозадачность из коробки.
                                                                                                              Сетевые сервисы сейчас проще и быстрее писать на Go, не теряя в производительности и потреблении памяти.


                                                                                                              Написать сетевое приложение на Go значительно проще чем на C++. Касательно Java/Python и т.д. — все это языки, в которых для исполнения кода используется дополнительная абстракция (виртуальная машина/интерпретатор), так что по эффективности они априори проигрывают.


                                                                                                              По поводу D могу сказать что там не все так однозначно. Есть фреймворк vibe.d, но он из коробки не даст той же производительности как и Go. В vibe.d тоже используется кооперативная многозадачность, но там нет встроенного пула потоков, по которому раскидываются задачи (технически это возможно, но программисту все еще нужно понимать что происходит "под капотом").


                                                                                                              По поводу микросервисов могу сказать что эта архитектура скорее попытка адаптации к рынку труда, чем к решению технологических задач. Микросервисы можно писать на чем угодно, и этот факт позволяет компаниям охватывать при найме гораздо большую часть рынка, чем просто "PHP Developer" или "Erlang Developer" (и т.д.).


                                                                                                              Rust же совсем не про сетевые сервисы. Это С на стероидах. В будущем приложения, которые раньше писали на C, будут писать на Rust, т.к. этот язык конкурирует именно с C и его производными.


                                                                                                              Так что Go на мой взгляд именно что качественный скачок применительно к написанию сетевых сервисов. А на Ваш взгляд?

                                                                                                                +6
                                                                                                                Rust же совсем не про сетевые сервисы


                                                                                                                Это почему еще? он еще и производительнее Go будет.
                                                                                                                  +2

                                                                                                                  И абстракций и выразительности там ощутимо больше для их описания.

                                                                                                                    0
                                                                                                                    И там нет такой боли с прописыванием полного пути к переменным когда сильно все вложено
                                                                                                                    +2
                                                                                                                    Качественный скачок — новый специализированный язык, поддерживающий многозадачность из коробки.

                                                                                                                    Поддерживающий только ОДНУ парадигму многозадачности (корутины) из коробки, и оберачивающий весь синтаксис на фоне в монадку Async, чтобы блокирующие вызовы байндились на континуейшн как будто это императивный код.


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


                                                                                                                    Это всё из Го убрали чтобы среднему гоферу не надо было мучаться проблемами выбора.

                                                                                                                      +3
                                                                                                                      Написать сетевое приложение на Go значительно проще чем на C++

                                                                                                                      Согласен. Написать его эффективно — не сильно проще чем на C++. Просто язык дает меньше возможностей по стрельбе по ногам.


                                                                                                                      так что по эффективности они априори проигрывают.

                                                                                                                      Напомню что в го рантайм тоже не бесплатный. GC, распределение корутин, все это довольно жиное и в целом приводит к тому что грамотно написанное приложение на Java будет примерно так же эффективно работать. Другой момент что с Go будет проще. Однако тот же rust уделает их всех, хотя посадить студента на раст будет проблематичнее да.


                                                                                                                      Это С на стероидах.

                                                                                                                      Тогда Go это С на седативах.


                                                                                                                      А на Ваш взгляд?

                                                                                                                      На мой взгляд Go, это ответ на проблему низкой квалификации разработчиков. Урезанный по самое немогу язык (не считаю что это плохо, если что), который максимально защищает человека от вопросов применения воображения. Все делается примитивно и в лоб. Идеально для массовой разработки.


                                                                                                                      Является ли это качественным скачком? Нет. С точки зрения качества разница не велика. Опять же — основная проблема го — хайп, в свете которого все кому не лень начали на нем писать. И с каждым годом квалифицированность среднего разработчика на Го вызывает вопросы. Сейчас идет процесс усложнения языка, что в купе с наплывом слабых разработчиков скорее всего отбросит его успех назад.


                                                                                                                      Если же для вас Го это качественный скачек — задумайтесь. Это скачек для вас или для индустрии в целом?

                                                                                                                        –2

                                                                                                                        Создается ощущение, что Вы нарочно опускаете контекст дискуссии. Ключевое слово "сетевые сервисы" почему-то осталось незамеченным Вами и остальными комментаторами этой ветки.


                                                                                                                        Как и обычно бывает в рунете (и на Хабре в частности) — сначала закидывают шапками, а потом разбираются.


                                                                                                                        Я говорил не про сам язык программирования Go, а лишь привел его в пример в качестве иллюстрации закона перехода количественного в качественное (по Вашей же просьбе). Контекстом этого перехода является именно предметная область написания сетевых сервисов (network applications), а не проблемы отрасли, парадигмы программирования или вселенской справедливости.


                                                                                                                        Причем под количеством и качеством я понимал термины из философии (Диалектика Гегеля / Диалектический Материализм), а не количество как число (уж тем более число разработчиков) и качество как качество ПО.


                                                                                                                        Сам пример перехода я подрузамевал так:


                                                                                                                        1. Появляется проблема написания сетевых сервисов и приложений;
                                                                                                                        2. Появляются разрозненные решения: зачастую библиотеки/фреймворки к существующим языкам для работы над проблемой;
                                                                                                                        3. Возрастает сложность проблемы, возрастает нагрузка на приложения;
                                                                                                                        4. Постепенно продолжают происходить количественные изменения: предлагаются новые варианты решения — multi-threading (Java, Apache HTTP server, etc.), fork (CGI, FastCGI, *CGI), async concurrency (libevent, libev, libuv, etc. и основанные на них решения — NGINX, NodeJS и т.д.)
                                                                                                                        5. Происходит качественный скачок — появление и позиционирование языка Go для решения этих проблем. Язык заточен исключительно под предметную область: объединяет модель multi-threading и async concurrency — программа запускается в несколько потоков, которые в свою очередь обрабатывают очередь задач (goroutines), позволяя еще более эффективно использовать процессорные ядра.
                                                                                                                          Стандартная библиотека позволяет написать мощный и быстрый HTTP сервер в пару строк кода за несколько десятков минут. На решение подобной задачи с точно такой же эффективностью в других языках уйдет просто уйма времени (особенно в C++).

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


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

                                                                                                                          +3

                                                                                                                          Смешались в кучу кони, люди.


                                                                                                                          Происходит качественный скачок — появление и позиционирование языка Go для решения этих проблем. Язык заточен исключительно под предметную область: объединяет модель multi-threading и async concurrency — программа запускается в несколько потоков, которые в свою очередь обрабатывают очередь задач (goroutines)

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


                                                                                                                          Языки, в которых в самом синтаксисе была селективная асинхронность с синхронным общением между легковесными тредами и корутинами:


                                                                                                                          • Concurrent ML + Parallel CML
                                                                                                                          • Racket

                                                                                                                          Не говоря уж у тонне либ для языков:


                                                                                                                          • Haskell — дофига. Control.Concurrent.CML хотя бы! Control.Concurrent.CHS туда же.
                                                                                                                          • F# — Hopac
                                                                                                                          • Clojure — core.async

                                                                                                                          Не поверите, везде одно и то же — собственный шедулер в юзер спейсе, n:m модель, легковесная абстракция над ОС тредами, синхронное общение (ченелы), селективная асинхронность.


                                                                                                                          Что нового привнёс Go? Убрал с гоферов необходимость учить Haskell, F# или кложу. Про CML я просто молчу, старый язык уж очень, хотя он до сих пор где-то в продакшне телекома юзается по слухам.

                                                                                                                            –3
                                                                                                                            Смешались в кучу кони, люди.

                                                                                                                            Сочувствую. Но не переживайте, все у Вас наладится, я в это верю, правда.


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

                                                                                                                            Полностью согласен! Осталось только предложить это самим гоферам, а не писать это под моими комментариями. =)


                                                                                                                            Что нового привнёс Go?

                                                                                                                            Go популярен, поэтому я упомянул именно его, для того чтобы говорить с людьми на одном языке, принимая во внимание то что я не знаком с Fesor лично и не знаю его бэкграунда. Это считается нормальным в диалоге — переходить от общего к частному.


                                                                                                                            А вот то что у Вас от этого бомбануло (наверное), не сказать чтобы прямо моя вина. Тем более что дискутировал изначально я не с Вами =)


                                                                                                                            Языки, в которых в самом синтаксисе была селективная асинхронность с синхронным общением между легковесными тредами и корутинами:

                                                                                                                            СSP модель в Go не является чем-то новым и захватывающим, но вот то что язык специализировали под определенные задачи, сделали при этом его компилируемым в машинный код, приспособили под современный рынок труда а затем правильно отпозиционировали — вот это как раз является.


                                                                                                                            Я не вижу смысла продолжать дискуссию, потому что мы с Вами, судя по-всему, говорим несколько о разных вещах.


                                                                                                                            Но раз уж Вы решили вступить в ряды диванного спецназа (ведь в интернете опять кто-то неправ), то ответьте, какие из перечисленных Вами языков кроме Haskell компилируются в машинный код и почему все они достаточно маргинальны по сравнению с Go?

                                                                                                                              +4
                                                                                                                              Я не вижу смысла продолжать дискуссию… ответьте, какие из перечисленных Вами языков кроме Haskell компилируются в машинный код и почему все они достаточно маргинальны по сравнению с Go?

                                                                                                                              Противоречивые параграфы вижу я, но ладно :)


                                                                                                                              GHC у Хаскеля умеет компилировать как в натив, так и под LLVM
                                                                                                                              FSC в F# умеет компилировать только под CLR, но есть такая штука как .NET Native, которая сразу полученный код для CLR гонит в натив. Не пользовался за ненадобностью.
                                                                                                                              В JVM тоже есть способ гнать байткод в натив — Excelsior например.


                                                                                                                              Не буду скрывать, нативный бинарник Go получится крайне маленьким по размеру по сравнению с любым из вышеперечисленных, но это из-за скудности стандартной либы Go (и это слабо сказано), а не потому что там какие-то ядерные оптимизации происходят.


                                                                                                                              По поводу маргинальности — PHP и Питон тоже популярнее Haskell, F# и Clojure. Да и вообще всех ФП языков. Возможно даже вместе взятых.


                                                                                                                              Делает ли это Haskell, F# или Clojure плохими языками? Для тех кто не осилил их освоить — несомненно.

                                                                                                                                0
                                                                                                                                GHC у Хаскеля умеет компилировать как в натив, так и под LLVM
                                                                                                                                FSC в F# умеет компилировать только под CLR, но есть такая штука как .NET Native, которая сразу полученный код для CLR гонит в натив. Не пользовался за ненадобностью.
                                                                                                                                В JVM тоже есть способ гнать байткод в натив — Excelsior например.

                                                                                                                                Ну конечно есть способы. Даже в некоторых скриптовых языках есть возможность компиляции в нативный код. Вот только это не отменяет того факта что частотность использования этих решений на продакшне гораздо ниже. И не все из них production-ready. Тем временем Go уже давно production-ready и предоставляет компиляцию (причем достаточно быструю) в нативный код из коробки =)


                                                                                                                                Не буду скрывать, нативный бинарник Go получится крайне маленьким по размеру по сравнению с любым из вышеперечисленных, но это из-за скудности стандартной либы Go (и это слабо сказано), а не потому что там какие-то ядерные оптимизации происходят.

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


                                                                                                                                Причем посыл Вашего абзаца мне видится таким: "да признаю (черт возьми!) что Go тут перещеголял другие языки. Но… но… но это все от того что он хуже!" =D


                                                                                                                                Все мы знаем что "Любая достаточно сложная программа на <язык_программирования> содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp" ®


                                                                                                                                Но большие и примечательные production сетапы на Lisp (как и на Haskell) в мире можно пересчитать по пальцам.


                                                                                                                                Потому что обслуживать, скажем, торговые сети или интернет магазины дешевле и целесообразнее при помощи вчерашних студентов или переквалифицировавшихся профессионалов, чем при помощи PhD и профессоров из вузов Ivy League. Ибо масштаб проблемы слегка не тот.


                                                                                                                                И в этом Go прекрасно решает свою задачу, ведь написание сетевых сервисов и всяких HTTP серверов — это не научная проблема, а самая что ни на есть прикладная.


                                                                                                                                По поводу маргинальности — PHP и Питон тоже популярнее Haskell, F# и Clojure. Да и вообще всех ФП языков. Возможно даже вместе взятых.
                                                                                                                                Делает ли это Haskell, F# или Clojure плохими языками? Для тех кто не осилил их освоить — несомненно.

                                                                                                                                Изначальный вопрос был:


                                                                                                                                почему все они достаточно маргинальны по сравнению с Go?

                                                                                                                                Но Вы, получается, ушли от ответа, так что тут раунд!


                                                                                                                                И вообще, кому нужен Clojure, когда есть Common Lisp? =)

                                                                                                                                  0
                                                                                                                                  Вам бы тендеры устраивать. Вы берете список особенностей, под которые попадает только Go, говорите, что это самые важные качества в ЯП, и побеждает… Go. Какая внезапность.

                                                                                                                                  Не вижу смысла спорить «какой язык более гошный, чем го». Предлагаю воспользоваться каким-либо честным методом сравнения, например методом идеальной точки. Выделить важные качества языка (с формальной точки зрения можно воспользоваться дисперсионным анализом, чтобы не ругаться, какое качество действительно важное), проставить им экспертные оценки, и сделать соответствующий вывод.
                                                                                                                                    –1
                                                                                                                                    Вам бы тендеры устраивать

                                                                                                                                    А Вам бы с таким аватаром только в дискуссиях про ЯП участвовать =)


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

                                                                                                                                    Что значит более "гошный"? Когда Go появился, сначала его позиционировали как конкурента и замену языку C, но не найдя на этом поприще признания, его просто специализировали под написание сетевых приложений. И в этом ключе он уже обрел популярность.


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


                                                                                                                                    Можете объяснить зачем среднестатистическому HTTP серверу (к примеру) аппликативные функторы, монады и монадные трансформеры (в общем их виде)?


                                                                                                                                    Вот перепишем Nginx на Haskell, вот тогда уж точно заживем!

                                                                                                                                      +1
                                                                                                                                      А Вам бы с таким аватаром только в дискуссиях про ЯП участвовать =)

                                                                                                                                      Еще и гадать по аватарке будете, неплохо )


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

                                                                                                                                      Можете объяснить зачем среднестатистическому HTTP серверу (к примеру) аппликативные функторы, монады и монадные трансформеры (в общем их виде)?

                                                                                                                                      Затем же, зачем и в любой другой программе — чтобы описать пайплайн обработки запроса в удобном виде. А может и не нужны, это ведь просто инструмент. Во-первых есть много промежуточных сценариев, а во-вторых вопрос аналогичен "зачем среднестатистическому HTTP серверу нужны continue и break".

                                                                                                                                        –1
                                                                                                                                        Зачем среднестатистическому HTTP серверу нужны continue и break

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


                                                                                                                                        Хотя да, что уж там, с монадами-то процесс парсинга значительно ускорится и потребит меньше памяти! Это ж как можно будет распараллелить процесс, если парсить заголовки и тело запроса отдельными pure функциями, завернутыми в монаду. Ого-го!

                                                                                                                                          0
                                                                                                                                          Не вижу повода для сарказма, так что поддержу общий воодушевленный настрой: так ведь оно и есть.
                                                                                                                                            –2

                                                                                                                                            Поддержите. Ведь это все что Вам остается в отсутствии объективных аргументов.

                                                                                                                                            0

                                                                                                                                            Не понимаю ваших ужимок. attoparsec'ом (а он монадический) парсить одно удовольствие. В плюсах всем дерет задницу почему-то boost.spirit, который тоже, по большому счёту, монадический (особенно x3).


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


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

                                                                                                                                              0
                                                                                                                                              Не понимаю ваших ужимок

                                                                                                                                              Давайте я Вам объясню:


                                                                                                                                              Я не пишу на Go. Для моих задач он не имеет достаточной выразительности и удобства. Я упомянул Go в качестве ответа на вопрос Fesor.


                                                                                                                                              Посыл мой заключался в том, что сегодня все пишут GUI на Electron, а завтра есть вероятность появления какой-либо более оптимизированной по памяти и скорости технологии, согласно закону перехода количественного в качественное.


                                                                                                                                              Я упомянул Go специально, т.к. это всем понятный пример, который на слуху у большинства, в отличие от более маргинальных здесь приведенных языков (F#, Racket, CML и т.д.), и упомянул его в совершенно конкретном контексте — сетевых приложений.


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


                                                                                                                                              Скажите, Вы тоже не видите изначального посыла моих комментариев?

                                                                                                                                                0

                                                                                                                                                Тогда тем более не понимаю, причём тут монады и прочие профункторы и написание парсеров на них.


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

                                                                                                                                                0
                                                                                                                                                Ну, это к вашему вопросу о том, зачем знать разницу между монадой и аппликативным функтором.

                                                                                                                                                Вы видимо тоже не хотите читать мои комментарии. Скажите, где именно я задавал вопрос о том "зачем знать разницу между монадой и аппликативным функтором"?

                                                                                                                                                  0

                                                                                                                                                  Этот комментарий подразумевает, что автору сервера имеет смысл об этих вещах знать (ну или не знать).

                                                                                                                                            0
                                                                                                                                            Можете объяснить зачем среднестатистическому HTTP серверу (к примеру) аппликативные функторы, монады и монадные трансформеры (в общем их виде)?

                                                                                                                                            Чтобы управлять эффектами и гарантировать на уровне типов, что вы не полезете в /etc/shadow, не пустите неавторизованного пользователя куда не надо, не проинтерпретируете число как строку или наоборот и так далее.


                                                                                                                                            Посмотрите servant.


                                                                                                                                            Вот перепишем Nginx на Haskell, вот тогда уж точно заживем!

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

                                                                                                                                          0
                                                                                                                                          Потому что обслуживать, скажем, торговые сети или интернет магазины дешевле и целесообразнее при помощи вчерашних студентов или переквалифицировавшихся профессионалов, чем при помощи PhD и профессоров из вузов Ivy League. Ибо масштаб проблемы слегка не тот.

                                                                                                                                          А зачем для магазинов всякая хардкорная конкурентность и всё такое? Да и для торговых сетей, судя по тому, что там тоже студенты полезнее, тоже.

                                                                                                                                            0

                                                                                                                                            Думаю это вопрос не ко мне. Лучше об этом спросить у Ozon: https://vc.ru/ozon/45542-go или у Zalando, или у остальных пользователей.


                                                                                                                                            В основном они применяют Go для инфраструктурных моментов (насколько мне известно).


                                                                                                                                            Также есть всякие рекламные биржи и т.д.

                                                                                                                                              +2
                                                                                                                                              Кодеры СДЭК (одной из крупнейших курьерских компаний в России) видимо тоже так думали. А потом случилось страшное: после апгрейда внезапно выяснилось, что система немасштабируема.
                                                                                                                                              На тестовых серверах всё ОК, а вот реальные нагрузки мгновенно кладут систему на обе лопатки, причём даже добавление серверных мощностей не позволяет справиться с проблемой.
                                                                                                                                              Всё упало 26 сентября, прошёл уже почти месяц, всё это время программисты пафосно превозмогают проблему, но безуспешно. Завязанные на них интернет-магазины терпят убытки, франчайзи разоряются, техподдержка убита напрочь наплывом разгневанных пользователей.
                                                                                                                                              А система лежит. И если продолжит лежать ещё недельки три, то есть неплохой шанс увидеть банкротство крупной курьерской компании исключительно по вине IT.
                                                                                                                                                +2
                                                                                                                                                То есть, если эту систему бы пилили и обслуживали студенты, но на Go, то она магически бы заработала?

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

                                                                                                                                                  Думаю что ответ на Ваш комментарий был связан с вопросом: "А зачем для магазинов всякая хардкорная конкурентность и всё такое?".


                                                                                                                                                  Про Go упоминаний не было. Но Вы опять про Go и про студентов, хотя я, например, использовал сочетание "вчерашних студентов", что подразумевает то что человек все-таки закончил обучение в ВУЗе.


                                                                                                                                                  И такое происходит на протяжении всей ветки со всеми комментаторами.


                                                                                                                                                  "Чукча не читатель, чукча писатель!" ©


                                                                                                                                                  Очень жаль что русскоязычное комьюнити сильно уступает в адекватности цивилизованным странам.

                                                                                                                                                    0
                                                                                                                                                    Очень жаль что русскоязычное комьюнити сильно уступает в адекватности цивилизованным странам.

                                                                                                                                                    Очень здорово что вы всё русскоязычное комьюнити назвали нецивилизованным на основании одного спора в интернете.

                                                                                                                                                      0
                                                                                                                                                      здорово что вы всё русскоязычное комьюнити назвали нецивилизованным

                                                                                                                                                      Ну вот видите как оно получается. Я же написал что русскоязычное комьюнити уступает в адекватности, а не то что оно нецивилизованно.


                                                                                                                                                      Говорю же, "Чукча не читатель, чукча писатель".


                                                                                                                                                      И уж точно не Вам на это мое высказывание обижаться, тем более что Вы тут совсем недавно пытались выставить меня фанатиком Go, говоря что "гоферам застилает глаза божественность Пайка, но неплохо бы ознакомиться с теорией." и позволяя себе прочие фривольности (при весьма забавном обстоятельстве, что я на Go НЕ пишу).


                                                                                                                                                      Так что давайте закроем тему. Здесь больше нечего обсуждать.