Styl programowania

  • Każde łączenie dwóch języków (za pomocą sieci lub FFI (foreign function interface)) powinno się odbywać przy użyciu dobrze zdefiniowanego i opisanego API w danym języku. Przykładowo łącząc kod C++ i Python'a w projekcie powinien być zdefiniowany poprawny interfejs Pythonowy do kontaktu z C++, a biblioteka C++ powinna mieć swój własny interfejs, na podstawie którego stworzony zostanie interfejs dla Python'a.
  • Aplikacja (łącznie z interfejsem użytkownika) może być napisana albo w języku polskim albo angielskim, przy czym preferowany jest język angielski
  • Projekt powinien zostać napisany w jednym, konkretnym stylu. Dobrym pomysłem jest użycie narzędzia do formatowania kodu, np. black dla Python'a, rustfmt dla Rust'a i clang-format dla C++.
  • Ostrzeżenia przy kompilacji/wykonaniu będą karane punktowo. Dla C++ proszę użyć przynajmniej tych flag: -Wall -Wextra -pedantic -Werror.
  • Dobrym pomysłem jest użycie narzędzi do statycznej analizy kodu (ang. linters), przykładami takich narzędzi są ruff dla Python'a, clippy dla Rust i cppcheck dla C++.
  • Kod aplikacji powinien być stworzony zgodnie z dobrą praktyką programistyczną, m.in.:
    • Brak 'magicznych' wartości zaszytych w kodzie
    • Podział na moduły/klasy/metody zgodnie z paradygmatem danego języka
    • Dokumentacja obejmująca cały kod
    • Stosowanie jednolitej konwencji nazewnictwa
    • Konsekwentne używanie jednego języka naturalnego przy nazewnictwie (albo polski albo angielski)
  • W przypadku użycia C++ proszę stosować się do rad dra Biedrzyckiego
  • Kod zawierający niezdefiniowane zachowanie (ang. undefined behavior) jest niedopuszczalny - w celu sprawdzenia swojego kodu pod tym kątem w C++ można użyć tzw. 'Undefined Behavior Sanitizer', podając przy kompilacji flagę -fsanitize=undefined i uruchamiając aplikację (ubsan raportuje błędy podczas działania programu, a nie na etapie kompilacji).