Forwarded from lgor
Смотрите какую штуку я запилил для многомерных массивов: https://github.com/Kright/ArrayView
Идея примерно как в numpy - поверх одномерного массива делается вьюшка для многомерного и операции типа "взять кусочек массива" или "интвертировать какую-то ось" делаются созданием новых вьюшек.
Из фич третьей скалы, которые очень пригодились - инлайн функции и context functions.
типа можно написать array4d.view(size / 2 until size, all.reversed, 2, size - 1) - и для каждой оси size свой из контекста (как и all, который весь Range вдоль оси).
А благодаря инлайн функциям можно избежать боксинга для примитивных типов.
Если бы не было inline, то был бы возврат generic типа и боксинг в объект.
Чего мне не хватило - скала не даёт иметь несколько методов с одинаковыми именами и параметрами по-умолчанию.
В итоге мой метод view это некоторый костыль в transparent inline - потому что я хочу принимать в качестве значения по оси принимать и Int (фиксированное значение, количество осей снижается на 1) и range (тогда количество осей то же самое)
P.S. Я сначала писал какой-то специальный класс для 3д, потом вдруг осознал что оно хорошо обобщается и эффективно работает.
Идея примерно как в numpy - поверх одномерного массива делается вьюшка для многомерного и операции типа "взять кусочек массива" или "интвертировать какую-то ось" делаются созданием новых вьюшек.
Из фич третьей скалы, которые очень пригодились - инлайн функции и context functions.
типа можно написать array4d.view(size / 2 until size, all.reversed, 2, size - 1) - и для каждой оси size свой из контекста (как и all, который весь Range вдоль оси).
А благодаря инлайн функциям можно избежать боксинга для примитивных типов.
trait ArrayView1d[T]: def data: Array[T]
def offset: Int
def stride0: Int
def getIndex(i0: Int): Int = offset + stride0 * i0
inline def apply(i0: Int): T = data(getPos(i0))
Если бы не было inline, то был бы возврат generic типа и боксинг в объект.
Чего мне не хватило - скала не даёт иметь несколько методов с одинаковыми именами и параметрами по-умолчанию.
В итоге мой метод view это некоторый костыль в transparent inline - потому что я хочу принимать в качестве значения по оси принимать и Int (фиксированное значение, количество осей снижается на 1) и range (тогда количество осей то же самое)
P.S. Я сначала писал какой-то специальный класс для 3д, потом вдруг осознал что оно хорошо обобщается и эффективно работает.
GitHub
GitHub - Kright/ArrayView: Scala library for efficient multi-dimensional arrays
Scala library for efficient multi-dimensional arrays - Kright/ArrayView
🔥11💩2
Forwarded from Ekaterina
16 августа — на ИТ-пикник
Событие месяца — семейный фестиваль для опытных ИТ-специалистов. Что в программе:
— Лекции топов индустрии.
— Интерактивы, квесты, мастер-классы.
— Общение, знакомства.
— Выступления известных музыкантов: «тима ищет свет», Тося Чайкина, «Второй Ка» и секретного артиста.
Фестиваль пройдет в музее-заповеднике «Коломенское»
Время отжигать, пока лето не закончилось. Подробности и билеты — на сайте ИТ-пикника
Событие месяца — семейный фестиваль для опытных ИТ-специалистов. Что в программе:
— Лекции топов индустрии.
— Интерактивы, квесты, мастер-классы.
— Общение, знакомства.
— Выступления известных музыкантов: «тима ищет свет», Тося Чайкина, «Второй Ка» и секретного артиста.
Фестиваль пройдет в музее-заповеднике «Коломенское»
Время отжигать, пока лето не закончилось. Подробности и билеты — на сайте ИТ-пикника
💩6❤1
Forwarded from Oleg ℕižnik
Круто, тайные страницы документации
https://docs.scala-lang.org/scala3/reference/experimental/cc-advanced.html
https://docs.scala-lang.org/scala3/reference/experimental/cc-advanced.html
🤯3🤔2
Forwarded from Ekaterina
30 августа пройдет конференция JVM Day
Приглашают опытных разработчиков — прокачать навыки и завести полезные знакомства. Часть стоимости билетов пойдет на поддержку региональных вузов.
Основная программа состоит из трех секций: Java, Scala и Backend. Днем участников ждут доклады спикеров из Т-Банка, Яндекса, 2ГИС, Squad, 01. tech, а вечером — афтепати.
Подробности по ссылке
Приглашают опытных разработчиков — прокачать навыки и завести полезные знакомства. Часть стоимости билетов пойдет на поддержку региональных вузов.
Основная программа состоит из трех секций: Java, Scala и Backend. Днем участников ждут доклады спикеров из Т-Банка, Яндекса, 2ГИС, Squad, 01. tech, а вечером — афтепати.
Подробности по ссылке
👍3