Давайте знакомиться: меня зовут Анатолий Семятнёв, я и моя команда разрабатываем ПО для опорных сетей 5G в YADRO. В IT-сфере работаю давно, и мой опыт в основном связан с языком С: занимался Board Support Package (BSP) и драйверами, много работал с операционной системой QNX.
Рубрика «string»
Синтаксис, синглтон и смертельный ромб в С++: взгляд опытного разработчика на C
2024-12-05 в 11:14, admin, рубрики: default, explicit, string, виртуальное наследование, корутины, С++, с++ программирование, синглтон, синтаксисСобственный строковый тип на Rust
2023-09-18 в 13:00, admin, рубрики: ruvds_перевод, small string optimisation, string, строки, строковые типы, структуры данныхПисать компиляторы — моё хобби, ничего не могу с собой поделать. Поэтому я пишу и много парсеров. В программировании систем обычно лучше попытаться сделать память общей, чем использовать её многократно, поэтому мои типы AST обычно выглядят так.
pub enum Expr<'src> {
Int(u32)
Ident(&'src str),
// ...
}
Когда мы парсим идентификатор, то вместо копирования его названия в новую String
мы заимствуем его из входной исходной строки. Это позволяет избежать дополнительных распределений, дополнительного копирования и экономит слово на представлении данных. Компиляторы могут быть очень требовательны к памяти, поэтому стоит выбирать краткое представление.
Читать полностью »
Атака на String.hashCode: прообразы и коллизии
2022-08-13 в 18:00, admin, рубрики: collision, hash, hashCode, java, preimage, string, коллизия, ненормальное программирование, никто не читает теги, Программирование, прообраз, сезон java, хеш-кодКак-то раз мне понадобилось несколько наборов строк с коллизией по хеш-коду. То есть таких, чтобы значение String::hashCode()
совпадало для всех строк в наборе.
Блуждание по интернету не дало результатов, примеров было мало и все они довольно однообразны. Поиск по словарям подарил забавную пару "javascript's".hashCode() == "monocle".hashCode()
, но практической пользы не принёс. Полный перебор не рассматривался в виду скорой тепловой смерти вселенной.
Тот самый случай, когда проще сделать всё самому. Стандартная хеш-функция строки в Java считается криптографически нестойкой, так что знаний из школьного курса математики должно быть достаточно.
API, ради которых наконец-то стоит обновиться с Java 8. Часть 3
2021-04-24 в 14:10, admin, рубрики: java, java11, java14, java15, java16, java8, java9, jmh, log4j, logging, serializable, slf4j, stackwalker, Stream, stringКакие есть причины переходить на новые версии Java? Кто-то это сделает из-за новых языковых возможностей вроде выражений switch
, блоков текста или записей. Кому-то понадобятся новые интересные возможности вроде модулей или низкопаузных сборщиков мусора. Кто-то это сделает просто из-за того, что обновив версию Java, их программа станет быстрее и будет есть меньше памяти. Но есть ещё одна, не менее важная причина. Это новые API, которые позволят писать меньше кода и избежать траты времени на поиск нужной функциональности во внешних библиотеках. А в некоторых случаях сделают ваш код быстрее.
В предыдущих двух частях мы уже рассмотрели по 10 новых API, которые появились в Java 9 и более поздних версиях (часть 1, часть 2). Сегодня мы рассмотрим ещё 10.
Оптимизация строк в ClickHouse. Доклад Яндекса
2020-03-18 в 10:22, admin, рубрики: clickhouse, mysql, string, Администрирование баз данных, Блог компании Яндекс, высокая производительность, строки, типы данныхАналитическая СУБД ClickHouse обрабатывает множество разных строк, потребляя ресурсы. Для ускорения работы системы постоянно добавляются новые оптимизации. Разработчик ClickHouse Николай Кочетов рассказывает о строковом типе данных, в том числе о новом типе, LowCardinality, и объясняет, как можно ускорить работу со строками.
— Сначала давайте разберемся, как можно хранить строки.
Читать полностью »
JDK 9-JEP 280: конкатенация строк никогда больше не будет прежней
2019-03-22 в 10:48, admin, рубрики: concatenation, java, JDK 9, jep, performance, string, Блог компании OTUS. Онлайн-образование, ПрограммированиеИ снова здравствуйте. Как мы уже писали, на следующей неделе стартует новая группа обучения по курсу «Разработчик Java», по устоявшейся традиции делимся с вами переводом интересного материала по теме.
Начиная с JDK 9 конкатенация строк претерпела значительные изменения.
JEP 280 («Indify String Concatenation») был реализован в рамках JDK 9 и, в соответствии с разделом «Summary»: «Изменяет статическую последовательность байт-кода конкатенации строк, сгенерированную javac, для использования вызовов invokedynamic к функциям библиотеки JDK». Влияние, которое это оказывает на конкатенацию строк в Java, легче всего заметить, посмотрев на javap-вывод классов, использующих конкатенацию строк, которые скомпилированы в JDK до JDK 9 и после JDK 9.
Помогаем Queryable Provider разобраться с интерполированными строками
2019-03-03 в 18:32, admin, рубрики: .net, C#, dotnet, entity framework core, expression trees, interpolation, linq, linq2sql, string, ПрограммированиеТонкости Queryable Provider
Queryable Provider не справляется вот с этим:
var result = _context.Humans
.Select(x => $"Name: {x.Name} Age: {x.Age}")
.Where(x => x != "")
.ToList();
Он не справится с любым выражением, которое будет использовать интерполированную строку, но без трудностей разберет такое:
var result = _context.Humans
.Select(x => "Name " + x.Name + " Age " + x.Age)
.Where(x => x != "")
.ToList();
Особенно болезненно править баги после включение ClientEvaluation(исключениe при вычислении на клиенте), все профайлы автомаппера должны быть подвергнуты жесткому анализу, на поиск этой самой интерполяции. Давайте разберемся в чем дело и предложим свое решение проблемы
Всем привет! С момента выхода Java 11 прошли сутки, и вот уже наконец стали появляться первые обзоры релиза. Я же посвящу свою небольшую статью незаметному для официальных релизов и потому обделённому вниманием обновлению класса String, тем более, что оно не упоминается в официальной документации 11-й Java (я, во всяком случае, там информации об этом не нашёл).
Действительно, если мы заглянем в класс String, то среди множества знакомых нам методов мы найдём несколько, помеченных как "@since 11". И да, официально в Java они появились только вчера.
Читать полностью »
Конкатенация строк, или Патчим байткод
2018-07-07 в 18:53, admin, рубрики: bytecode, Dalvik, java, string, высокая производительностьНе так давно прочёл статью об оптимизации производительности Java-кода — в частности, конкатенации строк. В ней остался поднятым вопрос — почему при использовании StringBuilder в коде под катом программа работает медленнее, чем при простом сложении. При этом += при компиляции превращаются в вызовы StringBuilder.append().
У меня сразу появилось желание разобраться в проблеме.
Читать полностью »
Вычисление логических выражений в строке внутри Java-Scala-Kotlin кода
2018-04-30 в 13:41, admin, рубрики: expression, groovy, java, jvm, kotlin, stringМне нужно было в рантайме вычислять истинность выражений типа
a>10 && b<c+5 && (a+b)<c*4
находящихся в строке Скалы.
Сам код у меня на Скале, но оценку разных библиотек для этого я делал на Котлине, просто чтобы поиграться с ним. Само выражение я получаю от клиента, но от внутреннего, поэтому мне не надо было заботиться о том, чтобы в выражении мне нe стерли файлы с диска.
Я оценивал разные библиотеки на то 1) могу ли они сделать то, что надо 2) скорость исполнения
Были проверены
- интерполяция строк
- Js Engine
- javaluator
- exp4j
- evalEx
- mxparser
- MathEval
- Groovy
Результаты
Время пробега в мс для 1000 выражений (вернее одно и тоже выражение для 1000 разных набoров 3х переменных):
js | 239 ms |
mxParser | 56713 ms |
evalex | 35 ms |
groovy | 9910 ms |
Остальные способы/библиотеки не сработали.
Под катом подробности: