При описании модели данных, часто приходится создавать новые типы, в первую очередь, используя такие ключевые слова как class
/struct
/record
. Я же предлагаю взглянуть на случаи, когда моделируемая сущность, описывается существующими, часто простыми типами, такими как целое число или строка. В статье хочу поделиться мыслями, которые привели меня к использованию специальных типов там, где часто используются встроенные: int
, string
и тому подобные. И как удобно (относительно) это делать. Примеры приведу на языках Scala, Go и C++.
Scala *
Мультипарадигмальный язык программирования
Спиливаем spill-ы
Привет!
Меня зовут Александр Маркачев, я 3,5 года работаю на позиции Data Engineer в билайне и люблю открывать для себя что-то новое и интересное в работе. Так случилось и с темой, которой я сегодня хочу с вами поделиться — со spill-ами.
Под катом мы поговорим о том, что такое Spill-ы в контексте Spark, и почему именно для Spark это не такая уж сильно плохая штука. Рассмотрим, из-за чего Spill-ы в принципе возникают, разберем несколько видов Spill-ов (и даже вызовем их намеренно), а затем будем решать эту проблему.
Что такое spill-ы в Spark
Вообще, Spill — это термин для обозначения процесса перемещения данных из памяти на диск, а затем снова обратно в память. По крайней мере, именно так гласит официальная трактовка. Если проще, то дело вот в чем — когда у Spark не хватает ресурсов для обработки, он перемещает данные на диск.
В процессе обработки существуют разные участки — есть Executor Memory, есть Storage Memory, и когда эти участки оба целиком заполнены, то они начинают переполняться и вызывать утечку данных. Причем в отличие от утечки в C, Java или еще где-то, в Spark это преднамеренное действие для того, чтобы ваша задача не падала. Собственно, именно поэтому при нехватке ресурсов данные и «проливаются».
Можно ещё сильнее упростить аналогию.
Промежуточное руководство по производным в Scala: Magnolia
В предыдущем посте о производных в Scala я объяснил суть идеи и показал, как мы можем извлечь из нее пользу, используя производные, предоставляемые библиотеками. В этот раз копнем глубже и реализуем нашу собственную деривацию с помощью Magnolia.
Примечание: Этот пост предназначен для пользователей Scala среднего (intermediate) уровня. Если же вы еще не знакомы с данной темой, я рекомендую начать с введения для начинающих.
Классы и объекты в Scala
Привет, Хабр!
Меня зовут Дмитрий Мулло, я сотрудник Группы «Иннотех».
В этой статье на несложных примерах рассматриваются понятия объектно‑ориентированного программирования, такие как «класс» и «объект», помогающие структурировать код приложения.
Истории
Как я писал свой распределенный мессенджер на Scala/fs2 и немного lock-free. Часть 1: Архитектура и бизнес-логика
Привет, хабр!
Данная задача в разных вариациях мне давалась на нескольких собеседованиях несколько лет назад. Хоть мой дизайн и проходил, мне стало интересно реализовать это в коде с нуля. Сыроватый и сильно урезанный по функционалу MVP готов, ссылка на github будет под катом. Пока что мной запланировано 3 статьи - эта, по бэкенду и по фронту. Будет много кода на scala, много котов (cats effect), стримов (fs2), пара lock-free техник, scala js, и постараюсь сделать так, чтобы мозг от всего этого не взорвался.
Все, кому интересно - добро пожаловать под кат.
Implicits в Scala — неявные методы, функции, значения и особенности
Привет! Меня зовут Сергей Грибков, я тимлид команды FM&RA в билайне, и в этом посте я хочу рассказать об одной фирменной особенности Scala под названием implicits. Это неявные параметры, неявные преобразования, неявные классы.
Почему неявные — потому что они не требуют прямого вызова, если мы говорим о методах, не требуют прямой передачи в метод, если мы говорим о параметрах, и так далее.
В Scala implicits широко распространены. Скорее всего, вы уже сталкивались с ними в различных библиотеках и фреймворках, например, Apache Spark.
Чтобы успешно использовать implicits в собственном коде и работать со сторонними библиотеками, требуется понимание принципов их работы. Поэтому давайте разберем, как всё устроено.
Итак, существует три основных категории implicits:
Цепочка ответственности с частичными функциями Scala
Частичная функция (в отличие от полной) — это функция, которая определена не для всех возможных входных данных. Частичная функция g: A => B — это функция, для которой существуют некоторые значения a в области A такие, что g(a) не определена. Scala имеет хорошую поддержку частичных функций.
Накапливайте ошибки в Scala с помощью typelevel cats
Когда дело доходит до обработки ошибок, основной стратегией является прекращение всех вычислений после обнаружения первой погрешности. Обычно это достигается за счет использования исключений. Хотя этот подход работает в большинстве случаев, бывают случаи, когда он не идеален. Например, при получении запроса от пользователя предпочтительнее вернуть все ошибки сразу и позволить исправить их одним махом. В этой статье я рассмотрю такой сценарий и изучу конкретный пример с использованием Scala 3 и библиотеки Cats.
Scala Digest. Выпуск 5
Привет, Хабр! Мы — Рома, Настя и Карина — бэкенд-разработчики Тинькофф, пишем код на Scala и горим желанием его популяризировать.
Мы собираем и агрегируем новости из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем дополнительные новости и собственные комментарии. Свою мотивацию черпаем из желания развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕ )づ
Особенности сред исполнения различных систем эффектов в Scala
Привет! Меня зовут Никита Калинский, я разработчик в Тинькофф Бизнесе. Сейчас я занимаюсь продуктом под названием «Лента операций». Физлица в желтом приложении могут отслеживать все свои операции, и мы делаем такой же инструмент для предпринимателей.
Сегодня я хочу поговорить про основы различных систем исполнения эффектов в Scala. Мы разберем, как работают системы эффектов, как они реализованы в Scala в Cats Effects и ZIO и как эволюционировали между версиями. А также обсудим неявные особенности и подводные камни исполнения сред таких библиотек.
Почему пингвины падают в пропасть: особенности декомпозиции в Scala
В этой статье наш ведущий инженер по обработке данных Артём Корсаков разбирает некоторые особенности использования Scala и показывает на шуточных примерах "подводные камни", на которые часто натыкаются разработчики.
Scala Digest. Выпуск 4
Привет, Хабр! Мы — Рома, Настя и Карина — бэкенд-разработчики Тинькофф, пишем код на Scala и горим желанием его популяризировать.
Мы собираем новости из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем другие интересные моменты и собственные комментарии. Свою мотивацию мы черпаем из желания развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕ )づ
Какой язык программирования выбрать? Часть 2. Scala
Продолжаем серию статей об особенностях, применении, плюсах и минусах языков, которые используются в «Криптоните». Опытом разработки на Scala поделится Олег Булатов, старший программист направления серверной разработки.
Ближайшие события
Scala Digest. Выпуск 3
Привет, Хабр! Мы — Рома, Настя и Карина — бэкенд-разработчики Тинькофф, пишем код на Scala и стараемся его популяризировать.
Мы собрали свежий выпуск новостей из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавили дополнительные новости и свои комментарии. Наша мотивация — в желании развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕ )づ
Балансировка в Finagle: как работает и как сделать свой балансировщик
Finagle — библиотека от разработчиков Twitter. Ее используют для организации межсервисного RPC и построения mesh-микросервисной архитектуры. У библиотеки богатая функциональность по тонкой настройке и интроспекции, но сегодня мы рассмотрим клиентскую балансировку.
Решение задачи о 8 ферзях на трёх уровнях Scala — программа, типы, метапрограмма
В заметке Ричарда Тауэрса (Richard Towers) Typescripting the technical interview (есть перевод на Хабре: Руны и лёд: техническое собеседование по TypeScript) по ходу повествования была решена классическая задача расстановки 8 ферзей на шахматной доске. Для решения использовалась система типов TypeScript. Мне захотелось посмотреть, как эта задача будет выглядеть на Scala. Т.к. Scala 3 помимо развитой системы типов предлагает превосходную поддержку метапрограммирования, то здесь мы рассмотрим не только решение на типах, но и мета-программное решение.
Шаблон Строитель в Scala 3
По определению шаблон Строитель (Builder) отделяет конструирование сложного объекта от его представления, что особенно хорошо, когда нужно провести валидацию параметров перед получением итогового экземпляра. Особенно удобно комбинировать шаблон Строитель с уточняющими типами.
Рассмотрим использование Строителя на Scala версии 3.2.2
.
Повторные вызовы функций в Scala
Будучи разработчиком программного обеспечения, вы наверняка сталкивались с ситуацией, что получив какой-то результат из внешних источников (обычно внешнего сервиса), необходимо выполнить функцию хотя бы пару раз, пока она не добьется успеха. Это распространенный сценарий, когда нужно интегрировать наше приложение с каким-то внешним источником данных, а внешний сервис работает плохо, возвращает случайные ошибки или иногда просто недоступен в течение нескольких секунд.
Написание CRUD-приложений и интеграция с внешними сервисами — это ежедневная рутина для большинства разработчиков программного обеспечения, которых я знаю. Тем не менее, поиск лучших и более быстрых способов выполнения этих утомительных задач — это постоянный процесс, и с годами он стал намного проще благодаря новым инструментам, библиотекам и фреймворкам, появляющимся повсюду и каждый день.
Apache NlpCraft 1.0.0. Упрощение использования и расширение возможностей
Apache NlpCraft - библиотека с открытым исходным кодом, предназначенная для интеграции языкового интерфейса с пользовательскими приложениями. Новая версия 1.0.0 привнесла в проект наиболее существенные изменения за все время его существования.
Основные идеи развития библиотеки были изложены в данной заметке, вкратце напомню их суть:
1. Предельное упрощение, отказ от всех вспомогательных enterprise возможностей, предельно точная фокусировка продукта.
2. Максимальная плагабильность, позволяющая контролировать все элементы обработки текста и как следствие, решающая проблему поддержки мультиязычности.
Вклад авторов
krokhmalyuk 206.0barbalion 183.1ppopoff 149.2vuspenskiy 129.0primetalk 125.0ImLiar 125.0alextokarev 120.0IvanGolovach 120.0dos65 118.6eliah_lakhin 118.0