Start

HL++ (High Level C++) to zestaw bibliotek specjalistycznych umożliwiający programowanie naukowe w C++. Został stworzony w celu ułatwienia pracy nad zagadnieniami statystycznymi i matematycznymi. Pakiet oddaje do dyspozycji użytkownika znane obiekty matematyczne (np. macierz, tabela, wykres) i ogólne (np. tekst, data) wraz z kompletem funkcji umożliwiających programowanie wysokiego poziomu, podobne jak w językach specjalistycznych, typu R czy Matlab, ale ukierunkowane na złożone projekty obiektowe i dające rozwiązania o większej wydajności obliczeniowej.

  Uniwersalność

Obliczenia wykonywane za pomocą HL++ bez trudu mogą być wykorzystane w dowolnym projekcie C++. Programy naukowe są pisane instrukcjami bliższymi języka naturalnego niż w standardowym C++, a przy tym zachowane są wszystkie zalety uniwersalnego języka programowania, z których w miarę potrzeb może skorzystać.

• Łatwe programowanie funkcji dzięki statycznemu typowaniu zmiennych
• Wiele rozwiązań wbudowanych – przeciążanie funkcji i operatorów, swobodne zarządzanie pamięcią, tworzenie wzorców kodu, obsługa wyjątków
• Standardowe kontenery danych (liczba zespolona, lista, mapa, kolejka, stos, krotka itp.)
• Możliwość pisania aplikacji okienkowych (wxWidgets, Quick Time)
• Wieloprocesorowość (OpenMP)
• Wielozadaniowość – uruchamianie zadań na wielu maszynach, pracujących pod kontrolą dowolnych systemów operacyjnych (Tasks)
• Wieloplatformowość kodu (Windows/Linux)

  Szybkość działania

Kod programu w HL++ jest kompilowany, co zapewnia największą szybkość działania, w niektórych przypadkach nawet do kilkuset razy większą od uzyskiwanej w językach interpretowanych lub częściowo kompilowanych (np. Matlab, R, Python). Przykładowo, wielokrotne wywołania funkcji przy rekurencji oraz instrukcje pętli nie spowalniają programu i nie są przeszkodą, którą trzeba obchodzić. Poniżej porównanie czasów wykonania przykładowych algorytmów napisanych w HL++ i R.

Micro benchmarkCzas HL++Czas RCzas R/Czas HL++
recursion_fibonacci3,7128071210325,9x
userfunc_mandelbrot0,1559991064,1x
recursion_quicksort62.399892273043,8x
iteration_pi_sum15,60010744028,2x
parse_integers15,444021503,2x
matrix_statistics62,400037601,0x
matrix_multiply904,9020198901,0x
print_to_file218,4000091900,9x

Testy wykonano dla kompilatora g++ v4.9.2 i R v.3.5.1 na komputerze z procesorem Intel i5

  Produktywność

W porównaniu do czystego C/C++ rozszerzenie HL++ pozwala pisać programy łatwiej. Dzięki wprowadzeniu różnego rodzaju obiektów i funkcji matematycznych i innych użytkownik ma do dyspozycji całą gamę gotowych rozwiązań. HL++ cechuje wysoka produktywność programowania, co można wykazać porównując długość kodu programu. Kod przeprowadzonych benchmarków wynosi odpowiednio:

Różnica długości między HL++ a R czy Matlabem bierze się stąd, że te ostatnie są pozbawione linii z deklaracjami zmiennych. Brak tych deklaracji w większym projekcie utrudnia wykrywanie błędów typów.

  Kompletność

HL++ udostępnia operacje na danych, metody numeryczne i działania macierzowe, za pomocą których można zapisać dowolny algorytm realizujący postawione zadanie naukowe. W porównaniu do innych języków przeznaczonych do analiz, HL++ pozwala zaimplementować komplet algorytmów obejmujący rozwiązania niemożliwe do zaimplementowania w innych językach analiz ze względu na niedostępność lub niepełną efektywność mechanizmów programistycznych, takich jak:
• rekurencja i pętle
• mechanizm wskaźników
• zarządzanie pamięcią
• kontrola wątków i zasięgu zmiennych przy wieloprocesowości

Jednocześnie można korzystać z gotowych funkcji R i przykładowo:
• przekształcać dane w gramatyce Dplyr lub za pomocą Tidyr
• modelować z użyciem pakietów Caret lub MLR

W pakiecie HL++ istnieje rozwiązanie R Tools ułatwiające pracę z kodami R. Przygotowane zostały narzędzia odpowiadające za podświetlanie składni R, Help do R i uruchamianie kodów R w środowisku Code::Blocks.

  Rozwojowość

Język C i jego odmiany (C++, C#) należą do najpopularniejszych języków programowania. Daje to gwarancję, że przygotowane oprogramowanie będzie przez najbliższe lata wspierane poprzez rozwój narzędzi programistycznych, jak i samego języka. Indeks popularności TIOBE dla maja 2018:

Wysoki ranking w zestawieniu TIOBE przekłada się na dużą ilość dostępnego w Internecie oprogramowania i stron tematycznych:
• darmowe narzędzia do dowolnego tematu (Oracle, Excel, Python, Gzip, R, PDF, XML)
• biblioteki matematyczne (np. GNU Scientific Library, NAG C++ Library, Boost)
• kursy, tutoriale, pomoce i fora

Język C++ jest stale rozwijany i aktualizowany. W cyklu 3-letnim wychodzą jego nowe standardy, ostatni to C++17 udostępniony w 2017 roku.