Вы видите копию треда, сохраненную 20 июня 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
@
СКОЛЬКО?!
@
ДА ТЫ КТО ТАКОЙ, ЧТОБЫ СТОЛЬКО ХОТЕТЬ?!
@
СКОЛЬКО ТЫ НА ПРОШЛОЙ РАБОТЕ ПОЛУЧАЛ?! М? НУ МАКСИМУМ ЖЕ 40К!
@
МАКСИМУМ, ЧТО МЫ МОЖЕМ ПРЕДЛОЖИТЬ, ЭТО 50К! МАК-СИ-МУМ
@
И ТО ТЫ СТОЛЬКО НЕ СТОИШЬ, У НАС ЕСТЬ КАНДИДАТ ЛУЧШЕ
@
Я ВОТ ТОЖЕ ХОЧУ ПОЛУЧАТЬ 300КК
В ДЕНЬ И ЧТО!? М? СЪЕБАЛ!
Прошлый >>2008894 (OP)
>такое реально где-то бывает?
Больше похоже не местячковую говноконтору, где айти отдел состоит из 1го мужика лет 40
СОБЕСИШЬСЯ В КОНТОРУ ПО ЯЗЫКНЕЙМ
@
ЦЕЛЫЙ ЧАС СПРАШИВАЮТ ПРО СКРАМ ХУЯМ
@
ПОД КОНЕЦ СОБЕСА ГОВОРИШЬ: А ГДЕ ОСНОВНЫЕ ВОПРОСЫ И ПРОЧЕЕ
@
НУ МЫ ПУК СРЕНЬК СМОТРЕЛИ НА ТЕБЯ. А ВООБЩЕ ПОКА
@
ДАЖЕ НЕ ПЕРЕЗВАНИВАЮТ, А ТИХО ОТКЛОНЯЮТ ВАКАНСИЮ
--------------------
ПРИХОДИШЬ НА СОБЕС
@
А ТАМ РЯДОМ С ТОБОЙ В ЗУМЕ ЕЩЕ 4-5 ЧЕЛОВЕК ДЕВЕЛОПЕРОВ И ВСЕ КАК СТАДО, РАССКАЗЫВАЮТ КТО ЧЕМ ЗАНИМАЕТСЯ
@
ЛИВАЕШЬ СПУСТЯ 10 СЕК ПОТОМУ ЧТО ПОПАЛ В ХУЙНЮ КАКУЮ ТО
--------------------
ПРОШЕЛ СОБЕС
@
НЕ ПЕРЕЗВАНИВАЮТ И ВООБЩЕ НИХУЯ НЕ УВЕДОМЛЯЮТ
@
ПИШЕШЬ ИМ, ЧЕ ДА КАК. ОКАЗЫВАЕТСЯ ХРЮША УВОЛИЛАСЬ НАХУЙ И ХУЙ НА ВСЕ ЗАБИЛА
@
НЕДАВНО НАПИСАЛА ОПЯТЬ КОМПАНИЯ ЭТА - ПОСЛАЛ К ХУЯМ. УЖЕ ДЕРЖУ ЧЕРНЫЙ СПИСОК КОМПАНИЙ НЕЙМ.
СОБЕСИШЬСЯ В КОНТОРУ ПО ЯЗЫКНЕЙМ
@
ЦЕЛЫЙ ЧАС СПРАШИВАЮТ ПРО СКРАМ ХУЯМ
@
ПОД КОНЕЦ СОБЕСА ГОВОРИШЬ: А ГДЕ ОСНОВНЫЕ ВОПРОСЫ И ПРОЧЕЕ
@
НУ МЫ ПУК СРЕНЬК СМОТРЕЛИ НА ТЕБЯ. А ВООБЩЕ ПОКА
@
ДАЖЕ НЕ ПЕРЕЗВАНИВАЮТ, А ТИХО ОТКЛОНЯЮТ ВАКАНСИЮ
--------------------
ПРИХОДИШЬ НА СОБЕС
@
А ТАМ РЯДОМ С ТОБОЙ В ЗУМЕ ЕЩЕ 4-5 ЧЕЛОВЕК ДЕВЕЛОПЕРОВ И ВСЕ КАК СТАДО, РАССКАЗЫВАЮТ КТО ЧЕМ ЗАНИМАЕТСЯ
@
ЛИВАЕШЬ СПУСТЯ 10 СЕК ПОТОМУ ЧТО ПОПАЛ В ХУЙНЮ КАКУЮ ТО
--------------------
ПРОШЕЛ СОБЕС
@
НЕ ПЕРЕЗВАНИВАЮТ И ВООБЩЕ НИХУЯ НЕ УВЕДОМЛЯЮТ
@
ПИШЕШЬ ИМ, ЧЕ ДА КАК. ОКАЗЫВАЕТСЯ ХРЮША УВОЛИЛАСЬ НАХУЙ И ХУЙ НА ВСЕ ЗАБИЛА
@
НЕДАВНО НАПИСАЛА ОПЯТЬ КОМПАНИЯ ЭТА - ПОСЛАЛ К ХУЯМ. УЖЕ ДЕРЖУ ЧЕРНЫЙ СПИСОК КОМПАНИЙ НЕЙМ.
А я скозал на пикабу, даун. Бугруть своей жопой там.
Статикодебила после прошлого треда разорвало.
>Правильно ли я понимаю что в прошлом треде все таки пришли к консенсусу что заднеконечники - опущенные жизнью полупокеры, посмешище айти, с примитивными задачами и скилами?
>Девочка-фронтендер зоонаблюдает типичного джавамеса, обличателя хуевости js, нацепившего наклееечку, чтобы показывать всем что он не диван после статейки «10 пречин почему джаваскприфт плох», а якобы знает о чем пишет
Все правильно и по делу, бро
ЮМОРИСТ БЛЯТЬ
Че, фронтам опять пришлось учить тебя как бэк писать?
Все так
Вот это "не бомбит"
Итого, аргументы за статическую типизацию:
- Статика упрощает и ускоряет вход в проект для новичков, так как всегда сама по себе документирует многие вещи в проекте, причем эта документация всегда актуальна.
- ИДЕ сразу подсказывает, что можно сделать с пришедшим в функцию аргументом или результатом работы вызванной фунции, а также что нужно передать функции, что значительно ускоряет разработку.
- Контроль эффектов на уровне типов позволяет безопасно избавиться от практически всех null-чеков и оставить их только там где они нужны по бизнес-логике; позволяет четко по сигнатуре функции знать какие ошибки она может вернуть (вместо еботни с трай-кетч); и еще множество плюшек.
- Статика в разы упрощает рефакторинг, ты видишь что сломается из-за твоих изменений в ту же секунду как их делаешь, и с четким указанием на место где это сломается. В динамике приходится постоянно перезапускать небыстрые тесты, которые часто падают не там где сломалось, а через несколько вызовов по коллстеку
- Статика позволяет не писать юнит-тесты для совсем мелких методов и в целом ловить больше ошибок в проектах без 100% покрытия. При этом прогресс не стоит на месте и чем дальше, тем больше ошибок ловится на этапе статического анализа типов.
- Статика просто быстрее работает.
- Подавляющее большинство языков, вошедшее в мейнстрим в последний десяток лет - это языки со статической типизацией, кроме того в изначально динамических языках появляются инструменты для поддержки статического анализа - тайпскрипт, аннотации типов в пхп и питоне. Что во-первых подтверждает что все больше людей осознают необходимость статики, во-вторых означает что динамикопетушкам все равно рано или поздно придется переучиваться и перестать копротивляться.
Аргументы за динамическую типизацию:
- Я могу очень быстро нахуярить в продакшн ))
- Скорость не нужна)) Пусть купят железо получше)
- У меня всегда 100% покрытие)
Хуяза.
>Аргументы за динамическую типизацию:
>- Я могу очень быстро нахуярить в продакшн ))
>- Скорость не нужна)) Пусть купят железо получше)
Для кабана топ аргументы, т.к. экономится самое дорогое - время работы разраба
Статикошиз наконец после последнего треда вытер мочу и слезы с лица, но вместо того чтобы свои ошибки переосмыслить после такого жесткого обоссывания по фактам, написал новое полотно, щедро покрыв его выдумками и кривляниями. Классика.
>Динамикопетух пытается сохранить хорошую мину после того как его разъебали
У тебя не очень хорошо получается.
I prefer real conclusions.
Это "аргументы", самообман динамикодебилов
Все аргументы за статическую типизацию применимы к динамической, мань. Так что у тебя получился пост где все перечисленное это плюсы динамической типизации. Шел бы ты дальше на гошечке ручки писать и не лез в такие темы
Ну про кабанов не спорю, вот таким типичным подскакивающим на созвоне кабанчикам с веб-студий динамика и зайдет заебись. Написал очередной цветочный для бабы ячсмить, сдал и доволен.
В местах где все-таки пилят продукт посерьезнее, который надо будет поддерживать еще не один год а то и десятки лет - это "хуяк хуяк" на ранних стадиях очень скоро наоборот начинает тормозить разработку.
>>23917
Шиз, плиз.
>- ИДЕ сразу подсказывает, что можно сделать с пришедшим в функцию аргументом или результатом работы вызванной фунции, а также что нужно передать функции, что значительно ускоряет разработку.
Никак не связано со статической типизацией. IDE делает тоже самое и для динамических языков. Потом, что делает функция
double foo(double a, double b)?
хотя типы даны, не понятно.
Есть стандарты для того, чтобы описывать функции, аргументы, как их типы, так и их смысл. Например через комментарии, см @jsdoc, google closure compiler. Эту аннотацию подхватывают IDE. При этом помимо типа, ты описываешь смысл аргументов.
То есть
- статические типы не решают проблемы
- есть инструменты, которые проблему решают и одинаково хорошо работают как для статических, так и для динамических типов.
> Контроль эффектов на уровне типов позволяет безопасно избавиться от практически всех null-чеков и оставить их только там где они нужны по бизнес-логике;
Именно поэтому код на Си-Го весь в проверках на NULL/nil, EOF и др.
Картинки того, как описать функцию и как это работает, когда исползуешь. И это не обычный js, не тайпскрипт. И средняя IDE, VS Code, а не какой-то мегамонстр.
А теперь отвечай за базар и показывай скрины, насколько наглядно будет работа в твоей IDE на твоих статических языках. Для такого примера.
И если навести мышкой на функцию, то показывается описание функции и параметров на основе документации. А когда набиваешь код, том чуть другая, сокращённая версия.
> Указывать типы сразу в коде - фууу, долго, неудобно, динамика топчик
> Но подсказки все равно хочется, поэтому буду прописывать типы в автодок))0
Такой-то самоотсос, лол.
> одинаково хорошо работают как для статических, так и для динамических типов.
Нет, мань, не одинаково - твои писульки в комментариях нихуя статически не чекаются, так что никаких гарантий актуальности такой документации нет, не говоря уже о гарантии ее наличия. Статика же гарантирует, что описание числа и типов аргументов будет всегда актуальна, вопросы только к текстовым описаниям могут возникнуть.
И анализатор тебе нихуя не подсветит, если ты например ошибочно передашь не в том порядке, или передашь коллекцию не того типа etc.
Пример с "foo(a, b)" это вообще явный троллинг конечно.
> Именно поэтому код на Си-Го весь в проверках на NULL/nil, EOF и др.
Ну и нахуя ты притащил языки с дизайном из 90-х, если мы живем в 2021? Гугли Optional/Maybe/Nullable типы которые есть в любом современном языке (раст, скала, шарп, даже в жаву современную пропихивают).
>И анализатор тебе нихуя не подсветит, если ты например ошибочно передашь не в том порядке, или передашь коллекцию не того типа etc.
Вот у меня есть функция
double estimateDickWeight(double dickLength, double dickWidth)
Каким образом твой анализатор статического кода отловит, что ты местами перепутал параметры?
>Гугли Optional/Maybe/Nullable типы
Топит за статику, приводит в примеры типы и подходы, которые заимствованы из динамических языков.
В шарпе иногда рекомендуют делать так:
var weight = eEstimateDickWeight(dickLength: 33, dickWidth: 5);
Во-первых таких случаев на кодбазу будет процентов 5 от силы.
Во-вторых если измерение хуев это часть основного функционала, у меня не будет (double dickLength, double dickWidth); у меня будет (dickLength: Length, dickWidth: Width), с тайпалиасами.
>>24020
Охуенные истории все продолжались.
Ну-ка, покажи-ка мне в динамике подход, который на уровне синтаксиса обязует тебя проверить на нулл параметр/переменную, которая может быть null по бизнес-логике, перед тем как использовать её значение; и наоборот сразу выдает тебе значение при обращении к переменной, если она не может быть null.
В какой-нибудь скале, если в параметре приходит Option[User], ты вообще ничего не сможешь сделать с этим юзером пока явно не пропишешь что делать в случае если вместо него лежит Noneлибо не пропишешь явно что такая ситуация исключена, что нихуя не поощряется и используется не чаще рефлексии в бизнес-коде
В JS часто принято передавать аргументы через параметры-объекты
function estimateDickWeight({dickLength: 11, dickWidth: 2.4})
В питоне вообще самый крутой механизм передачи параметров функции, там можно передавать их по именам, и можно декларировать функцию так, что имя переменной требовать указывать явно, а можно как опцию.
Статика же не решает и другую проблему. Вот мы предполагаем, что длина в сантиметрах. Но как это контролируется? Никак. Если кто-то захочет указать в миллиметрах, то статика не спасёт, потому что как был double, так он и остался. Или надо декларировать новый тип, "сантиметр" и "миллиметр". Причём везде. Частично проблему решает, но перегруженностью кода, программисту необходимо запоминать огромное количество типов, необходимо реализовывать конверсию одного типа в другой и т.п.
>В какой-нибудь скале, если в параметре приходит Option[User], ты вообще ничего не сможешь сделать с этим юзером пока явно не пропишешь что делать в случае если вместо него лежит None
В каком-нибудь питоне тоже, там тоже Optional, и в твоём коде должна быть явно определена ветвь для штатных и нештатных значений. И всё это отлавливается через mypy.
И это техника из языков с динамической типизацией. То есть когда в рантайме могут придти значения разного типа и ты их должен обрабатывать по-разному в зависимости от типа. А статическая типизация предполагает, что тип определён на момент компиляции и такой истории быть не может. Вот и приходится вроде как делать статический тип, но лепить костыли, чтобы в нём была поддержка динамики.
То есть ты из говна и палок придумываешь как реализовать на статическом языке динамическую типизацию.
>В каком-нибудь питоне тоже, там тоже Optional, и в твоём коде должна быть явно определена ветвь для штатных и нештатных значений. И всё это отлавливается через mypy.
>И это техника из языков с динамической типизацией
>mypy
>Mypy is a static type checker for Python 3
>static type checker
>техника из языков с динамической типизацией
>статическая проверка типов
Не продолжай, я понял что ты умственно отсталый.
Ты не понимаешь, что такое статическая и динамическая типизация.
Статическая типизация тогда, когда на момент компиляции однозначно определён тип и компилируются сразу нативные инструкции процессора или виртуальной машины.
Динамическая типизация тогда, когда тип определяется во время работы программы. Причём он может быть разным в разное время работы.
Optional, Union и т.п. это классические динамические типы.
Скоро ты и Any назовёшь "статической типизацией".
>>24095
> в твоём коде должна быть явно определена ветвь для штатных и нештатных значений
None - это штатное значение, например когда юзера в базе по переданному ID не нашлось.
>И всё это отлавливается через mypy.
То есть через статический анализатор, как уже верно отметили выше. Динамопетух продолжает срать себе в штаны.
>И это техника из языков с динамической типизацией.
Техника статических языков - это ОБЯЗАТЬ сделать эту проверку, иначе проект даже не запустится, о чем тебе было сказано в >>24050
>То есть когда в рантайме могут придти значения разного типа и ты их должен обрабатывать по-разному в зависимости от типа.
А че не из асемблера/си сразу? Ссылка может прийти на любую ячейку вообще.
Или чуть менее пожилой С++, где может прийти объект любого из класса-наследника.
>реализовать на статическом языке динамическую типизацию.
>Optional, Union и т.п. это классические динамические типы.
Что несёт, блядь... Наследование это уже динамика, о чудный жаваскриптомирок.
>Статическая типизация тогда, когда на момент компиляции однозначно определён тип и компилируются сразу нативные инструкции процессора или виртуальной машины.
Ты линковку и типизацию в кучу смешал, иди матчасть доучивай.
>Что несёт, блядь... Наследование это уже динамика, о чудный жаваскриптомирок.
Да. Полиморфизм, работа через виртуальные функции и т.п. это динамика. Статика это функции-члены в C++, которые не виртуальные.
Так можно сказать, что питон - это язык со статической типизацией. Потому что все типы наследуются от object и
вот это вот
>где может прийти объект любого из класса-наследника.
выполняется
>А теперь попробуй объяснить почему Optional<String> это не статическая типизация
Потому что у тебя выбор двух разных типов, string и None, которые ты должен обрабатывать по-разному. len(string) имеет смысл, len(None) не имеет, исключение будет. И масса всего ещё.
То есть у тебя динамическое поведение, а не статическое. Ты на момент выполнение не знаешь, какой у тебя будет тип.
Я знаю, что Optional<String> - это мать его Optional<String>. И что len(Optional<String>) не определен (хотя ничего не мешает его определить) как раз отслеживается при компиляции. Т.е. статически.
То что разные типы нужно обрабатывать по разному - это пушка конечно.
len и обычной строки не определен, строка же может быть любая, получается динамика!
Что ты называешь статической типизацией и зачем она нужна?
Union<string, int> это статическая или динамическая типизация? Или Union<string, int, Array<string>,Array<int>>?
То, что ты называешь "статической типизацией", это не статическая типизация, а декларирование-аннотирование типов. Это совсем другое.
Декларирование-аннотирование полезно, особенно когда тебя не обязывают его делать. Ты можешь задекларировать Union тип вплоть до Any, если тебе это нужно. Статическая типизация в чистом виде этого не позволяет, платформам приходится изобретать костыли для этого.
проиграл
К этому бонусом еще сотня файлов с типами
DickLength
FancyDickWidth
HorseDickWidth
DickWidth
DickVolume
MyRullerScalar
MyHuetaType999
...
Парсеры, конвертеры, сериализаторы
И все для простой операции, зато хуй что куда неправильно передаш, каеф. Неудивительно что у типоебов дальше факториалов дело не уходит
>В местах где все-таки пилят продукт посерьезнее, который надо будет поддерживать еще не один год а то и десятки лет
Да кто знает, загнется его биз через год или нет?
Поэтому берут условную пыху или руби и херачат быстро быстро, чтобы проверить бизнес гипотезу. А там уже нет времени на то, чтобы выкинуть мвп и написать хорошо, конкуренты в спину дышат. В конце концов ситуация устаканивается, основные игроки ниши определены и остаются огромные горы легаси, которые надо поддерживать
Алсо, всё кроме строгой статистической типизации по типу Хиндли-Милнеровской - для быдла, ноудискас.
Это развитие идеи, что основной приток быдла на двач - это паблик "Двач" в вк.
Шаришь.
Двачую, уже полгода как изучаю ФП и Хаскелевская типизация самая адекватная.
>алиас на инт/дабл если хочется читаемости.
Только тебе всё равно придётся сначала объявлять типы
HumanDickVolume, HumanDickWidth, HumanDickLength,
потом переменные объявлять с этими типами, либо явно приводить к этим типам при вызове функции
HumanDickVolume = vol;
vol = estimateDickVolume(static_cast<HumanDickWidth> 17,
static_cast<HumanDickWidht> 5.3)
Если же у тебя автоматическое неявное преобразование идёт, то это уже слабая типизация в стиле Си и никакой подсказки для разработчика не происходит.
При этом разработчик должен держать в голове всё это дикое количество имён, делать конверсию из одного другого.
Аннотирование типов очень полезная штука, когда пишешь какие-то библиотечные функции, экспортируемые из модулей функции и т.п. Но вместо создания дикого количества типов со страшными названиями проще сделать аннотацию, которую высветит IDE, там будет полноценный текст для человека.
Когда надо, будешь использовать простые типы. Когда надо, полиморфные UNION типы.
Маня, ты не понимаешь как работают типы и зачем они нужны в практике.
В твоем примере:
>HumanDickVolume, HumanDickWidth, HumanDickLength
Если не юзается параша типо С++, где например они не могут со стрингами разобраться до сих пор, то будет использоваться стандартный тип, например double/int, а не создаваться новый тип.
Конечно, если речь просто про числа, а не про объекты где у каждого своя логика. А если речь про объекты, то наверно про интерфейсы или общего предка ты тоже не слышал, я так понимаю.
Типы создаются для маппинга сложной бизнес логики для того чтобы компилятор её тоже проверял и отлавила не просто примитивные ошибки, а конкретные проебы в логике. Я думаю что такой макаке как ты даже концепт dependent types будет сложно осилить и понять как оно может быть полезно.
>estimateDickVolume(static_cast<HumanDickWidth> 17,
static_cast<HumanDickWidht> 5.3)
И вообще, иди нахуй, последний раз ручные касты я видел в говнокоде Делфи/C++ 2000-го года.
Судя по кастам он либо вообще не раздупляет что происходит, либо думает наперед и хочет тип длины хуя, который бы отнимал пару сантиметров от переданного ему значения кек
>А если речь про объекты, то наверно про интерфейсы или общего предка ты тоже не слышал, я так понимаю.
Слышал. В питоне, например, все типы происходят от object, включая числа и строки. И что, теперь это статическая типизация?
Статическая типизация, это когда тип известен на момент компиляции кода. Динамическая, это когда тип определяется на момент выполнения.
Теперь объясни, как статическая типизация в твоём варианте позволяет от ошибок избавляться.
Вот тебе надо вызвать функцию estimateDickWeight(15, 4), где 15 длина, а 4 толщина. Если входные параметры это double/float/number, то
1) Как статическая типизация позволит уберечься от вызова
estimateDickWeight(4, 15), то есть когда ты параметры местами перепутал? Или надо декларировать типы вроде
HumanDickWidth?
2) Как статическая типизация позволит уберечься от вызова
estimateDickWeight(150, 40), если ты в миллиметрах указал размеры, а не в сантиметрах? Потому что в медицинских анкетах указывают в мм, а на сайтах знакомств в см, вот и перепутал, нормальная история. Будешь декларировать свой тип "сантиметр", отображаемый на double?
Твоя статическая типизация только спасёт от того, чтобы не вызвать
setimateDickWeight('15', '4'), что возможно в JS. Но это не проблема, это свалится с исключением на первом же тесте и поэтому проблемы вообще не представляет. У тебя программа просто не заработает.
func estimateDickWeight(length: UnitLength, thickness: UnitLength)
Подожди, но если везде double то я могу к ширине члена прибавать футы и все это умножить на количество дилдаков у тебя в анусе, компилятор никак меня не защитит. И чем это отличается от динамики?
>РРРяяя низащищает от всех ошибок = не защищает вообще, нинужна!
Второй тред подряд одно и то же.
Всё верно, второй тред уже какой-то шиз с пеной у рта пытается выдать баг за фичу, выдать какое-то сомнительное преимущество (где преимущество, а где и недостаток) за что-то значимое, что помогает решать реальные проблемы.
Хотя эволюция языков показывает, что в языки со статической и строгой типизацией пытаются приносить динамическое и автоматическое поведение, а в языки с динамической типизацией приносят механизмы для возможной аннотации и контроля типов.
Реально просто есть задачи разные, в которых разное поведение требуется.
>Хотя эволюция языков показывает, что в языки со статической и строгой типизацией пытаются приносить динамическое и автоматическое поведение
Назови языки со строгой статистической типизации куда пытаются внести динамико-парашу? C++/C#/Java - не являются языками со строгой типизацией, а только статистической.
Примеры strong static - Haskell, OCaml, Idris, Coq.
За два треда ты не привёл ни одного скрина с кодом, который иллюстрировал бы возможности статической типизации.
Весёлые картинки кто угодно может постить, для этого даже программировать на уровне
System.Console.WriteLine("I'm a genious software developer!");
не нужно.
Шизо, я сегодня только этот тред открыл, думал тут до сих REST обсуждают.
>который иллюстрировал бы возможности статической типизации.
Я ещё раз тебя поясняю, маня, что простая статика для быдла и олухов:
слабая динамика (JavaScript)
< строгая динамика (Python)
< слабая статика (C++/C#/Java)
< быдло
< говно
< моча
< строгая статика (OCaml, Idris)
Нет такого посыла, не пизди. Поинт в том что ублажение тайпчекера и типоебство никаких серьезных преимуществ не дает. Либо ты надрачиваешь очень строгую цельную систему типов, учитывая все ньюансы, допустимые операции, преобразования, которых к тому же ты сразу знать не будешь, либо вся твоя защитка может легко протечь уже на таких простых вещах как числа и компилятор тебе никак не поможет. К тому же кто писал что то серьезнее хеллоуворда на языках с мощной и строгой системой типов ты похоже явно не в их числе знает что такие системы типов еще очень геморно рефакторить т.к. это не просто поменять названице манятипа во всех местах с помощью иде, а перестройка большого куска структуры типов и их взаимодействий.
Если недостатком продвинутой системы типов считать то, что нужно реально думать над архитектурой, и скорее больше думать, чем писать код, а не просто высирать в продакшен - то да, лучше дальше иди высирай свой лэндинги фулл-стаком.
> такие системы типов еще очень геморно рефакторить т.к. это не просто поменять названице манятипа во всех местах с помощью иде, а перестройка большого куска структуры типов и их взаимодействий.
Вся суть динамомакаки, она даже не понимает, что эта сложность берется как раз из-за того, что что-то поменялось в типе и что компилятор для того и нужен, чтобы показать, где после этих изменений нужно поправить.
Динамопримату проще закрыть на это глаза и хуярить дальше, игнорируя то что в проекте произошел целый пласт изменений, и ждать пока ему выстрелит в колено.
В твоем маняаргументе архитектура это продумать заранее как ублажить тайпчекер маняязыка чтобы этим было удобно пользоваться, не зная всех ньюансов и не зная как проект будет развиваться, т.е. тупо бесполезная работа на выброс после очередного небольшого изменения вводных
Динамомакаки и статикопетушки должны страдать.
>что в проекте произошел целый пласт изменений
У тебя ПЛАСТ и произошел из-за того что ты загнал себя в клетку непротиворечивоси и жесткого описания всего через типы, где у тебя будет пласт, в динамике это пара десяток строк максимум.
Примеров такого рефакторинга, когда в динамике изменений делать не надо, а в статике их полные штаны - конечно не будет?
>И это не обычный js, не тайпскрипт. И средняя IDE, VS Code, а не какой-то мегамонстр.
VS Code идёт вместе с тайпскриптом, который все эти доки типизирует, так что ты тут обосрался.
Странно кстати что майки вообще заморачивались с парсингом жсдоков, могли бы просто высрать свой недокументированный стандарт комментариев, а с переносом существующих проектов на тайпскрипт ебались бы макаки.
Проигрываю с динамикодрочеров и с их примеров.
То есть писать в комментариях что принимает функция и какие типы - это удобнее и надежденее чем просто указать это через встроенную систему типов.
Вот тебе твой пример усложненный на строгой типизации с type inference.
В строгих языках со статистической типизацией типы вообще прописывать не нужно, но они есть и компилятор всё проверяет. Обосрался? Думал мы везде вручную типы прописуем? Авотхуй, только при define типов как MetricSystem или при неявных ситуациях (с ООП в F#). Комментарии с типами (//) прописывает VS Code сам.
>когда в динамике изменений делать не надо
>в динамике это пара десяток строк максимум
>когда в динамике изменений делать не надо
Для начала тебе бы в шары поменьше долбиться. Примеры с хуями тут уже приводили, добавляется хуй коня и типоманька будет писать дополинтельные 100 конвертеров и операторов в другие типы вместо использования чисел.
map :: f a -> (a -> b) -> f b
Если нет потребности создавать отдельные типы для маппинга бизнес-логики - никто их не будет создавать в статике, маня, а просто будут использовать числа. Ты что тупой?
Рефакторинг тут при чем, ебланидзе? Или ты реально думаешь что в статике хуярят 500 классов на каждый пук?
Ну и как твоя залупа, в который еще надо написать руками алгебраические операции поможет тебе не передать в функцию, принимающую MetricSystem вместо сантиметров метры? Надо явно написать конструктор Centimeters 3 10 ? А если я копирую строку из другой части кода и там стояло Meters 3 10 ? А если я написал Meters 10 3 ? И чем это лучше когда в динамике тебе надо вызвать ComputeVolume(widthMeters: 0.03 heightMeters: 0.1) или ComputeVolume( {widthMeters: 0.03, heightMeters: 0.1})
Жато сейфти, жато бешопасность.
Т.е. все таки у нас не строгое описание предметной области и мы можем количество песьих анусов сложить с постоянной планка?
Если ты в языке со статикой все равно умудряешься каким-то хуем в одном скоупе встретить песьи анусы и постоянную планка, да еще и сложить их, боюсь представить какой пиздец у тебя в динамике происходит. Зато точно верю что у тебя всегда 100% коверага, иначе бы проект уже через месяц в легаси превращался.
В том что у тебя больше половины кода, а то и больше 90%, оперирует не примитивами а бизнес-типами
Какой-нибудь типопетух на проекте решит что * и / для строк что-то значит, возможно возвращает количество вхождений "Я не лох" в строке, получается можем передать строки в функции вычисления объема и получить число. Все как в динамике. Жато сейфти, жато бешопасность.
@
ПОБУГУРТИЛ С ТРОЛЛИНГА ТУПОСТЬЮ
@
ЕЩЕ СИЛЬНЕЕ ПОБУГУРТИЛ ОТ ТОГО ЧТО КТО-ТО РЕАЛЬНО ОТВЕЧАЕТ ОЧЕВИДНОМУ ЖИРОБАСУ
Действительно бугурт тред.
>получается можем передать строки в функции вычисления объема и получить число
Бля, всё, я не буду дегенератам больше отвечать, которые не могут осилить базовую статику.
>Если ты в языке со статикой все равно умудряешься каким-то хуем в одном скоупе встретить песьи анусы и постоянную планка
Т.е. когда статикопетуч приводит в аргументы что когда у меня в динамике в скоупе встречается нерелейтед вещи и из-за этого отъебнет часть логики, типки и компилятор петуча защитят, это аргумент, а когда маньку тыкают носом что в статикодрисне по сути так же легко сделать эту ошибку, только это замаскировано парочкой слоев синтаксического мусора и ненужных абстракций это уже БАЮС ПРЕДСТАВИТЬ ЧТО ТАМ У ТИБЯ.
Для описания которых за глаза хватает динамических языков, а какие-то хитрые системы типов это пустая трата времени и дроч ануса.
>а когда маньку тыкают носом что в статикодрисне по сути так же легко сделать эту ошибку
В статике ты свою программу не скомпилируешь и компилятор пошлет тебе нахуй и скажет что ты мудак, а в динамико параше ты зальешь своё говно в продакшен и пошлет тебя нахуй уже кабанчик - в этом разница.
Как тебя компилятор нахуй пошлет, если у тебя и анусы и постоянная планка это обычный дабл?
>а какие-то хитрые системы типов это пустая трата времени и дроч ануса.
Ясно, начало 90-х, макаки ещё даже до ООП не доросли.
Вместо звезды @
string -> string -> number
operator @ a b = concatenate a b
string -> number -> number
operator @ a b = len a @ b
Суть самоочевидна, я не полезу сейчас смотреть синтаксис твоего спермофпшарпа.
От ошибок с данными и с логикой никто не может помочь. Речь про то что любой код с более 20к строк на динамике - это неподдерживаемое говно, которое можно только выкинуть.
Как мы только что убедились, статика тоже не решает проблем, о которых ты тут распинаешься вместе с другими статикошизами.
>Или ты реально думаешь что в статике хуярят 500 классов на каждый пук?
>Т.е. все таки у нас не строгое описание предметной области и мы можем количество песьих анусов сложить с постоянной планка?
>Если ты в языке со статикой все равно умудряешься каким-то хуем в одном скоупе встретить песьи анусы и постоянную планка
Говорю же, поменьше в шары долбись.
>Речь про то что любой код с более 20к строк на динамике - это неподдерживаемое говно, которое можно только выкинуть.
С точки зрения долбоебика, привыкшего что угодно пихать куда угодно пока тайпчекер не перестанет бить по рукам - безусловно
> Всерьез спорят с разжиревшим приматом, который называет наследование и автовывод типов свойствами динамических языков
Вы чё блядь суки вы чё нахуй
Где про автовывод типов в динамике было? Я писал про автовывод в строгой статике.
Кароче суки, это бугурт тред.
Так нельзя делать. В ML языках система типов как раз и нужна чтобы от долбаебов отгородиться и от их ущерба.
>стачушка двадцать раз тыкнули носом в его собственную мочу и несостоятельность аргументов
>ни атвичайте ему, это троллинк
))
Ну если мудло все равно переписало оператор, компилятор сразу нахуй посылает.
Короче мне HR рассказала такую историю. Один программист попросил денег за собеседование. Мотивировал он это тем, что они - HR контора и получат деньги за его найм. И он рассчитывал на часть этих денег (кстати, бонус за найм программиста до 3-х его месячных зарплат). Что, котаны, хотите получать деньги только за то, что ходите на собеседования? Мотейте на ус)
>Один программист попросил денег за собеседование
Позиция включала работу с динамическими или статистическими языками?
>То есть писать в комментариях что принимает функция и какие типы - это удобнее и надежденее чем просто указать это через встроенную систему типов.
Да, представь. Потому что это документация о том, что делает твоя функция. А ты написал какой-то пример с ручным захардкоживанием преобразований, но не зная, что делает твоя функция и зачем нужна, не поймёшь. Что такое w, l - это интуиция должна посказывать?
Доки к параметрам штука нужная, потому что ты вместо того, чтобы писать адовое имя переменной из тридцати символов может назвать кратко, но дать описание человеческим языком.
Только вот документация как бы тоже поддерживается в статике. А вот нормальную типизацию в динамику не завезли.
Лучше бы ты рассказал, почему считаешь, что есть какое-то ООП против ФП, подразумевая, что они как-то друг друга исключают, в то время как на самом деле это два абсолютно параллельных подхода, которые могут использоваться вместе в любых вариациях.
Идейно подходы принципиально разные. ООП про объекты, у которых есть внутреннее состояние, скрытое от внешнего мира, ФП про функции без состояния, функции в математическом смысле.
Но на практике оба подхода совмещаются в рамках одного приложения и одних языков программирования.
>ООП про объекты, у которых есть внутреннее состояние
Сразу неверно. Объект может не иметь никакого состояния, и все равно оставаться по всем параметрам объектом.
@
ПРИБЕГАЕТ ШИЗИК СО СВОИМ ЭЗОТЕРИЧЕСКИМ ТЕЗАУРУСОМ
Э... я не знаю. Скорее всего, такие детали вообще исчезнут во времени, как слёзы под дождём. А какая разница?
Потому что там и так есть нормальная типизация, а искусственно загонять себя в клетку ради спорных профитов такое себе
Нет, отдельного треда для статических языков я в зекаче еще не видел
Это тред джунов, поработавших полгода и считающих, что они уже видели всё.
Это тред безработных фантазеров, которые так никуда и не вкатились.
Это тред петровичей с завода, начитавшихся тредов про качкель и завтипы и программирующих только будильник в телефоне на 5 утра, чтобы не проспать.
...Как человек может так ужраться? Если это не серьезные нарушения обмена веществ, то КАК?!
>девочка-внутри-фронтэндер
Поправил. Эх если бы во фронтенде были девочки...
Что самое смешное - лет через 30, со стабилизацией и окостенением области, они вероятно будут составлять там большинство если не наступит всемирный халифат
Ну так статикопетух ничего не зальёт в продакшн, так как будет пердолить ватагу интерфейсов, а потом его пидорнёт кабанчик за проёбывание дедлайнов.
Но на практике динамикопетухи исправляют один и тот же баг по десять раз прямо на проде и боятся новые фичи как огня.
В маняфантазиях дропнутых статикодаунов
>прямо на проде
Правильно, статикодебилу не нужно беспокоиться о проде, так как его поделие даже до стадии MVP не дойдёт.
>боятся новые фичи как огня
Статикодебилы просто проёбывают дедлайны по введению новых фич, так как каждая фича - очередное продумывание, как запихнуть эту фичу в нынешнюю кашу рекурсивных абстрактных фабрик.
>>25805
Если у тебя проходимцы с улицы могут напрямую серить в прод, то тут никакая суперстрогая типизация не поможет.
@
НЕ СТАВИТСЯ ПОТОМУ ЧТО ДЛЯ ТВОЕЙ ОСИ НЕТ ГОТОВОГО БИНАРНИКА ЭЛЕКТРОНА
@
СТОЙТЕ, КАКОЙ НАХУЙ ЭЛЕКТРОН НА СЕРВЕРЕ?
@
НЕТ, СЕРВЕР РЕАЛЬНО НЕ СОБРАТЬ БЕЗ ЭЛЕКТРОНА ПОТОМУ ЧТО ТАМ МОНОРЕП И ВСЕ ЗАВИСИМОСТИ ПЕРЕМЕШАНЫ
@
ЕЩЁ НУЖНО ТРИ ВЕРСИИ ВЕБПАКА, СИШНЫЕ ЛИБЫ ОБРАБОТКИ ИЗОБРАЖЕНИЙ И НАБОР ФЛАГОВ МОРСКОГО АЛФАВИТА
@
ПОЧТИ ДВА ГИГАБАЙТА ЗАВИСИМОСТЕЙ, БОЛЬШЕ ЧЕМ САМА СИСТЕМА
@
ПИШЕШЬ НА ГИТХАБ ЧТО ОНИ ТАМ ЕБАНУЛИСЬ НАХУЙ
@
PRS WELCOME
>КАК
Никак. Ты не сможешь нарастить столько жира, если у тебя нет генетической предрасположенности. Но вопрос не КАК, а зачем? Это же выглядит отвратительно.
Сделай лучше. Если у тебя вместо системы там голый пердоликс весом в 700мб то что ты хотел?
> СКОЛЬКО ТЫ НА ПРОШЛОЙ РАБОТЕ ПОЛУЧАЛ?! М? НУ МАКСИМУМ ЖЕ 40К!
Работаю удаленно за $130 в час, нахуй куда-то ехать, устраиваться макакой, если можно не вставая с кресла иметь тысячи долларов?
Не все ж c1
Монорепы это нормально. Просто этим словом часто называют помойкорепы где бэкенд, фронтенд, деплой, дизайн и хуй пойми что ещё в одной системе.
У меня один из рабочих помойкорепов 3 Гб весит. Когда туда что-то надо внести все аккуратно втыкают что-то в один нужный им файлик, сбегают нахуй и молятся чтобы оно не упало на CI.
Я вот лично пришёл к репе с множеством подреп через субмодуль.
Чем управлять? Релизами, версиями?
На самом деле самый самый лучший инструмент – велосипед.
За 100 строк кода ты сделаешь больше и удобнее чем за 100 строк конфига какого-нибудь популярного менеджера и не будешь напильником вкорячивать свой проект в его мировоззрение.
А чем конкретно ты собрался управлять? Нужна фича - сделал, написал тесты, зарелизил и обновляй версию зависимости по мере необходимости в любых других репах.
Да, согласен. Часто написать велосипед намного быстрее, чем использовать готовое решение. Их сначала нужно найти, отфильтровать те, которые не подходят, почитать отзывы, посмотреть какие баги, потом ещё пилить напильником и не факт, что получится допилить. Готовое решение нужно использовать, когда писать велосипед очень долго
Двачую. Не вижу проблем с мультирепами. У меня на всех проектах так и сделано. На одном около 10 реп, это SDK для разных языков и платформ
Двачую, не вижу проблем с программированием. У меня так все проекты сделаны, просто садишься и без задней мысли пррграммируешь
JS бандлер: не могу найти модуль, извените но это ошибка. чени бля
JS макака: хуль ты дату на строку умножать умеешь, а без какого-то там модуля не? запускайся бля
В петухоне импорты были изначально, а не прикручены сторонними костылями (насколько альтернативных синтаксисов импортов, вы серьёзно?), потому что его делали для более-менее крупных проектов, а не убогих 10-строчников на веб-страницах.
По делу есть что сказать? Если модуль не найден - значит нет функции, которую он предоставляет. Первый раз с таким требованием сталкиваешься что ли? В магазинах, небось, такое не нужно, ага.
Самое смешное в этой ситуации то, что даже когда выпал шанс сделать НОРМАЛЬНО, JS-макаки в комитете не осилили. Просто, блядь, не осилили, лобной доли не хватило сообразить посмотреть, как сделано в НОРМАЛЬНЫХ языках.
Ну попробуй импортни что-нибудь несуществующее в крестах, конпилер тебя сразу ссаными тряпками погонит
Погоди, а почему в этой вашей божественной динамике импорты работают как в обоссанной статике?
Во-первых, в нашей динамике импортов изначально не было. Во-вторых, теперь импорты таки туда завезли и можно динамически импортить что угодно, завернув вызов import() в try-catch
Но я же не питонист, я мультиязычный :)
заглядывать под хвостик проверить запасы коричневого золота
окунуть батончик в шоколадную глазурь высадить астронавтов на неосвещенной стороне луны загнать свой КамАЗ в темный туннель подключать устройство ввода–вывода к заднему порту вкрутить саморез
бурить уголёк в шахтеподразнить глиста ❤ ❤ загружать с чёрного хода смотреть фильм "чарли и шоколадная фабрика" обожаю подключать шланг к пожарному гидранту вскрывать склад с какао–бобами вонзаться плугом в чернозем
Я шарю в бурении космическим зондом пещеры Марса
если ты не поддерживаешь опускание боеголовки в темную шахту и не можешь посмотреть кино на заднем ряду, пробурить нефтяную скважину, направить звездолет в черную дыру, сорвать куш в очко, забить пробку в бочку со смолой, стыковать шаттл с МКС, загнать истребитель в ангар с задних ворот, провести геодезию в Африке, поместить белочку в дупло с орешками, затолкать полено в топку покрытую сажей, прочистить дымоход, положить в багажник, взять на абордаж с кормы, припарковаться с черного хода, проверить яблоко на червивость, засадить задний двор, внедрить своего агента в подполье, уколоть мясной иглой в тухлую вену, натянуть на поршень уплотнительное кольцо, запустить Санту через дымоход, провести Марио на секретный уровень, выебать в жопу, поехать в горящий тур в Черногорию, Алекс — Юстасу, посадить самолет на запасной аэродром, погрузить батискаф Кусто в Марианскую впадину, взять "мустанг" с задним приводом, вогнать гвоздь в черное дерево, познакомить мистера Дика с мистером Брауном, отправить отряд храбрых гномов в Морию, показать хоббиту где лежит халва, запускать властелина в карету, заскочить в гости с заднего двора, стрелять в яблочко, сходить в баню "по–чёрному", запустить таксу в заросшую нору, забуриться в мягкую породу, запустить слепую змею в дальнее гнездо, нажарить пирожков, примять шоколадное тесто в печке, чистить задний мост, раздать высокодоходные облигации бедным людям, вставить топливный шланг в горловину бензобака, раздвинуть полушария горячей сарделькой, фаршировать индейку мясным рулетом, засунуть сосиску в булочки, увязнуть в топком болоте, устроить контратаку в тыл, покрутить отмычку в замочной скважине, пошерудить 21–м пальцем в нижнем дупле, пришвартовать сухогруз на угольный причал, усмирить верного Пердинандо, пустить червя в корзину с черникой, лишить кареглазого зрения, задраить пробоину в нефтяном танкере, войти в приёмную министра внутренних дел, послать дорогого ребе в газовую камеру, исследовать на КТ Формана, загнать шар в узкую лузу, подвинуть говно к мозгам, угля в топку набросать, размять тестикулы, припечь в духовку, забить пыж в гильзу, взломать его волосатый сейф и пустить туда кожаную пулю, отодрать в туз, выполнять трюки на однопальцевом фингербоксе, высадить десант в глубоком тылу, послать своего инспектора с проверкой на шоколадную фабрику, атаковать с тылу кожаным мечом, прокачать сабвуфер, выгулять лысого, подковать дракона в его пещере, найти свободный порт, завести заднеприводного с толкача, шерудить кочергой в горячей топке, загнать тонель младшего дика, совать нос не в своё дело, заправить в бак, заниматься теневыми операциями, ввести в оффшор, познакомиться с темной стороной, сразить Дарта Вейдера, зашпаклевать трещину на той стороне, познать друга в bd (backdoor), замерить глубину чёрного моря, пробить окно в Анапу, взбивать молочный коктейль в шоколадном стаканчике, кинуть шланг в чулан, открыть портал в тёмный мир, проанализировать теневой рынок, приготовить кофе с молоком, рыбачить в устье Дона, смазать поршень душистым солидолом, воткнуть кожаную ложку в коричневый йогурт, завернуть голубцов то не пиши мне ✋✋
заглядывать под хвостик проверить запасы коричневого золота
окунуть батончик в шоколадную глазурь высадить астронавтов на неосвещенной стороне луны загнать свой КамАЗ в темный туннель подключать устройство ввода–вывода к заднему порту вкрутить саморез
бурить уголёк в шахтеподразнить глиста ❤ ❤ загружать с чёрного хода смотреть фильм "чарли и шоколадная фабрика" обожаю подключать шланг к пожарному гидранту вскрывать склад с какао–бобами вонзаться плугом в чернозем
Я шарю в бурении космическим зондом пещеры Марса
если ты не поддерживаешь опускание боеголовки в темную шахту и не можешь посмотреть кино на заднем ряду, пробурить нефтяную скважину, направить звездолет в черную дыру, сорвать куш в очко, забить пробку в бочку со смолой, стыковать шаттл с МКС, загнать истребитель в ангар с задних ворот, провести геодезию в Африке, поместить белочку в дупло с орешками, затолкать полено в топку покрытую сажей, прочистить дымоход, положить в багажник, взять на абордаж с кормы, припарковаться с черного хода, проверить яблоко на червивость, засадить задний двор, внедрить своего агента в подполье, уколоть мясной иглой в тухлую вену, натянуть на поршень уплотнительное кольцо, запустить Санту через дымоход, провести Марио на секретный уровень, выебать в жопу, поехать в горящий тур в Черногорию, Алекс — Юстасу, посадить самолет на запасной аэродром, погрузить батискаф Кусто в Марианскую впадину, взять "мустанг" с задним приводом, вогнать гвоздь в черное дерево, познакомить мистера Дика с мистером Брауном, отправить отряд храбрых гномов в Морию, показать хоббиту где лежит халва, запускать властелина в карету, заскочить в гости с заднего двора, стрелять в яблочко, сходить в баню "по–чёрному", запустить таксу в заросшую нору, забуриться в мягкую породу, запустить слепую змею в дальнее гнездо, нажарить пирожков, примять шоколадное тесто в печке, чистить задний мост, раздать высокодоходные облигации бедным людям, вставить топливный шланг в горловину бензобака, раздвинуть полушария горячей сарделькой, фаршировать индейку мясным рулетом, засунуть сосиску в булочки, увязнуть в топком болоте, устроить контратаку в тыл, покрутить отмычку в замочной скважине, пошерудить 21–м пальцем в нижнем дупле, пришвартовать сухогруз на угольный причал, усмирить верного Пердинандо, пустить червя в корзину с черникой, лишить кареглазого зрения, задраить пробоину в нефтяном танкере, войти в приёмную министра внутренних дел, послать дорогого ребе в газовую камеру, исследовать на КТ Формана, загнать шар в узкую лузу, подвинуть говно к мозгам, угля в топку набросать, размять тестикулы, припечь в духовку, забить пыж в гильзу, взломать его волосатый сейф и пустить туда кожаную пулю, отодрать в туз, выполнять трюки на однопальцевом фингербоксе, высадить десант в глубоком тылу, послать своего инспектора с проверкой на шоколадную фабрику, атаковать с тылу кожаным мечом, прокачать сабвуфер, выгулять лысого, подковать дракона в его пещере, найти свободный порт, завести заднеприводного с толкача, шерудить кочергой в горячей топке, загнать тонель младшего дика, совать нос не в своё дело, заправить в бак, заниматься теневыми операциями, ввести в оффшор, познакомиться с темной стороной, сразить Дарта Вейдера, зашпаклевать трещину на той стороне, познать друга в bd (backdoor), замерить глубину чёрного моря, пробить окно в Анапу, взбивать молочный коктейль в шоколадном стаканчике, кинуть шланг в чулан, открыть портал в тёмный мир, проанализировать теневой рынок, приготовить кофе с молоком, рыбачить в устье Дона, смазать поршень душистым солидолом, воткнуть кожаную ложку в коричневый йогурт, завернуть голубцов то не пиши мне ✋✋
Антипрактикс, сильно усложняющий логику, поддерживаемость и сопровождаемость кода.
Потому что ты делаешь ассинхронный вызов, еблан. Ты блять даже сам сказал, что результат этого импорта не знаешь наперёд. Ещё блять про какие магазины заливает, когда сам дальше крудов не ушёл.
Не дерзи, еблан. На верхнем уровне статик импорт прекрасно выполняется, эмулируя синхронность без необходимости ебаться с промисами и каллбеками. С какими дегенератами в треде сижу, пиздец просто.
Я хочу увидеть, что у тебя есть какое-то понимание, для чего используются условные импорты. Чем плохи - это и так все знают. Однако в ряде случаев без них никак - например, когда ты делаешь опциональную зависимость на питоне. Это примерно то же самое, что и в сях dlopen().
>Обладательница фамилии True полгода не может воспользоваться своим аккаунтом в Apple iCloud
https://habr.com/ru/news/t/546052/
СМЕНИЛ ФАМИЛИЮ НА NULL
@
КАЖДЫЙ ДЕНЬ НА ПОЧТУ ПРИХОДЯТ ДЕСЯТКИ ШТРАФОВ ЗА ПРЕВЫШЕНИЕ СКОРОСТИ
@
ОТ АВТО С ГРЯЗНЫМИ И НЕЧИТАЕМЫМИ НОМЕРАМИ
Упс, читаю жопой.
>В 2019 году американский ИБ-исследователь Джозеф Тартаро (Joseph Tartaro) заказал себе автомобильный номер NULL, но в итоге ему начали приходить горы штрафов от других нарушителей, чей номер система не могла распознать.
> В питоне вообще самый крутой механизм передачи параметров функции, там можно передавать их по именам, и можно декларировать функцию так, что имя переменной требовать указывать явно, а можно как опцию.
А в Swift всё это тоже есть и там статическая типизация
Да много где так. Шарпы, скала, котлин, да даже блядь VB.
Вот в этом самый пиздец JS, а не в какой-то там динамической типизации. Потому что там вместо ассоциативных массивов объекты, где у тебя для данных и для системных свойств и методов единое пространство имён.
Хотя в принципе есть класс Map для этого, но этим никто не пользуется.
И че? Может ты думаешь, что стирание типов имеет отношение к динамической типизации? Хотя после высеров некоторых дебилов итт что наследование и вывод типов - это динамика я уже ничему не удивлюсь
Нормальный люди давно используют тайпскрипт
>На верхнем уровне статик импорт прекрасно выполняется, эмулируя синхронность без необходимости ебаться с промисами и каллбеками.
Макакен обосрался с импортами, а виноваты промисы и жс.
Все верно
сначала кококо, у нас тут реальная работка, кластеры, биг дейта, перфоманс
@
Кококо, недоверяем данным с фронта, все дополнительно валидировать на заднем дворе
@
Клиент пишет имя NULL, все к хуям ломается, клиента ебут чужими штрафами.
@
JS маам, фронтомакаки
https://twitter.com/arungupta/status/1368226513334587394
Ряяя не мы обосрались, это бекендеры нам в штаны насрали кек
наконец-то получаешь задачу
@
в процессе выполнения понимаешь что не хватает Х
@
через три дня тимлид даёт номер аськи ответственного за Х из другого отдела
@
Х займет неделю
@
переходишь в режим ожидания задачи
@
зп растет
@
СЫЧУШ, ВОТ ТЕБЕ 10 ДРУГИХ СРОЧНЫХ ТАСОК, ПОКА ЖДЕШЬ ОТВЕТ ПО ЭТОЙ
@
СТАВИШЬ ЗАДАЧУ НА ХОЛД, БЕРЕШЬ ДРУГУЮ
тимлид даёт номер аськи ответственного
@
закидываешь файлзиллой ему логи на ftp
@
тянешь патчи из svn
@
уведомляешь пма в корпоративном чате на телнете что к следующей десятилетней итерации фича готова не будет
@
через минуту получаешь злобный факс с просьбой успеть к выходным
>svn
@
scp C:\/Users\/Санёк/Documents\/работа\/zalupa_new.php(39)
>monolith.php
Бывает такое, что крупный проект лежит в одном файле? до всяких компиляций и обфускаций ессесна
@
ВСЮ ЖИЗНЬ ПИНАЛ ХУИ И НИЧЕГО НЕ УМЕЕШЬ
@
РЕШАЕШЬ ВКАТИТСЯ
@
ВКАТЫВАЕШЬСЯ
@
ЗП 300К В МЕСЯЦ
АНТИБУГУРТ ТРЕД
Если под макакеном ты имеешь в виду того долбоеба, который придумал такую уебанскую реализацию в жс - да. Импорты есть, unless`а для них нет. Сразу видно, что уебок никогда в жизни ничего сложнее гостевого скрипта не писал.
>Импорты есть, unless`а для них нет.
Анлесы не нужны, так как динамические импорты - промисы. Это как раз ты макакен здесь, который даже запросы в гугле не умеет писать. Ещё небось и переменные змеиным кейсом называешь.
> Анлесы не нужны, так как динамические импорты - промисы
Мягкое, потому что красное, да, еблан? Речь про unless для статического импорта. Откуда вы лезете, блядь.
JS-петушков только на "топкек" и хватает.
Конченый, почему ты пришел сюда и начал кукарекать "вот в жс нет моей любимой нонейм фичи, поэтому ряяя говно"? Как вообще нахуй может НЕ БЫТЬ МОДУЛЯ и при этом проект работает?
Ну так дебичи сами виноваты что TS не юзают
Это два долбоёба всё никак не угомонятся. Даже когда срач угас, продолжают похрюкивать.
SingletonDecoratorAdapter singletonDecoratorAdapter = new SingletonDecoratorAdapter();
AbstractFactoryFactorySingletonBuilderProxy abstractFactoryFactorySingletonBuilderProxy = new AbstractFactoryFactorySingletonBuilderProxy();
VisitorBeanSingletonProxyAdvisorBuilderFactoryFactory visitorBeanSingletonProxyAdvisorBuilderFactoryFactory = new VisitorBeanSingletonProxyAdvisorBuilderFactoryFactory();
IteratorListenerBean iteratorListenerBean = new IteratorListenerBean();
AbstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator abstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator = new AbstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator();
synchronized final private protected void setAdvisorFacadeObserverFactorySingletonBeanProxy(AdvisorFacadeObserverFactorySingletonBeanProxy advisorFacadeObserverFactorySingletonBeanProxy) {
this.advisorFacadeObserverFactorySingletonBeanProxy = advisorFacadeObserverFactorySingletonBeanProxy;
}
public synchronized static protected native volatile transient private void setAbstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy(AbstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy) {
this.abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy = abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy;
}
native public static synchronized protected private transient final void setAbstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator(AbstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator) {
this.abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator = abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator;
}
protected public native synchronized final void setAbstractBuilderFactoryFactory(AbstractBuilderFactoryFactory abstractBuilderFactoryFactory) {
this.abstractBuilderFactoryFactory = abstractBuilderFactoryFactory;
}
static private protected volatile transient SingletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory getSingletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory() {
return this.singletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory;
}
transient private final static public VisitorAdvisorFactoryAdapterProxy getVisitorAdvisorFactoryAdapterProxy() {
return this.visitorAdvisorFactoryAdapterProxy;
}
synchronized protected public final volatile private AbstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener getAbstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener() {
return this.abstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener;
}
public transient private AbstractListenerAdvisor getAbstractListenerAdvisor() {
return this.abstractListenerAdvisor;
}
public protected transient final synchronized volatile static native private AbstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter abstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter(ObserverDecoratorAdvisorAdapterBuilderSingletonFacade observerDecoratorAdvisorAdapterBuilderSingletonFacade, AbstractBeanInterceptor abstractBeanInterceptor, AdvisorFacadeSingletonDecoratorListener advisorFacadeSingletonDecoratorListener, AbstractAdapterAdvisorObserverListenerFactoryStrategyBeanBuilder abstractAdapterAdvisorObserverListenerFactoryStrategyBeanBuilder, AbstractBeanSingletonInterceptorDecoratorFactoryFactoryFactoryProxyObserver abstractBeanSingletonInterceptorDecoratorFactoryFactoryFactoryProxyObserver) {
decoratorProxyBean.setProxyAdvisorStrategyFactoryFactoryInterceptorFactoryAdapter(this.proxyAdvisorStrategyFactoryFactoryInterceptorFactoryAdapter);
return new AbstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter();
}
transient native private final synchronized volatile protected static DecoratorSingletonIterator decoratorSingletonIterator(ObserverSingletonListenerFactoryFactoryBuilder observerSingletonListenerFactoryFactoryBuilder, VisitorDecoratorSingletonObserverFactory visitorDecoratorSingletonObserverFactory, AbstractFacadeBeanAdvisorAdapterSingletonProxyListenerFactoryFactory abstractFacadeBeanAdvisorAdapterSingletonProxyListenerFactoryFactory, FactoryVisitorProxyDecoratorListener factoryVisitorProxyDecoratorListener) {
factoryInterceptorListenerSingletonFacadeDecoratorAdapter.setAbstractBuilderDecorator(this.abstractBuilderDecorator);
InterceptorProxyFacade interceptorProxyFacade = new InterceptorProxyFacade();
abstractAdvisorAdapterVisitorBean.setAbstractAdapterObserver(this.abstractAdapterObserver);
abstractInterceptorListenerBuilderSingletonAdapterStrategyFactoryAdvisor.setAdvisorStrategyDecorator(this.advisorStrategyDecorator);
return new DecoratorSingletonIterator();
}
synchronized volatile private final protected public static native transient AbstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade abstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade(ObserverListenerBeanFactoryFactoryAdvisor observerListenerBeanFactoryFactoryAdvisor, ProxyObserverVisitorFactoryBuilderDecoratorStrategy proxyObserverVisitorFactoryBuilderDecoratorStrategy, AbstractBeanInterceptorObserverAdvisor abstractBeanInterceptorObserverAdvisor) {
abstractStrategyFactoryFactoryBeanVisitorBuilderSingleton.setAbstractIteratorVisitor(this.abstractIteratorVisitor);
AbstractListenerAdvisorSingletonObserver abstractListenerAdvisorSingletonObserver = abstractBuilderDecoratorVisitorFactoryBeanProxyFacadeSingleton.getAbstractAdapterProxyBuilderFacadeListenerAdvisorInterceptorFactory().getAbstractListenerAdvisorSingletonObserver();
return new AbstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade();
}
volatile static transient public native protected AbstractListenerBuilderAdvisorProxyVisitorFacade abstractListenerBuilderAdvisorProxyVisitorFacade(DecoratorSingletonAdvisorFactoryInterceptorListenerBuilder decoratorSingletonAdvisorFactoryInterceptorListenerBuilder, AbstractDecoratorBuilderBeanListenerSingletonObserver abstractDecoratorBuilderBeanListenerSingletonObserver) {
AbstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter abstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter = new AbstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter();
adapterAdvisorDecoratorFacadeProxy.setAbstractAdapterBeanDecoratorStrategySingletonFacadeListenerFactory(this.abstractAdapterBeanDecoratorStrategySingletonFacadeListenerFactory);
return new AbstractListenerBuilderAdvisorProxyVisitorFacade();
}
private final public static volatile transient synchronized protected InterceptorSingletonVisitor interceptorSingletonVisitor(AbstractDecoratorStrategyProxyObserverInterceptorBuilder abstractDecoratorStrategyProxyObserverInterceptorBuilder, AbstractVisitorAdvisorFacadeListener abstractVisitorAdvisorFacadeListener, VisitorFactoryFactoryBuilder visitorFactoryFactoryBuilder, VisitorProxyFacadeFactoryFactorySingletonAdvisorDecorator visitorProxyFacadeFactoryFactorySingletonAdvisorDecorator, AbstractAdvisorBuilderDecoratorInterceptor abstractAdvisorBuilderDecoratorInterceptor) {
AbstractProxyAdvisor abstractProxyAdvisor = abstractFactoryFactoryDecorator.getListenerInterceptorFactoryFactory().getAbstractProxyAdvisor();
AbstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory abstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory = new AbstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory();
abstractBeanAdvisorSingletonInterceptor.setAbstractFactoryFactoryAdvisorFacadeStrategy(this.abstractFactoryFactoryAdvisorFacadeStrategy);
AbstractAdvisorProxyStrategyIteratorVisitorObserver abstractAdvisorProxyStrategyIteratorVisitorObserver = new AbstractAdvisorProxyStrategyIteratorVisitorObserver();
if (abstractSingletonFacadeFactoryObserver.isInterceptorListenerFacade()) {
iteratorProxyListenerFacadeBean.setAbstractStrategyBean(this.abstractStrategyBean);
AbstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor abstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor = abstractBeanInterceptorIteratorListenerFactoryFactoryStrategyProxyObserver.getAbstractObserverFacadeListenerSingletonProxyAdvisorStrategyVisitor().getAbstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor();
abstractProxyBuilderVisitorSingleton.setIteratorAdvisorProxySingletonAdapter(this.iteratorAdvisorProxySingletonAdapter);
if (abstractDecoratorAdapterVisitorProxyObserverIteratorBuilderFactory.isDecoratorFactoryFactoryFacade()) {
visitorIteratorObserverProxyAdvisor.setAbstractObserverSingletonProxyAdvisorBuilderDecorator(this.abstractObserverSingletonProxyAdvisorBuilderDecorator);
singletonFacadeAdapterListenerFactory.setAbstractIteratorInterceptorSingletonListenerAdvisorDecoratorBuilderFactoryFactory(this.abstractIteratorInterceptorSingletonListenerAdvisorDecoratorBuilderFactoryFactory);
while (abstractFactoryAdapterSingletonFactoryFactory.isAbstractStrategyFactory()) {
abstractAdapterBeanStrategySingletonAdvisorBuilderListenerFactory.setAbstractStrategyFactoryFactoryFacadeBuilderFactoryIteratorProxyObserver(this.abstractStrategyFactoryFactoryFacadeBuilderFactoryIteratorProxyObserver);
abstractObserverAdapterFactoryFacadeDecoratorBuilderInterceptorFactoryFactory.setAdvisorIteratorFactoryProxyDecorator(this.advisorIteratorFactoryProxyDecorator);
while (abstractFacadeListenerStrategyIteratorAdvisorSingletonProxyObserver.isVisitorDecoratorInterceptorIteratorAdapter()) {
abstractProxyAdapterInterceptorObserverFactoryFactoryIterator.setSingletonFactoryFactoryProxyIteratorStrategy(this.singletonFactoryFactoryProxyIteratorStrategy);
singletonInterceptorDecorator.setAbstractFactoryFactoryListenerBuilderAdvisorDecoratorFacade(this.abstractFactoryFactoryListenerBuilderAdvisorDecoratorFacade);
visitorFactoryFactoryAdapterIteratorInterceptor.setAbstractIteratorVisitor(this.abstractIteratorVisitor);
}
}
} else {
abstractListenerInterceptorStrategyVisitorBeanFactorySingletonIterator.setAbstractProxyStrategy(this.abstractProxyStrategy);
abstractProxyInterceptorSingletonFactoryFactory.setAbstractSingletonIterator(this.abstractSingletonIterator);
}
} else {
singletonListenerFactoryFactoryIteratorProxy.setAbstractObserverProxyIteratorVisitor(this.abstractObserverProxyIteratorVisitor);
}
return new InterceptorSingletonVisitor();
}
native volatile static final public AbstractSingletonObserver abstractSingletonObserver(AbstractBuilderFacade abstractBuilderFacade, ListenerBuilderVisitorFactoryStrategyAdvisorFacade listenerBuilderVisitorFactoryStrategyAdvisorFacade) {
builderObserverIterator.setAbstractProxyBuilder(this.abstractProxyBuilder);
AbstractInterceptorAdapterFactoryAdvisorStrategyProxy abstractInterceptorAdapterFactoryAdvisorStrategyProxy = abstractDecoratorInterceptor.getStrategyObserverListenerVisitorBean().getAbstractInterceptorAdapterFactoryAdvisorStrategyProxy();
AbstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator abstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator = abstractFactoryIteratorStrategyVisitor.getAdvisorBuilderVisitorBeanIterator().getAbstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator();
while (facadeStrategyObserver.isAbstractFactoryFactoryFactoryListenerVisitorIteratorSingletonBeanAdvisor()) {
abstractFactoryFactoryAdvisorFactoryInterceptorIteratorObserverProxyBuilder.setIteratorAdvisorBeanBuilderProxy(this.iteratorAdvisorBeanBuilderProxy);
AbstractIteratorFactoryFactoryFacadeObserverVisitorAdapter abstractIteratorFactoryFactoryFacadeObserverVisitorAdapter = new AbstractIteratorFactoryFactoryFacadeObserverVisitorAdapter();
abstractVisitorObserverBeanSingletonBuilderProxyFacadeIterator.setAbstractProxyFactoryAdapterFactoryFactoryInterceptorIterator(this.abstractProxyFactoryAdapterFactoryFactoryInterceptorIterator);
}
return new AbstractSingletonObserver();
}
transient volatile static private synchronized AbstractFactorySingletonFacadeProxyFactoryFactoryIterator abstractFactorySingletonFacadeProxyFactoryFactoryIterator(ObserverInterceptorAdapter observerInterceptorAdapter, AbstractInterceptorIteratorListenerFacadeDecoratorVisitor abstractInterceptorIteratorListenerFacadeDecoratorVisitor, FactoryDecoratorBeanAdapterProxy factoryDecoratorBeanAdapterProxy, SingletonAdvisorFacadeBuilderStrategy singletonAdvisorFacadeBuilderStrategy) {
AbstractBuilderIterator abstractBuilderIterator = new AbstractBuilderIterator();
iteratorSingletonDecoratorVisitorAdvisorFactoryFacade.setAbstractDecoratorAdapterListenerBuilderFacadeIterator(this.abstractDecoratorAdapterListenerBuilderFacadeIterator);
return new AbstractFactorySingletonFacadeProxyFactoryFactoryIterator();
}
synchronized volatile protected native private DecoratorStrategyBuilderListenerSingleton decoratorStrategyBuilderListenerSingleton(ObserverBuilderFactoryFactory observerBuilderFactoryFactory, AbstractStrategyDecoratorFacadeVisitor abstractStrategyDecoratorFacadeVisitor, AbstractAdapterIteratorListenerBuilderFactoryVisitor abstractAdapterIteratorListenerBuilderFactoryVisitor, AbstractVisitorObserverBuilderSingletonProxyIteratorListenerDecorator abstractVisitorObserverBuilderSingletonProxyIteratorListenerDecorator, AbstractStrategyFactoryFacadeVisitorListenerBean abstractStrategyFactoryFacadeVisitorListenerBean) {
advisorStrategySingleton.setAbstractSingletonObserverAdapterDecorator(this.abstractSingletonObserverAdapterDecorator);
return new DecoratorStrategyBuilderListenerSingleton();
}
}
SingletonDecoratorAdapter singletonDecoratorAdapter = new SingletonDecoratorAdapter();
AbstractFactoryFactorySingletonBuilderProxy abstractFactoryFactorySingletonBuilderProxy = new AbstractFactoryFactorySingletonBuilderProxy();
VisitorBeanSingletonProxyAdvisorBuilderFactoryFactory visitorBeanSingletonProxyAdvisorBuilderFactoryFactory = new VisitorBeanSingletonProxyAdvisorBuilderFactoryFactory();
IteratorListenerBean iteratorListenerBean = new IteratorListenerBean();
AbstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator abstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator = new AbstractAdvisorBuilderIteratorInterceptorSingletonFacadeStrategyDecorator();
synchronized final private protected void setAdvisorFacadeObserverFactorySingletonBeanProxy(AdvisorFacadeObserverFactorySingletonBeanProxy advisorFacadeObserverFactorySingletonBeanProxy) {
this.advisorFacadeObserverFactorySingletonBeanProxy = advisorFacadeObserverFactorySingletonBeanProxy;
}
public synchronized static protected native volatile transient private void setAbstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy(AbstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy) {
this.abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy = abstractIteratorFactoryFactoryFactoryBuilderSingletonInterceptorFacadeProxy;
}
native public static synchronized protected private transient final void setAbstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator(AbstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator) {
this.abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator = abstractObserverAdvisorBeanStrategyAdapterListenerBuilderIterator;
}
protected public native synchronized final void setAbstractBuilderFactoryFactory(AbstractBuilderFactoryFactory abstractBuilderFactoryFactory) {
this.abstractBuilderFactoryFactory = abstractBuilderFactoryFactory;
}
static private protected volatile transient SingletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory getSingletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory() {
return this.singletonInterceptorAdvisorListenerBuilderFactoryFactoryFactory;
}
transient private final static public VisitorAdvisorFactoryAdapterProxy getVisitorAdvisorFactoryAdapterProxy() {
return this.visitorAdvisorFactoryAdapterProxy;
}
synchronized protected public final volatile private AbstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener getAbstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener() {
return this.abstractAdapterSingletonStrategyProxyBuilderInterceptorDecoratorListener;
}
public transient private AbstractListenerAdvisor getAbstractListenerAdvisor() {
return this.abstractListenerAdvisor;
}
public protected transient final synchronized volatile static native private AbstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter abstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter(ObserverDecoratorAdvisorAdapterBuilderSingletonFacade observerDecoratorAdvisorAdapterBuilderSingletonFacade, AbstractBeanInterceptor abstractBeanInterceptor, AdvisorFacadeSingletonDecoratorListener advisorFacadeSingletonDecoratorListener, AbstractAdapterAdvisorObserverListenerFactoryStrategyBeanBuilder abstractAdapterAdvisorObserverListenerFactoryStrategyBeanBuilder, AbstractBeanSingletonInterceptorDecoratorFactoryFactoryFactoryProxyObserver abstractBeanSingletonInterceptorDecoratorFactoryFactoryFactoryProxyObserver) {
decoratorProxyBean.setProxyAdvisorStrategyFactoryFactoryInterceptorFactoryAdapter(this.proxyAdvisorStrategyFactoryFactoryInterceptorFactoryAdapter);
return new AbstractListenerAdvisorProxySingletonFacadeStrategyFactoryAdapter();
}
transient native private final synchronized volatile protected static DecoratorSingletonIterator decoratorSingletonIterator(ObserverSingletonListenerFactoryFactoryBuilder observerSingletonListenerFactoryFactoryBuilder, VisitorDecoratorSingletonObserverFactory visitorDecoratorSingletonObserverFactory, AbstractFacadeBeanAdvisorAdapterSingletonProxyListenerFactoryFactory abstractFacadeBeanAdvisorAdapterSingletonProxyListenerFactoryFactory, FactoryVisitorProxyDecoratorListener factoryVisitorProxyDecoratorListener) {
factoryInterceptorListenerSingletonFacadeDecoratorAdapter.setAbstractBuilderDecorator(this.abstractBuilderDecorator);
InterceptorProxyFacade interceptorProxyFacade = new InterceptorProxyFacade();
abstractAdvisorAdapterVisitorBean.setAbstractAdapterObserver(this.abstractAdapterObserver);
abstractInterceptorListenerBuilderSingletonAdapterStrategyFactoryAdvisor.setAdvisorStrategyDecorator(this.advisorStrategyDecorator);
return new DecoratorSingletonIterator();
}
synchronized volatile private final protected public static native transient AbstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade abstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade(ObserverListenerBeanFactoryFactoryAdvisor observerListenerBeanFactoryFactoryAdvisor, ProxyObserverVisitorFactoryBuilderDecoratorStrategy proxyObserverVisitorFactoryBuilderDecoratorStrategy, AbstractBeanInterceptorObserverAdvisor abstractBeanInterceptorObserverAdvisor) {
abstractStrategyFactoryFactoryBeanVisitorBuilderSingleton.setAbstractIteratorVisitor(this.abstractIteratorVisitor);
AbstractListenerAdvisorSingletonObserver abstractListenerAdvisorSingletonObserver = abstractBuilderDecoratorVisitorFactoryBeanProxyFacadeSingleton.getAbstractAdapterProxyBuilderFacadeListenerAdvisorInterceptorFactory().getAbstractListenerAdvisorSingletonObserver();
return new AbstractListenerFactoryFactoryDecoratorAdapterProxyInterceptorObserverFacade();
}
volatile static transient public native protected AbstractListenerBuilderAdvisorProxyVisitorFacade abstractListenerBuilderAdvisorProxyVisitorFacade(DecoratorSingletonAdvisorFactoryInterceptorListenerBuilder decoratorSingletonAdvisorFactoryInterceptorListenerBuilder, AbstractDecoratorBuilderBeanListenerSingletonObserver abstractDecoratorBuilderBeanListenerSingletonObserver) {
AbstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter abstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter = new AbstractObserverAdvisorBuilderIteratorFacadeFactoryFactoryFactoryAdapter();
adapterAdvisorDecoratorFacadeProxy.setAbstractAdapterBeanDecoratorStrategySingletonFacadeListenerFactory(this.abstractAdapterBeanDecoratorStrategySingletonFacadeListenerFactory);
return new AbstractListenerBuilderAdvisorProxyVisitorFacade();
}
private final public static volatile transient synchronized protected InterceptorSingletonVisitor interceptorSingletonVisitor(AbstractDecoratorStrategyProxyObserverInterceptorBuilder abstractDecoratorStrategyProxyObserverInterceptorBuilder, AbstractVisitorAdvisorFacadeListener abstractVisitorAdvisorFacadeListener, VisitorFactoryFactoryBuilder visitorFactoryFactoryBuilder, VisitorProxyFacadeFactoryFactorySingletonAdvisorDecorator visitorProxyFacadeFactoryFactorySingletonAdvisorDecorator, AbstractAdvisorBuilderDecoratorInterceptor abstractAdvisorBuilderDecoratorInterceptor) {
AbstractProxyAdvisor abstractProxyAdvisor = abstractFactoryFactoryDecorator.getListenerInterceptorFactoryFactory().getAbstractProxyAdvisor();
AbstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory abstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory = new AbstractVisitorAdvisorListenerStrategySingletonIteratorAdapterFactory();
abstractBeanAdvisorSingletonInterceptor.setAbstractFactoryFactoryAdvisorFacadeStrategy(this.abstractFactoryFactoryAdvisorFacadeStrategy);
AbstractAdvisorProxyStrategyIteratorVisitorObserver abstractAdvisorProxyStrategyIteratorVisitorObserver = new AbstractAdvisorProxyStrategyIteratorVisitorObserver();
if (abstractSingletonFacadeFactoryObserver.isInterceptorListenerFacade()) {
iteratorProxyListenerFacadeBean.setAbstractStrategyBean(this.abstractStrategyBean);
AbstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor abstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor = abstractBeanInterceptorIteratorListenerFactoryFactoryStrategyProxyObserver.getAbstractObserverFacadeListenerSingletonProxyAdvisorStrategyVisitor().getAbstractFactoryDecoratorBeanFacadeAdapterProxyAdvisorVisitor();
abstractProxyBuilderVisitorSingleton.setIteratorAdvisorProxySingletonAdapter(this.iteratorAdvisorProxySingletonAdapter);
if (abstractDecoratorAdapterVisitorProxyObserverIteratorBuilderFactory.isDecoratorFactoryFactoryFacade()) {
visitorIteratorObserverProxyAdvisor.setAbstractObserverSingletonProxyAdvisorBuilderDecorator(this.abstractObserverSingletonProxyAdvisorBuilderDecorator);
singletonFacadeAdapterListenerFactory.setAbstractIteratorInterceptorSingletonListenerAdvisorDecoratorBuilderFactoryFactory(this.abstractIteratorInterceptorSingletonListenerAdvisorDecoratorBuilderFactoryFactory);
while (abstractFactoryAdapterSingletonFactoryFactory.isAbstractStrategyFactory()) {
abstractAdapterBeanStrategySingletonAdvisorBuilderListenerFactory.setAbstractStrategyFactoryFactoryFacadeBuilderFactoryIteratorProxyObserver(this.abstractStrategyFactoryFactoryFacadeBuilderFactoryIteratorProxyObserver);
abstractObserverAdapterFactoryFacadeDecoratorBuilderInterceptorFactoryFactory.setAdvisorIteratorFactoryProxyDecorator(this.advisorIteratorFactoryProxyDecorator);
while (abstractFacadeListenerStrategyIteratorAdvisorSingletonProxyObserver.isVisitorDecoratorInterceptorIteratorAdapter()) {
abstractProxyAdapterInterceptorObserverFactoryFactoryIterator.setSingletonFactoryFactoryProxyIteratorStrategy(this.singletonFactoryFactoryProxyIteratorStrategy);
singletonInterceptorDecorator.setAbstractFactoryFactoryListenerBuilderAdvisorDecoratorFacade(this.abstractFactoryFactoryListenerBuilderAdvisorDecoratorFacade);
visitorFactoryFactoryAdapterIteratorInterceptor.setAbstractIteratorVisitor(this.abstractIteratorVisitor);
}
}
} else {
abstractListenerInterceptorStrategyVisitorBeanFactorySingletonIterator.setAbstractProxyStrategy(this.abstractProxyStrategy);
abstractProxyInterceptorSingletonFactoryFactory.setAbstractSingletonIterator(this.abstractSingletonIterator);
}
} else {
singletonListenerFactoryFactoryIteratorProxy.setAbstractObserverProxyIteratorVisitor(this.abstractObserverProxyIteratorVisitor);
}
return new InterceptorSingletonVisitor();
}
native volatile static final public AbstractSingletonObserver abstractSingletonObserver(AbstractBuilderFacade abstractBuilderFacade, ListenerBuilderVisitorFactoryStrategyAdvisorFacade listenerBuilderVisitorFactoryStrategyAdvisorFacade) {
builderObserverIterator.setAbstractProxyBuilder(this.abstractProxyBuilder);
AbstractInterceptorAdapterFactoryAdvisorStrategyProxy abstractInterceptorAdapterFactoryAdvisorStrategyProxy = abstractDecoratorInterceptor.getStrategyObserverListenerVisitorBean().getAbstractInterceptorAdapterFactoryAdvisorStrategyProxy();
AbstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator abstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator = abstractFactoryIteratorStrategyVisitor.getAdvisorBuilderVisitorBeanIterator().getAbstractInterceptorListenerAdvisorVisitorProxyObserverStrategyIterator();
while (facadeStrategyObserver.isAbstractFactoryFactoryFactoryListenerVisitorIteratorSingletonBeanAdvisor()) {
abstractFactoryFactoryAdvisorFactoryInterceptorIteratorObserverProxyBuilder.setIteratorAdvisorBeanBuilderProxy(this.iteratorAdvisorBeanBuilderProxy);
AbstractIteratorFactoryFactoryFacadeObserverVisitorAdapter abstractIteratorFactoryFactoryFacadeObserverVisitorAdapter = new AbstractIteratorFactoryFactoryFacadeObserverVisitorAdapter();
abstractVisitorObserverBeanSingletonBuilderProxyFacadeIterator.setAbstractProxyFactoryAdapterFactoryFactoryInterceptorIterator(this.abstractProxyFactoryAdapterFactoryFactoryInterceptorIterator);
}
return new AbstractSingletonObserver();
}
transient volatile static private synchronized AbstractFactorySingletonFacadeProxyFactoryFactoryIterator abstractFactorySingletonFacadeProxyFactoryFactoryIterator(ObserverInterceptorAdapter observerInterceptorAdapter, AbstractInterceptorIteratorListenerFacadeDecoratorVisitor abstractInterceptorIteratorListenerFacadeDecoratorVisitor, FactoryDecoratorBeanAdapterProxy factoryDecoratorBeanAdapterProxy, SingletonAdvisorFacadeBuilderStrategy singletonAdvisorFacadeBuilderStrategy) {
AbstractBuilderIterator abstractBuilderIterator = new AbstractBuilderIterator();
iteratorSingletonDecoratorVisitorAdvisorFactoryFacade.setAbstractDecoratorAdapterListenerBuilderFacadeIterator(this.abstractDecoratorAdapterListenerBuilderFacadeIterator);
return new AbstractFactorySingletonFacadeProxyFactoryFactoryIterator();
}
synchronized volatile protected native private DecoratorStrategyBuilderListenerSingleton decoratorStrategyBuilderListenerSingleton(ObserverBuilderFactoryFactory observerBuilderFactoryFactory, AbstractStrategyDecoratorFacadeVisitor abstractStrategyDecoratorFacadeVisitor, AbstractAdapterIteratorListenerBuilderFactoryVisitor abstractAdapterIteratorListenerBuilderFactoryVisitor, AbstractVisitorObserverBuilderSingletonProxyIteratorListenerDecorator abstractVisitorObserverBuilderSingletonProxyIteratorListenerDecorator, AbstractStrategyFactoryFacadeVisitorListenerBean abstractStrategyFactoryFacadeVisitorListenerBean) {
advisorStrategySingleton.setAbstractSingletonObserverAdapterDecorator(this.abstractSingletonObserverAdapterDecorator);
return new DecoratorStrategyBuilderListenerSingleton();
}
}
СТАТИКА, ТИПЫ, ЗОЕБИСЬ.
ПУЛЛРЕКВЕСТ НА 10 СТРОК
@
30 КОММЕНТОВ
@
ХУЙНЯ, ПЕРЕЛЕЛЫВАЙ
@
ПУЛЛРЕКВЕСТ НА 100500 ФАЙЛОВ
@
НУ Я ПОСИОТРЕЛ, ВРОДЕ НОРМ, ЗААППРУВИЛ
Нахуя нужен код ревью?
Кто-то реально сидит разбирается в том, что ты там наговнякал?
Или аппрув не глядя?
Я тоже с этого смеялся, пока самому не пришлось ревьювить...
Чтобы джуны не закоммитили хуйню. От сеньоров хуйни ждут меньше и ревьювят не так пристально.
> Любимой фичи
Это нормальная фича, если твой язык действительно динамический, чтобы писать плагинорасширяемую систему, уебан ты магазинный.
> Как вообще нахуй может НЕ БЫТЬ МОДУЛЯ и при этом проект работает?
Легко, блядь. С учетом этого вопроса, твоя характеристика "магазинный уебан" больше не вызывает сомнений.
Скажем, у нас есть система с неким набором классов для связи с внешним миром. В каждом из классов описывается уникальный траспорт для протокола. Какие-то из классов реализуются средствами стандартной библиотеки языка, а для других нужны дополнительные зависимости. Делаешь в классе какой-нибудь prepare(), который инициализирует переменную module, импортируя оный модуль. Импортировалось - отлично. Вывалилось с исключением - сообщаем юзеру, что конкретно этот транспорт недоступен, так как нет зависимостей для него прямо сейчас. Для простоты можно вообще на верхнем уровне грузить, не загрузилось - ставим ссылку на модуль в null и работаем дальше.
Аналогичный пример для си и линуксов. Есть вызов dlopen(), который используется чтобы открыть шаредлибу, чтобы из нее можно было достать какую-то функцию. Открылась - отлично. Не открылась - хуй с ней.
А самое смешное знаешь что? То, что на фоне криков JS-макак про НИНУЖНО, эту фичу завозят в новые версии в виде await, который может вызываться на уровне модуля. Что автоматически делает возможным await import и заворачивание его в try-catch, что и является заменителем unless для статического импорта (пока работает только в хроме). Очевидно, это много кому было нужно без изъебства с каллбеками. Но посмотреть на другие языки и сделать СРАЗУ НОРМАЛЬНО - это не JS-way. JS-way - это изобрести три способа импорта, и все - ущербные. Чтобы потом магазинные макаки с болью в жопе пытались это как-то оправдать.
А теперь съебал в ньюфагач, убожество.
Гугл выдаёт статью в википедии про закон тривиальности.
Дебич твой петухон никому уже не нужен кроме датачаентстов, зачем в вебе питон если есть тайпскрипт? Правильно, нахуй не нужен.
Да. Тезис: для веба тайпскрипт лучше петухона практически во всём, петухон не нужен в вебе, язык для нейросетевых учоных
Маня конечно заранее знает как луше и правильно.
То что язык развивают и добавляют все полезные фичи из других языков уже говорит о годности языка и коммюнити, которое его развивает, причем за счет динамизма эти улучшения можно использовать даже если в рантайме древняя хуета, а не сидеть 10 лет и ждать пока индустрия подтянется.
В ноде динамические импорты есть через require, так что непонятно, хули ты тут развел на полтреда.
>1957 год выпуска слова
>малолетки
Василий Николаевич, вы же Сталинград обороняли. Нахуй вам в айти вкатываться?
Очевидно 10 строк говна легче посмотреть и откомментить, чем разбираться в огромной куче подобного говна. Ее можно максимум просмотреть по диагонали и либо отреджектить не глядя, сказав долбоебу, не уважающему твое время, чтобы он впредь не коммитил простыню из непонятно чего, а разбивал ее на кучки поменьше, либо принять не глядя, и пусть дальше долбоеб сам свое говно фиксит, когда оно сломается на проде. И пулл реквесты нужны не для того, чтобы за тобой жопу подтирать по каждой мелочи, а чтобы ты писать код научился.
> Маня конечно заранее знает как луше и правильно.
Конечно. Потому что есть такая вещь полезная, называется "проектирование", в которую входит анализ областей применения и задач. Если анализ провели хуево, получаем три ущербных способа импорта.
>>30915
Речь шла не о ноде, а о JS в браузере.
>>30932
> есть идея получше
И это все, что ты можешь ответить, потому что ты некомпетентный еблан. Только и остается, что жалким образом петушиться в мою сторону, так как конструктивных аргументов у тебя как не было, так и нет.
Нет проблемы, импорти нормально - нормально будет. Здесь тебе не петухон, где можно вызвать несуществующие функции, в нормальных языках такое жульничество не проходит
> СКОЛЬКО ВЫ ХОТИТЕ ПОЛУЧАТЬ?
Ну, хотя бы чтобы после оплаты квартиры и интернета с едой оставалось 15к. С моими нынешними тратами это что-то в районе 50к.
Квартира - 16к
Интернет 500р
Еда - в неделю 2,5к выходит
Еще общественный транспорт что-то в районе 2к в месяц
С текущей ЗП в 20к - приходится у бати просить(((
2 года .net девелопер
Проблема в тебе, питухонер. Я же говорю тебе - импорти нормально и будет всё работать. Профилактически макнул тебе потными коконьками в морду лица на всякий случай.
Легко двачному пиздюгану с высоты 2021 года пукать о проектировании. Ты бы и рейхстаг в одиночку без потерь взял не вставая с дивана
@
"А ВОТ ТУТ У НАС ОГРАНИЧЕНИЕ ПО ПАМЯТИ БУДЕТ"
@
"ТУТ СЛОЖНОСТЬ МОЖНО ОПТИМИЗИРОВАТЬ"
@
"А ТУТ СТАНДАРТНУЮ БИБЛИОТЕКУ НЕ БУДЕМ ИСПОЛЬЗОВАТЬ, ЧТО БЫ БЫСТРЕЕ БЫЛО"
@
РЕШЕНИЕ ЗАДАЧИ В КАЖДОМ ВТОРОМ МЕЛКОМ ИЛИ СРЕДНЕМ ПРОЕКТЕ
@
"СЕРЕГА, НАПИШИ ДЕВОПСАМ, ПУСТЬ ЕЩЕ МАШИНУ ЗАКАЖУТ"
ХЗ. У нас если на обычной пеке с i5 и 8 гигами начинают быть просадки по перформансу заметны глазу - ебут пока не сделаешь нормально.
Ну так у вас явные железные ограничения, я больше про веб говорил
Я мог бы с тобой согласиться, если бы это был первый в своем роде язык. Но ведь это не так, и ничто не мешало посмотреть на другие языки, прежде чем ваять петуха из говна.
Более того, на момент принятия стандартов ES, УЖЕ существовали десятки языков с нормальными системами импортов. Равно как и на момент введения статических импортов в JS. Просто JS-уебаны не подумали посмотреть на применяющиеся практики и нахуярили от балды (как в общем-то и хуярится весь современный веб).
НЕЕЕТ ВЫ НЕ МОЖЕТЕ ПИСАТЬ БЭК НА ИНТЕРПРЕТИРУЕМОМ ЯЗЫКЕ, ОНИ СЛИШКОМ МЕДЛЕННЫЕ ДЛЯ ЭТОГО
@
НЕЕЕТ ВЫ НЕ МОЖЕТЕ ДЕЛАТЬ SQL-ЗАПРОСЫ К БД, ОНИ СОЗДАЮТ ТААКОООЙ ОВЕРХЕД
@
НЕЕЕТ ВЫ НЕ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ФРЕЙМВОРК-НЕЙМ, ТАМ КУЧА НЕПОНЯТНОГО КОДА НЕПОНЯТНО ДЛЯ ЧЕГО
@
НЕЕЕТ ВЫ НЕ МОЖЕТЕ ИСПОЛЬЗОВАТЬ СТАНДАРТНУЮ БИБЛИОТЕКУ ДЛЯ СТАНДАРТНЫХ ВЕЩЕЙ, ИНАЧЕ КЛИЕНТ УЙДЕТ ОТ НАС К КОНКУРЕНТУ, ГДЕ ЗАПРОСЫ ВЫПОЛНЯЮТСЯ БЫСТРЕЕ НА 0,02 СЕК
Все кешируем при старте и достаем из оперативки.
Нахуй тебе условие в статическом импорте, дебил блять? В своём проекте ещё до стадии сборки не можешь разобраться есть модуль или нет?
Я тебе его уже несколько раз повторил, а ты всё кудахчешь" "ррряяяяяя, ниаргумент!"
>Речь шла не о ноде, а о JS в браузере.
Тоже есть динамические импорты, если ты конечно не под какое-нибудь IE свой код сорёшь.
Еще раз прочитай, что я писал по поводу зависимостей и рантайма, тупой еблан.
Динамические есть, а где unless для статических? Отвечу за тебя: эту фичу прямо сейчас заносят в браузеры, но пока все идет медленно. Я говорил про то, что те, кто работает над JS, башкой не думают.
> — ря, это хуйня, кудах
> — почему ты так считаешь?
> — ну ведь я так скозал, koodakh
Понял тебя
Есть еще кроме NoSQL способ собрать запросы в бинарную либу, чтобы избавиться от необходимости использовать SQL-парсер. По факту внутри будет MySQL, но ты будешь ходить в его кишки напрямую.
SQL запросы-то оно не парсит, да? Вот тебе и выигрыш. Хардкорные байтоебы могут вообще какое-нибудь BerkleyDB подключать
>СТАТИЧЕСКИЙ импорт модуля, факт существования которого устанавливается в РАНТАЙМЕ
Да что тут блядь происходит?
Объясняю популярно: статический импорт в JS - способ загрузить модуль псевдосинхронно, но без возможности сделать unless. Динамический импорт позволяет это, но надо городить костыли с каллбеками. При этом await import на уровне модуля является сочетанием первого и второго: позволяет загрузить модуль на верхнем уровне, но при этом без ебли с каллбеками. Речь о том, что когда делали статические импорты, никому в голову не пришло, что может понадобиться unless, хотя это есть во многих других языках и вовсю используется.
>Динамические есть, а где unless для статических?
Статический unless и есть динамический импорт. Ты пока ни одного аргумента не привёл, почему тебя динамический импорт не устраивает, кроме утиного ну так в питоне зделоли.
>Отвечу за тебя: эту фичу прямо сейчас заносят в браузеры, но пока все идет медленно.
И ты конечно же ссылку показал на занос этой супермегаважной фичи в браузеры, так как я её не вижу ни в одной таблице совместимости. С таким же успехом я могу сказать, что вон уже Vibrate API заносят, так что можно будет включать свой дилдак прямиком из браузера.
> Ты пока ни одного аргумента не привёл
Ты в глаза что ли долбишься? Я же писал: для динамических импортов требуются каллбеки, и ты не можешь выполнить динамический импорт на уровне модуля и дождаться его, как дожидаешься статических, а потом выполняешь все остальное. Сейчас в стандарт вводят await уровня модуля как раз для таких случаев.
> И ты конечно же ссылку показал
Конечно же, показал:
https://caniuse.com/mdn-javascript_operators_await_top_level
https://bugzilla.mozilla.org/show_bug.cgi?id=1681046
JS-петушки даже собственный язык не знают, что и говорить про практики в других языках.
>Просто JS-уебаны не подумали посмотреть на применяющиеся практики и нахуярили от балды
Не проецируй, смотрели на состояние индустрии и браузеров, от этого и отталкивались, с твоими фантазиями о неких JS уебанах это не имеет ничего общего.
Как там строки в крестах поживают? Затирание типов в яве? Может быть в качкеле комитетные крысы собрались и запроектировали ЗОЕБИСЬ? Ой нет, пришлось потом экстеншенов нахуярить, ломающих BC
С точки зрения перекатывающегося с гошечки - безусловно.
Схуяль? Это тебе не нравятся нормально работающие испорты в JS просто потому что ты так скозал.
Перестань отрицать реальность, еблан. Нормально работающие синхронные импорты без анлесса, или асинхронные с анлессом.
Мало того, что сказал, так еще и аргументировал. У вас же, JS-макак, терминальная стадия конформизма и полное отсутсвие критического мышления.
Проиграл с нищей дуднетомакаки. Я 50к получал, когда на втором курсе устроился на плюсах быдлокодить а тогда ещё доллар был по тридцать
>Речь шла не о ноде, а о JS в браузере.
В браузере импортов в принципе нет, только загрузка ресурсов. И загрузить ресурс по условию ты можешь без проблем.
>Я же писал: для динамических импортов требуются каллбеки
Какие нахуй колбэки, дебилоид? Динамические импорты - это промисы.
>и ты не можешь выполнить динамический импорт на уровне модуля и дождаться его, как дожидаешься статических
Нихуя себе, ты не можешь заблочить синхронное выполнение ассинхронным кодом, а пацаны-то и не знали.
>а потом выполняешь все остальное
Что тебе мешает внутри ассинхронного модуля выполнять всё остальное?
`Top level await` никакого отношения к твоему говнокоду не имеет, это просто сахарок, чтобы не оборачивать весь код в ассинхронный IIFE.
>JS-петушки даже собственный язык не знают, что и говорить про практики в других языках.
Очень интересно слушать истории от питониста, который сахарок как ману небесную представляет. Учитывая, что ты не понимаешь разницу между синхронным и ассинхронным кодом, и, соответственно, между статичесским и динамическим импортом, то ты не поймёшь, как работает `top level await` и прибежишь в этот тред с горящей сракой плакаться о том, как жс насрал тебе в штаны и вообще всё ниправильна зделоли опять.
Нет, просто ты в глаза долбишься.
> Какие нахуй колбэки, дебилоид? Динамические импорты - это промисы.
Промисы - это объекты отслеживания асинхронных состояний, тупой клоун. Внутри это все те же каллбеки.
> пацаны-то и не знали
Оно и видно, что вы нихуя не знаете. Ты там выебывался-выебывался, но был посрамлен двумя ссылками.
> `Top level await` никакого отношения к твоему говнокоду не имеет
А сейчас ты пойдешь и покажешь как сделать аналог try { await import() } catch {} на уровне модуля без top level await. Любитель ты наш сахарка.
Адекватные люди понимают, что все языки по-своему говно. Но для жс-дебилов это непознаваемая истина, вам ссы в глаза - все божья роса. Сколько не аргументируй, как ни пруфуй и не сравнивай с другими языками - РРРЯЯЯ ЖС ХОРОШИЙ ВРЁШЬ ТЫ ВСЁ.
Который подставляет содержимое другого файла на место импорта, как сишный препроцессор, и в результате единственный bundle.js без импортов.
Эта конструкция может использоваться в чистом виде прямо в js-коде, который должен подтягиваться браузером. В этом случае браузер скачивает все зависимости сам и запускает код. Никаких бандлов тут нет. В html вставляешь script, в котором делаешь import-from, в скриптах-зависимостях оно отрабатывает по цепочке.
Ты ведь понимаешь что сколько студентик первого курса не будет аргументировать за крутость бейсика, помидорам, которые поработали уже с десятком языков будет поебать, в том числе у студентика может даже сложится ощущение что помидоры слились, хотя просто лень двадцать раз пояснять то, чего он еще не может понять.
Тебе уже мимокрок ясно написал
>Что тебе мешает внутри ассинхронного модуля выполнять всё остальное?
>сахарок
Но ты походу даже не понял о чем он, зато всех джеесеров в треде обличил и наказал "аргументами".
Мальчик, ты сейчас пытаешься выдумать чучелко и побороть его, так как тягаться со мной по компетенции у тебя пупок развяжется. Нет, я понимаю, что от моей железобетонной аргументации у тебя болит пятая точка, но не проецируй на меня свои комплексы настолько явно.
> Но ты походу даже не понял о чем он
Я прекрасно понял, о чем он. Ничего не мешает, конечно же. Весь этот диалог был о том, что жс не предоставляет одну конкретную фичу просто по тупости его авторов, которые не умеют в проектирование, а теперь вот эта фича появляется.
>Мальчик, ты сейчас пытаешься выдумать чучелко и побороть его, так как тягаться со мной по компетенции у тебя пупок развяжется.
>Эти реверсы и проекции
))
Что ты по-твоему импортишь(и откуда) в браузере через данную конструкцию, расскажи?
> думает, что если сказал "реверсы и проекции", то чучелко станет валидным аргументом в споре
Я выше уже писал. При использовании import-from браузер изображает псевдосинхронность и скачивает каждый js-файл, описанный этой конструкцией. Это удобно, потому что не нужно ебаться с асинхронной подгрузкой самому. Но эта конструкция не имеет unless. Зато его имеет прямо сейчас вводимый top-level-await в виде await-import. Действовать будет почти так же, но отсутствие js-файла по 404 уже можно обработать.
Если под веб-сервером ты подразумеваешь апач или nginx, то я тоже в рот их ебал. Даже с вебсферой проблем меньше.
А есть какой-нибудь юзерскрипт или расширение, которое все эти асинки-авайты-импорты-экспорты превращает в JS версии из HTML4?
Ньюфаг из хаскелтреда, ты?
Больной, примите банхаммер ректально.
Кто бы сомневался, чтш статикошизик окажется ещё и конфодебилом, воюющим протв Абу.
А ещё статикошиз был Гитлером, да.
Динамический петушок все еще думает, что сторонник статики в треде один.
НЕЕТ, ООП НА PHP ПОНИЖАЕТ ПРОИЗВОДИТЕЛЬНОСТЬ
>Промисы - это объекты отслеживания асинхронных состояний, тупой клоун.
Await - те же промисы, и те же колбэки ты будешь пихать в try...catch блок.
>Оно и видно, что вы нихуя не знаете. Ты там выебывался-выебывался, но был посрамлен двумя ссылками.
Это конечно хорошо, но `await import()` - динамический импорт, дебил блять. А ты заливаешь хуйню про какую-то волшебную условную статику.
>А сейчас ты пойдешь и покажешь как сделать аналог try { await import() } catch {} на уровне модуля без top level await. Любитель ты наш сахарка.
Зачем ты оборачиваешь всё в try...catch, ты же у нас ненавидишь колбэки? В этом сахарке ты должен будешь прописывать условие провала импорта, а так же ловить и обрабатывать ошибки в catch блоке. Всё то же самое, что и так должен делать с промисами.
А аналог выглядит так:
```
import(path)
.then( (module) => {} )
.catch( (error) => {} )
```
Засахарённый вариант:
```
(async() => {
try {
await import()
} catch(error) {
}
})();
```
>>31442
Ты забыл упомянуть `script type="module"`, в обычных и даже ассинхронных скриптах никаких тебе ES импортов.
> Это конечно хорошо, но `await import()` - динамический импорт.
Я нигде не утверждал, что это статический импорт, уебан ты безмозглый. Разуй глаза, напряги межушный нервный узелок и перечитай то, что было выше. Я говорил, что у динамического импорта есть анлесс, но его не вызвать на уровне модуля, а у статического анлесса нет, но он прекрасно там вызывается.
> Зачем ты оборачиваешь всё в try...catch, ты же у нас ненавидишь колбэки?
Как связаны try-catch и каллбеки, полуебок? Не отвечай, впрочем, одна история охуительней другой.
> А аналог выглядит так
> import-then
Это не аналог, он требует каллбека после импорта
> Засахарённый вариант
Это не засахаренный вариант, а костылек сбоку, хотя и ближе к тому, что нужно. На, покури и иди нахуй, будь добр: https://habr.com/ru/post/524068. У меня от твоего терминального долбоебизма пропадает вера в человечество.
>уебан ты безмозглый
>полуебок
>покури и иди нахуй
>терминального долбоебизма
Стекломойная пидорашка топает ножкой и гневно сжимает кулачки от неспособности понять простые концепции вроде синтаксического сахара и промисов.
Чел....
Можно попробовать написать юзерскрипт, который будет вызывать babel.transform() из babel-standalone.
МЫ ВАМ ПЕРЕЗВОНИМ
На хаскеле, лол.
@
ЕЩЁ МИНУТ 10 ПОСИЖУ, ТАСОЧКУ ЗАКРОЮ, НЕМНОГО ОСТАЛОСЬ
@
ПРОХОДИТ ПОЛЧАСА
@
ИДЁШЬ НА ОБЕД, ТК ТАСОЧКА ЕЩЁ МИНИМУМ НА ЧАС
ДО КОРОНОВИРУСА
@
УТРО
@
ЧТО-ТО ЛЕНЬ НАЧИНАТЬ ТАСОЧКУ, ЗАЙДУ ПОЧИТАЮ НОВОСТИ, ДВАЧ, ПОСМОТРЮ ВИДЕО НА ЮТУБЕ ПОКА НИКОГО НЕТ
@
ПОДХОДИТ ВРЕМЯ ОБЕДА
@
ЧТО ТО НЕ РАБОТАЕТСЯ ПОСЛЕ ЕДЫ, СОНЛИВОСТЬ
@
ЧЕРЕЗ ПАРУ ЧАСОВ
@
ЧТО-ТО УЖЕ КОНЕЦ РАБОЧЕГО ДНЯ, ЗАВТРА ПРИДУ, СРАЗУ ЗАСЯДУ И УЖЕ ТОЧНО ВСЕ СДЕЛАЮ
@
УТРО
@
ЧТО-ТО ЛЕНЬ НАЧИНАТЬ ТАСОЧКУ, ЗАЙДУ ПОЧИТАЮ НОВОСТИ, ДВАЧ, ПОСМОТРЮ ВИДЕО НА ЮТУБЕ
КОРОНОВИРУС И УДАЛЕН ОЧКА
@
УТРО т.е. 11-12 дня
@
ЧТО-ТО ЛЕНЬ НАЧИНАТЬ ТАСОЧКУ, ЗАЙДУ ПОЧИТАЮ НОВОСТИ, ДВАЧ, ПОСМОТРЮ ВИДЕО НА ЮТУБЕ, ПОТОМ ЗАСЯДУ
@
ДЕНЬ
@
ЕЩЕ ЧУТЬ-ЧУТЬ ДВАЧА, О У ЭТОГО ПЕТУШКА НОВЫЙ РОЛИК, СЕЙЧАС ГЛЯНУ И ЗАСЯДУ
@
ВЕЧЕР
@
СЕЙЧАС ПОЕМ БУКВАЛЬНО 30 МИН ПОД КАКОЕ-НИБУДЬ КИНЦО И ЗАСЯДУ
@
СПУСТЯ 2 ЧАСА
@
УСТАЛ СИДЕТЬ, ПОЛЕЖУ ЧАСИК И ЗАСЯДУ
@
САДИШЬСЯ ЗА ПЕТ ПРОЕКТ
@
УТРО
@
ЧТО-ТО ЛЕНЬ НАЧИНАТЬ ТАСОЧКУ
ПОДХОДИТ ТРЕТЬИЙ ПЕРЕНЕСЕННЫЙ СРОК СДАЧИ ТАСОЧКИ
@
ПИКРИЛ В ОПАСНЫХ ДЛЯ ЖИЗНИ КОЛИЧЕСТВАХ
@
АНТИБУГУРТ
ДО КОРОНОВИРУСА
@
УТРО
@
ЧТО-ТО ЛЕНЬ НАЧИНАТЬ ТАСОЧКУ, ЗАЙДУ ПОЧИТАЮ НОВОСТИ, ДВАЧ, ПОСМОТРЮ ВИДЕО НА ЮТУБЕ ПОКА НИКОГО НЕТ
@
ПОДХОДИТ ВРЕМЯ ОБЕДА
@
ЧТО ТО НЕ РАБОТАЕТСЯ ПОСЛЕ ЕДЫ, СОНЛИВОСТЬ
@
ЧЕРЕЗ ПАРУ ЧАСОВ
@
ЧТО-ТО УЖЕ КОНЕЦ РАБОЧЕГО ДНЯ, ЗАВТРА ПРИДУ, СРАЗУ ЗАСЯДУ И УЖЕ ТОЧНО ВСЕ СДЕЛАЮ
@
УТРО
@
ЧТО-ТО ЛЕНЬ НАЧИНАТЬ ТАСОЧКУ, ЗАЙДУ ПОЧИТАЮ НОВОСТИ, ДВАЧ, ПОСМОТРЮ ВИДЕО НА ЮТУБЕ
КОРОНОВИРУС И УДАЛЕН ОЧКА
@
УТРО т.е. 11-12 дня
@
ЧТО-ТО ЛЕНЬ НАЧИНАТЬ ТАСОЧКУ, ЗАЙДУ ПОЧИТАЮ НОВОСТИ, ДВАЧ, ПОСМОТРЮ ВИДЕО НА ЮТУБЕ, ПОТОМ ЗАСЯДУ
@
ДЕНЬ
@
ЕЩЕ ЧУТЬ-ЧУТЬ ДВАЧА, О У ЭТОГО ПЕТУШКА НОВЫЙ РОЛИК, СЕЙЧАС ГЛЯНУ И ЗАСЯДУ
@
ВЕЧЕР
@
СЕЙЧАС ПОЕМ БУКВАЛЬНО 30 МИН ПОД КАКОЕ-НИБУДЬ КИНЦО И ЗАСЯДУ
@
СПУСТЯ 2 ЧАСА
@
УСТАЛ СИДЕТЬ, ПОЛЕЖУ ЧАСИК И ЗАСЯДУ
@
САДИШЬСЯ ЗА ПЕТ ПРОЕКТ
@
УТРО
@
ЧТО-ТО ЛЕНЬ НАЧИНАТЬ ТАСОЧКУ
ПОДХОДИТ ТРЕТЬИЙ ПЕРЕНЕСЕННЫЙ СРОК СДАЧИ ТАСОЧКИ
@
ПИКРИЛ В ОПАСНЫХ ДЛЯ ЖИЗНИ КОЛИЧЕСТВАХ
@
АНТИБУГУРТ
ПРОКРАСТИНИРУЕШЬ ДОМА НА ФРИЛАНСЕ
@
КОРОНАВИРУС
@
ПОЧТИ НИЧЕГО НЕ ИЗМЕНИЛОСЬ только клиенты стали жаднее и озлобленнее из-за упадка экономики
@
НУЖНО ТОЛЬКО ПОСМОТРЕТЬ И СКАЗАТЬ, ЧТО ТАМ К ЧЕМУ, РЕАЛЬНО ЛИ БАГ ЕСТЬ
@
ДЕЛАТЬ БЫЛО НЕЧЕГО И ТЫ ПОПЫТАЛСЯ ЕГО РЕШИТЬ
@
НЕ СМОГ
@
НАПИСАЛ, ЧТО ДА, БАГ ЕСТЬ
@
ЧЕРЕЗ КАКОЕ-ТО ВРЕМЯ ВИДИШЬ, ЧТО БАГ РЕШЁН ДРУГИМ РАЗРАБОТЧИКОМ
@
СМОТРИШЬ ИЗМЕНЕНИЯ
@
ТАМ КАКИЕ-ТО НЕПОНЯТНЫЕ МЕЛКИЕ ПРАВКИ, КОТОРЫЕ ИСПРАВЛЯЮТ СИЬУАЦИЮ
@
ТЫ ИХ НЕ ПОНИМАЕШЬ
@
ЧУВСТВУЕШЬ ЗЛОВЕЩЕЕ ИНТЕЛЛЕКТУАЛЬНОЕ ПРЕВОСХОДСТВО ТОГО РАЗРАБОТЧИКА
@
УТЕШАЕШЬ СЕБЯ ТЕМ, ЧТО БАГ ПО БЭКЕНДУ, А ТЫ ФРОНТЕНДЕР
@
ФУЛЛСТАЧИШЬ, НО СЧИТАЕШЬ СЕБЯ ФРОНТЕНДЕРОМ
@
МЕЧТАЕШЬ КОГДА-НИБУДЬ СТАТЬ НАСТОЯЩИМ ФРОНТОМ
@
СИДИШЬ ТАК 2 ЧАСА
@
ЭХ, ТАСОЧКИ ВСЁ НЕТ И НИКТО НЕ ПОЖКИДЫВАЕТ
@
...
@
ЕБАА, ВОТ ЖЕ ТАСКА
@
ОПЯТЬ РАБОТАТЬ ПИЗДОС
@
В ОБЛАСТИ ВСЕ ЧТО СВЯЗАННО С ПРОГРАММИРОВАНИЕМ: 1C И ПРОГРАММИРОВАНИЕ ЧПУ
Тяжело осознавать свою дебильность.
>ТАМ КАКИЕ-ТО НЕПОНЯТНЫЕ МЕЛКИЕ ПРАВКИ, КОТОРЫЕ ИСПРАВЛЯЮТ СИТУАЦИЮ
>@
>ТЫ ИХ НЕ ПОНИМАЕШЬ
>@
>ЧУВСТВУЕШЬ ЗЛОВЕЩЕЕ ИНТЕЛЛЕКТУАЛЬНОЕ ПРЕВОСХОДСТВО ТОГО РАЗРАБОТЧИКА
@
ТЫ ВНОСИВШИЙ ПРАВКИ РАЗРАБОТЧИК
@
НЕ ПОНИМАЕШЬ ИХ
@
ВЕДЬ ТЫ ПРОСТО ХУЯРИЛ ПО ДЕБАГГЕРУ
Потому что айти - говнище, большинство тут только ради денег. Чем больше непонятных говнотасок сделаешь - тем больше похуй.
Мне не похуй, я просто тупой.
ПОПАЛ В АЙТИ
@
"Я БУДУ РАЗВИВАТЬСЯ, ПИСАТЬ КАЧЕСТВЕННЫЙ КОД И КАК МОЖНО БЫСТРЕЕ, СТАРАТЬСЯ СДЕЛАТЬ ПРОДУКТ ЛУЧШЕ"
@
ЧЕРЕЗ 5 ЛЕТ В АЙТИ
@
"ТАК, ЭТА ТАСКА НА 3 ЧАСА, ЗНАЧИТ СКАЖУ, ЧТО ЕЕ ДЕЛАТЬ ДЕНЬ, А ОСТАЛЬНОЕ ВРЕМЯ ПРОЕБЛАНЮ, ТАК ТУТ ПОТЕНЦИАЛЬНЫЙ БАГ, ДА ПОХУЙ, ВДРУГ ТЕСТИРОВЩИКИ НЕ НАЙДУТ, А ПОТОМ НА КОГО-НИБУДЬ ПЕРЕВЕШУ"
РАБОТАЛ ТИМЛИДОМ 5 ЛЕТ
@
БИЗНОС ЛЮТУЕТ, КОДИТЬ НЕКОГДА, РАЗРАБЫ НЕДОВОЛЬНЫ, ДОХУЯ БЮРОКРАТИИ, СОВЕЩАНИЯ НЕ ВМЕЩАЮТСЯ В КАЛЕНДАРЬ, ВРЕМЕНИ НЕ ХВАТАЕТ НИ НА РАБОТУ, НИ НА ЖИЗНЬ
@
УКАТИЛСЯ В РАЗРАБЫ
@
ДАЛИ ДРЕВНЕЕ ЛЕГАСИ НА ASP.NET 4.0 И JQUERY 1.X
@
ЗА ПАРУ МЕСЯЦЕВ УЛЬТРАЛАЙТОВОЙ РАБОТЫ ПО 1-2 ЧАСА В ДЕНЬ ДОВЁЛ ПРОЕКТ ДО УМА: ПЕРЕВЁЛ НА СОВРЕМЕННЫЙ СТЕК, ПРИЧЕСАЛ КОД, НАПИСАЛ ДОКУ, ПОКРЫЛ ТЕСТАМИ/ЛОГАМИ/МЕТРИКАМИ/ТРЕЙСАМИ, КОНТЕЙНЕРИЗИРОВАЛ И СДАЛ В ЭКСПЛУАТАЦИЮ
@
В СВОБОДНОЕ ВРЕМЯ КОВЫРЯЛ ИНТЕРЕСНЫЕ ТЕХНОЛОГИИ, ЧИТАЛ КНИЖЕЧКИ, ПОСЕЩАЛ МИТАПЧИКИ, ВЕРНУЛСЯ К СТАРЫМ ХОББИ И ЗАВЁЛ НОВЫЕ, ДОНЁС ТУШКУ ДО СПОРТЗАЛА , СХОДИЛ С ЖЕНОЙ В ТЕАТР
@
ДАЛИ БОЛЕЕ КРУПНОЕ И ДРЕВНЕЕ ЛЕГАСИ И ЖДУНА В НАГРУЗКУ
@
ЗА ПОЛ-ГОДА НЕ СЛИШКОМ НАПРЯЖНОЙ РАБОТЫ ПО 2-4 ЧАСА В ДЕНЬ ДОВЁЛ ПРОЕКТ ДО УМА, ЖДУНА ДО МИДЛА
@
ОТ МИТАПЧИКОВ И ОДНОГО ИЗ НОВЫХ ХОББИ ПРИШЛОСЬ ОТКАЗАТЬСЯ
@
НА ГОРИЗОНТЕ ЕЩЁ БОЛЕЕ КРУПНОЕ И ДРЕВНЕЕ ЛЕГАСИ
@
ТЕХ.ДИР С НОВЫМ ЖДУНОМ КАК-БЫ НЕВЗНАЧАЙ КРУТИТСЯ РЯДОМ И ЗАВОДИТ РАЗГОВОРЫ О СОЗДАНИИ ОТДЕЛА МОДЕРНИЗАЦИИ ЛЕГАСИ-СИСТЕМ ВО ГЛАВЕ С ТОБОЙ
@
ОТ БЕЗЫСХОДНОСТИ ПЫТАЕШЬСЯ ЗАПРОМОУТИТЬ СВЕЖЕИСПЕЧЕННОГО МИДЛА В ТИМЛИДЫ
@
ТЕХ.ДИР СМЕЁТСЯ, ГОВОРИТ "ТЫ ЧЁ? ЕБАНУТЫЙ? ТЫ ЗАЧЕМ ТАК ДЕЛАЕШЬ?" И НЕ ВЕДЁТСЯ
Думаю, на пол-года смогу оттянуть неизбежное, а потом таки придётся возвращаться в менеджмент или ливать.
Как же охуенно ни за кого не отвечать и спокойно работать, не отвлекаясь на ебучие митинги с переписками и созвонами.
РАБОТАЛ ТИМЛИДОМ 5 ЛЕТ
@
БИЗНОС ЛЮТУЕТ, КОДИТЬ НЕКОГДА, РАЗРАБЫ НЕДОВОЛЬНЫ, ДОХУЯ БЮРОКРАТИИ, СОВЕЩАНИЯ НЕ ВМЕЩАЮТСЯ В КАЛЕНДАРЬ, ВРЕМЕНИ НЕ ХВАТАЕТ НИ НА РАБОТУ, НИ НА ЖИЗНЬ
@
УКАТИЛСЯ В РАЗРАБЫ
@
ДАЛИ ДРЕВНЕЕ ЛЕГАСИ НА ASP.NET 4.0 И JQUERY 1.X
@
ЗА ПАРУ МЕСЯЦЕВ УЛЬТРАЛАЙТОВОЙ РАБОТЫ ПО 1-2 ЧАСА В ДЕНЬ ДОВЁЛ ПРОЕКТ ДО УМА: ПЕРЕВЁЛ НА СОВРЕМЕННЫЙ СТЕК, ПРИЧЕСАЛ КОД, НАПИСАЛ ДОКУ, ПОКРЫЛ ТЕСТАМИ/ЛОГАМИ/МЕТРИКАМИ/ТРЕЙСАМИ, КОНТЕЙНЕРИЗИРОВАЛ И СДАЛ В ЭКСПЛУАТАЦИЮ
@
В СВОБОДНОЕ ВРЕМЯ КОВЫРЯЛ ИНТЕРЕСНЫЕ ТЕХНОЛОГИИ, ЧИТАЛ КНИЖЕЧКИ, ПОСЕЩАЛ МИТАПЧИКИ, ВЕРНУЛСЯ К СТАРЫМ ХОББИ И ЗАВЁЛ НОВЫЕ, ДОНЁС ТУШКУ ДО СПОРТЗАЛА , СХОДИЛ С ЖЕНОЙ В ТЕАТР
@
ДАЛИ БОЛЕЕ КРУПНОЕ И ДРЕВНЕЕ ЛЕГАСИ И ЖДУНА В НАГРУЗКУ
@
ЗА ПОЛ-ГОДА НЕ СЛИШКОМ НАПРЯЖНОЙ РАБОТЫ ПО 2-4 ЧАСА В ДЕНЬ ДОВЁЛ ПРОЕКТ ДО УМА, ЖДУНА ДО МИДЛА
@
ОТ МИТАПЧИКОВ И ОДНОГО ИЗ НОВЫХ ХОББИ ПРИШЛОСЬ ОТКАЗАТЬСЯ
@
НА ГОРИЗОНТЕ ЕЩЁ БОЛЕЕ КРУПНОЕ И ДРЕВНЕЕ ЛЕГАСИ
@
ТЕХ.ДИР С НОВЫМ ЖДУНОМ КАК-БЫ НЕВЗНАЧАЙ КРУТИТСЯ РЯДОМ И ЗАВОДИТ РАЗГОВОРЫ О СОЗДАНИИ ОТДЕЛА МОДЕРНИЗАЦИИ ЛЕГАСИ-СИСТЕМ ВО ГЛАВЕ С ТОБОЙ
@
ОТ БЕЗЫСХОДНОСТИ ПЫТАЕШЬСЯ ЗАПРОМОУТИТЬ СВЕЖЕИСПЕЧЕННОГО МИДЛА В ТИМЛИДЫ
@
ТЕХ.ДИР СМЕЁТСЯ, ГОВОРИТ "ТЫ ЧЁ? ЕБАНУТЫЙ? ТЫ ЗАЧЕМ ТАК ДЕЛАЕШЬ?" И НЕ ВЕДЁТСЯ
Думаю, на пол-года смогу оттянуть неизбежное, а потом таки придётся возвращаться в менеджмент или ливать.
Как же охуенно ни за кого не отвечать и спокойно работать, не отвлекаясь на ебучие митинги с переписками и созвонами.
Так просто снова укатись в одно рыло легаси улучшать.
> Тяжело осознавать свою дебильность.
Действительно, нормально написать ума не было? В какой области? В мухосранске или в области твоих знаний или что?
@
ВЕСЬ ДЕНЬ ПЫХТИШЬ, ДЕБАЖИШЬ, ПЫТАЕШЬСЯ РАЗОБРАТЬСЯ
@
ПОД КОНЕЦ ВСЁ ЗАРАБОТАЛО
@
КОММИТИШЬ
@
ВИДИШЬ, ЧТО ИЗМЕНЕНЫ 2 СТРОЧКИ И ЕЩЁ 2 ДОБАВЛЕНЫ
Как так то. Хорошо, что меня не по строчкам оценивают, но вот когда таску оценивают в пару дней, например, там закладывают шанс того, что она парой строчек решается, хоть и реально за пару дней?
Ну да, щас буду делать, или может посплю и с утра сделаю, не люблю режим сбивать. Ебать я долбоёб.
Ну ты представь сколько строчек тестов надо написать под твою мелкую правку и упади в обморок
Но ведь не будет написано ни строчки. На проекте нет тестирования. Не, может я должен их писать, но я не буду и никто не пишет. Если начну тратить время на тесты, меня не поймут, да и я не понимаю, зачем они нужны.
Это норма, и у сеньоров такая хуйня бывает.
>Если начну тратить время на тесты, меня не поймут, да и я не понимаю, зачем они нужны.
Нужны, чтобы такого не было:
>ВЕСЬ ДЕНЬ ПЫХТИШЬ, ДЕБАЖИШЬ, ПЫТАЕШЬСЯ РАЗОБРАТЬСЯ
>@
>ВИДИШЬ, ЧТО ИЗМЕНЕНЫ 2 СТРОЧКИ И ЕЩЁ 2 ДОБАВЛЕНЫ
Ага, особенно когда бизнес спускает так много тасок, что не то что тесты - рефакторить не успеваешь.
>Мотейте на ус)
а че мотать. во юрист.
работал адвокатом. приходилось самому платить взносы работодател.
10к в мес. ничего не зарабатывал.
у бабушки деньги просил на вызносы и еду
Просто сразу на уровень выше откликайся, в чём проблема? Есть подозрение, что ты перерос контору и апнул уровень - даже если ты не прав, исходи из того, что прав.
А в чем бугурт? Тебе платят не за количество строк кода, а за функционал.
Это стандартная ситуация, основная сложность в багах это установить причину, а сам фикс может вообще включать изменение конфига, например
> А в чем бугурт?
В том, что визуального удовлетворения нет. Если надо что-то сверстать с нуля, например, то там и хтмл и цсс и жс, всё видно, ко всему ты руку приложил и всё работает - а тут таска более сложная, решил её, всё заработало, а внешне выглядит так, будто за 5 минут что-то набросал, а не сидел и вникал.
Тебя не должно это волновать, если ты настоящий профессионал, главное, что решена проблема.
То что тебя это беспокоит говорит о том, что ты недавно начал работать. Как ни парадоксально, чем выше твой скилл, тем меньше кода ты по факту пишешь.
Чаще всего разные inital commitы, в которых дофига кода, не несут в себе практически никакой смысловой нагрузки.
Такое как раз можно посадить делать ждуна, что бы он порадовался и себя почувствовал значимым
Иди поебись со статикошизом уже, заебал.
Нормальные тесты пишутся только с одной целью - дать тебе метод, следуя которому, ты будешь уверен, что твой код работает. Никакому бизнесу не нужен неработающий код, поэтому аргумент "менеджер запрещает мне писать тесты" - это абсолютная дичайшая глупость и непонимание базовых вещей.
Конечно не нужен, и для этого есть тестировщики, которые руками прокликают быстрее, чем программист напишет тест.
Не прокликают и не быстрее. Тестировщик в принципе не может "прокликать" большую часть логики, а уж говорить, что автоматический тест, который ты к тому же можешь выполнить в любой момент времени, медленее ручного тестирования - это уже шиза какая-то.
@
ДЕЛАЕШЬ ЗА ПОЛЧАСА
@
ТАСКА ОЦЕНЕНА В 5 ЧАСОВ
@
ЗАПОТЕЛ И УЛОЖИЛСЯ В 5 ЧАСОВ
@
ТАСКА ОЦЕНЕНА В 10 ЧАСОВ
@
15 ЧАСОВ НЕ ПРЕДЕЛ
это даже не галера и это не айти, стоило корячиться и вкатываться чтобы заниматься такой хуетой
200 ок { "code": 415, "message": "лучше это, чем те статикодинамикодолбоёбы" }
Зато ищу баги - отдыхаю от тасочек.
500 Internal Server Error {"error_code": "error", "error_message": "Укажите дату рождения"}
500 Internal Server Error {"error_code": "text/html", "error_message": "<!doctype html><html>..."}
@
НЕ ЗНАЮ ПОКА
@
НУ ПРИМЕРНО
@
НУ ДНЯ ДВА
@
ЧЕТ МНОГО ДАВАЙ ЗА НАНОСЕК
> АНОННЕЙМ СКОЛЬКО ВРЕМЕНИ ПОНАДОБИТСЯ НА ГЕНЕРАТОР ГОВНА
> @
А ХРЕН ЕГО ЗНАЕТ
Когда-нибудь я научусь определять количество времени на таску, вотувидити. Пока что могу только вёрстку оценивать. В вёрстке осинения кончились, а в программировании осинение может сэкономить кучу времени, а может и не появиться..
ДОЛЖНО БЫТЬ ПРОСТО, ЗДЕСЬ ВЕДЬ ВСЕГО ЛИШЬ НАДО ВЗЯТЬ УЖЕ ГОТОВУЮ ПУПУ, И СДЕЛАТЬ ИЗ НЕЁ ЛУПУ
А итоге получилось что?
Сам такое не раз проварачивал. Раз вообще пол года сидел, разгребал асинхронные макароны, даже должность сделали аналитик, тут нужны седые яица и железная жопа.
вот этот шарит, по классике в error_code вообще может быть все что угодно: 1 "1488", { code: "1", description: "one" }, "{ \"errorCoDe\": 2.99999998}", [1, "OSHIBKA ZAPROSA"]
Пфффф, детский сад. Пару дней назад додебажился до того, что оказалось, что это известная бага в хромиуме, связанная с WebRTC. Тупо в тикет ссылку на багу кинул и пошёл пить чай.
БАНКОВСКАЯ АПИ ДОЛЖНА ОТВЕЧАТЬ НА ТВОЙ ЗАПРОС ОБРАТНЫМ ВЫЗОВОМ
@
ОШИБОК ВАЛИДАЦИИ НЕТ, ОШИБОК БИЗНЕС-ЛОГИКИ НЕТ, КИДАЕТ ЛИБО НИЧЕГО И НИКОГДА(ТУПО НЕТ ОБРАТНОГО ВЫЗОВА), ЛИБО ОТКАЗ В СЛУЧАЕ ХОТЬ СКОЛЬКО-ЛИБО НЕВЕРНОГО ЗАПРОСА БЕЗ ОБЪЯСНЕНИЯ ПРИЧИН
бля просто пиздец
У нас после такого добавляют сообщения пользователю «атата, не делай так плес», типа починил
@
СЫЧЁВ, КАКОГО ХУЯ ДАННЫЕ ДЛЯ ОТДЕЛА АНАЛИТИКОВ НЕ ГОТОВЫ?
@
НИЧЕГО НЕ МОГУ ПОДЕЛАТЬ, НА ОБЛАЧНОМ ИНСТАНСЕ НА ДИСКЕ ЗАКОНЧИЛИСЬ АЙНОДЫ, ВАШИ ДАННЫЕ ПОПРОСТУ НЕКУДА ЛОЖИТЬ. ПИНАЙТЕ ОПСОВ
@
ОБРАЩАЮТСЯ К НАЧАЛЬНИКУ ОПСОВ
@
УВАЖАЕМЫЙ ЕВГРАФ ЕРОХОВИЧ, ПРОКОНТРОЛИРУЙТЕ ВОПРОС С ДИСКОМ, ПОЖАЛУЙСТА
@
ДА-ДА, ЛИЧНО ПРОКОНТРОЛИРУЮ
@
НА СЛЕДУЮЩИЙ ДЕНЬ
@
СЫЧЁВ, ПИДАРАСИНА ТЫ ТУПАЯ, КАКОГО БЛЯДЬ ХУЯ ДАННЫЕ ДЛЯ ОТДЕЛА АНАЛИТИКОВ НЕ ГОТОВЫ?
@
ТАК ДИСКА НЕТ
@
ЕВГРАФ ЕРОХОВИЧ?..
@
ДА-ДА, ЛИЧНО ПРОКОНРОЛИРУЮ
@
ХОРОШО, СЛЕДУЮЩИЙ ВОПРОС
@
ТЫ НА ЖОПНОЙ ТЯГЕ УЛЕТАЕШЬ НА МАРС ДЕЛАТЬ СЕЛФИ НА OPPORTUNITY
@
ЗАКРЫЛ ЕЁ В НАЧАЛЕ ЧЕТВЕРГА
@
ХММ, КОММИТИТЬ ИЛИ НЕ КОММИТИТЬ, ВОТ В ЧЁМ ВОПРОС
@
ЕЩЁ НЕМНОГО ОТЛАДИТЬ НАДО, ПОЖАЛУЙ
@
ДОБАВЛЯЕШЬ ИВЕНТЫ, ЗАПУСКАЕШЬ ПРИЛОЖЕНИЕ
@
Component '*' re-registered direct event 'topError' as a bubbling event
@
ТВОИ ИВЕНТЫ НЕ НАЗЫВАЮТСЯ topError, ХУЙ ЗНАЕТ ЧТО ЕМУ НАДО
@
ГУГОЛ И СТЭКОВЕРФЛОУ МОЛЧАТ, ВЕРНЕЕ ЕСТЬ 2.5 ТРЕДА, ГДЕ НЕТ ОТВЕТОВ
@
КАКОЕ ЖЕ ГОВНИЩЕ ЭТОТ RN. ПРИХОДИТСЯ РАБОТАТЬ НА НЁМ УЖЕ БОЛЬШЕ ГОДА И КАЖДЫЙ РАЗ Я УБЕЖДАЮСЬ, КАКОЕ ЭТО ГОВНО. НИ НОРМАЛЬНОЙ ДОКУМЕНТАЦИИ, НИ СТАБИЛЬНОСТИ, НИ АДЕКВАТНЫХ ЭРРОР МЕСАДЖЕЙ
@
А КЛИЕНТЫ КАК НА ПОДБОР - ХОЧУ RN, ХОЧУ СЭКОНОМИТЬ, ПОХУЙ ЧТО ПОЛУЧИТСЯ ГОВНОПРИЛОЖЕНИЕ
> НА ОБЛАЧНОМ ИНСТАНСЕ НА ДИСКЕ ЗАКОНЧИЛИСЬ АЙНОДЫ
> ЕВГРАФ ЕРОХОВИЧ
Молодца! (получи 15 сторипойнтс)
Баттхёрт не про сторипоинты (это что такое вообще?), а про то, что, как ты где-то ошибаешься, так на тебя всех собак спускают и устраивают публичную казнь на ёбаном стендапе, а как выясняется, что это не ты виноват, все такие хи-хи-хи, проконтролируем, взял на карандаш, обсудили, следующий вопрос, пожалуйста.
Есть сейм
Если тебя не за твои проебы кроют хуями, еще и публично, то нахуй ты там работаешь?
По твоему бугурту нет впечатления, что спустили всех собак. Просто спросили же. А ты ответил. Или они прямо орать начали?
Я перефразирую, конечно, да и сказать дословно "пидарасина тупая" по-английски будет сложно, но всё равно осадочек остался.
У меня начальник даже asshole стесняется сказать шёпотом говорит и извиняется потом по отношению кого-то, кто теоретически может забидить более высокий spot price и таким образом спиздить у нас EC2 инстансы
Gay это гей, faggot это педик
Пидорасина и хуесос не значит что субъект - заднеприводный, это значит что он пидор в том смысле что хуже червя-пидора уже нет
Это свободная страна
Ну всё правильно, gay - нейтральное слово, faggot - унизительное. Ровно так же как в русском
> Пидорасина и хуесос не значит что субъект - заднеприводный, это значит что он пидор в том смысле что хуже червя-пидора уже нет
Ровно так это слово и используют на форчане
Двачую. Stewardess, waitress
> Как статическая типизация позволит уберечься от вызова
estimateDickWeight(150, 40), если ты в миллиметрах указал размеры, а не в сантиметрах? Потому что в медицинских анкетах указывают в мм, а на сайтах знакомств в см, вот и перепутал, нормальная история. Будешь декларировать свой тип "сантиметр", отображаемый на double?
Я не он, но если нужны единицы измерения, то можно просто написать dsl под это дело и передавать tuples а не числа:
{150,:cm}
Соответственно операции сложения, вычитания и оценки будут не с числами, а с кортежами. Отсюда идет сразу же проверка корректности кода, потому что залетные числа тупо не смогут вызвать функцию.
> Или надо декларировать типы вроде HumanDickWidth
Почему нет-то, лол? Ты же Point - декларируешь. Vector - декларируешь. Matrix - декларируешь. Color - декларируешь. Чем хуй-то должен принципиально отличаться?
> Будешь декларировать свой тип "сантиметр", отображаемый на double?
Почему нет?
Блядь, ну серьезно. Будто объявление своего типа это пиздец какая дорогая и сложная операция, которая требует пиздецких усилий. Ебучий Кармак в движке дума для всего типов понапоределял и норм, а тут анон боится длине хуя дать тип.
Типов наплодить легко, сложно потом все это развивать, сопровождать и рефакторить. Типичная статикоманька на этом этапе обсирается, или добавляет новый цвет для расскраски анусов месяц
Статикоманька нихуя не делает, статикоманька входит в процесс с положительной обратной связью и начинает добавлять тикеты, закрывать их, от чего образуются новые тикеты. Статикоманьке поебать на проект, потому что самое важное в мире - это чтобы иде красненьким подчеркивало
Если надо действительно решить задачу - это к питонистам если на беке, и к жсерам если на фронте. Остальные тупо паразиты, вкатившиеся на волне хайпа.
>Почему нет?
Потому что ты теряешь ту самую строгость, в мейнстрим языках нет настолько строгих компиляторов, и у тебя можно делать операции над любыми двумя даблами, миллиметрами и киллограмами например
Придется пилить собственный тип—враппер. В жаве от этого проебутся операторы, а в крестах будешь платить памятью
> см
Что мешает опечататься в мм. Особенно когда в опенспейсе стоит ор бодрых проект-менеджеров и шутливых аналитиков.
Elixir чи шо?
Ну кстати да. Статикояпы разве что для mission critical зайдут, в остальном решают TDD и валидаторы схем на все данные, которые поступают снаружи.
Так тебя компилятор в пизду пошлет, если мм не предусмотрены.
Вот тут разобрано по частям))
https://kieranpotts.com/rebranding-rest/
Становись техническим менеджером. У тебя же хорошо получается проект до ума доводить. Остальное всё куда-нибудь спихивай на гуманитариев.
https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
> 2008
Это его рест не рест. Понятия меняются со временем, и сейчас под рестом понимают
1. ВСЁ ЗАПРОСЫ POST
2. В ОТВЕТЕ ВСЕГДА СТАТУС 200
3. ПРИ ОШИБКАХ СТАТУС 200 И В ТЕЛЕ ВНУТРЕННИЙ КОД ОШИБКИ И ТЕКСТ СООБЩЕНИЯ
4. РУЧКИ ВЫГЛЯДЯТ КАК /СЕРВИС_НЕЙМ/ПРОЦЕДУРА_НЕЙМ
если в ручке процедуранейм это уже не ресурс
@
КАЖДЫЕ ПОЛ ГОДА ПИШЕШЬ ХЕЛЛОУ ВОРЛД
@
РАЗ В ГОД ПЫТАЕШЬСЯ СОЗДАТЬ ЙОБУ ОБ КОТОРУЮ ЛОМАЕШЬ ЗУБЫ И ВОЛЮ
@
БЛЯТЬ ДА КАК ВКАТИТЬСЯ
Я так плюсы несколько лет мариновал, в результате вкатился за полгода в жабу.
Какой же долбоебский синтаксис в эликсире. За do и двор стреляю в упор.
Да знаю. Думал что ниибацца крутой и все понимаю. Теперь же буду методично жрать книжку от корки до корки, обмазываться примерами, а потом уже велосипеды и костыли своим изобретать.
Тут даже не в книге дело, а в навыках декомпозиции. Без разложения ёбы до микроёб дело не сдвинется
Ты прав абсолютно, но раньше казалось все таким простым и понятным. Тут ебануть так, там ебануть сяк, и это вот друг с другом работает так. А потом начинаешь усложнять, усложнять, усложнять, и нихуя не понимаешь что как вообще работает. Тут и клин код писать, и документацию по ходу собирать для себя же, эксепшены ловить по человечески.
>единственное что подходит под определение REST это сам World Wide Web, сама всемирная паутина
Но ведь она хранит состояние каждого твоего пука
>1. ВСЁ ЗАПРОСЫ POST
>2. В ОТВЕТЕ ВСЕГДА СТАТУС 200
>3. ПРИ ОШИБКАХ СТАТУС 200 И В ТЕЛЕ ВНУТРЕННИЙ КОД ОШИБКИ И ТЕКСТ СООБЩЕНИЯ
>4. РУЧКИ ВЫГЛЯДЯТ КАК /СЕРВИС_НЕЙМ/ПРОЦЕДУРА_НЕЙМ
5. ОСТАЁТСЯ 5 ЛЕТ ДО ИЗОБРЕТЕНИЯ JSON-RPC
>РАЗ В ГОД ПЫТАЕШЬСЯ СОЗДАТЬ ЙОБУ ОБ КОТОРУЮ ЛОМАЕШЬ ЗУБЫ И ВОЛЮ
>@
>БЛЯТЬ ДА КАК ВКАТИТЬСЯ
Это сигнал что кодинг - не твоё. Таких как ты большинство, не переживай.
rest все-таки удобнее.
@
КОМПАНИЯ ВЫГЛЯДИТ ОЧЕНЬ СОЛИДНО, ОФИС КРУТОЙ
@
ДОРАХА БАХАТА
@
НА РАБОТЕ ВЫДАЮТ АЙМАК ПРОСТО ПОТОМУ ЧТО СТИЛЬНО
@
РАБОТАЕМ ПО СКРАМУ ХУЯМУ НА САМОПИСНОМ БОЖЕСТВЕННОМ PHALCON
@
ВЫСОКИЕ ТРЕБОВАНИЯ НА ЖУНА
@
ПЛАТЯТ 80К+, ДАЖЕ САМЫМ ЕБАНЫМ ЮНЯМ 80К ДАЮТ.
@
УСТРАИВАЕШЬСЯ, ПРОХОДИШЬ
@
ТЕСТЫ ХУЙНЯ ПОКРЫТО ИМИ НИХУЯ
@
ГОВНОКОД
@
ОЧЕРЕДИ НАПИСАННЫЕ НА REDIS ВМЕСТО ПРАВОСЛАВНОГО КАФКИ
@
ОБОССАННЫЙ САМОПИСНЫЙ DSL НА ОСНОВЕ JSON.
@
ФРОНТЕНД НА BOOTSTRAP4+JQUERY
@
GULP
@
ЕБАНЫЕ САМОПИСНЫЕ МИГРАЦИИ С .SQL ФАЙЛАМИ. В ОТДЕЛЬНОМ РЕПОЗИТОРИИ.
@
НЕСМОТРЯ НА ДОКЕР РАЗВОРАЧИВАЕШЬ ПРОЕКТ 5 ЧАСОВ
@
100500 СКРИПТОВ НА ПХП СДЕЛАННЫХ ЗАПУСКАЕМЫХ ИЗ КРОНА
@
PHPDAEMON
@
PTHREAD
@
КОМПАНИЯ ВЫГЛЯДИТ ОЧЕНЬ СОЛИДНО, ОФИС КРУТОЙ
@
ДОРАХА БАХАТА
@
НА РАБОТЕ ВЫДАЮТ АЙМАК ПРОСТО ПОТОМУ ЧТО СТИЛЬНО
@
РАБОТАЕМ ПО СКРАМУ ХУЯМУ НА САМОПИСНОМ БОЖЕСТВЕННОМ PHALCON
@
ВЫСОКИЕ ТРЕБОВАНИЯ НА ЖУНА
@
ПЛАТЯТ 80К+, ДАЖЕ САМЫМ ЕБАНЫМ ЮНЯМ 80К ДАЮТ.
@
УСТРАИВАЕШЬСЯ, ПРОХОДИШЬ
@
ТЕСТЫ ХУЙНЯ ПОКРЫТО ИМИ НИХУЯ
@
ГОВНОКОД
@
ОЧЕРЕДИ НАПИСАННЫЕ НА REDIS ВМЕСТО ПРАВОСЛАВНОГО КАФКИ
@
ОБОССАННЫЙ САМОПИСНЫЙ DSL НА ОСНОВЕ JSON.
@
ФРОНТЕНД НА BOOTSTRAP4+JQUERY
@
GULP
@
ЕБАНЫЕ САМОПИСНЫЕ МИГРАЦИИ С .SQL ФАЙЛАМИ. В ОТДЕЛЬНОМ РЕПОЗИТОРИИ.
@
НЕСМОТРЯ НА ДОКЕР РАЗВОРАЧИВАЕШЬ ПРОЕКТ 5 ЧАСОВ
@
100500 СКРИПТОВ НА ПХП СДЕЛАННЫХ ЗАПУСКАЕМЫХ ИЗ КРОНА
@
PHPDAEMON
@
PTHREAD
Error in plugin 'gulp-uglify': JS6 is too modern, suck dick
Миграции должны лежать вместе с беком и автоматически запускаться при старте аппликухи, очевидно же
А что тебя так удивило?
>КОМПАНИЯ ВЫГЛЯДИТ ОЧЕНЬ СОЛИДНО, ОФИС КРУТОЙ
>НА РАБОТЕ ВЫДАЮТ АЙМАК ПРОСТО ПОТОМУ ЧТО СТИЛЬНО
>РАБОТАЕМ ПО СКРАМУ ХУЯМУ
>ПЛАТЯТ 80К+, ДАЖЕ САМЫМ ЕБАНЫМ ЮНЯМ 80К ДАЮТ.
типикал аутсорс компания
>ТЕСТЫ ХУЙНЯ ПОКРЫТО ИМИ НИХУЯ
>ГОВНОКОД
>прочее легаси и говнокод...
Так аутсорс на то и аутсорс что ты работаешь иногда с новыми проектами с нуля, а иногда и ебаным легаси 2010 года, в котором нужно копаться и собирать по 3 часа. НЕ нравится - пиздуй в продуктовую компанию, только там зп раза в 2 меньше и консервироваться ты будешь только в 1 проекте.
Осспаде, очередной глиномес в подвернутых джинсах, котому кафку и кубернетес не дали. Ууууу говнокодеры.
>типикал аутсорс компания
Ты жопой читал. Во-первых, компания буквально продуктовая с буквально одним проектом на самописном движке. И там проблема не столько в легаси, сколько в велосипедной тяге. То что можно было просто взять готовое решили написать.
И как бы я типа и бомблю с того что велосипеды костыльные пишем. Есть у прод разработчиков такая особенность, народ очень любит код писать. Вот блять сука этого не отнимишь. Хлебом не корми дай код пописать. Поэтому хуярят свои движки свои рантаймы(вроде facebook и их hack), или свои компиляторы смешные kPHP.
Ещё и код используют с БУКВАЛЬНОЙ еблей с позикс тредами.
Такова жизнь блять. Просто надо признать, что аутсорс программисты ЛЮБЯТ ПИСАТЬ КОД.
Ну код писать народ любит, понимашь? Вот скучно людям, хотят они код писать. А я до этого работал в аутсорсе, там наоборот хотят взять какую-нибудь пизду с гитхаба и доделать а не хуярить с нуля.
> НЕ нравится - пиздуй в продуктовую компанию, только там зп раза в 2 меньше
Это в ДСах так? У нас в мухосрани на 300к людей считается что 50к для джуна без опыта это по-божески отсыпали. Моя первая работа на ПХП вообще была за 40к, но это до ковидлы было, с ковидлой зарплаты проросли пиздец. Народ попёрся в удалёнку, перестал идти на галеры.
Ну как бы да, кафку не дали, написали смешные очередя на редиске.
>аутсорс программисты ЛЮБЯТ ПИСАТЬ КОД.
>работал в аутсорсе, там наоборот хотят взять какую-нибудь пизду с гитхаба и доделать а не хуярить с нуля
Ты только что взаимоисключающие параграфы.
> но это до ковидлы было, с ковидлой зарплаты проросли пиздец.
Хотеть. Мне даже не проиндексировали.
>РЯЯЯЯЯ ВСЕГДА НУЖНО РАССЧИТЫВАТЬ НА ХАЙЛОАД
>делают для ООО "Жопов и Говнов", которое загнется через полгода
> ГРИНТЕКСТ
Очерёдность пуков не нужно хранить чтобы показать тебе страничку. Сравни с протоколом например майнкрафта, все эвенты нужно словить и проиграть в мире чтобы получить актуальное состояние.
делаем на редисе, потому что проще всего
@
Жопов и Говнов закрываются через полгода
@
не по причине использования редиса
@
как и планировалось
@
антибугурт
О, бугурт по теме треда.
Jfj
Ох блядь, люто двачую
СОБЕСЕДОВАНИЕ:
@
А НАПИШИТЕ ВСЕ АЛГОРИТМЫ КОТОРЫЕ ЗНАЕТЕ
@
А РАЗВЕРНИТЕ-КА МНЕ БИНАРНОЕ ДЕРЕВО
@
А ЕСЛИ ВОТ ТАК СДЕЛАТЬ: (КУСОК КОДА КОТОРЫЙ НЕ ПРИДЕТ В ГОЛОВУ НАПИСАТЬ ДАЖЕ БОЛЬНОМУ ШИЗОФРЕНИЕЙ КОПРОФИЛУ-САДИСТУ) ТО ЧТО ОНО В КОНСОЛЬ ВЫВЕДЕТ, М?
@
А НАПИШИТЕ-КА МНЕ НА ЛИСТОЧКЕ ГУГЛ СО ВСТРОЕННЫМ ТВИЧОМ И НЕЙРОСЕТЬЮ КОТОРАЯ ГЕНЕРИРУЕТ ВЫПУСКИ С УЧАСТИЕМ НОВЫХ РУССКИХ БАБОК ИЗ АНШЛАГА
@
ВОТ ВАМ ПАКЕТИК С АТОМАМИ, ДАЮ ВАМ ПОЛЧАСА ЧТОБЫ СОБРАТЬ ИЗ НИХ ПРОЦЕССОР.
@
РАБОТА:
@
СЫЧ, ТАМ ТЕТЯ СРАКА ЗВОНИЛА, КОТОРОЙ МЫ 5 ЛЕТ НАЗАД САЙТ ПО ПРОДАЖЕ ДЕРЕВЯННЫХ ЗАЛУП СДЕЛАЛИ, НУЖНО ИЗ КРАСНОЙ КВАДРАТНОЙ КНОПКИ СДЕЛАТЬ ЗЕЛЕНУЮ И КРУГЛУЮ, ЗА НЕДЕЛЬКУ УПРАВИШЬСЯ?
>Ты жопой читал. Во-первых, компания буквально продуктовая с буквально одним проектом на самописном движке.
Ты ни слова об этом не написал, тут все угадывать должны что ли?
>И там проблема не столько в легаси, сколько в велосипедной тяге
>И как бы я типа и бомблю с того что велосипеды костыльные пишем.
> Поэтому хуярят свои движки свои рантаймы(вроде facebook и их hack), или свои компиляторы смешные kPHP.
Ещё и код используют с БУКВАЛЬНОЙ еблей с позикс тредами.
Да, это хуево. А ты пробовал это донести? Как аргументирует сию вакханалию тимлид? Такой треш мог произойти только при полнейшем попустительстве всех.
>Это в ДСах так?
Нет, везде. В аутсорсе всегда и везде больше денег, чем в продакте (бабла удается сгребать больше с суммарно 20+ проектов у ~20 заказчиков, чем с одного своего, исключения типа убера\яндекс\нетфликса я не считаю).
>А РАЗВЕРНИТЕ-КА МНЕ БИНАРНОЕ ДЕРЕВО
Имею более 5 лет опыта работы, ниразу эту хуйня не пригодилась, даже не поясню толком что это. Из-за чего такой фетиш на этот вопрос на собесах, если дальше теории на бумажке это не уходит?
ну ты же типо не быдло, все алгоритмы наизусть знаешь, интеграл от четырех берешь, не то что эти ваши новомодные технологии
моя позиция: работодатели просто ищут лишний повод выебать разработчика, вот и все
зубрить алгоритмы перед собеседование и не ныть, но помнить, что тебя наебывают изначально
хотя меня, как почти мидла не распрашивали про алгоритмы на последних собесах, вопросы в основном касаемо архитектуры. Так что я думаю это фильтр на говно-работодателя.
Дали баг
а
Пытаешься зарепродьюсить
а
пытаешься
а
пытаешься
а
забиваешь болт, в конце спринта помечаешь его как NOT REPRODUCIBLE
а
антибугурт
и вот еще вам
дали баг
а
фиксишь быстро, часа за 2
а
включаешь хитрожопость, делаешь вид, что работаешь над ним 2 последующих дня
а
в конце спринта говоришь, что с трудом исправил, потратив 2 дня
а
тебя хвалят
а
антибугуртень
Надо попробовать, но совесть заест. Я и так баги фикшу по 4-8 часов, когда другие фиксят за 2-4.
КАКОГО ХУЯ БЛЯТЬ?
Сразу дропай нахуй
Тебе, очевидно, нельзя пробовать такое. Вот если бы ты фиксил быстрее других, тогда да
Когда нет дедлайнов можно не работать. Ни один кабан такое не примет.
Но и по ночам работать такое себе - потом продуктивность в ноль падает.
А размеренно выстроить работу наши "эффективные" менеджеры не могут. Они только пожары тушат, которые сами создают
Лолнет
От меня только фотку на аватар поставить попросили, а так я даже собесы все проходил без вебки. Специально купил вебку для собесов, а в итоге вот так получилось.
Беги из этой хуйни, таймтрекеры тоже красный флаг очевидный
>в какой-то момент понял что это все хуита и перешел в чистый net
Если бы ты всё понял, ты бы с дуднета ушёл.
Охлол, бегN оттуда.
ЗА такое можно припугнуть буквой закона, лол
это даже не боевая картинка, пирожочек. ты просто прикрепил картинку, будто с таким лицом цитируешь меня
> это даже не боевая картинка, пирожочек. ты просто прикрепил картинку, будто с таким лицом цитируешь меня
Пидорахоконторы понятие интернациональное
Вероятно тут нужно перестроить дерево так, чтобы оно было в обратном порядке. В структурах данных чаще деревьям балансировка нужна, чтобы все ветки были примерно одной длины.
Тестировщик быстрее в 2-3 раза прокликает и проверит чем автотест будет писаться - это факт, но тут суть в том, что проверять часть системы нужно не один раз, а в идеале перед каждым релизом (а то и коммитом). Когда мы выходим на перепроверку одного и того же места 3+ раз, то автотесты начинают выигрывать время и чем дольше продукт живет тем выигрыш все больше и больше. Без тестов любая система рано или поздно скатывается в сложноподдерживаемое УГ где для добавления простой фичи нужно день + неделя-две на багфиксы всех мест, которые внезапно отвалятся
Вы видите копию треда, сохраненную 20 июня 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.