Wspieraj kompilator open source od C/C++ po WebAssembly i JavaScript

wesoły

Cheerp: kompilator C++ dla sieci

Zostało to niedawno ogłoszone Wersja Cheerpa 3.0, kompilator, który pozwala skompilować dowolny kod C/C++ do WebAssembly lub JavaScript. Nowa gałąź wyróżnia się przeniesieniem kompilatora i towarzyszących mu bibliotek w celu korzystania z permisywnych licencji Apache 2.0 i LLVM, zamiast stosowanej wcześniej ograniczonej polityki licencyjnej, która oferuje opcję licencji GPLv2 dla projektów niekomercyjnych i właściciela licencji dla projektów komercyjnych.

Cheerp może być używany zarówno do przenoszenia istniejących aplikacji i bibliotek C/C++ do uruchamiania w przeglądarce, jak i do tworzenia od podstaw wysokowydajnych aplikacji internetowych i komponentów WebAssembly.

Minął ponad rok od poprzedniej wersji Cheerp ( Cheerp 2.7 ), a ta nowa wersja jest pełna nowych funkcji i optymalizacji, które po raz kolejny przesuwają stan techniki używania C++ jako języka programowania dla aplikacji internetowych. Gry.

Co najważniejsze, w tej wersji wprowadzamy znaczącą zmianę w modelu licencjonowania Cheerp. Począwszy od wersji Cheerp 3.0, wszystkie podstawowe komponenty i biblioteki kompilatora są teraz licencjonowane w ramach licencji Apache 2.0/LLVM. Oznacza to radykalne odejście od naszego poprzedniego modelu GPLv2/podwójnej licencji komercyjnej, dzięki czemu Cheerp 3.0 może być używany w dowolnym celu, bez ograniczeń.

O Cheerpie

Projekt pozwala łączyć kod C/C++ i JavaScript w aplikacji internetowej z możliwością dostępu z kodu JavaScript do funkcji oryginalnie opracowanych w C/C++ oraz z kodu C/C++ do obiektów JavaScript, bibliotek JavaScript, Web API i wszystkich funkcji DOM, a także umożliwia tworzenie mieszanych kompilacji, część kod, który kompiluje się do JavaScript i części do WebAssembly. Obsługuje projekty kompilacji korzystające ze standardowych bibliotek libc i libc++.

W porównaniu do kompilatora Emscripten, Cheerp generuje bardziej zoptymalizowany i zwarty kod pośredni WebAssembly (Rozmiary wynikowych plików są średnio o 7% mniejsze).

Koncepcyjnie różnice sprowadzają się do tego, że Zapisz jest używany jako format obiektowy WebAssembly i wykonuje wiązanie i optymalizację na etapie przetwarzania końcowego WebAssembly (opcja wasm). Cheerp wykorzystuje kod bajtowy LLVM jako pośrednią reprezentację bibliotek i plików obiektowych, umożliwiając szersze optymalizacje całego projektu przy użyciu metadanych na poziomie LLVM bez konieczności przetwarzania końcowego.

Podobne artykuł:
Emscripten 3.0, łańcuch narzędzi do kompilacji dla WebAssembly przy użyciu LLVM

Ponadto, Cheerp używa optymalizatora PreExecuter do zapobiegawczego wykonywania kodu na przykład w czasie kompilacji, aby przekonwertować konstruktory używane do inicjowania obiektów globalnych na stałe. Ponadto podczas kompilacji używany jest PartialExecuter, który na podstawie parsowania parametrów funkcji usuwa kod, który gwarantuje, że nie zostanie użyty podczas wykonywania.

Cheerp może również generować kod JavaScript do dynamicznej pracy z pamięcią. objęte śmieciarką. W szczególności, zamiast emulować tradycyjną przestrzeń adresową z typowanymi tablicami, Cheerp zapewnia bezpośrednie mapowanie obiektów C++ na obiekty JavaScript, co zmniejsza zużycie pamięci, ponieważ moduł wyrzucania elementów bezużytecznych JavaScript ma możliwość usuwania nieużywanych obiektów. Aby poprawić wydajność, wygenerowany kod pośredni zestawu WebAssembly używa rozszerzeń SIMD do organizowania operacji równoległych operacji na danych.

Cheerp może być używany jako platforma do tworzenia wbudowanych aplikacji internetowych klient/serwer w C++. W obecnej praktyce powszechne jest tworzenie oddzielnego front-endu opartego na przeglądarce, napisanego w JavaScript i oddzielnego back-endu napisanego w PHP, Pythonie, Ruby lub JavaScript/Node.js.

Cheerp zapewnia środki do tworzenia kompletnych aplikacji internetowych C++, które obsługują zarówno backend, jak i frontend w jednej bazie kodu.

Podczas procesu kompilacji strona serwera jest kompilowana do kodu natywnego, a interfejs jest konwertowany na reprezentację JavaScript. Debugowanie wszystkich komponentów projektu, w tym przekonwertowanych do JavaScript, odbywa się z wykorzystaniem tekstów źródłowych C++ z wykorzystaniem technologii Source Map.

Wreszcie, jeśli chcesz dowiedzieć się więcej na ten temat, możesz sprawdzić szczegóły w następujący link.

Kod kompilatora jest oparty na rozwiązaniach LLVM i Clang i zawiera dodatkowe optymalizacje w celu poprawy wydajności i zmniejszenia rozmiaru skompilowanych danych wyjściowych.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: AB Internet Networks 2008 SL
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.