Czy mogę używać prymitywów w Scali?Jak używać prymitywów w Scali?
Przypadek zastosowanie jest do przechowywania miliardy wskazówki, aby różnica pomiędzy 4 bajty (na int) oraz 16 bajtów (liczbę całkowitą) jest ważny.
Czy mogę używać prymitywów w Scali?Jak używać prymitywów w Scali?
Przypadek zastosowanie jest do przechowywania miliardy wskazówki, aby różnica pomiędzy 4 bajty (na int) oraz 16 bajtów (liczbę całkowitą) jest ważny.
Jeśli chcesz Scala przechowywać bez opakowania prymitywów, można użyć Array[Int]
ale powstrzymania się od stosowania jakichkolwiek chłodne metodę gromadzenia Scala na nim (bo zmusi boks).
Jeśli szukasz niezmiennych kolekcji typów podstawowych, możesz rzucić okiem na Debox, który zapewnia specjalistyczne bufory, zestawy i mapy. Projekt wciąż się rozwija, ale jest bardzo obiecujący.
Nie sądzę, aby wywoływanie kontenerów Debox było niezmienne. Jednak Debox usilnie stara się udostępnić funkcje Scala mutable.Buffer, Map i Set (np. Autogrowing), z dobrą wydajnością, w szczególności bez boksu. –
Można użyć @specialised
adnotacji pozwolić kompilator tworzenia wyspecjalizowanych instancje klasy dla Ciebie. Zobacz this article.
class Container[@specialized(Int) T](value: T) {
def apply(): T = value
}
scala kompiluje do prymitywów, gdy może (Array [Int] => int [] itd.) – Arjan
Jeśli masz dosłownie miliardy wskazówki, jesteś prawdopodobnie napotkasz problemów z pamięcią, nawet jeśli używasz prymitywów, plus size tablic jest ograniczona na JVM przez wymaganie int ref elementu, tj. ~ 2bn elems. Pomyśl o streamowaniu danych lub korzystaniu z bazy danych. –