W ciągu ostatnich kilku dni poczyniłem trochę postępów w przepisywaniu projektu Universe w języku Rust.
Przed zabraniem się za właściwy projekt musiałem przygotować pod niego trochę gruntu. Ze względu na wielkość liczb pojawiających się w programie, korzystałem z bibliotek GMP i MPFR, pozwalających na wykonywanie obliczeń na dowolnie dużych liczbach. Oprócz tego, korzystałem z algorytmu xxhash. Problem? Wszystkie 3 elementy były napisane w języku C.
Problem nie był szczególnie trudny do pokonania, gdyż jedną z zalet Rusta jest łatwość łączenia go z bibliotekami napisanymi w C. Konieczne było jedynie znalezienie lub stworzenie modułów, które ułatwią takie połączenie. Podjąłem więc poszukiwania.
Najpierw skupiłem się na GMP i MPFR. Do biblioteki GMP znalazłem 2 moduły, do MPFR - jeden (stworzony przez autora jednego z modułów do GMP). Po przyjrzeniu się im, uznałem, że łatwiejszy w użyciu będzie moduł GMP nie mający odpowiednika do MPFR, co zostawiło mnie z zadaniem napisania własnego. Ponadto moduł GMP był stary i nie kompilował się w najnowszej wersji języka.
Zabrałem się więc do pracy. Naprawienie modułu GMP okazało się żmudne, ale nie przedstawiające sobą większych trudności. Stworzenie modułu do MPFR podobnie, choć tutaj żmudności było jeszcze więcej (pisanie wielu podobnych funkcji, których jedynym zadaniem jest wywołanie ich odpowiedników z C...). Oba moduły są na GitHubie (klik, klik). Poprawioną bibliotekę GMP podesłałem autorowi oryginału, jednak okazał się on nie być zainteresowany dalszym utrzymywaniem jej kodu.
Potem przyszła kolej na xxhash. Tu, podobnie jak w przypadku GMP, moduł istniał, lecz się nie kompilował. Chwila pracy pozwoliła poprawić błędy i otrzymać działającą wersję biblioteki.
Mam w tej chwili zatem działające moduły, od których projekt jest zależny. Zacząłem również przepisywać kod samego projektu, jednak na razie gotowy jest tylko niewielki jego fragment. Wiadomości o dalszych postępach - (oby) wkrótce.