Warning: mkdir(): No space left on device in /var/www/hottg/post.php on line 59

Warning: file_put_contents(aCache/aDaily/2025-07-19/post/scalabin/--): Failed to open stream: No such file or directory in /var/www/hottg/post.php on line 72
Изначально планировал @Scala bin
TG Telegram Group & Channel
Scala bin | United States America (US)
Create: Update:

Изначально планировал, что на месте этого поста будет сравнение двух подходов к реализации полиформизма: композиции и наследования. Но, пока искал материал, наткнулся на гораздо более животрепещущий топик.

Одним из самых острых вопросов для jvm-программистов на сегодняшний день является уменьшение количества аллокаций в системе. Если не придавать значение числу создаваемых объектов, то можно столкнуться с небезызвестными "GC-подвисаниями", когда сборщик мусора забирает всё процессорное время для удаления ненужных объектов.

Естественно, данная проблема не обошла и Scala. Поскольку в языке нет примитивов, количество используемой памяти могло бы возрастать непозволительно быстро. К счастью, "волшебный" trait AnyVal, наследуемый такими типами как Int, Long и т.д., позволяет превратить любой класс с одним value-параметром в обёртку, которая во время исполнения программы не инстанцинируется (все методы такого класса становятся статическими).

На самом деле, это, конечно, работает далеко не всегда. В документации выделяют три случая, когда обёртка (value-класс) всё-таки превращается в полноценный объект:
1. Value-класс рассматривается как объект другого типа.
2. Value-класс помещён в массив
3. Проверка типа value-класса во время исполнения программы (например, паттерн матчинг)

Максимально подробные тесты можно найти по ссылке, однако в качестве простого примера, когда объект-обёртка будет создан (по правилу 1), можно привести следующий код:

object Test {
case class Value(value: Int) extends AnyVal
def identity[A](a: A): A = a

println(identity(Value(1))
}

К счастью (нет, я не специально выбираю такие темы), в Scala 3 появятся Opaque types - конструкция языка, гарантирующая отсутствие обёртки при исполнении программы. На текущий же момент рекомендуется просто с умом использовать AnyVal (или, например, такие конструкции, как типы с тэгами) и прежде всего тестировать, какое реальное влияние оказывает AnyVal на быстродействие в программе.

Изначально планировал, что на месте этого поста будет сравнение двух подходов к реализации полиформизма: композиции и наследования. Но, пока искал материал, наткнулся на гораздо более животрепещущий топик.

Одним из самых острых вопросов для jvm-программистов на сегодняшний день является уменьшение количества аллокаций в системе. Если не придавать значение числу создаваемых объектов, то можно столкнуться с небезызвестными "GC-подвисаниями", когда сборщик мусора забирает всё процессорное время для удаления ненужных объектов.

Естественно, данная проблема не обошла и Scala. Поскольку в языке нет примитивов, количество используемой памяти могло бы возрастать непозволительно быстро. К счастью, "волшебный" trait AnyVal, наследуемый такими типами как Int, Long и т.д., позволяет превратить любой класс с одним value-параметром в обёртку, которая во время исполнения программы не инстанцинируется (все методы такого класса становятся статическими).

На самом деле, это, конечно, работает далеко не всегда. В документации выделяют три случая, когда обёртка (value-класс) всё-таки превращается в полноценный объект:
1. Value-класс рассматривается как объект другого типа.
2. Value-класс помещён в массив
3. Проверка типа value-класса во время исполнения программы (например, паттерн матчинг)

Максимально подробные тесты можно найти по ссылке, однако в качестве простого примера, когда объект-обёртка будет создан (по правилу 1), можно привести следующий код:
object Test {
case class Value(value: Int) extends AnyVal
def identity[A](a: A): A = a

println(identity(Value(1))
}

К счастью (нет, я не специально выбираю такие темы), в Scala 3 появятся Opaque types - конструкция языка, гарантирующая отсутствие обёртки при исполнении программы. На текущий же момент рекомендуется просто с умом использовать AnyVal (или, например, такие конструкции, как типы с тэгами) и прежде всего тестировать, какое реальное влияние оказывает AnyVal на быстродействие в программе.


>>Click here to continue<<

Scala bin






Share with your best friend
VIEW MORE

United States America Popular Telegram Group (US)


Warning: Undefined array key 3 in /var/www/hottg/function.php on line 115

Fatal error: Uncaught mysqli_sql_exception: Can't create/write to file '/tmp/#sql-temptable-a06e-53650c-2126.MAI' (Errcode: 28 "No space left on device") in /var/www/hottg/function.php:216 Stack trace: #0 /var/www/hottg/function.php(216): mysqli_query() #1 /var/www/hottg/function.php(115): select() #2 /var/www/hottg/post.php(351): daCache() #3 /var/www/hottg/route.php(63): include_once('...') #4 {main} thrown in /var/www/hottg/function.php on line 216