2015-01-21 15 views
6

Pierwsze wydanie dla io.js jest już w tym miesiącu, czytałem dokumenty, gdy znalazłem smalloc nowy moduł wprowadzony w io.js.Używanie smalloc w io.js

Do dziś nigdy nie czułem potrzeby robienia tego w JavaScript.

Moje pytania to:

  1. Zastanawiam się, czy istnieje naprawdę potrzeba surowego alokacji pamięci w javscript użyciu smalloc?

  2. Jeśli to potrzebne, dlaczego?

  3. jaki byłby przypadek użycia do korzystania z smalloc?

  4. a jeśli nie, to dlaczego członkowie io.js dodali ten moduł?

mówi również

To możliwe jest, aby określić typ danych zewnętrznych macierzy, który chcesz. Wszystkie możliwe opcje są wymienione w smalloc.Types.

Przykład użycia:

var doubleArr = smalloc.alloc(3, smalloc.Types.Double); 

i tutaj jest lista typów obsługiwane alokacji

smalloc.Types# 

Int8 
Uint8 
Int16 
Uint16 
Int32 
Uint32 
Float 
Double 
Uint8Clamped 
  1. Czy my staramy się javascript strongly typed language?

Odpowiedz

8

pierwsze bufory są wspierane przez moduł smalloc i moduł nie został dodany przez io.js deweloperom to rozpoczęto w node 0.11 gałęzi io.js tylko importowane go. Przydzielanie pamięci stałej oznacza niższy poziom manipulacji pamięcią, a tym samym - szybsze operacje, lepszą wydajność, która jest celem zarówno node.js i io.js. Jeśli więc chcesz zaimplementować coś w binarnym świecie, nie ograniczając się do obecnego interfejsu API Buffer, powinieneś użyć smalloc, aby stworzyć własne sposoby manipulowania pamięcią. Dokumentacja mówi:

Można jej użyć do stworzenia własnych klas podobnych do buforów. Żadne inne właściwości nie są ustawione, więc użytkownik będzie musiał śledzić inne niezbędne informacje (np. Długość przydziału).

Ponadto, nie jest to próba uczynienia javascript językiem mocno napisanym, to tylko manipulacje w pamięci, nie można tego zrobić w inny sposób, zapewniając wyższą wydajność.

+0

to, co zrobił mallocs w c .. czy potrzebowaliśmy tego w javascript beforre? Nie!! więc dlaczego teraz? –

+1

@NaeemShaikh, to jest tylko moduł, który pomaga tworzyć bufory, jeśli chcesz utworzyć klasy podobne do buforów, użyj go, jeśli nie - po prostu przekaż, nie musisz go używać, za każdym razem gdy używasz buforów, jesteś używając smalloc. – micnic

7

Dzięki @micnic za udzielenie odpowiedzi na pytanie. Chciałbym zaoferować dodatkowe informacje o tym, dlaczego wprowadziłem smalloc.

Nie myśl, że przydział pamięci w pamięci JS to coś zupełnie nowego. Jest to ten sam rodzaj mechanizmu, który jest używany przez Typed Arrays pod maską. Tak więc wszędzie, gdzie możesz użyć Tablicy Typów, możesz również użyć smalloc. Zaletą smalloc jest to, że nie definiuje niczego dla ciebie. Zapewnienie maksymalnej elastyczności Twojego API. Jest także bezpieczny, ponieważ GC wyczyści twoje przydziały, gdy obiekt nie będzie już używany.

Jednym z zastosowań będzie biblioteka matematyki. Zwłaszcza jeśli piszesz moduł natywny. Osobiście używam go do skomplikowanych optymalizacji wydajności przydzielania pamięci do obiektu, a następnie dzielenia się tą pamięcią między JS i C++, aby umożliwić współdzielenie stanu między tymi dwoma. Jest to zdecydowanie najszybszy sposób zrobienia tego i doprowadził do pewnych imponujących optymalizacji w Węzłach i we.js.

Pamiętaj, że możesz przydzielić do istniejących obiektów. Na tym polega moc. Na przykład:

function Alloc(n) { 
    n >>>= 0; // uint32 conversion 
    this.length = n; 
    smalloc.alloc(n, this); 
} 

var a = new Alloc(16); 

Jest prosty nowy konstrukt, który właśnie przydziela Uint8 zewnętrzną tablicę danych na przykład.

będę szybko powtórzyć odpowiedzi na pytania:

  1. Zastanawiam się, czy istnieje naprawdę potrzeba alokacji pamięci surowy w javscript wykorzystaniem smalloc?

Tak. Think Typed Arrays.

  1. Jeśli to potrzebne, dlaczego?

Odpowiedź udzielona powyżej. Szukaj również wszystkiego, co używa Typed Array.

  1. jaki byłby przypadek użycia przy użyciu smalloc?

Odpowiedź udzielona powyżej. Ponadto istnieje wiele innych zastosowań, które programiści znajdują dla niego.

  1. a jeśli nie, dlaczego członkowie io.js dodali ten moduł?

Napisałem go na długo przed pojawieniem się pliku o nazwie j.js. :)

  1. Czy staramy się, aby javascript był językiem mocno napisanym?

Absolutnie nie. Te dwa nie są nawet powiązane.

UPDATE: Z powodu zerwania zmian nadchodzących w V8 v4.4, smalloc została oznaczona jako "przestarzałe" począwszy io.js v2.