Wpis z mikrobloga

Poprawcie mnie jeśli się mylę i pomóżcie z odpowiedzią na pytania.
1. #javascript nie jest najlepszy do wykonywania złożonych obliczeń.
2. jeśli powyższe jest prawdą to w czym tkwi słabość js w tym obszarze?
3. czy ma wpływ na wydajność kodu js środowisko w którym ten kod odpalimy? Tzn. ten sam kod odpalony w przeglądarce i w node.js?

wołam; @Sh1eldeR, @Marmite, @Ginden oraz innych znających się na JS.
  • 14
@ufik78: Nie jest, ponieważ liczby w JavaScripcie mają tylko 1 typ i jest to liczba w formacie IEEE-754, a to oznacza, że obliczenia są obarczone pewną niedokładnością (słynne 0.1 + 0.2)

3. czy ma wpływ na wydajność kodu js środowisko w którym ten kod odpalimy? Tzn. ten sam kod odpalony w przeglądarce i w node.js?

To zależy :P a tak serio, przeglądarka ma jeszcze wiele innych rzeczy do ogarnięcia, interfejs użytkownika,
@ufik78:
1. Tak.
2. Brak wsparcia dla SIMD, brak specjalizowanych typów liczb (jest tylko Float64, który przez V8 jest czasem optymalizowany do UInt31), brak możliwości wykonywania obliczeń na GPU, wątki mają duży overhead, dane zwykle są nielokalne.
3. Nie ma znaczącej różnicy między przeglądarką a Node.js uruchomionymi na tym samym komputerze.
@ufik78: Pierwsze tylko tworzy problemy, bo to po prostu kod JS, który wspiera większe liczby.
Drugie pewnie jest dobrym rozwiązaniem, ale Twój serwer produkcyjny raczej nie ma karty graficznej.

Ogólnie to co Ty masz zamiar w ogóle robić?
@Ginden: ok, dzięki. Nie nic specjalnego, po prostu mam tam gdzieś jakiś pomysł i być może będzie konieczność wykonania właśnie większych obliczeń i chciałem się tylko rozeznać czy mogę to JS zrobić.
@ufik78: Problemy obliczeniowe, które spotykamy w webdevie dzielimy na:
- takie, których nie musisz rozwiązywać, bo można je sprytnie rozwiązać znacznie łatwiej
- takie, których nie rozwiążesz sam, bo ludzie pracują nad tym od wielu lat bez dużych sukcesów (większość problemów optymalizacyjnych)
- takie, które rozwiązuje dedykowane rozwiązanie (full text search)
- takie, które powinien rozwiązać Twój admin bazy danych lub analityk (wszelkiego rodzaju grafy, wyliczanie podobieństwa, rekomendacje), bo i tak
@ufik78:

1. #javascript nie jest najlepszy do wykonywania złożonych obliczeń.

Niemal na pewno prawda, bo praktycznie na pewno są języki lepsze od niego do złożonych obliczeń.

2. jeśli powyższe jest prawdą to w czym tkwi słabość js w tym obszarze?

(@Ginden, chyba warto, żebyś też to przeczytał)
a) niemożność klasycznego programowania współbieżnego, czy raczej: bardzo restrykcyjne podejście do współbieżności. Blok (sekwencja) kodu w JS nigdy nie zostanie przerwana w połowie. Jeśli
@Sh1eldeR:
a) brak konkretów i konsensusu w sprawie wątków. Do ES2016 niemal pewno nie wejdą.
b) to tylko int31 obecnie.
c) Może będzie, może nie. Prace chwilowo są martwe, aczkolwiek dobrze wróży istnienie jakiegokolwiek standardu.
d) analiza leksykalna jest trywialna pod warunkiem operacji na pewnej grupie typów - prymitywy, tablice mrożone. Większość operacji graficznych można łatwo zrównoleglić.
Co więcej, bailout nie jest niczym trudnym w przypadku czystych funkcji - jeśli któraś
@Ginden:
a) Ale WebWorkery już masz w przeglądarkach. Jest też biblioteka w Nodzie (choć chyba jej nigdy nie użyłem). Prace nad bardziej zaawansowanymi rzeczami trwają i pochłonęły już trochę czasu, ale trochę tutaj końca nie widać.

b) Zauważ też, że obecne implementacje SIMD wspierają wektory większej liczby typów: Float32, Float64, Int32... Ale zostawmy SIMD: to samo można powiedzieć o Typed Arrays [1]!

c) Jest duży nacisk na SIMD w ramach grupy
d) wszędobylski operator przypisania i efekty uboczne. Nie jest to język czysto funkcyjny, więc kod w nim napisany nie pójdzie ot tak na 1024 rdzeniach (porównaj z Clojure, Erlang itp.)


@Sh1eldeR: mógłbyś mi to troszkę bardziej wytłumaczyć? O co chodzi z wszędobylskim operatorem przypisania, o efektach ubocznych coś słyszałem, dlaczego nie jest to język czysto funkcyjny, dlaczego clojure jest lepszy i dlaczego "kod w nim napisany nie pójdzie ot tak na
@Sh1eldeR: a) WebWorkery to specyfikacja W3C, nie języka. WebWorkery mają dużo ograniczeń, są trudne w debugowaniu, mają duży overhead, nie mają funkcji sleep, nie mają współdzielonej pamięci.
B) gdzie masz implementacje SIMD w przeglądarce? Co do TypedArrays - w domu przejrzę kod źródłowy V8 i SpiderMonkey, ale AFAIR TypedArrays tylko przechowują dane jako typ, w momencie pobierania są one zmieniane w int32, int31 lub float64.
c) Nacisk jest, implementacji brak. A