Люблю делать UI и офисные приложения
Information
- Rating
- 1,409-th
- Location
- Россия
- Registered
- Activity
Specialization
Software Developer, Application Developer
HTML
CSS
JavaScript
Windows API
C++
UI/UX design
Interface development
Product Design
Adobe Photoshop
Designing interfaces
Объявляешь конкурс: «Надо улучшить перфоманс на 5%, ибо настолько он отстаёт от Си».
Обещаешь 20К.
Все разносят новость, что Rust всего на 5% медленнее Си.
С большой долей вероятности ничего не платишь конкурсантам (ибо сделать это, ИМХО, очень трудно).
Ничего не платишь за рекламу.
???????
ПРОФИТ!
Грустно, девицы ( Я на его основе делал контекстный автокомплит.
Ожидания:
Реальность:
Очень хорошая статья. Ёмко, по делу, и с разбором нюансов. Точно лучше, чем официальная the Book ))
Случилось самое страшное, что может случиться… (Пардон).
Дело Лоренца живёт )
Дал DOJ себя выгнать, и всё покатилось, вся наша айти. Не забудем, не простим.
P.S. Иногда полезно вместо
<template>…</template>
оформлять шаблон как<div class="template">…</div>
(.template { display: none; }
), чтобы этот шаблон перед инстанцированием можно было гибко настраивать не парся строку (<template>…</template>
это просто строка, лишённая всякой семантики), а пользуясь встроенными в браузер средствами доступа (селекторами).А теперь представьте, что этот адаптивный компонент (зависимый от размера шрифта у пользователя за счёт использования
rem
) надо поместить в неадаптивное окружение (не зависящее от размера шрифта). Чтобы не было такого, что рядом два компонента, и один компонент при увеличении шрифта увеличивается, а второй — нет. А всё спрятано в shadow DOM.Чтобы решить эту проблему «компонентным» способом, по-хорошему при проектировании компонента вам нужно предусмотреть режим «адаптивный/пиксельный» (или явно, или в форме CSS-переменных). Но в девяти с половиной случаях из 10 это никому не нужно, и поэтому не делается. А в десятом вы приплыли.
И начинаются пляски с инъектированием CSS, либо через аппендинг
<style>
(что в общем случае невозможно без знания жизненного цикла элемента), либо черезnew CSSStyleSheet
, а там свои подводные приколы. Главное, что только через JS. В то время как если писать неизолированный код, достаточно специально созданного для таких случаев нативного!important
.Настоящая проблема в том, что HTML не поддерживает полноценную шаблонизацию. И для шаблонизации начинают использовать Джаваскрипт. Один .js-файл можно подключить к двум разным проектам, и не придётся копипастить
<h1>Santa's List</h1>
в код страницы и туда, и туда. Только вот Джаваскрипт не был предусмотрен для хранения структуры, и вы в придачу получаете кучу проблем. Например, внутри «Santa's List» можно спрятать зловредный код, и скрыть его от показа в редакторе при помощи вот таких техник. Если бы структура задавалась только в файле с разметкой, можно было бы проконтролировать отсутствие в неё скриптов (точки входа ведь известны — атрибуты обработчиков и скриптовый тег). Локализовать (делать локальные версии под разные языки) такой код, особенно если активно используется интерполяция — то ещё удовольствие. И так далее, и так далее.Лично я для реюзабельности давно пришёл к внешней шаблонизации (раз уж внутреннюю не завезли). То есть, файлы с HTML-шаблоном
<template>…</template>
идут в комплекте со скриптами и стилями, и подставляются при сборке конкретного проекта. А набор таких файлов при локализации проекта можно как одно целое отдать переводчику.И это только два примера навскидку!
Я бы сказал, что компоненты в нынешнем виде — вообще плохо продуманная технология, минусы вы соберёте все, а плюсы, которые мог бы дать только компонентный подход, не поддерживаются. Пример такого «плюса»: чисто вспомогательные вещи типа отрисовки рамки выделения можно было бы делать на лету, из
onpaint
, чтобы не создавать и не модифицировать левые узлы в DOM (во-первых, это ненужная нагрузка на браузер, особенно с учётом уровней перерисовки, во-вторых — это редкий пример, когда императивный код выразительнее, чем декларативный — представьте, какое удовольствие писать инверсную рамку выделения на HTML/CSS). Но этого-то как раз и нельзя.Мне этого не понять, извините. Если искать из адресной строки, то каждый введённый URL ведь будет проходить через поисковый сервис, не так ли? А даже если временно и не так, я не хочу разбираться и отслеживать в каждой версии, не стало ли оно, наконец, так. Для ввода URL есть поле ввода URL, для поиска — поле ввода поискового запроса, для браузинга есть нормальный браузер, а не браузерный продукт с подсластителем и загустителем, а для этого браузера есть расширение Context Search, которое выделенный фрагмент отправляет в любой из 12 поисковиков, которыми пользуюсь лично я (Google, Вики, MDN, Urban Dictionary, Forvo, YouTube и так далее). Вводить поисковый запрос руками благодаря этому аддону мне приходится крайне редко.
«Невидимая рука рынка», говорили они.
А кто-нибудь когда-нибудь нажимал эту кнопку? (Кроме как по приколу, типа: «Гугл, как бороться с зависимостью от азартных игр?»)
По определению. Если машина не реализует алгоритмы творческого мышления, она не сможет заменить человека в тех задачах, где оно нужно. А если реализует — она сама становится человеком. Мы же не расисты, правда? Нам же всё равно, белок или кремний?
Что эти алгоритмы собой представляют — пока неизвестно, хотя прогресс есть. Благодаря настоящим учёным (Докинзу с его меметикой, например), а не LLM'кам.
Благодарю (и плюсик в карму)!
У нас, видимо, разное понимание «императивщины». Для меня императивщиной было бы, если бы этот код был написан на for'ах и переменных (периодически вижу такое на всяких форумах).
Я вижу, мы с вами начали разговор не с той ноги.
Спасибо за ценные советы начинающему растеру (крастерианцу, или как там это слово читается). Если можете ещё что-то полезное сообщить, буду премного благодарен. Я не знал, что
#![allow(non_snake_case)]
добавляется один раз на крейт. На SO пишут, что “#![allow(non_snake_case)]
in the first line will apply the attribute to the entire file”, соответственно, я и решил, что это необходимо пихать в каждый файл. Рад слышать, что это не так. Я всегда радуюсь торжеству здравого смысла. Конечно, лучше всего было бы вообще не лезть в именование переменных, но если это, по крайней мере, можно отключить глобально, это хорошая новость.Если вы ещё расскажете, как зафорсить правило
brace_style = "AlwaysNextLine"
не переходя на ночной канал (сейчас я не знаю таких способов), будет совсем хорошо.И ещё заодно спрошу, может знаете: почему
brace_style = "AlwaysNextLine"
не применяется к паттерн-матчингу? Послеmatch
автоформаттер упорно убирает перенос.И ещё: какое правило отвечает за
? Это форматирование из документации, но форматтер периодически вытягивает запись в одну строку.
Заранее спасибо.
Что за поклёпы? НЕТ там никакого навязанного стиля. Авторы FCL (стандартной библиотеки) просто пишут единообразно, только и всего. Если вы будете писать иначе, чем они, компилятор не будет выдавать вам warning'и «Ты неправильно назвал переменную, что ты себе позволяешь!». И IDE там не построена вокруг встроенного в язык линтера (что в некоторых случаях выливается в буквальную невозможность отредактировать текст), хотя и язык, и IDE писала одна контора. Я такого насилия над кодером не припоминаю со времён ZX Spectrum 48. Очень жаль, что у зумеров нет опыта программирования на нём, а то живо научились бы свободу ценить.
Всю свою жизнь я работал в местах, где трудились умные люди. А умные люди всегда договорятся между собой сами. Любители snake_case с любителями camelCase в том числе. Вариантов мирного сосуществования много, рассказывать тут о них я, извините, не буду. Кто их не видит, обычно трудится в Макдональдсе с его униформой.
Ну так скопировали бы с C#, и не было бы дурацких споров каждый раз.
Вы удобно устроились: ВАМ нравится этот навязанный стиль, и теперь рассказываете другим, как он помогает победить дурацкие споры.
Так и выборы, получается, не нужны. Дурацкие споры какие-то каждый раз. А всё из-за того, что каждый раз находятся некоторые, которые почему-то не согласны.
А я первый раз вижу такой упячный стайлгайд. Поучились бы у Хейлсберга.
Чтобы не было этих дурацких споров, достаточно просто отделить линтер от стандарта языка. Устроили, понимаешь, армию. Всё должно быть покрашено зелёной красочкой и посыпано песком.
А я буду, буду, буду… гхм… ныть, потому что мне больно и обидно! (ц)
Я, правда, с Питоном дел не имел, зато сейчас вожусь c Растом. Ух, повбывав бы. Чтобы поставить
{
на новую строку, мне пришлось переходить на nightly-билды (!!!). Да, иначе там никак. А чтобы называть переменные в том стиле, как я сам хочу, нужна директива компилятору в каждом файле (!!!!).Если бы ещё и отступы навязали, я бы, наверно, просто взял другой язык. Жизнь слишком коротка, чтобы проводить её, злясь перед монитором.