Od najdłuższego czasu chciałem zaprojektować język programowania, który łączyłby się z rozszerzalnością z wydajnością (i bezpieczeństwem, łatwością użytkowania itp.) Niedawno odkryłem na nowo D i zastanawiam się, czy D 2.0 jest prawie językiem, który chciałem siebie. Najbardziej podoba mi się potencjał metaprogramowania; teoretycznie, czy system D'in traits może włączyć następujące funkcje podczas kompilacji?Czy D jest wystarczająco potężny dla tych funkcji?
Run-time refleksja: są odzwierciedleniem czasu kompilacji funkcje wystarczające do zbudowania systemu odbicie run-time A La Java/.NET?
Konwersja kodu: za pomocą metaprogramu utwórz C#/C++/etc. wersje twojego programu D za każdym razem, gdy je skompilujesz (punkt bonusowy, jeśli komentarze do doktora mogą być propagowane).
Cechy. Nie mam na myśli metaprogramming traits wbudowany w D, mam na myśli object-oriented traits for class composition. Program D wskazywałby zestaw cech do komponowania, a metaprogram je komponował.
Jednostka wnioskowania silnika: Podano trochę notacji dla opcjonalnych jednostek wskazujących, np.
unit(value)
, czy metaprogram D mógłby zbadać poniższy kod, określić właściwe jednostki i wysłać komunikat o błędzie w ostatnim wierszu? (Napisałem coś takiego dla boo więc mogę was zapewnić, jest to możliwe w ogóle, całego programu):auto mass = kg(2.0); auto accel = 1.0; // units are strictly optional auto force = mass*accel; accel += metresPerSecondSquared(9.81); // units of 'force' and 'accel' are now known force += pounds(3.0); // unit mismatch detected
Nie miałem zamiaru sugerować, że konwerter powinien obsługiwać wszystkie funkcje, w tym język asemblerowy :), ale po prostu pomysł, że D może sprawdzić kod wystarczająco głęboko, aby * dokonać * konwersji. – Qwertie
W ten sposób można napisać program w D, C++ i C# jednocześnie, ograniczając się do pewnego podzbioru D. Oczywiście musiałbyś np. konwertuj argumenty szablonu lambda na argumenty wykonawcze lub automatycznie replikuj szablony z różnymi argumentami, zgodnie z ograniczeniami języka docelowego. Takie narzędzie do konwersji może sprawić, że D będzie bardziej atrakcyjny do pisania określonych bibliotek, zwłaszcza algorytmów i egzotycznych struktur danych, choć zdaję sobie sprawę, że nie musi to być konieczne przy metaprogramowaniu. – Qwertie
Jest możliwe, że wierzę, ale wymagałoby to tłumacza języka podczas kompilacji ... Byłby to ogromny projekt ... – DejanLekic