Объясните, почему мой рокет-саенс бэкенд билдится пару секунд, а четыре формы на фронте — полгода

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

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

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

    Проблема идиотов в том, что они не понимают сути происходящего, просто копируют действия умных людей, и результат разочаровывает. Вот так и у меня — по дороге домой я получил смс-ку, что доставка ноута затягивается, и мне придется подождать ещё пять дней. Но я все выходные жил идеей получить ноутбук, и ждать был не готов. Так что взял самое лучшее, что было в наличии — весьма среднюю машинку, с гигантским недостатком — 8гб оперативы. Но. Есть ещё один слот, можно будет расширить до 16-ти. 

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

    Но проблемы начались — потому что кто-то когда-то допустил фронтендеров к разработке ПО. 

    Смотрите, я запускаю ноут, на нем начинает крутиться операционка, со всеми своими службами и драйверами. Дотнет, студия, райдер, плеер, почтовый клиент, FIFA18, проводник, телега. И это все — 20% моей оперативы. А потом я запускаю интерпретаторы и исполнители js. 80+ % оперативы. Браузер, нода, вскод. Три приложения, которым я дал одно простое задание — отрендерить формы и интерпретировать жс в них. Двумерные, простые формы, без физики.

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

    Давайте так — я нихрена не эксперт в производительности, я очень слабо себе представляю, как отличается программирование операционной системы от создания штуки вроде Node.js — на мой дилетантский взгляд ОС решает гораздо более сложные и ресурсоемкие задачи, но хрен с ним. Нода у меня билдит код, который я написал на тайпскрипте. Но у меня ещё есть код, который я написал на сишарпе — его билдит, запускает и исполняет дотнет. Почему он жрет в десятки раз меньше памяти? Дотнет что, решает более простые задачи? Или может он медленнее? Меньше функциональности? Хер там плавал. 

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

    У меня гигантейший бекенд проект, и к нему малюсенький фронтендик — на четыре формы. Я делаю фичу — вношу изменения в кодовые базы обоих проектов. Когда изменения внесены — надо билдить. Я нажимаю f5 в райдере, альтабаюсь на вскод — и когда вижу перед собой стройные ряды typescript кода, получаю десктопную нотификацю: "build succeed". Все.

    Теперь билдим фронтенд — тут с f5 не получится, надо открыть консоль и ввести ЭнПиЭм команду. Я прогер, я умею печатать, и легко справляюсь. Комп начинает шуметь. Конечно, мы же решаем сложнейшую задачу — превращаем один жсный говнокод в другой — поменьше — для оптимизации. Это, конечно, надолго — четыре формы все-таки. 

    Просто сидеть и ждать за компом сил нет, поэтому решаю убить время и заварить кофейку. Я довольно ленив — путь на кухню со второго этажа на первый представляется для меня как целая экспедиция на южный полюс, поэтому несколько минут я сижу, туплю и собираюсь с силами. Вот почему так? Если бы кухня была со мной на одном этаже — пусть хоть в два раза дальше — дойти бы не было такой проблемой. Но чертовы лестницы! Физикам надо как следует приглядеться, не происходит ли там каких-то временных и гравитационных искажений.

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

    • Нужно высыпать из кофемолки среднепрожаренную бурду, которую пьет жена

    • Достать нужные зерна из специальной непроницаемой баночки, 

    • Засыпать в кофемолку, 

    • Выставить верный помол, включить её, 

    • Тщательно промыть френч-пресс. 

    • Пока чайник кипит, нужно держать френч под горячей водой — чтобы холодные стенки не остудили кипяток

    • Быстро ошпарить огромное количество молотого кофе. 

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

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

    Прошелся по двору, вернулся на кухню. Тут запишите еще пункт:

    • Пара ложек тростникового сахара, тщательно размешиваем. 

    Меееедлено, чтобы не пролить не капли на новый ковер, я пополз обратно наверх с наполненной до краев кружкой. Добрался через пару световых лет до ноута, очень медленно поднял ноут одной рукой — тяжелый, падла. Все-таки пролил пару капель кофе, но не на ковер, а на плитку —  в стотысячный раз благодаря Господа нашего, что дал мужчинам носки — изящное движение ноги, и следы преступления исчезают. Усаживаемся, ставим кофе рядом с собой, ноут на ноги, смотрим в экран —

    А билд ещё идет. Четыре формы, сынок.

    Я вот сам не строил инструменты вроде ноды. Такие важные инфраструктурные штуки — удел умных ребят со степенями, которые изучали сложные науки, пока я бухал в универе. Моей экспертности недостаточно, чтобы аргументированно объяснять — фронтендеры должны шлепать формы, им нельзя разрешать делать серьезные проекты со сложной логикой и алгоритмами. 

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

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

    Они придут и сюда. Они скажут, что вообще-то есть хот-релоад, чтобы не перебилживать проект. Они скажут, что вскод можно настроить так, чтобы билдилось по нажатию f5, скажут, что у меня не та версия ноды, и не тот ноут. Что на самом деле тот факт, что у меня на рабочей машине одновременно работает 4! клона сиплисплюсного кода, который интерпритирует жс — это отличный подход. Они вообще много чего скажут — все что угодно, лишь бы не переделывать свое дерьмо. 

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

    А билд ещё идет. Четыре формы, сынок.


    На правах рекламы

    Эпичные серверы - это мощные серверы на базе новейших процессоров AMD EPYC. Частота процессора до 3.4 GHz. Максимальная конфигурация - 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe!

    VDSina.ru — хостинг серверов
    Серверы в Москве и Амстердаме

    Comments 430

      +28

      А надо было подождать всего пять дней.

        +32
        Причем в идеале — сделать это вместо публикации статьи.
          +6

          Да, тут у автора, совпадение? — не думаю… С ноутом как и с кофе — отборные зерна, спец помол, температура и чистота воды и… ФРЕНЧ Пресс!!!)) сколько не пил кофе из пресса — это изврат… И бычками потом жижа воняет. Может не слишком отборный сорт кофе?

            0

            Скорее всего неправильный помол (есть пыль/осколки), или неправильное время заварки (и/или температура воды/чайника), или ожидания не того результата.

          +28
          а где линк на код? или по кофейной гуще гадать чего там билдиться так долго?
            +25

            С линком не такая статья интересная.

              0
              потому что 4 формы на чем угодно билдятся примерно моментально
                0

                Это смотря насколько кривые руки у того, кто эти формы написал.

                  0

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

                    0
                    логичней предположить что автор просто рекламный графоман.

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

                Главное сильной (или слабой?) прожарки.

                  +7
                  Фиг с ним с линком, где фирменная КДПВ с кодом на тёмном фоне?
                    +2
                    Слишком многие фишку просекли. Что то новое придумывает теперь видимо. F# в тегах тоже теперь отсутствует.
                    +11
                    Есть линк на хостинг серверов, ради этого статья и писалась. Какие еще линки тут нужны?
                    +17

                    Старый ноут (ему 4года) I56300U, 16GB, SSD + Всякая гадость которая его мониторит от компании, проект на 961,713 byte — реакт + тайпскрипт, билдится с нуля где то секунд 90. В HMR режиме — около 2 секунд.


                    Возможно нужно сначала разобраться с инструментарием, а потом искать тему для хайпа?

                      +7
                      «961,713 byte» это же где-то примерно чуть меньше килобайта, если, конечно, я верно понял

                      И оно билдится «всего» 90 секунд?
                        +3

                        961713/1024 = 939 KB, если я не все забыл конечно.
                        На диске это 1.25 MB.

                          +12
                          Запятая смутила немного, извиняюсь.

                          Всё равно, проект весом около мегабайта билдится 90 секунд?
                          Это размер исходников или уже опубликованного продукта?
                          Я конечно понимаю, что SLOC это плохая метрика, но сколько строк в таком проекте, хоть приблизительно для восприятия масштаба?
                            +3

                            Это исходники.
                            В билд входит транспайлинг из tsx + линтинг + преобразование SCSS в scoped CSS + еще кое что по мелочи.
                            SLOC — ~10k, 188 файлов.

                              +25

                              У меня Gradle за столько 100к строк джавового кода для Android билдит, и я думаю, что это долго, а ту 10к. Как-то грустно.

                                +1

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

                                  +60
                                  «Они вообще много чего скажут — все что угодно, лишь бы не переделывать свое дерьмо.» (с)
                                    +1

                                    Самый лучший аргумент.

                                      –6
                                      «Они вообще много чего скажут — все что угодно, лишь бы не переделывать свое дерьмо.»
                                      Автор этим пользуется, значит это и его дерьмо.
                                        0
                                        Он не просто этим пользуется, он что-то такое написал, что оно так долго компилится… И виноваты какие-то фронтендщики, они же его под дулом пистолета заставляли использовать это все))
                                    +1
                                    Вот только вам ведь после каждого изменения кода нужно заново билдить проект? А у нас HMR за секунду и даже состояние инпутов сохраняется.
                                      +2

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

                                        +4
                                        Я как раз нашёл старый проект — виндовую софтину на Delphi, начала 2000-х, там примерно полтора мегабайта чистых исходников, не считая всякой бинарной байды. Как раз скачивается апдейт на Visual Studio, время есть, решил собрать. Установил Delphi 7. Ну как установил — запустил инсталлятор, в это время там студия что-то спросила, я переключился, ответил, вернулся обратно, а установка Delphi уже закончилась.
                                        Так вот, запустил билд проекта, собрался за пару секунд.
                                          +6
                                          В те времена еще умели сражаться с драконами.
                                            +10
                                            Следы древней, высокоразвитой цивилизации.

                                            Я недавно, на одном стройобъекте по надобности ненадолго сел за компьютер прораба: давно пожелтевший системник, принтер вроде HP1005, процессор примерно Pentium 1600, внутри Word 2003 для печати документов, эксель для заполнения ежедневных отчетов, и кажется Nanocad для чертежей.

                                            Так вот, вся эта археология работает быстрее и отзывчивей, чем моя рабочая система, с NVME, Ryzen, 16Gb и последними версиями Autocad.
                                            0
                                            сударь, вы ещё с go или чистым С сравните :)
                                        +7

                                        А зависимости в node_modules посчитали?

                                          +5

                                          Нет, просто сделал npx soc ./src. Но какая разница, с аргументом уровня


                                          Они вообще много чего скажут

                                          Не поспоришь.

                                            +1
                                            Дык и в java-проектах на maven/graddle тоже есть зависимости. И в C# тоже пакетики с зависимостями есть.
                                              +3

                                              Дык в бинарничках же?

                                                0
                                                Дык а у фронтендеров почему не в бинарничках?
                                                  0

                                                  Дык браузер скотинка такая не кушает бинарнички… Такие дела :(

                                                    0
                                                    Ну вот Вы сами признали несовершенность фронтенда. Все ведь на поверхности лежит.
                                                      +2

                                                      А я говорил что он совершенен? Где?


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


                                                      Понятно что фронт не совершенен. И бэк тоже не совершенен, и даже рыбалка не совершенна. Но я же не иду на форум рыболовов с криками я купил супер удочку а у меня руки устают ее деражть?

                                                        –1
                                                        Не знаю говорили ли об этом Вы, но об этом говорит автор, к которому Вы стоите в оппозиции, и в этом случае он как никогда прав. Фронтент имеет серьезные фундаментальные недостатки, которые при всей их очевидности, к сожалению, никем не исправляются. Это не значит, что нужно прекратить зарабатывать на нем деньги — но давайте хотя бы не будем делать вид, что все в порядке и нужно просто разобраться в инструментарии.
                                                          +3

                                                          Да кто вам сказал что они не исправляются?


                                                          Вот, например появился WASM который позволяет отправлять в бразуер бинарники (инструментария не так много пока что но процесс идет).


                                                          Появился Дено решающий проблемы с типизацией "из коробки" + всякие полезные права на исполнение.


                                                          Появился Parcel для тех кто не смог/не захотел в вебпак.


                                                          И так далее. Но об этом же знать надо, гораздо проще написать вы фронтендщики говно!

                                                            –1
                                                            Вот WASM как раз очень наглядно демонстрирует что именно нужно производителям браузеров. Вместо того что бы взять LLVM и встроить ее в браузер… давайте придумаем свою абсолютно новую виртуальную машину (ну и что, что медленную), и код будем передавать в виде синтаксического дерева, пусть клиентские девайсы каждый раз при загрузке скрипта его в байткод переводят, а то ведь им заняться нечем. И плевать, что скорость WASM'а лишь слегка больше чем у Javascript'а (естественно, в этом отчасти виновата скорость V8) — главное, что стандарт получился настолько сложный, что конкурентам Chromium и Gecko только повеситься остается.
                                                            гораздо проще написать вы фронтендщики говно!
                                                            Я не писал что фронтенд-программисты говно — собственно, я так и не считаю. Но технологии фронтенда — объективно полный отстой.
                                                              +5
                                                              Вместо того что бы взять LLVM

                                                              Напомнить что произошло с Flash, Java Applets и Unity Web Player, который "просто встроили в браузер"? Я напомню:


                                                              1. они были постоянно дырявыми, и по факту просто были дырками
                                                              2. они были привязаны к конкретному производителю
                                                              3. они не управлялись программистами, а были костылём который был приколочен рядом
                                                              4. если у пользователя что-то случалось, то цепочка виновных была: сайтостроитель, производитель браузера, операционной систем и только потом производитель плагина. Просто потому что так оно видно для пользователя.

                                                              И хоть сейчас и очень заметна монополизация гугла, веб всё равно остаётся областью паритета нескольких сил. Не было бы этого паритета был бы Apple и тот же Гугл со своими 30%.


                                                              Я для себя смирился с достаточно простой мыслью: веб это общественнозначимая помойка. И именно поскольку она общественно значимая её будут охранять от vendor lock'а и государства, и сами компании. Но общественное не может быть одновременно хорошим и удобным. Потому что нужно учитывать общее мнение и не может быть Сталина, который стукнет кулаком по столу и отменит поддержку es3 или html.


                                                              технологии фронтенда — объективно полный отстой

                                                              Да, потому что это наследие. Потому что люди когда придумывали эти технологии они совершенно не думали о проблемах, которые эти технологии будут решать через 20-30 лет. Вспомним хотя бы первые сети, которые не предусматривали шифрования, потому что никому в голову не приходило, что в сети могут пустить домохозяек и хакеров.

                                                              • UFO just landed and posted this here
                                                                  +1
                                                                  Напомнить что произошло с Flash, Java Applets и Unity Web Player, который «просто встроили в браузер»?
                                                                  И ведь Вы не назвали ни одной технической причины. Ну что, принципиально невозможно сделать плагин недырявым? Или может в особенном фронтенде без привязки к одному производителю никак?
                                                                  Да, потому что это наследие. Потому что люди когда придумывали эти технологии они совершенно не думали о проблемах, которые эти технологии будут решать через 20-30 лет.
                                                                  Да я согласен, что обвинять отцов-основателей бессмысленно. Но сейчас всеми стандартами веба руководит вполне конкретная небольшая группа монополистов, и о своей монополии они заботятся куда больше, чем о каком-либо развитии.
                                                                  +2
                                                                  и код будем передавать в виде синтаксического дерева

                                                                  Вообще-то код на WASM передаётся в бинарном виде.

                                                                +1

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


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


                                                                То что у автора есть проблемы и он огульно поливает грязью целую индустрию без доказательств говорит только о его "профессионализме". Вот только пользы от этого нет. Проблемы эти заметны уже давно и их так же давно пытаются решить. GCC (который компилятор от гугла, а не от GNU), typescript, dart, wasm, webpack, jquery — это всё представители этих самых решений. Это не решения которые "решают проблемы которые сами же создают", а инструменты, попытки сделать что-то лучше и удобнее. Да, сейчас всё обстоит так, что за удобство мы платим скоростью транспиляции, оптимизации, загрузки страницы, рендера страницы etc. Но не волнуйстесь, ничто не вечно под луной, особенно проблемы, которые видны каждому первому проходящему, вроде автора.

                                                                  +1
                                                                  Насколько я знаю, на Android летит java byte-code, который при установке приложения компилируется под конкретную платформу. То есть это уже не простыня сырого джаваскрипта, который моя бедная мобилка должна компилировать — это код хорошо спроектированной VM, который быстро и легко переводится в натив. Во-вторых — это происходит в момент установки, один раз за историю использования приложения, а джаваскрипт я компилирую каждый раз когда перехожу на страницу в Интернете. Так что по логике вещей как раз компиляция скриптов в браузере должна быть лучше оптимизирована, чем установка Android-приложений.
                                                                  Есть вещи для которых определённый подход хорошо, есть для которых плох.
                                                                  Правда? Ну и чем же фронтенд такой особенный, что он не может заранее распарсить JS-код и передавать в браузер уже байткод, который будет компилироваться в машинные коды клиентского девайса?
                                                                  –1

                                                                  Автор — сквернословящий чудак, не способный затащить билд фронта в свой бекэндерский проект. Не знаю, насколько это сложно в шарпах, в java-мире это делается элементарно и там всё билдится по одной кнопке. И правильно настроенный билд spa (а не четыре формочки) почему-то занимал меньше минуты.
                                                                  Так что я напрочь уверен, что его говнокодные формочки можно было сбилдить за ~5-10 секунд при правильной настройке. НО! Он же король разработки! Зачем разбираться в чужом стеке и уметь правильно настраивать, правда? Давайте обосрём и будем довольны. Но почему-то на плюсовиков он не отважился лезть. Полез, почему-то только на фронтендеров.


                                                                  PS бекэндер на java, с небольшим опытом фронта. И да, я вот или не лезу сам формировать фронтовый билд или не жалуюсь, что долго. Зато в своё время разобрался с мавеном и знаю как легко билд на 15 секунд может выполняться больше минуты… если билд-скрипт написан через жопу.

                                                +16

                                                Хотел бы я посмотреть на эти 0,713 байта после запятой ;-)

                                                • UFO just landed and posted this here
                                                    +1
                                                    Хотел бы я посмотреть на эти 0,704 бита после запятой ;-)
                                                      +4

                                                      Берёте одну монетку с вероятностью выпадения одной из сторон в 80.4%…

                                                        +1
                                                        А это байт из 1000 бит состоит. В итоге хватает 704 бита, чтобы описать остаток.
                                                      +1

                                                      Очень просто: достаточно взять 8 монеток с вероятностью выпадения одной из сторон в 80.4%.

                                                      • UFO just landed and posted this here
                                                          0

                                                          Ну это слишком просто!

                                                      +4

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

                                                        0

                                                        На прошлой работе 15к лок на плюсах (без учета зависимостей) собирались с нуля за 8 минут, чяднт?

                                                          +5

                                                          8 минут, вроде нормальное время для одного поединка на стульях, всё сходится

                                                            0
                                                            Не знаю что конкретно, но что-то точно не так. Пет-проект на 30K строк (не loc, считал через Ctrl+Shift+F "\n") собирается за 12-13 секунд на R5 3600 в VS 2019.
                                                              –1

                                                              А сверх-шаблонизированные библиотеки вроде boost.intrusive там есть?

                                                                0
                                                                Нет, boost'а нет. С другой стороны, PCH тоже не использую.
                                                            0
                                                            Представляю. Исходники проекта, о котором написал ниже по ветке, весят 1,12 MB, собирается за 12-13 сек.
                                                        0
                                                        В «меньше килобайта» с трудом влезут конфиги вебпака и тайпскрипта. Скорее, тут почти мегабайт. И да, в такой ситуации 90 секунд — это «всего», я видел проект вдвое меньше, который собирался вдвое дольше.
                                                        0
                                                        И причём можно еще не брать вебпак, который сам по себе небыстр (rollup быстрее).
                                                        У меня, кстати, чуть меньший проект (800Кб) билдится с нуля за секунд 15-20, но у меня не старенький ноутбук, а вполне себе еще «торт» FX-8350. И это никто особо не страдал над скоростью билда, а можно было и пооптимизировать.

                                                        Памяти на это всё + VS Code + браузер уходит больше гига, но меньше двух, причём в основном её радостно сжирает хром, а не VS Code или билд.
                                                          +28

                                                          Ваш пример — как раз хорошая иллюстрация, что современная массовая разработка шагнула куда-то не туда. В Делфи проект аналогичного размера компилировался секунд 15 — 20 на Celeron 600 MHz

                                                            +3

                                                            Ну так как бы автор на это и жалуется. Просто в этот раз очень топорно.

                                                              –9

                                                              А то, что инструменты немножко со времён Дельфи выросли, как-то учитывается?


                                                              У меня файл в 30 строк


                                                              вот такой
                                                              module Surface.Theorems.Thinning
                                                              
                                                              import Data.Fin
                                                              import Data.List
                                                              import Data.Vect
                                                              import Data.Vect.Quantifiers
                                                              
                                                              import Surface.Syntax
                                                              import Surface.Derivations
                                                              import Surface.Theorems.Lemmas
                                                              import Surface.Theorems.TCTX
                                                              
                                                              import Helpers
                                                              
                                                              %default total
                                                              
                                                              mutual
                                                                export
                                                                twfThinning : Sublist g g' -> ok g' -> (g |- t) -> (g' |- t)
                                                                twfThinning _      g'ok (TWF_TrueRef g') = TWF_TrueRef g'ok
                                                                twfThinning subPrf g'ok (TWF_Base t1 t2) = let expCtxOk = TCTX_Bind g'ok (TWF_TrueRef g'ok)
                                                                                                            in TWF_Base (tThinning (AppendBoth subPrf) expCtxOk t1) (tThinning (AppendBoth subPrf) expCtxOk t2)
                                                                twfThinning subPrf g'ok (TWF_Conj twfr1 twfr2) = TWF_Conj (twfThinning subPrf g'ok twfr1) (twfThinning subPrf g'ok twfr2)
                                                                twfThinning subPrf g'ok (TWF_Arr twf1 twf2) = TWF_Arr
                                                                                                                (twfThinning subPrf g'ok twf1)
                                                                                                                (twfThinning (AppendBoth subPrf) (TCTX_Bind g'ok (twfThinning subPrf g'ok twf1)) twf2)
                                                                twfThinning subPrf g'ok (TWF_ADT preds) = TWF_ADT (thinAll preds)
                                                                  where
                                                                    thinAll : All (\t => g |- t) ls -> All (\t => g' |- t) ls
                                                                    thinAll [] = []
                                                                    thinAll (a :: as) = twfThinning subPrf g'ok a :: thinAll as
                                                              
                                                                export
                                                                tThinning : {e : STerm} -> Sublist g g' -> ok g' -> (g |- e :. t) -> (g' |- e :. t)
                                                                tThinning subPrf g'ok (T_Unit gokPrf) = T_Unit g'ok
                                                                tThinning subPrf g'ok (T_Var _ elemPrf) = T_Var g'ok (superListHasElems subPrf elemPrf)
                                                                tThinning subPrf g'ok (T_Abs arrWfPrf body) = let arrWfPrf' = twfThinning subPrf g'ok arrWfPrf
                                                                                                                  body'ctx = TCTX_Bind g'ok (arrWfImpliesDomWf arrWfPrf')
                                                                                                                  body' = tThinning (AppendBoth subPrf) body'ctx body
                                                                                                               in T_Abs arrWfPrf' body'
                                                                tThinning subPrf g'ok (T_App t1 t2) = T_App (tThinning subPrf g'ok t1) (tThinning subPrf g'ok t2)
                                                                tThinning subPrf g'ok (T_Case twf scrut branches) = T_Case (twfThinning subPrf g'ok twf) (tThinning subPrf g'ok scrut) (thinBranches branches)
                                                                  where
                                                                    thinBranches : BranchesHaveType g cons bs t -> BranchesHaveType g' cons bs t
                                                                    thinBranches NoBranches = NoBranches
                                                                    thinBranches (OneMoreBranch eprf rest) =
                                                                      case T_implies_TCTX eprf of
                                                                           TCTX_Bind _ tyPrf => let conTyOk = twfThinning subPrf g'ok $ assert_smaller (OneMoreBranch eprf rest) tyPrf
                                                                                                 in OneMoreBranch (tThinning (AppendBoth subPrf) (TCTX_Bind g'ok conTyOk) eprf) (thinBranches rest)
                                                                tThinning subPrf g'ok (T_Con arg adtTy) = T_Con (tThinning subPrf g'ok arg) (twfThinning subPrf g'ok adtTy)
                                                                tThinning subPrf g'ok (T_Sub x y) = ?thinning_sub_hole

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


                                                              Впрочем

                                                              в idris 2 это починили, и оно компилируется где-то миллисекунд за 500, но там есть свои проблемы, которые, впрочем, естественно ожидать от инструмента с версией 0.2.1.

                                                                +14
                                                                У меня файл в 30 строк тайпчекается минуты три с половиной

                                                                И это отвратительно
                                                                  –1

                                                                  А какие альтернативы? Покажете, как это сделать на дельфи?

                                                                    +4
                                                                    Нет, не покажу, т.к. Delphi не трогал с 2012, а ваш код я вообще не понимаю. Альтернативы, соответственно, тоже не подскажу.
                                                                    Но из ваших слов (предыдущий комментарий) получается, что инструменты выросли… в чём? Во времени тайпчека?

                                                                    В любом случае, исходник на 1 экран, который даже не начинает собираться за 3,5 минуты — это не есть хорошо. Я могу за схожее время собрать какой-нибудь огромный проект: только что пересобрал с нуля FreeSWITCH, и даже с учётом автотулзов у меня на полную сборку ушло 2 минуты. А ведь там много файлов по несколько тысяч строк кода…
                                                                    Да, ждать по две минуты (а периодически приходится делать чистую сборку) — тоже некомфортно, но ждать ещё дольше для тайпчека одного экрана текста… что-то в этом явно не правильно…
                                                                      +1
                                                                      Но из ваших слов (предыдущий комментарий) получается, что инструменты выросли… в чём? Во времени тайпчека?

                                                                      В выразительной мощности.


                                                                      Я там пишу формулировку и доказательство


                                                                      полутора маленьких лемм


                                                                      а машина проверяет, что это доказательство корректно и полно. Насколько я знаю, дельфи (как и C++, JS, rust и почти все остальные языки) не позволяет ни формулировать, ни доказывать чего бы то ни было.


                                                                      Да, 30 строк на три с половиной минуты — это крайний случай для прототипа нового языка, усложнённый тем, что я в этом коде очень сильно налегаю на неявные аргументы, которые компилятору приходится выводить, и это алгоритмически не очень тривиальный процесс, но средняя скорость в этак секунду на 100 строк — это плюс-минус норма.

                                                                        +10
                                                                        Коллега, автор про 4 экранных формы, чего вы со своей доказательной математикой лезете?
                                                                          +2

                                                                          Он первый начал! А чего они со своими дельфями?

                                                                      +1

                                                                      Вы бы хоть комментарии писали. Сами не путаетесь в своем коде?


                                                                      Насколько я знаю, дельфи (как и C++, JS, rust и почти все остальные языки) не позволяет ни формулировать, ни доказывать чего бы то ни было.

                                                                      А зачем оно нужно для разработки прикладного ПО?

                                                                        0
                                                                        Вы бы хоть комментарии писали. Сами не путаетесь в своем коде?

                                                                        Неа, они там особо не нужны.


                                                                        Для человека там типы функций (twfThinning : Sublist g g' -> ok g' -> (g |- t) -> (g' |- t) и tThinning : {e : STerm} -> Sublist g g' -> ok g' -> (g |- e :. t) -> (g' |- e :. t)) — там для знакомых с предметной областью всё понятно (даже был шанс проверить это на практике). Особенно если шрифт с лигатурами, и всякие |- превращаются в принятые в области значки. Тела этих функций человеку читать не нужно, они для машины, чтобы она могла проверить, что утверждения, закодированные в типах функций, действительно выполняются.


                                                                        И это я ещё чуть менее предметно-специфичный код с, ээ, уникодом не показывал, где вообще всё сразу понятно:

                                                                        как пример. Тело, опять же, неважно.


                                                                        А зачем оно нужно для разработки прикладного ПО?

                                                                        Чтобы всё было доказуемо и ничего не падало, и сбылась мечта многих о безбажном ПО!


                                                                        А если чуть серьёзнее, для подавляющего числа прикладного ПО с принятыми там ограничениями по времени разработки и/или бюджету это всё совершенно не нужно. Просто это скорее к тому, что само по себе время компиляции ни о чём не говорит.

                                                                          0

                                                                          Жесть какая-то...

                                                                            0

                                                                            Ну а что делать? Вариантов лучше всё равно нет.

                                                                            0
                                                                            и сбылась мечта многих о безбажном ПО!

                                                                            Оно будет безбажном только при безбажном ТЗ.
                                                                            А отсуствие ошибок, нетоностей формулировок, неосказанностей в ТЗ больше 10 страниц это по-моему фантастика.

                                                                              0

                                                                              Эти же средства позволяют найти внутренние противоречия в ТЗ. Не все, конечно, но достаточно значимый ряд.

                                                                                0

                                                                                Но они не позволят найти противоречия между тем, что ТЗ написано и что подразумевалось при написании...

                                                                      –1
                                                                      А это уж вы сами решайте (проект маленький, всего ~250к строк)
                                                                      image
                                                                      –1
                                                                      А вам не кажется, что сравнивать нативную компиляцию и транспиляцию, плюс либы, плюс стили, плюс линт немного некорректно?
                                                                        +3

                                                                        Эмм а можете рассказать мне в чем отличие по обработке с вашей точки зрения?

                                                                          –2
                                                                          В одном случае нужно парсить исходники и строить AST, а во втором нужно скопировать байты.
                                                                            +1

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

                                                                              +1
                                                                              А во втором думаете линковщик и компилятор волшебным образом все о библиотеках знают? Ага. Аж 500 раз. Что мешает фронтендным менеджерам зависимостей в определенном формате хранить апи этих зависимостей позволяющем не выполнять лишнюю работу?
                                                                                +2
                                                                                Что мешает фронтендным менеджерам зависимостей в определенном формате хранить апи этих зависимостей позволяющем не выполнять лишнюю работу?

                                                                                Вы предлагаете разработчикам NPM добавить ещё и полноценный ABI добавить в стандарт языка и поддерживать его? Не то чтобы я был против, но боюсь, что они не согласятся. Вообще если пойдете, то лучше не в NPM, а к разработчикам Babel, наверное ну или TypeScript. А и лучше сразу WebAssembly нормально поддержать. И опциональную типизацию, наверно.
                                                                                  +1
                                                                                  Эта проблема давно возникла в С++ и была успешно решена за счет precompiled headers.
                                                                                  Что мешает использовать опыт из других языков?
                                                                                  До введения precompiled headers, скорость компиляции файлов для Delphi превосходила компиляцию С++ во много раз.
                                                                                    0
                                                                                    В том же Питоне сделали [пре]компиляцию модулей, значительно ускоряющую выполнение. Что мешает сделать что-то подобное для TS/JS?
                                                                                0

                                                                                А что крутого в том что исходники так организованы что в них не разобраться быстро даже при работе в 8 потоков… Человек вообще наверное не понимает, что в них на самом деле написано :) сложность ведь запредельная ;)

                                                                                  0
                                                                                  Разница в алгоритмической сложности одного и другого, во-первых
                                                                                  И в окружении, во-вторых
                                                                                  JS никогда не будет быстрее классических компилируемых или даже интерпретируемых языков, потому что в нем кучу извращенных костылей, образовавшихся исторически, нужно слепить с кучей библиотек и пакетов (нет, их нельзя собрать заранее или как-то упростить процесс, как вы предлагаете ниже, потому что это будет постоянно создавать проблемы версионирования и консистентности, потому что нативного репозитория тоже не существует), а потом впихнуть это в такой формат, чтобы его понял даже старинный IE…
                                                                                    0

                                                                                    Полифилы и прочие подпорки занимают от силы 10% от всего того треша что собирается.

                                                                                      0
                                                                                      потому что это будет постоянно создавать проблемы версионирования и консистентности
                                                                                      А можно по-подробнее? Чем проблемы версионирования бинарников будут отличаться от проблем версионирования исзодников, из которых они собраны?
                                                                                    +1

                                                                                    Звучит, как будто в во втором случае меньше работы, так как часть вещей делается в рантайме

                                                                                      0
                                                                                      Так в рантайме оно и довольно быстро
                                                                                      Медленно — это когда вы пишете что-то типа «ng build --prod» и идете пить чай, потому что там уже немного другое колдунство происходит
                                                                                      0

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

                                                                                        0
                                                                                        Современный транспилятор тоже оптимизирующий и есть проверка типов, в том и фигня )
                                                                                        Angular при продовой сборке выкидывает целые неиспользуемые модули и компоненты, проверяет типизацию и вот это все
                                                                                        И да, поэтому он это и делает довольно долго
                                                                                          0
                                                                                          Ну справедливости ради конекретно этот аргумент «выкидывание целых модулей и компонент» — так себе.
                                                                                          Т.к. функционально это близкий аналог DCE (dead code elimination) в gcc. Что является достаточно быстрой фазой, т.к. требует однократного прохода по коду программы (разумеется в специальном представлении: IR).
                                                                                            0

                                                                                            И который требует не очень тривиальных (в пределе — Тьюринг-полных) вычислений. Ну, чтобы точно определять вещи типа


                                                                                            void foo()
                                                                                            {
                                                                                              bool flag = false;
                                                                                              if (!flag)
                                                                                                return;
                                                                                              // moar code
                                                                                            }

                                                                                            которые можно усложнять до бесконечности.

                                                                                              0
                                                                                              В «микро» вы правы. Но в «макро»: DCE работает с константами времени компиляции.
                                                                                              А за описанную вами оптимизацию отвечает Constant propagation (вероятно в gcc называется также, но не уверен).

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

                                                                                              Во-вторых, меня спросили — я ответил
                                                                                              В смысле, что в современном фронте это тоже есть
                                                                                        0

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

                                                                                          +1

                                                                                          В отличии от TypeScript, в Дельфи нет проблемы вывода типов. То есть в том же Дельфи компилятор может за несколько фаз собрать необходимый набор объектных файлов, причем каждый исходник может быть пройден независимо от других. В TypeScript может быть функция в стиле display = () => convert(this.name), то есть тип функции display определяется функцией convert. А она может, в свою очередь, ссылаться на другую функцию.


                                                                                          Аналогично с выводом типов уже внутри функций — он запускается только после фазы выше, тогда как в Дельфи типы определяются в самой переменной, так что этот пункт можно пропустить.


                                                                                          Как следствие — компиляция в Дельфи крайне хорошо параллелится, не требует много памяти (так как до линковки не надо поднимать в оперативку весь граф зависимостей) и так далее. Тогда как в условных TypeScript/Scala/C# программист может положиться на вывод типов, так что компилятору приходится выполнять больше грязной работы.

                                                                                            +2
                                                                                            В отличии от TypeScript, в Дельфи нет проблемы вывода типов.

                                                                                            Ну так потому что система типов никакущая. Почти как в яве, только еще более никакущая. Нет сложности — нет и проблем.
                                                                                              0
                                                                                              А что в Java не так с системой типов?
                                                                                                0

                                                                                                Слабая и невыразительная.

                                                                                                  0

                                                                                                  Если с конкретикой – мне не хватало union types, чтобы можно было Array<number | string> как в Typescript

                                                                                                    0

                                                                                                    Берите и пишите на Ceylon. Он тоже на JVM.
                                                                                                    Но вообще Union Type в Java можно заменить на библиотеки (это уже официальный подход, см. Optional), запись List<Either<Number, String>> всего лишь немного длиннее.

                                                                                                      0

                                                                                                      Вопрос был "что в Java не так".

                                                                                                        0

                                                                                                        Я всего лишь предлагаю варианты решения проблемы.
                                                                                                        Так-то на запрос "хочу Array<Number | String>" моей первой реакцией будет скорее удивление, потому что там, где я хочу чего-то настолько же странного, лучшей идеей будет сделать нормально именованный тип, чтобы всем было понятно, что это, откуда, кто и как именно этим пользуется в проекте.


                                                                                                        Upd: кстати, union'ы в Java вообще-то есть, но не для всех — их можно использовать в catch. Просто упомяну, может кому полезно будет.

                                                                                                          0

                                                                                                          А это уже следующая "хотелка", хочу чтобы тип Number | String можно было сделать именованным. И нет, Either<Number, String> — это немного не то (и, кстати, он такой же неименованный).

                                                                                                            –1
                                                                                                            class Value extends Either<Number, String> {}
                                                                                                              0

                                                                                                              Не вижу принципиальной разницы между Either и |, вот честно. В чём проблема, в том что это не часть языка?


                                                                                                              И я знаю, что Either это неименованный тип. Я его не себе предлагаю использовать — я это предложил вам, как прямой соответствие Number | String. Сам я так обычно не делаю, видимые типы лучше всё-таки именовать.

                                                                                                                0

                                                                                                                Принципиальная разница — в том, что за отсутствием в JVM структур Either<Number, String> может быть только отдельным объектом, соответственно его использование всегда немного нагружает GC.


                                                                                                                А гипотетический Number | String можно было бы сделать без выделения отдельного объекта под хранение признака Number там или String.

                                                                                                                  0

                                                                                                                  Для value-значений типа String это в обозримом будущем будет стоить вашему приложению потери производительности при сравнении между List<String> и List<String | Number>, потому что первый сможет специализироваться в массив байтов, а второй останется массивом ссылок на Object с некоторым синтаксическим сахарком на уровне компилятора.
                                                                                                                  Причём, как я уже сказал, за сахаром уже сегодня можно сходить пописать на Ceylon.

                                                                                                                    0

                                                                                                                    Э-э-э, а как это List<String> может оказаться массивом байтов? Может, вы List<Number> имели в виду?

                                                                                                                      0

                                                                                                                      Нет, и String тоже, в теории. Подвижки по value types для того и нужны, чтобы хранить в массивах только один служебный указатель на тип, а сами значения паковать как линейный суп без ссылок. Чтоб массивы были больше похожи на С, причём и массивы внутри ArrayList (иначе смысла мало). Но это, конечно, если String когда-то станет таким типом. Учитывая, что для полноценной поддержки для начала придётся убрать конструкторы — то и Integer таким типом может никогда не стать, для сохранения обратной совместимости.
                                                                                                                      Зато List<Number> скорее всего никогда как раз не будет паковаться — паковаться будут List<Integer> сотоварищи.

                                                                                                                        0

                                                                                                                        String — это уже массив. Невыровненный массив массивов вы в один массив не упихаете никак. Точнее, упихать-то можно, но быстро это работать никогда не будет, и вообще потребует "внутримассивного" менеджера памяти.

                                                                                                  0

                                                                                                  Кроссмодульный вывод типов — это всё равно очень плохая идея, так что на уровне модулей оно бы параллелиться тоже должно неплохо.


                                                                                                  Хотя лично я бы сказал, что и все топ-левел-байндинги должны быть аннотированы, но фиг знает, как оно там с этим в TS/Scala.

                                                                                                    0
                                                                                                    В TypeScript может быть функция в стиле display = () => convert(this.name), то есть тип функции display определяется функцией convert. А она может, в свою очередь, ссылаться на другую функцию

                                                                                                    Может, но кто-то во мне подсказывает, что даже если программист расстарался, и там в модулях десятикратная вложенность типов, затянуть всю иерархию типов проекта в одно развесистое дерево в памяти из разных модулей и определить их все — не бог весть какая задача для компьютера, делающего несколько миллиардов операций в секунду. И медленно оно отнюдь не поэтому, а… просто вот так реализовано.
                                                                                                      +1

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


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

                                                                                                        +1
                                                                                                        Не знаю, не могу согласиться. По меркам компьютеров 20-летней давности могу. Но сейчас, не иметь возможность полностью вывести друг из друга все типы (ну сколько их может быть в сотне килострок, тысяча? Две тысячи?) за доли секунды, это всё-таки плохая реализация, а не какие-то объективные причины.
                                                                                                        Я сомневаюсь, что «ну просто вот так реализовано» в четырёх реализациях, три из которых независимы совершенно.

                                                                                                        А я не сомневаюсь. У меня на компьютере полно мелких утилит, которые жрут ресурсов на порядок больше, чем навороченные IDE пару десятилетий назад. Сейчас все так пишут.
                                                                                                          +1
                                                                                                          ну сколько их может быть в сотне килострок, тысяча? Две тысячи?

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


                                                                                                          И это я уж не говорю о вычислениях на типах, о выводимых компилятором всяких операторах сравнения, хешах, ещё какой-нибудь ерунде, и так далее. Или вот полноценные дженерики, скажем — это уже полноценное STLC, поднятое на уровень типов, если говорить о конструкторах типов (типа vector<T>), или ещё интереснее, если говорить о дженерик-функциях.


                                                                                                          Плюс, вывод типов в рамках одного модуля (или в рамках одной функции, даже если требовать топ-левел-аннотации) очень плохо параллелится, поэтому выигрыш между одноядерным Pentium 4 на 3 гигагерца из 2002-го года и современным тредриппером на 32 ядра и плюс-минус те же 3 гигагерца будет существенно меньше, чем 32 раза.

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

                                                                                                            Да, но ведь 99% из этих уравнений решаются простой подстановкой, и кроме того, не на строчку кода, а на строчку кода, где присутствуют переменные/функции, чьи типы, собственно, нужно выводить. У вас же не в каждой строчке кода используются новые переменные и новые функции?
                                                                                                            Алгоритм Хиндли-Милнера пришёл к нам лет 30 назад, когда компьютеры имели смешную по нынешним меркам производительность, и компиляторы Хаскеля справлялись со своей работой и на 386-х процессорах.
                                                                                                              0
                                                                                                              У вас же не в каждой строчке кода используются новые переменные и новые функции?

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


                                                                                                              Алгоритм Хиндли-Милнера пришёл к нам лет 30 назад, когда компьютеры имели смешную по нынешним меркам производительность, и компиляторы Хаскеля справлялись со своей работой и на 386-х процессорах.

                                                                                                              Ну, во-первых, было бы интересно, как быстро компиляторы хаскеля компилировали этот самый хаскель на 386-х машинах, а, во-вторых, в то время в хаскеле не было вещей типа type families, GADTs и так далее, не говоря о не относящихся напрямую к типах, но требующих работы компилятора вещей типа generics (это такое метапрограммирование, считайте, а не дженерики-как-в-джаве) и вывода компилятором реализаций тайпклассов через них.

                                                                                                +3
                                                                                                Я бы сказал это очень долго, должно быть примерно на порядок меньше(именно сборка+линтер). У тса конечно не самый быстрый компилятор(я бы сказал ооочень медленный), но у меня бек на нем собирается менее 10 секунд на CI(думаю там машинка выделена не сильно быстрее вашей). Линтер-6 секунд.
                                                                                                Джавовый проект есть на 100к строк код с мавеном — сейчас лень смотреть, но время сборки +линтера в сумме в несколько раз меньше.
                                                                                                Но если говорить про CI то js значительно медленнее чем другие языки-очень медленный туллинг, который написан на джсе, нпм инсталл занимает десятки секунд-и с этим сложно что-то сделать, линтер даже на 1к строк кода запускается и пробегает поряка 5 секунд, тесты также в разы медленнее исполняются.
                                                                                                А на фронте еще куча наворотов поверх самого js.
                                                                                                  +10

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

                                                                                                    0
                                                                                                    нпм инсталл занимает десятки секунд-и с этим сложно что-то сделать


                                                                                                    Yarn 2 Berry уже сделали с этим что-то. PnP называется, почитайте. Выглядит довольно дико на первый взгляд, с непривычки. Но я уже пользуюсь этим и доволен как слон — зависимости хранятся прямо в репе, никакого npm install при деплое.
                                                                                                    0
                                                                                                    не, тема для хайпа интереснее
                                                                                                    –1

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

                                                                                                      +57

                                                                                                      У него достаточно компетенций, чтобы заметить, что его огромный бэк собирается куда быстрее 4 форм.

                                                                                                        +5

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

                                                                                                          0

                                                                                                          Достаточно компетенций на что? На сравнение теплого и мягкого? Из статьи совершенно непонятно:


                                                                                                          1. Взял ли автор правильный инструмент для своей задачи
                                                                                                          2. Умеет ли он им пользоваться
                                                                                                          3. Не стреляет ли он себе в ногу намеренно
                                                                                                            +1
                                                                                                            4. Существует ли описанная ситуация в реальности, или это только лишь theorycrafting.
                                                                                                          +4
                                                                                                          Ну так ему есть с чем сравнить
                                                                                                          +45
                                                                                                          Оказывается, мой современный ноут за 80 кусков недостаточно хорош для этого

                                                                                                          Главное, что статьи можно на хабр клепать не останавливаясь
                                                                                                            +28
                                                                                                            На правах шутки
                                                                                                            А комментари читать уже нельзя, скролл лагает.
                                                                                                              +2

                                                                                                              А почему шутки? Бывали ситуации когда у меня вкладка с комментариями под статьей просто начинала неистово течь и жрать процессор.

                                                                                                              0
                                                                                                              Жажда денег у человека
                                                                                                                +3

                                                                                                                А почему нет? Рейтинг положительный? Положительный. Значит сообществу это заходит. Значит можно продолжать.
                                                                                                                Сколько еще чудных статей нас ждет...

                                                                                                                +1
                                                                                                                Буду следить за кармой автора, на данный момент — 295.
                                                                                                                  +23

                                                                                                                  Все кто мог уже определились статей пять тому :)

                                                                                                                • UFO just landed and posted this here
                                                                                                                    +9
                                                                                                                    пусть VDSina выдаст выделенный эпичный сервер, с ноута за 80 тыр заходим по RDP и всё ок

                                                                                                                    Автор, конечно, перегибает, но ведь это именно та проблема, о которой он пишет. Вместо того, чтобы оптимизировать инструменты, ставим более монструозную железяку.
                                                                                                                    • UFO just landed and posted this here
                                                                                                                        0
                                                                                                                        А какой вариант долгосрочного решения проблемы? Если краткосрочное — железо, решение для «трех калек» — железо, то выходит что всегда надо эту дырку затыкать железом, и тогда для всех временных рамок решение одно.
                                                                                                                        • UFO just landed and posted this here
                                                                                                                          +2
                                                                                                                          время программистов дорого

                                                                                                                          Раз время такое дорогое — почему его не экономят, ведь за то, что программист ждёт окончания компиляции, тоже кто-то платит?

                                                                                                                            0

                                                                                                                            Да ладно, есть множество способов экономить.
                                                                                                                            Просто автор поста об них не в курсе.

                                                                                                                          +1

                                                                                                                          Скорость чтения/записи на диск это то во что ты упираешься пиши хоть на ассемблере. Если твоя программа работает с файлами, выше этой цифры не прыгнешь. Если опускаться на уровень операционной системы она тоже работает с файловой системой, например когда ты запрашивает новый срез memory mapped файла. Не возьмусь утверждать, но вроде винда скидывает дамп памяти на диск при выходе за границы виртуальной памяти процесса. JS код это очень-очень много мелких файлов (node_modules). Билд на SSD и HDD небо и земля, личный опыт.

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

                                                                                                                            Конечно скидывает (pagefile.sys), что ещё винде остаётся делать?

                                                                                                                            Ноутные HDD обычно на 5400 rpm. Да, сегодня для разработки SSD это минимум, а ещё лучше хороший NVMe SSD.
                                                                                                                              +3
                                                                                                                              Скорость чтения/записи на диск это то во что ты упираешься пиши хоть на ассемблере.

                                                                                                                              Это потому, что вы пытаетесь бороться со следствием, а не с причиной:
                                                                                                                              JS код это очень-очень много мелких файлов (node_modules)

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

                                                                                                                            похоже прогресс примерно здесь пошел не туда
                                                                                                                            хотя да, зерлинги, большими толпами, рулят :)
                                                                                                                              +1
                                                                                                                              Думаете в ноуте за 80к hdd стоит?
                                                                                                                              • UFO just landed and posted this here
                                                                                                                                  0
                                                                                                                                  Более того даже в ноуте за 100+к может hdd стоять. Правда с большой вероятностью в добавку к SSD.
                                                                                                                                –20
                                                                                                                                С пустяками вроде трехмерного футбола с очень серьезной физикой и графикой, мощным ИИ, и очень серьезными расчетами в реальном времени ноут справляется.

                                                                                                                                Так напишите систему сборки фронта на видеокарте, если конечно получится. Вся физика и графика замечательно распараллеливается и обсчитывается на видеокартах. Со сборкой кода такое вряд ли прокатит.
                                                                                                                                ноут за 80 кусков

                                                                                                                                Печатная машинка конечно дорогая, но вы вроде собирались ноутбук для разработки покупать? Я вот стационарный комп год назад покупал, он мне без видеокарты в 90К обошелся, аналогичный по производительности ноутбук будет все 120К, а то и больше. Но это же рабочий инструмент.
                                                                                                                                  +2
                                                                                                                                  А зачем вскод? Разве райдер не умеет в консоль чтоб запустить npm?
                                                                                                                                  Или не умеет открывать js, html etc файлы?
                                                                                                                                    0
                                                                                                                                    Моя рабочая машинка, куплена в 2012
                                                                                                                                    iMac (21.5-inch, Mid 2011)
                                                                                                                                    Процессор 2,5 GHz Intel Core i5
                                                                                                                                    Память 8 ГБ 1333 MHz DDR3
                                                                                                                                    SSD 120Gb
                                                                                                                                    HDD 500GB


                                                                                                                                    Вот это всё сейчас запущено, работает, переключается и тормоза бывают крайне редко
                                                                                                                                    Хром — 126 вкладок в 3-х окнах
                                                                                                                                    Dash Kapeli
                                                                                                                                    Dropbox
                                                                                                                                    VSCode с небольшим проектом
                                                                                                                                    PHPStorm с проектом потяжелее
                                                                                                                                    foobar2000, крутящий flac'и с Джонни Кэшем
                                                                                                                                    SublimeText 3 — 7 окон, примерно 50-60 вкладок
                                                                                                                                    qBittorrent, 14 раздач
                                                                                                                                    Skype
                                                                                                                                    Telegram
                                                                                                                                    ForkLift
                                                                                                                                    AraxisMerge
                                                                                                                                    nvALT (759 файлов-записей)
                                                                                                                                    iTunes
                                                                                                                                    iTerm (zsh) с запущенным webpack
                                                                                                                                    Сервисы: nginx+php-fpm, mysql, elasticsearch, rabbitmq, nodejs


                                                                                                                                    Я это к тому, что нужно код смотреть и искать причину долгого билда.
                                                                                                                                      +22
                                                                                                                                      Не нужно. Можно набросить и оно само бурлить начнёт, будут гореть и рваться пердаки, за этим всем можно будет здорово понаблюдать. Не нужно разбираться в проблеме, если можно просто накинуть каках на вентилятор.
                                                                                                                                        +3
                                                                                                                                        Если бы у меня не было такого бы имака я бы может бы и поверил что не тормозит. Но у меня есть и даже с 24рамы. На такой машине можно конечно работать но запуск докера -и все можно сушить весла полностью, даже без хрома.
                                                                                                                                          +1
                                                                                                                                          Докер, к сожалению, не использую, весь стек на основной машине.
                                                                                                                                          Не тормозит, вернее, тормоза бывают крайне редко, и я их устраняю.
                                                                                                                                          Может, причина в OS (у меня до сих пор установлена HighSierra), но я склоняюсь к тому, что причина в подходе к настройке.
                                                                                                                                          Пример: nvm (nvm use) при переходе в папку проекта я запускаю вручную, а не даю на управление шеллу, так как начинает страдать отзывчивость. Мне это несложно — аптайм исчисляется неделями.
                                                                                                                                          Моё примерное рабочее окружение описано тут.

                                                                                                                                          Ну, можете заехать и убедиться сами ¯\_(ツ)_/¯
                                                                                                                                          Можно по видеосвязи демонстрацию устроить.
                                                                                                                                          Можно Фила попросить заехать и глянуть, он в этом же городе живёт :-)
                                                                                                                                            0
                                                                                                                                            Докер под мак сломан. То что в докере работает под линуксом с минимальной нагрузкой на ноуте 10 летней давности — в случае даже свежего макбука доводит этот самый макбук до кипения с оглушающим воем системы охлаждения.
                                                                                                                                              +1

                                                                                                                                              Так чистого докера под Mac и нет. Он запускается под виртуалкой, с соотвествующими накладными расходами.

                                                                                                                                                0
                                                                                                                                                О том и речь, данный подход почти полностью гробит смысл docker'а как такового.
                                                                                                                                            0

                                                                                                                                            Про вкладки хрома, они бывают "разные" одно дело текстовые странички, другое, к примеру вкладки с забором с большим количеством комментариев :)

                                                                                                                                              0
                                                                                                                                              Вы действительно хотите получить список открытых вкладок?
                                                                                                                                              Я могу. Сейчас их 141.
                                                                                                                                                0
                                                                                                                                                У меня в браузере на домашнем ноутбуке открыто 830 вкладок, на рабочем ПК — чуть поменьше. Я открываю ссылки во вкладках, а потом читаю, заношу в закладки, закрываю ненужные и т.д. Домашний ноутбук — неплохой по быстродействию даже по современным меркам, на работе ПК — раза в 2 похуже, но с нагрузкой справляются.
                                                                                                                                                  0
                                                                                                                                                  Ну так современные браузеры вкладки и не грузят сразу, только после обращения к ним. Количество вкладок больше вообще не показатель.
                                                                                                                                                    0
                                                                                                                                                    Ну так активных (используемых) вкладок почти всегда не меньше полсотни.
                                                                                                                                              +1

                                                                                                                                              Ох сколько всего интересного можно запустить на таком железе вместо одной лишь Android Studio

                                                                                                                                              +5
                                                                                                                                              топовейший ноут
                                                                                                                                              80 кусков
                                                                                                                                              что-то не сходится. Такое ощущение, что вы отстали от цен лет на пять. Сейчас топовый ноут дешевле 100-150к найти крайне сложно.
                                                                                                                                                +1
                                                                                                                                                150к — это только 16G RAM, 1Tb NVMe, 4K экран. Но — низковольтажный проц. Точнее — 160к. Если хочешь ноут для разработки — видимо, придётся ещё 20к-50к подкинуть на 45W проц.

                                                                                                                                                Беда с этим какая-то, доходы падают в железном эквиваленте. :(
                                                                                                                                                • UFO just landed and posted this here
                                                                                                                                                    +1
                                                                                                                                                    Увы, ноуты вне конкуренции. Их с собой носить можно.
                                                                                                                                                    Мы же все сейчас любим удаленку и хотим иметь возможность возить рабочее место с собой.

                                                                                                                                                    Стоит 150-200к. Ленова x1 или Мак по вкусу. Оба хороши.
                                                                                                                                                      +8

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

                                                                                                                                                        +1

                                                                                                                                                        Да как бы нет. Если дома — полноразмерный стационар с правильной посадкой, если на работе — то же самое. Весьма неудобно смотреть в мелкий ноутбук, слегка сгорбившись.

                                                                                                                                                          +3
                                                                                                                                                          К ноуту тоже можно подключить внешние монитор и клавомышь и горбиться только когда используешь ноут в пути
                                                                                                                                                            0
                                                                                                                                                            А зачем использовать ноут в пути? У автора была нормальная ситуация, которую он испортил. Я про только стационарник и последующую покупку ноута, чтобы работать всегда и везде. Вот не нужно это на самом деле.
                                                                                                                                                              +1

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

                                                                                                                                                                +4
                                                                                                                                                                Не выходи из комнаты, не совершай ошибку? )
                                                                                                                                                          +2

                                                                                                                                                          Не хотел бы я таскать ноут за 200к с собой

                                                                                                                                                            0
                                                                                                                                                            А в чем проблема с тасканием ноута за 200к с собой?
                                                                                                                                                              0
                                                                                                                                                              Жалко угробить. Я вот например бывало с собой на велике кататься брал prestigio 133s. Ноут за 200к с собой вот так не возьмешь.
                                                                                                                                                          • UFO just landed and posted this here
                                                                                                                                                              +3
                                                                                                                                                              Покупаем мощный десктоп, плохой лэптоп, подключаемся по RDP и билдим на мощном десктопе из любого места
                                                                                                                                                                +1

                                                                                                                                                                Звёздочку забыли:
                                                                                                                                                                *из любого места: при наличии стабильного коннекта; ping <100мс, speed>20мс и без потерь.

                                                                                                                                                                  0
                                                                                                                                                                  А еще лучше арендуем мощности в облаке…
                                                                                                                                                                    0
                                                                                                                                                                    На мощном десктопе можно отлично поиграть, не всё время же работать.
                                                                                                                                                                      0
                                                                                                                                                                      Вы удивитесь, но и в облаке тоже!
                                                                                                                                                                        0
                                                                                                                                                                        Если не жить рядом с датацентром, то ряд игр (например, сетевые шутеры, МОБЫ и прочие тайминго-зависимые игры, те же Dark Souls) вряд ли будут приносить что-то, кроме раздражения из-за приличной задержки
                                                                                                                                                                          0
                                                                                                                                                                          Так если уехать далеко от десктопа — на ноутбуке по RDP будет не лучше
                                                                                                                                                                  +1

                                                                                                                                                                  Для этого изобрели SSH и удалённый рабочий стол. Ставишь дома десктоп с жирными вещами и соединяешься издалека.

                                                                                                                                                                    +1
                                                                                                                                                                    Ну, у меня хоть ноута нет (которым бы пользовался, так то старенький лежит в шкафу), но лично я терпеть не могу работать удаленно. Проверено. То интернет отвалится. То он с такой скоростью и пингом (3g/edge) что любое действие мучение. То просто лаги раздражают. Еще и в случае удаленного рабочего стола часть хоткеев перехватывается.
                                                                                                                                                                      0
                                                                                                                                                                      Хотел было возразить, но вспомнил, что я то работаю удаленно по домашней сети, а это совсем другая разница
                                                                                                                                                                        0
                                                                                                                                                                        Меня даже в локальной сети раздражало. Хотя там сеть предприятия была, объединяющая один этаж. Но да, ваш вариант действительно мимо, тут речь о работе именно издалека шла.
                                                                                                                                                                          0
                                                                                                                                                                          В рамках одного роутера-свитча (нужное подчеркнуть) — норм
                                                                                                                                                                      0

                                                                                                                                                                      Это не работает с разработкой 3D приложений от слова "совсем".
                                                                                                                                                                      Все будет тормозить, либо вылезать артефакты, что неприемлимо.

                                                                                                                                                                        0
                                                                                                                                                                        C RDP — да.
                                                                                                                                                                        Но достаточно давно VMware внедрила PCoIP протокол (пусть он и требовал тогда ускорителей) именно для работы всяких 3D-разработчиков удаленно.
                                                                                                                                                                        Ну или более новая версия — тот же Parsec (изначально — для стриминга игр, вполне нормально стримит, и он вообще бесплатный).
                                                                                                                                                                        Недостатки конечно есть но некритичнные:
                                                                                                                                                                        — ОЧЕНЬ желательны аппаратные кодер и декодер (обычно встроенного в процессор или видеокарту хватает). Если нет — будут лаги и артефакты.
                                                                                                                                                                        — Канал кушается мегабитами, можно настроить чтобы десятками мегабит кушался если надо совсем уж высокое разрешение. Если канал не держит — будут лаги и артефакты.

                                                                                                                                                                          0
                                                                                                                                                                          Заводить аккаунты, использовать сторонние сервисы и страдать, если они лягут или в них найдут дырень?
                                                                                                                                                                          Пробовал я Parsec — всё равно не зашло, артефачит, удобство использования не очень.
                                                                                                                                                                          Страдал с VNC/AnyDesk/NoMachine/X2Go/ещёдесятокспособов, потом в итоге купил ноутбук и будто заново родился.
                                                                                                                                                                          Для обычной разработки удалённое подключение — нормально, жить можно.
                                                                                                                                                                          Для 3D графики — при всём желании невозможно ужать гигабиты видеотрафика в мегабиты. Всегда где-то в чём-то будет плохо.
                                                                                                                                                                        • UFO just landed and posted this here
                                                                                                                                                                            0
                                                                                                                                                                            Ну можно купить хороший гробик с парой видеокарт в SLI или просто самой мощной десктопной. Но ценники на такое конечно совсем негуманные и найти непросто.
                                                                                                                                                                              0

                                                                                                                                                                              Тут ведь и так обсуждаются ноутбуки ценой 200+ тысяч рублей.

                                                                                                                                                                              0
                                                                                                                                                                              То ли дело ноутбук, летает, работать с 3D одно удовольствие.

                                                                                                                                                                              Конечно! В хороший ноутбук и в GeForce RTX 3080 влезет!
                                                                                                                                                                              image
                                                                                                                                                                              3dnews.ru/assets/external/illustrations/2020/08/07/1017647/axp1.jpg
                                                                                                                                                                            0

                                                                                                                                                                            И всё тормозит и лагает из-за пинга издалека, а смысл в двух мониторах пропадает.


                                                                                                                                                                            По крайней мере, мне с пингом в 10-20 мс уже некомфортно работать, а вайфай + пара хопов через интернет такое вполне может дать.

                                                                                                                                                                          +2
                                                                                                                                                                          в 3900xt нет встроенного видео
                                                                                                                                                                          • UFO just landed and posted this here
                                                                                                                                                                            0
                                                                                                                                                                            Вы ничего не путаете? один только проц ~45 тысяч остальное в 30 ну никак не влазит

                                                                                                                                                                            Но по дексктопу согласен, отдельным пунктом 34 21:9 монитор или два монитора и где здесь место ноуту не могу сообразить
                                                                                                                                                                              0
                                                                                                                                                                              Да, что то перебор. На вскидку тысяч 85 должно выйти.
                                                                                                                                                                              • UFO just landed and posted this here
                                                                                                                                                                                0

                                                                                                                                                                                У Ryzen 3900XT нет интегрированного видеоядра, так что на видеокарту всё-таки придётся раскошелиться дополнительно. Правда, если не играть на машинке, то в цене прибавит не намного, примерно как ещё один блок питания.

                                                                                                                                                                                  0
                                                                                                                                                                                  Так видеокарта и старая может быть. Это же ПК.
                                                                                                                                                                                    0

                                                                                                                                                                                    Ну вообще-то да, но тогда условие "если есть уже корпус и блок питания" во-первых, перестаёт быть опциональным, а во-вторых превращается из задачи сборки нового компьютера в задачу апгрейда.
                                                                                                                                                                                    Со старой видеокартой я вот именно так и сидел прошедшие полгода, правда не на 3900XT, а на 3800X.


                                                                                                                                                                                    Бормотание под нос

                                                                                                                                                                                    А потом купил RTX 2070S утром в день анонса RTX 3070. Да, до сих пор немного штормит.

                                                                                                                                                                                0
                                                                                                                                                                                А можно взять нормальный ноут а не сверхтонкое поделие.
                                                                                                                                                                                  0

                                                                                                                                                                                  Нет, нельзя. Потому, что если ищешь 4K экран — то до ~180 тыс. абсолютно все модели — с низковольтажными процессорами. А хорошие модели стоят уже 200 тыс. и больше.

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

                                                                                                                                                                                      А зачем 4к экран? Он ведь не в ем нужен, у кого о глаза не видят этих 4к на 14 дюймах…
                                                                                                                                                                                      Да и последние процессоры часто идут в варианте не 15Вт а 28Вт, что при отсутствии нагрузки на видеоядро уже не так скудно...

                                                                                                                                                                                        0

                                                                                                                                                                                        В действительности, оказалось весьма удобно на 14": позволяет отмасштабировать до 1920*1080 (200%) или до 1280*720 (300%) и получается достаточно хороший шрифт, который вообще не превращается в "радугу" или "мыло" при целочисленном масштабировании (т.е. интерфейсы не "плывут").


                                                                                                                                                                                        Я, лично, использую 300% — меньше для меня просто мелко. Исчезло ощущение, что песка в глаза набросали, какое бывает при работе за стационаром из-за слегка мыльных или радужных шрифтов. Глаза меньше за ноутбуком устают.


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


                                                                                                                                                                                        Матерюсь на себя: лучше бы не тратил уйму денег (157к) на ThinkPad T14s, а взял себе внешний монитор (да тот же ThinkVision S28-10, если уж захотелось брендовую хорошую вещь ;) ). Но, как обычно, силён лишь задним умом, увы.


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

                                                                                                                                                                                          –1
                                                                                                                                                                                          Не видеть разницу между FHD и 4к, даже на 14", может только совсем слепой человек. У меня коллега заметил 4К с 2х метров из за моего плеча и подскочил со словами :«офигеть как круто» (была открыта идея).

                                                                                                                                                                                          На FHD шрифты — это кошмар. Лично для меня 4K в 2020 году — это обязательная штука, как и SSD.
                                                                                                                                                                                            0
                                                                                                                                                                                            Ну, у меня где то -7 с копейками зрение. Мне как то не очень заметно даже в очках (очки где то до -1.5 или -2 корректируют). Разве что прям вглядываться вплотную.
                                                                                                                                                                                              0
                                                                                                                                                                                              Не видеть разницу между FHD и 4к, даже на 14", может только совсем слепой человек

                                                                                                                                                                                              Ну, у меня где то -7 с копейками зрение

                                                                                                                                                                                              Сорри, но не вижу расхождений в ваших тезисах :)
                                                                                                                                                                                              Был у меня 15.6" ноут с FullHD, с которого перешел на MBP16" с 3072x1920 (наверное, это 3k назвать можно). И разница между 140 и 226 ppi коллосальная в ощущении (хоть у меня и -1.5 зрение примерно). На FullHD на такой диагонали виден "песочек" на шрифтах, на маке уже нет с рабочего расстояния. Хотя на смартфоне, конечно, и 226ppi смущали бы, там 300+ обязательны.

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