środa, 27 lutego 2013

asm.js - superwydajny JavaScript od Mozilli

asm.js to podzbiór języka JavaScript opracowany przez Mozillę. W chwili obecnej programy napisane w asm.js osiągają ok. połowę  wydajności programów natywnych. Jest to wynik kilkukrotnie lepszy od najlepszych wyników uzyskiwanych w pełnym JavaScript i porównywalny (a czasami nawet lepszy) do Javy, C# czy wczesnych implementacji NaCl.


Powyższy wykres pochodzi prezentacji Alona Zakaiego [1] z Mozilli.

Jedną z głównych zalet asm.js jest to, że to tylko podzbiór JavaScriptu i nie wymaga dodatkowych wtyczek czy interpreterów w przeglądarce. Nie zrywa też kompatybilności z istniejącymi silnikami JavaScript. Jeśli jakaś przeglądarka nie obsługuje asm.js to wykona go jako zwykły JS.

Wzrost wydajności możliwy był dzięki wprowadzeniu kilku ograniczeń m. in. statycznego typowania. Teraz dostępna jest kompilacja AOT (Ahead Of Time), podczas gdy przy pełnym JS była to tylko kompilacja JIT (Just In Time) niektórych fragmentów programu. Nie jest przy tym potrzebny nowy kompilator, bo odpowiednie mechanizmy zaimplementowano już w przeglądarkach na potrzeby JS JIT.

Jednym z głównych przykładów zastosowania asm.js jest kod wynikowy kompilatorów C/C++ do JS. Emscripten już teraz potrafi generować kod w asm.js. Wykorzystanie Emscripten (jeszcze bez asm.js, czyli znacznie wolniejszego) można zobaczyć w demach Unigine Crypt, BananaBread czy Bullet.

Niebawem do Polski mają zawitać telefony z Firefox OS. Tu trzeba dodać: tanie telefony z mało wydajnymi podzespołami. To czyni projekt asm.js krytycznym dla powodzenia całego projektu. 

1. Przyznam, że mam problem z odmianą tego nazwiska.

Notka poboczna

Jest jedna rzecz, którą lubię w Mozilli: przejrzystość. Nie robi niczego za zamkniętymi drzwiami jak Google czy Canonical. Nie próbuje przewracać świata przeglądarek do góry nogami jak Google z NaCl. Nie mami "applopodobymi" premierami i licznikami jak Canonical.
Gdy pokazali Boot2Gecko, czyli Firefox OS i stwierdzili, że główną zaletą będzie wydajność, to popukałem się w czoło. Przecież HTML5+JS nie może być wydajny! Teraz zaczynam wątpić.

Dzięki przejrzystości nie musimy czekać na finalne wydanie asm.js. Już teraz można je przetestować z wykorzystaniem Firefoksa Odinmonkey i kodu skompilowanego przez Emscripten z flagą ASM_JS=1.

Porównajcie to z polityką Google opowiadającego od lat o PNaCl i po dziś dzień nie potrafiącego upublicznić działającej implementacji.

środa, 13 lutego 2013

FreeCAD 0.13 został oficjalnie wydany

Oficjalne wydanie, nazywane także stabilnym, FreeCAD-a 0.13 ujrzało właśnie światło dzienne. W stosunku do wersji 0.12 wprowadzono wiele usprawnień m.in. w warsztatach Part Design, Sketcher, Part czy Arch. Pojawiły się też dwa nowe: Ship i OpenSCAD.
Zmiany te można było śledzić wcześniej instalując FreeCAD-a z gita lub używając codziennie aktualizowanego PPA. Tutaj można przeczytać (jęz. ang) skrócony opis zmian.

Instalacja:
Użytkownicy Ubuntu powinni dodać repozytorium PPA. Można to zrobić używając prostej komendy:
sudo add-apt-repository ppa:freecad-maintainers/freecad-stable
A następnie:
sudo apt-get update  
sudo apt-get install freecad

Użytkownicy Windows muszą pobrać paczki bezpośrednio z SourceForge.

Użytkownicy innych systemów powinni podążać według dodatkowych wskazówek ze strony projektu.

Osoby niezaznajomione z projektem zapraszam do przeczytania artykułu na Jakilinux.org.


Wydanie stabilnej wersji 0.13 otwiera drogę do pracy nad 0.14, które ma być rewolucyjne w pewnych obszarach programu i na pewno będzie częściowo niekompatybilna z 0.13. Na celowniku jest moduł złożeń, detalowania i wymiarowania 2D, szkicownik 3D, moduł CAM, moduł renderingu i jeszcze pewnie kilka innych zagadnień. Kod wielu nowych elementów jest już wstępnie opracowany i teraz będzie integrowany z główną gałęzią projektu. Oprócz forum programu polecam obserwować blog jednego z deweloperów, Luke'a Parry'ego.