Как стать автором
Обновить
0
0

.NET программист

Отправить сообщение

типа литерал это строка которую нельзя менять?

Здесь дело не в мутабельности литерального типа (в большинстве современных языков строковые литералы порождают иммутабельные объекты). В C++, к примеру:

const char* literalData = "Hello World!";

std::string myStringObject = literalData; // OK, implicit std::string ctor call

Но в Rust запрещены неявные преобразования типов, в том числе от литерала к String. Хочешь сконструировать объект другого типа? Вызови соответствующую фабрику: String::from или to_string трейта Display.

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

Когда в FF вкладки перестают влезать, панель вкладок начинает прокручиваться. А минимальный размер конфигурируется стандартными средствами.
Почему его должно быть больше? Это же обертки над API и всякие бутстраперы WASM-модулей, а логика делается на чем-то WASM-совместимом.
К примеру, у Yew (web_sys) бутстрапер в ~16Кб неминифицированного кода, благодаря чему хэлловорд в сборе выходит меньше размером, чем голый реакт.
на поставленные вопросы вы так и не ответили.

На все поставленные вами вопросы вроде бы ответил прямо или косвенно. Давайте еще раз:

Сколько итераций потратите на реализацию этой дизайнерской задумки?

Тут вы число ждали? Вслепую оценивать объем работ как-то странно.

Что делать с остальными 40%?

Искать более подходящий компонент или форкать имеющийся.

можно построить архитектуру так, чтобы:

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

Предлагается изменить внутреннее поведение компонента. Если так, то логичнее было бы его в самом деле форкнуть и наделить необходимым функционалом, а не патчить результат извне. Не факт, что будет дороже, но 100% — надежнее.

Форкать, вставлять костыли и поддерживать их при каждом обновлении?

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

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

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

За примерами можете посмотреть любой более-менее матёрый компонент.

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

Но зачем? Стилизация компонентов — ответственность самих компонентов, а возможная вариативность — это часть явного интерфейса компонента, которой в пропсах самое место. Да и то, не факт, что там нужны именно CSS-классы, а не флаги или другие высокоуровневые параметры.
Контринтуитивные правила приведения типов, баги, которые они вызывают и противостоящий им код (который параноидально явно приводит типы).
Сейчас есть гора костылей, любовно наслаиваемых десятками лет, от которых все с радостью бы избавились, если бы не обратная совместимость.
При обращении по невалидной ссылке уже сейчас JS умеет падать с TypeError, почему вдруг ошибка типа в выражении должна устраивать глобальную катастрофу с белым экраном?
А так — да, это позволило бы повысить качество.
Это никак не отменяет необходимость валидации данных между сервером и клиентом.

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

Всякие сложные штуки вроде google docs в расчет не берём, это совсем другая лига

Веб развивается, клиенты все жирнее. Поэтому игнорировать эту проблему чревато. Собственно, здесь и обсуждается WASM, как способ использовать более надежные технологии.

речь про всякие «Access violation reading location», которые переодически возникают.

Если считать это обращением к невалидному/нулевому указателю, то в подобном случае и выполнение JS-скрипта так же отпадает.
речь про UI, какая там бизнес логика?

У нас тут за окошком 2к21 с SPA и прочими serverless во фронтенде.

Там же и видно как это реализуется на практике – приложение закрывается целиком, предлагая отправить сообщение об ошибке.

Вот бы все браузеры падали с сообщением об ошибке, когда пользователь ошибся в домене)
Преимущество в том, что система работает непредсказуемо?)

пользователь увидит NaN

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

А в случае сильной типизации случится рантайм ошибка и сломается вообще всё.

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

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

JS все еще передается и компилируется из высокоуровневой текстовой формы. WASM компактнее и сразу готов к исполнению.

С поправкой на то, что WASM должен быть готов к исполнению JS (встроена стандартная библиотека, GC и т.п.).
В веб-фреймворках под WASM обычно реализованы обертки с интеропом под капотом, чтобы у пользователя не было нужды вылезать из привычной технологии. А тот же Razor для C# вовсе заточен на создание интерфейсов.
есть фреймворки типа реакта или вью, удобный процесс отладки, декларативно-реактивный подход

Blazor и Yew эксплуатируют React-подобный подход с XML-подобным синтаксисом и реактивностью. Первый из коробки отлаживается прямо в девтулзах хрома.

тайпскрипт, который устранил единственный js-ный недостаток — отсутствие типизации.

В рантайме типов нет, а слабость типизации все так же присутствует.
В чем проблема сделать новое браузерное API, если обратная совместимость нас не тянет? Это как раз тот случай, когда можно и нужно. Легаси продолжит использовать интероп, ибо и сам JS сразу никуда не планирует исчезать из браузеров.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Software Developer, Fullstack Developer
Senior
C#
Rust