Wrike уходит от использования языка Dart. Часть 1

    Данной статьёй мы хотим пролить свет на технический стек Wrike: каким он был раньше и каким мы видим его в будущем. Мы расскажем о том, почему пять лет назад мы выбрали язык Dart основным для frontend-разработки нашего продукта и почему сейчас мы решили посмотреть в сторону других языков и фреймворков.

    Что такое Wrike?

    Для полноценного понимания наших технических решений необходимо рассказать, что такое Wrike как продукт. Wrike — это большая SaaS платформа для управления проектами и совместной работы команд. Когда мы говорим «большая», имеется в виду не только количество возможностей самого продукта (о которых вы можете почитать здесь), но и кодовая база. За годы своего развития, пока продукт рос и эволюционировал, мы прошли большой путь от: 

    Wrike, каким он был в 2014
    Wrike, каким он был в 2014

    До:

    Wrike 2021
    Wrike 2021

    Столь же стремительно эволюционировали технический стек и команда разработки.

    Если постараться рассказать «на пальцах», что такое Wrike, то стоит отметить, что в мире управления проектами есть довольно много must have фич, без которых трудно себе представить полноценный продукт на этом рынке: 

    Gantt Chart, календари, таблицы — и это далеко не полный набор возможностей Wrike
    Gantt Chart, календари, таблицы — и это далеко не полный набор возможностей Wrike

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

    Краткая история технического стека

    Wrike появился  в 2006, но так далеко мы копать не будем. Историю frontend-разработки «нового времени» Райка можно условно поделить на несколько этапов, рассматривая последние шесть лет.

    JS + EXT

    На тот момент (2013-2014) мы уже написали достаточно внушительный объём кода на чистом JS, которому тогда не было альтернатив. В качестве основного движка (или фреймворка, если хотите) мы использовали Ext.js третьей версии. Несмотря на теперешнюю архаичность, вы будете удивлены, но он по-прежнему жив-здоров! На тот момент в нём было достаточно много прорывных возможностей, которые потом, через года, трансформировались в то, к чему мы привыкли сейчас. Например, data stores с некоторой натяжкой можно считать провозвестником привычных нам stores в React.

    Однако уже тогда было понятно, что JavaScript не отвечает нашим требованиям. Дело в том, что растущая команда и растущая кодовая база вынуждали нас искать язык, который предлагал бы:

    • строгую типизацию

    • большие возможности «из коробки»

    • хорошую работу с большими объемами кода (сборка, минимизация и т.д.)

    DART. Почему не TypeScript?

    2014-2015 года были сложными с точки зрения принятия инженерных решений. Мы оказались перед выбором: использовать TypeScript, который тогда только-только вышел на стабильную версию или взять Dart, который был более «зрелым», но менее распространенным. Подробнее вы можете прочесть тут

    Ключевыми моментами в нашем выборе стали:

    • Более «строгая» типизация. Как показало время, и Dart, и TypeScript двинулись в сторону более строгой системы типов. Dart полностью перешёл на sound систему типов, TypeScript по-прежнему имеет с этим некоторые сложности.

    • Возможности «из коробки». Порой third-party libraries могут быть очень полезны, а порой — вредны. Одна из проблем современного мира web, и ее TypeScript не решает, — это обилие библиотек, которые могут помочь ускорить разработку, но которые при этом нужно выбрать, поддерживать и время от времени обновлять. Шутки про node_modules уже вошли в историю. Dart при этом имеет достаточно богатую встроенную библиотеку, core библиотеки обновляются и поддерживаются самим Google

    • Агрессивный Tree-Shaking. Так как Wrike имеет огромный набор фичей, которые в итоге превращаются в большой объём кода, язык должен был помогать нам не загружать большое количество кода на клиент (см. Minification is not enough, you need tree shaking by Seth Ladd, a также github).

    Эти и некоторые другие особенности убедили нас сделать выбор в пользу Dart. И, оглядываясь назад на почти шестилетнюю историю Dart и Wrike, мы видим, что выбор был правильным. Конечно, мы прошли долгий путь от Dart 1.x с его динамической типизацией и интеграцией с Polymer до AngularDart и Dart 2.x. Dart помогал нам год от года растить продукт с инженерной и бизнесовой точки зрения, продвигая компанию и продукт в лидеры рынка Work Management Platforms (Gartner and Forrester ratings).

    Текущее состояние

    Сейчас мы написали на Dart уже 2.5 миллиона строк кода, а кодовая база состоит из 365 репозиториев. Мы создали большое количество решений для сборки и проверки Dart-кода: например, Dart Code Metrics. Без преувеличения отметим, что Wrike — один из самых больших потребителей Dart за пределами Google, что касается его web-ипостаси (появление Flutter способствовало взрывному росту популярности Dart, но пока ещё по большей мере в мире мобильной разработки).

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

    Экосистема Dart

    Мы бы не хотели полностью пересказывать документацию, поэтому сосредоточимся на наиболее важной части — фреймворках. Несмотря на то, что теоретически Dart позволяет работать со всеми web-фреймворками через JS interop, на самом деле выбор не очень большой:

    • OverReact обёртка над React от Workiva.

    • Flutter for Web — популярный кроссплатформенный фреймворк, написанный на Dart, с недавнего времени поддержка web вышла в стабильной версии.

    • AngularDart — де-факто стандарт для разработки web-приложений на Dart.

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

    Главные причины нашего ухода от разработки на Dart

    В предыдущей части мы дали краткий обзор на текущее состояние экосистемы языка Dart, касаясь в основном её frontend-части. Пришло время подойти к одной из ключевых проблем, которая на момент написания этой статьи, к сожалению, не решена: при всём желании невозможно выбрать техническое решение «на века». Мир frontend-разработки постоянно движется вперёд, развиваясь, порой, даже быстрее, чем того хотелось бы.  Веб-браузеры также развиваются, добавляя новые и новые возможности и расширяя API. Веб-фреймворки, которые, казалось бы, по определению созданы для того, чтобы абстрагироваться от нижележащих слоёв, тоже вынуждены реагировать на это. 

    Вдобавок к этому существуют и «модные» течения даже в весьма хаотичном мире фронтенда. Какое-то время назад это был прогрессивный рендеринг (React Fiber, Angular Ivy). Сейчас появляется тенденция в виде отказа от глобальных state managers, для примера можно рассмотреть Effector. GraphQL, Server Side Rendering — можно найти достаточно много вещей, которые обязательно должны быть поддержаны в современном веб-фреймворке.

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

    И в этом фундаменте есть два составляющих элемента: 

    • Код, который ваши инженеры пишут.

    • Код, который ваши инженеры НЕ пишут.

    Современная разработка (особенно на фронтенде) щедро сдобрена использованием third-party библиотек и инструментов. Да что там, сейчас можно запустить продукт на рынок, вообще не написав ни строчки кода (так называемый no-code подход)! Тем не менее, код, который вы не написали — это, с одной стороны, время, которое вы сэкономили, а с другой — риск, который вы берёте на себя. 

    Разработка крупного продукта — это всегда сложный баланс между написанием собственных решений / переиспользованием готовых / взаимодействием с разработчиками сторонних фреймворков. И используемые язык и фреймворк как одни из самых обширных и всепроникающих частей разработки становятся её наиболее уязвимым местом. В былые годы, когда продукты распространялись на дисках и концепция Continuous Delivery ещё не появилась, смена языка или фреймворка могла стоить критически дорого. Сейчас же, особенно с появлением концепции micro frontends, это не только не должно быть трагедией, а, наоборот, служит здоровым механизмом эволюционного развития.

    Со всем вышесказанным приходится признать, что мы пришли к точке, где нам приходится пересмотреть свой текущий технический стек как не отвечающий нашим требованиям. Несмотря на то, что язык Dart и его экосистема движутся вперёд (в том числе благодаря взрывному росту популярности Flutter), а язык Dart становится всё лучше и лучше (например, с null safety) один ингредиент всё равно отсутствует — web-фреймворк. Да, в самом языке уже есть примитивы, которые позволяют работать с DOM напрямую, но такая разработка может подойти для индивидуальных разработчиков, а не для больших команд.

    Под «отсутствием web-фреймворка» мы имеем в виду, что никакое из существующих решений для языка Dart не обладает четырьмя необходимыми для современного web-фреймворка качествами:

    • Feature richness. Обеспечение работы со всеми (или большинством) возможностей, которые предоставляет современный web.

    • Performance.

    • Поддержка сообщества.

    • Развитие и добавление новых возможностей.

    Если более пристально посмотреть на существующие фреймворки для языка Dart, то мы увидим, что:

    AngularDart

    Де-факто стандарт для веб-приложений. Отвечал почти всем требованиям, но, к сожалению, Google-команда сдвинула приоритет его развития в сторону Flutter. Это следует не только из твиттера Tim Sneath (менеджер Dart & Flutter): 

    Переписка о судьбе AngularDart
    Переписка о судьбе AngularDart

    Но и из более официальных источников. Также можно прочесть ветку на GitHub. Да, AngularDart по-прежнему на месте, он жив, его можно использовать. Но ему не хватает одного из ключевых элементов: «Развитие и добавление новых возможностей».

    OverReact

    Портированная версия React для Dart. К сожалению, поддержка комьюнити не очень большая, а сам проект разрабатывается в основном компанией Workiva.

    Flutter for Web

    Именно на этот фреймворк делают ставку инженеры Google. И он действительно движется вперёд взрывными темпами! Но то, что подойдёт небольшим компаниям или при портировании мобильного приложения на web, к сожалению, не подходит для наших задач.

    В данный момент для нас есть несколько блокеров, связанных с Flutter Web. Основной — это то, что невозможно встроить Flutter-приложение внутрь текущего веб-приложения. Ведь, к сожалению, Flutter нельзя обернуть в веб-компонент. Это очень сильно мешает концепции микро-фронтендов, основная идея которой состоит в том, что всю функциональность мы делим на независимые приложения. Эти приложения деплоятся и разрабатываются разными командами и имеют слабую связанность друг с другом. Если вы хотите узнать больше, на это есть соответствующий баг. Выходом было бы заворачивать микро-фронтенды в iframe, но это сопряжено с рядом трудностей технического характера.

    Помимо этого, Flutter пока не имеет ряда немаловажных для современного web возможностей, например SSR или SEO.

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

    Таким образом, несмотря на нашу любовь к Dart и годы, которые мы прошли вместе, мы приняли решение двигаться в сторону изменения нашего технического стека, так как основная задача компании — обеспечить возможность разработки приложения и через 2 года, и дальше, а с AngularDart мы объективно не можем этого гарантировать. 

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

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

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

    Какой стек мы выбрали для разработки?

    • 8,6%JS67
    • 57,8%Typescript450
    • 21,2%Vue165
    • 5,1%Clojure40
    • 24,4%React190
    • 5,9%C++46
    • 13,6%Kotlin.js106
    • 9,8%Что-то еще, более экзотическое :)76
    Wrike
    Мы делаем совместную работу проще

    Похожие публикации

    Комментарии 99

      –1
      Elm рассматривали?
        +3

        Боюсь Elm ещё более редкий язык, чем Dart, со всеми вытекающими

        +23

        Я же говорил 7 лет назад, что это дорога в никуда, и отсутствие выбора библиотек — бестолковый аргумент.
        Ну наконец-то вы решили перейти на $mol. Давно пора!

          +34

          А если серьёзно, краткое содержание пертурбаций я вижу так:


          • Потыкали "достаточно богатую стандартную библиотеку" — получилась ерунда, нужен фреймворк.
          • На тот момент из чего-то похожего на фреймворк был лишь PolymerDart.
          • Пилили спокойно на Полимере. Ничего не предвещало беды. И тут Гугл его закапывает.
          • Инвесторам-то не скажешь, что "мы пилим не на передовой технологии, а на мёртвой".
          • Надо менять коней. А тут уже AngularDart подоспел.
          • Перепилили на Ангуляр. Ничего не предвещало беды. Но тут Гугл и его закапывает.
          • Инвесторам-то не скажешь, что "мы пилим не на передовой технологии, а на мёртвой".
          • Ладно, перекраивать одеяло не впервой, что нам там предлагают? Flutter for Web? Серьёзно? Мобильный UX растянутый на десктоп? Пользователи такого не примут.
          • В вебе сейчас везде используется jQuery 2.0 React. Нужно что-то такое, но на Дарте. О, есть же уже OverReact!
          • Ээээ, но это же не фреймворк, а огрызок, к которому нужна куча либ, которая есть для экосистемы Реакта, но которых на Dart никто и не думает портировать. Их и на TS-то не спешат портировать — хорошо хоть комьюнити тайпингов напилило.
          • Делать нечего, ради Реакта, придётся переходить на TS. Осталось только как-то помягче сказать всем, кого так долго убеждали, что за Дартом будущее, что они дальше сами по себе.

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

            +4

            Я честно не понял, почему в своё время они взяли дарт вместо TS. Он тогда был менее удобным в части сахара, но по применимости в промышленных условиях в общем-то не сырее. Возможно, никто из ЛПР не понимал опасности вендор-лока такого масштаба (а TS даже в теоретическом сценарии "MS его всеми силами закапывает" в разы менее лочащий, в конце концов весь TS превращается в JS).

              +3

              Основной аргумент был: на JS/TS много говнолиб из которых надо мучительно выбирать, а на Dart есть лишь одна стандартная библиотека, где всё уже решили за тебя.
              Примечательно, что отсутствие на рынке Dart разработчиков, тогда никого не смутило. Фигня вопрос, берём java/.net бэкендеров, переучиваем их на Dart, получаем фронтенд не хуже.
              А когда я показываю кому-нибудь $mol, то самый популярный ответ: "штука интересная, но на рынке мало специалистов по нему, поэтому даже не станем пробовать". А это всего-лишь TS фреймворк, даже не новый язык программирования.

                0
                Основной аргумент был: на JS/TS много говнолиб из которых надо мучительно выбирать, а на Dart есть лишь одна стандартная библиотека, где всё уже решили за тебя.

                Я по этому поводу припомнил накопители Synology (NAS и прочие), у которых уже очень давно довольно-таки прекрасно и быстро работающая вебморда, которая еще и мультиоконный UI. И работает это всё на… ExtJS. И почему-то не закапывается. Ах да, наверное потому, что ExtJS покупают, а не берут бесплатно с надеждой что добрый дядя будет тащить поддержку.

                  +1

                  А часто она обновляется? Есть сложные вьюхи? Как насчёт a11y?

                    0

                    Можно посмотреть, как оно выглядит, загуглив "Synology DSM".
                    С a11y всё довольно грустно, но это скорее всего не проблема ExtJS, а признак того, что никто ей не занимался.

              +1

              Wrike выпустил много успешных фич на Dart. Успех ведь не в том, чтобы остаться со стеком навсегда. Не задумывался почему деньги позволяли?

                0

                Только вот благодаря Dart или вопреки?

                  +1

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

                  0
                  Если Dart так действительно был бы хорош и успешен, стал бы Wrike хоронить всю наработанную кодовую базу? Такие шаги делаются не от хорошей жизни, поверьте.
                    +2

                    В соседнем комментарии упомянули JQuery. Он сейчас является страшнейшим легаси. Вот у меня к вам вопрос: он был хорошим? Решал ли он задачи? Кажется что просто пришло его время. А JQuery, кто бы что не говорил, прекрасен. Точно также и с Dart. Думаю что основная проблема в том, что AngularDart все.

                      0
                      JQuery не является заменой Dart, это разные инструменты и для разных целей.
                      он был хорошим?

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

                      Естественно, решал, иначе он не стал бы таким популярным.
                      +1
                      Еще раз – в тексте ни слова по похороны существующей кодовой базе на дарте.
                        +2
                        А это что, простите, как не медленные похороны Dart в Вашей компании?
                        Важно отметить, что мы не прощаемся: Dart по-прежнему будет большой частью нашей разработки. Но для новых проектов мы теперь будем рассматривать другие возможности.

                          0

                          Похороны или нет – вопрос эмоций, но, хотя и грустненько, мы будем стараться новые вещи писать на TS

                  +14
                  Я думаю они доросли до jQuery
                    –1
                    Ага, с другой стороны уже зашли, провернулись.
                    0

                    Решил открыть вашу ссылку на очень не популярном девайсе (iPhone 11)
                    https://habrastorage.org/webt/pq/rm/ac/pqrmaca2l933mm645s-uznfnfiy.png
                    И бесконечный скрол сломался
                    https://habrastorage.org/webt/0r/wf/_4/0rwf_4_bo9yj4d1rhcm5imlxac8.png

                      0

                      Был бы у меня iPhone 11 я бы подебажил. Но почему-то владельцы iPhone 11 не спешат вкладываться в open source. Слишком дорого видимо.

                        0

                        Нууууу, я контребьючу иногда Vuetify

                    +22
                    Сделайте голосовалку, чтобы хабр комьюнити выбрало стек на котором будут писать ваши разработчики
                      +2

                      Если бы ещё Хабр комьюнити в таком случае скинулось на поддержку того, что получится ¯_(ツ)_/¯

                      +7

                      Выбор точно пал НЕ на Clojure! Если бы они выбрали Clojure, то написали бы название языка в голосовалке правильно.

                        0

                        Скорее всего, они перешли на старый добрый PHP. Или PHP не бывает для фронтэнда? Надо сделать!

                        0

                        Опрос генерировал робот! Он не виноват!

                        0
                        lit?
                          +1
                          Я бы назвал это «D language syndrome» :)
                            0

                            А D тут при чём?

                              +1
                              OpenMW изначально на нём был написан, потом переписан.
                          • НЛО прилетело и опубликовало эту надпись здесь
                              +5
                              А теперь ответом на вопрос «почему Dart» будет «потому что Flutter».
                                +5

                                Для веба ответ "потому что флаттер" не имеет смысла ни сейчас, ни в перспективе.

                                  –1
                                  Не вебом единым богата разработка
                                    0
                                    Это почему? Flutter хорош, Flutter web пока сыроват, но уже вполне позволяет получить мобильное приложение работающее прямо в браузере. Добавят фичу скомпилировать как web component и будет очень даже перспективно.
                                      +6
                                      но уже вполне позволяет получить мобильное приложение работающее прямо в браузере

                                      Примерно никому (кроме людей, пытающихся задешево выкатить что-то одновремненно в веб и в мобилки) не нужно "мобильное приложение прямо в браузере".
                                      Людям нужны нормально работающие вещи. Если вы хоть раз открывали в браузере gallery.flutter.dev — вам должно стать кристально очевидно, почему это не взлетит. Это, на секундочку, официальная "витрина" flutter web от самого гугла. Жрущая ресурсы, тормозящая (еще бы, учитывая что это canvas на всё окно), работающая "как мобила" (нафига мне тач-скриновые жесты в браузере?), и совершенно не умеющая в работу с текстом (еще бы, всё "запечено" в canvas, ни поискать, ни скопировать).
                                      В обмен на это я получаю что? То, что разработчикам дешево это выкатить?

                                        +1
                                        Примерно никому (кроме людей, пытающихся задешево выкатить что-то одновремненно в веб и в мобилки) не нужно «мобильное приложение прямо в браузере».

                                        Вы попадаете в ловушку нового опыта. Пока нет результатов использования этого подхода, говорить о ненужности невозможно.
                                          –2
                                          Ты просто не компетентен в таких вопросах. Таких «примерно никому» почти весь рынок. Клиенту все-равно как хорошо и на чем написан код, всегда вопрос упирается в сумму, которую готов потратить клиент что бы покрыть основные платформы (web && android && iOS). Посмотри количество вакансий на ReactNative, вряд ли их так много из-за того что это лучшее решения для мобильных платформ.
                                            +1
                                            Клиенту все-равно как хорошо и на чем написан код

                                            Конечно. Пока этим удобно пользоваться и оно не тормозит. А тем, в что результирует flutter web — неудобно пользоваться, и оно тормозит.


                                            Посмотри количество вакансий на ReactNative

                                            Посмотрел на career.habr.com, чтоб далеко не ходить. React Native — ~40, ios и android — каждая по 200 с лишним, веб-разработки вообще вагон.
                                            Это, оказывается "много"? А пацаны-то и не знали.

                                            0
                                            Это не обязательно canvas, есть два разных рендерера: Skia и html.
                                            Да с текстом пока плохо.
                                            Зато имеем одинаковое приложение везде. В мобильных браузерах вообще неплохо, в десктопных — пока посредственно. И никто не мешает даже сейчас комбинировать, часть на классическом веб, а часть на flutter web. Проблема только в том, что сейчас нельзя легко сделать web component, приходиться использовать iframe.
                                            А нормально работающие вещи — это приложения, а не web :-)
                                              0
                                              В мобильных браузерах вообще неплохо

                                              В мобильных браузерах, стоит только у вас быть телефону постарее — тормозит.

                                                0
                                                Постарее — это что конкретно? Прямо сейчас достал и проверил iPhone7 и Samsung S7 — ничего не тормозит.
                                                  0
                                                  Эмм, 4 гига памяти это постарее? Да я только недавно с полутора гигов ушел. Этот самсунг довольно близок к сегодняшним середнячкам. Возьмите телефон новый за 4-5к и посмотрите как оно будет работать. Это как раз середнячки постарее примерно так же будут.
                                                  Флаттер конечно хорошая вещь, но для мобильных (и то не для всех кейсов). В вебе он ну вообще не вариант для чего нибудь хоть сколь крупного.
                                                    0
                                                    Ну вообще-то это жуткое старьё, обоим по 5 лет :-) Уже iPhone12 и Samsung 20 актуальные модели. И как раз для крупного бизнес приложения Flutter отличный вариант.
                                                      +1
                                                      Старье, но флагман. Я еще год назад ходил с nokia 5(можете загуглить характеристики). Да и бизнес… Помню делали как то приложение для магнита внутреннее (на 1с правда), так они под него году в 2017 samsung j5 закупали.
                                                      Не, если вы говорите именно о мобильном приложении — согласен. Но если о мобильном вебе… Да блин, хоть сколь нибудь сложные веб приложения на флаттере у меня на ноуте в браузере fps явно даже меньше 30 выдают (i7 предыдущего поколения, 16 гигов). Даже при простом скролле.
                                                        0
                                                        Ну тут смотреть предметно надо, если аккуратно и без выкрутасов — то flutter web не тормозит, тем более на десктопе. Возможно проблема со Skia и Wasm — они сейчас включены по дефолту для десктопа. Надо отключить и собрать для начала с html render.
                                                0

                                                А в чём проблема завернуть в веб-компонент?

                                                  0
                                                  Пока тухло, завернуть можно, но с костылями.
                                                  Смотри github.com/flutter/flutter/issues/32329
                                                    +1

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


                                                    Вот тебе и поддержка комьюнити, которая годами ноет, что что-то не работает, но не помогает пофиксить проблему.

                                          –3
                                          Ну а что, есть Swift который на ios/macos и больше нигде, будет dart который только Flutter который только на дроиде.
                                            0
                                            На дроиде Kotlin.
                                          0

                                          На нас свет клином не сошёлся, всё-таки по меркам всего мира Wrike маленький. И, конечно, остаётся Flutter, как уже написали. Он локомотивом тащит Dart вперёд

                                          0

                                          Так всегда, самые ответственные решение приходится принимать в самое не подходящее время.

                                            +1
                                            Да, в самом языке уже есть примитивы, которые позволяют работать с DOM напрямую, но такая разработка может подойти для индивидуальных разработчиков, а не для больших команд.
                                            А как вы всё это время разрабатывали если платформа вас так ограничивает? По поводу локальных стейт-менеджеров — напишите свой. Или рассмотрите альтернативы — давным давно (по меркам фронтенда) существует Mobx, с которым тоже можно использовать локальные сторы. Порт на Dart: github.com/mobxjs/mobx.dart

                                            TypeScript конечно в разы богаче, чем Dart — union типы, mapped типы, условные типы. Но ради этого переписывать кодовую базу на 2.5 миллиона строк…
                                              +1
                                              В статье нет ни слова о переписывании кодовой базы. Речь о новом коде.
                                                +1

                                                Мы и не собираемся всё переписывать, это убиться можно. Всё старое остаётся на Dart, а новое тоже может разрабатываться на нём же. Будет зависеть от скоупа.

                                                0
                                                — CoffeeScript
                                                — ActionScript
                                                — Flow
                                                +1

                                                Проголосовал за экзотическое Phoenix LiveView. Оговорюсь это не мой выбор, а предположение. Сам бы выбрал Clojure/Script+Reagent

                                                  0
                                                  Судя по предыдущим вариантам, вы явно coffeescript выбрали.
                                                    +2

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


                                                    Даже если оставить в стороне вопрос о том, а действительно ли нужны все эти фишки. Вы, как "один из самых больших потребителей Dart за пределами Google", могли бы подхватить инициативу и добавить в AngularDart все необходимое сами. И не зависеть более от прихотей Гугла.

                                                      +1

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

                                                        0

                                                        Может, я что-то пропустил, но какой большой игрок стоит за Vue?

                                                          +1
                                                          Alibaba
                                                      +6
                                                      Берите Rust and wasm!
                                                        0

                                                        Lit второй версии на подходе, надо хватать. Слишком мало потрогали веб-компоненты, теперь уже пора, да и реакт+тс будет слишком скучно :)

                                                          +2

                                                          переехать с одной мертвой технологии гугла на другую, очень интересная затея

                                                          +4
                                                          Интересно, почему не упоминаются трудности с рекрутингом? Неужели было много разработчиков желающих переучиться на язык, востребованный в одной единственной компании?
                                                            –1
                                                            Трудности с рекрутингом были, как и в любой другой компании с любым другим стеком. Таков уж рынок. Как показал опыт, для серьезного разработчика конкретный стек менее важен, чем уровень инженерных задач, особенности продукта, процессы, культура и бренд компании. За 4-5 лет мы вырастили команду фронтенда с 10 почти до 100 человек, в том числе нанимая людей с бэкграундом в .net, java, с++ и других.
                                                              +1

                                                              Я тут немного посчитал. Если каждый разработчик будет писать в день ну, допустим, 1000 строк кода, то 100 разработчиков произведут за год примерно 24 миллиона строк кода. А это как раз размер ядра Линукса, причём на весьма низкоуровневом C. Похоже через год нас ждёт новая операционная система на базе менеджера задач.)

                                                                +16
                                                                1000 строк кода в день можно только копипастить
                                                                  +1

                                                                  И ещё пару недель отлаживать

                                                                    +1
                                                                    это еще при том что ты завидный холостяк, как Дмитрий.
                                                                    0

                                                                    Так современный фронтенд как раз про горы копипасты. Да и бэкенд (go), впрочем, тоже. Да даже если поделить на 2, то получим ядро Линукса уже через 2 года. А то и быстрее, если продолжать раздувать штат.

                                                                      0

                                                                      Ну только делить надо не на два, а на двадцать. Я у себя на проекте ежемесячно смотрю сколько мы в релиз мержим. На 5 разрабов выходит чё-то около 6000-7000 строк в месяц на питоне. Это уже после прохода через руки тестровщиков и фикса багов, ясное дело. Питон, конечно, довольно лаконичен, и на фронтенде будет больше выйдет из-за всяких html/css, но не настолько же.

                                                                        0

                                                                        Ну, если по себе судить, то на последнем проекте (коллаборативный визивиг) я вообще всего 15К строк написал за два года. Это около 30 строк в день. Но это в MAM экосистеме поощряющей микромодули и обобщённые решения. В индустрии же сейчас популярны низкоуровневые абстракции сдобренные изрядной долей копипасты.

                                                                +2

                                                                Мы вполне успешно нанимали и нанимаем, так что в этом смысле цифры говорят о том, что это не настолько важно

                                                                +3

                                                                Достаточно смешная новость.

                                                                  0
                                                                  Мне очень понравился ваш продукт, но цены у вас кусачие, CIO не одобрил ( подумайте над «ценовой локализацией» как у Steam например.
                                                                  В итоге выбрали jira.
                                                                    +1

                                                                    Такие большие проекты должны быть максимально абстрагированы от сторонних фреймворков. Сколько вы их уже сменили, и столько же еще поменяете. При этом подходе, по идее, Dart не должен быть такой уж большой проблемой. Тем более, что в результате все равно получается js. А там, глядишь, и Flutter for Web подрастет.

                                                                      +1
                                                                      2,5 миллиона строк кода для SAAS-todo листа с блекджеком и гант-чартами. Охренеть.
                                                                      У ребят управление CNC с машинным зрением выходит на 50-60 тысяч строк all inclusive. A тут, вы только вдумайтесь, 2,5 миллиона! Я, видать, чего-то не понимаю в современной разработке…
                                                                        0
                                                                        Скажите, а Haxe рассматривали?
                                                                          0

                                                                          Нет, я честно говоря впервые слышу

                                                                            0
                                                                            Ну под озвученные критерии подходит неплохо. Система типов – мощная, интероп с js – налажен через систему экстернов, выхлоп в js – весьма чистый, есть dead code elimination.
                                                                            Система метапрограммирования вообще чудеса позволяет творить. Посмотрите, вдруг заинтересует.
                                                                          0
                                                                          Мда. После долгих объяснений, что выбор Dart для фронтенда — это путь вникуда, так как они банально не найдут кадры, желающих поддерживащие их дарт приложение и терять свою компетенцию на рынке (а значит просить будут банально x2 по зп). Они все же созрели. Не может быть!

                                                                          Даже mail созрел быстрее и понял, что надо переводить их стек с perl, на что-то живое, ибо наивные студенты отказываются жрать г*вно, и давно уже поняли, что их где-то обманывают, рассказывая про то, как они будут бороздить просторы вселенной на перле.
                                                                            +1
                                                                            Даже mail созрел быстрее

                                                                            Вряд ли созрел, скорее стали уходить старички-перловики по разным причинам и топить за перл стало тупо не кому. А у молодежи такой любви к перлу не наблюдается.
                                                                            –1

                                                                            Это же постирония.

                                                                              +1
                                                                              svelte, полет нормальный.
                                                                                –1
                                                                                Похоже, что экзотики вам хватило, а типы всё ещё нужны. Поэтому переходите на TS
                                                                                  0
                                                                                  Интересно, спасибо что поделились опытом.
                                                                                  У вас Dart только в вебе используется или где-то еще? Бекенд, cli тулы, мобайл…
                                                                                    0

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

                                                                                    0

                                                                                    Фанаты хорошей типизации наверняка выберут ReScript

                                                                                      +1

                                                                                      После такого признания нужно уволить тех. дира. Все что вы перечислили как проблемы Dart было очевидно и 5 и 10 лет назад. А проблема ваша в индустрии известна еще раньше. Человек, который принимал решение написать 2.5 млн. строк кода на языке без коммьюнити не может рулить таким проектом.

                                                                                        0
                                                                                        Продолжение статьи habr.com/ru/company/wrike/blog/551964
                                                                                          +2
                                                                                          Спасибо Вам за материалы по Dart!

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

                                                                                          Самое читаемое