Size: a a a

Язык программирования Julia / Julia programming language

2020 August 05

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
можно хранить в новом типе (строка + длина) и не давать запускать конструктор, если длина не соответствует длине строки
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
а можно вообще параметризовать по длине тип
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
А если не секрет - зачем такое нужно? Обычно ограничения на длины вводят, чтобы компилятор мог более хороший код писать. Но на самом деле это ещё не факт. Я к тому, что погемороиться придётся, а выхлоп скорее всего нулевой будет.
источник

BM

Baurzhan M in Язык программирования Julia / Julia programming language
Андрей Оськин
А если не секрет - зачем такое нужно? Обычно ограничения на длины вводят, чтобы компилятор мог более хороший код писать. Но на самом деле это ещё не факт. Я к тому, что погемороиться придётся, а выхлоп скорее всего нулевой будет.
это к старому вопросу об интерпретировании куска файла как идущих подряд значений. тут есть строка по 8 и строка по 4 знака.
источник

BM

Baurzhan M in Язык программирования Julia / Julia programming language
раз можно делать reinterpret_cast к базовым типам, то как поступить со строкой
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Ммм... Так там же строк вообще не должно быть? Только Vector{UInt}
источник

KT

Kirill Tsaregorodtse... in Язык программирования Julia / Julia programming language
непонятна задача )
из файла можно читать фиксированное число байт, хотите 8 читайте, хотите 4
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
+
источник

BM

Baurzhan M in Язык программирования Julia / Julia programming language
Я попозже опишу
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Строка фиксированной длинны имеет смысл с соответвующим форматом хранения. Если у тебя колонка типа строка и ты ее хранишь не как массив указателей на строки, а как непрерывный массив байт.
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Есть вот такой пакет https://github.com/JuliaData/WeakRefStrings.jl, который хранит массив строк разной длины как непрерывный массив байт. Достоинства - легко сохранять/читать с диска и вообще передавать куда-нибудь в бинарном виде, недостатки очевидны - либо все строки в этом массиве и их порядок неизменяемы, либо каждое изменение приводит к  полному копированию массива с внесением изменений
источник

AM

Ali Meres in Язык программирования Julia / Julia programming language
Nice. Thanks a lot
источник

BM

Baurzhan M in Язык программирования Julia / Julia programming language
Скажем прочитал я из файла кусок длинной 32 байт. В нем идущие подряд значения одного типа. если они real или double, то скажем я использую reinterpret_cast с типом Float32/Float64, и блок конвертируется в массив 8 значений Float 32 либо же 4 значения Float 64. Как мне дешевле/проще всего проинтерпретировать такой же блок на строки фиксированной длины 4 или 8 символов.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Usage of WeakRefStrings is discouraged for general users.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Насколько я помню, WeakRefString - это какие-то остатки ещё до 0.6
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Смотря что нужно потом с этими строками делать. В общем случае нарезать руками как-нибудь типа push!(res, String(view(raw, <begin>:<end>)))
источник

A

Alexandr in Язык программирования Julia / Julia programming language
>Usage of WeakRefStrings is discouraged for general users.
Как я понимаю тут речь о том, что это внутренний класс. Что логично, потому что представление массива строк непрерывным массивом байт очень специфичная задача и приводит к довольно неочевидному поведению. Например каждое сравнение элемента из этого массива с другой строкой будет приводить к аллокации (во всяком случае в 1.3, но думаю ничего с тех пор не поменялось). Потому что при WeakRefStrings[ind] собственно происходит неявное создание строки по типу String(view(raw, offset:limit))
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Я просто имел в виду, что стоит отнестись с пониманием к такого сорта предупреждениям и убедиться, что этот пакет нужно использовать.

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

VG

Viktor G. in Язык программирования Julia / Julia programming language
number = Int32(123)
chars = reinterpret(UInt8, [number])
str = chars |> String
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Я когда экспериментировал с DataFramesDb подобный же класс написал и пытался его сделать удобным именно как тип колонки в памяти, но не получилось, возникают либо неочевидные аллокации, либо интерфейс перестает напоминать массив строк. Поэтому оставил его как внутренний класс в который удобно либо загнать массив обычных строк и на выходе получить массив байт, либо наоборот - загнать в него массив байт и с помощью collect получить массив строк. Думаю мотивация и назначение у WeakRefString довольно похожее.
Привел я его просто как пример а не как рекомендацию к использованию
источник