2012-06-09 12 views
6

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?

  1. Run-time refleksja: są odzwierciedleniem czasu kompilacji funkcje wystarczające do zbudowania systemu odbicie run-time A La Java/.NET?

  2. 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).

  3. 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ł.

  4. 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 
    

Odpowiedz

7

Run-time refleksja: są odzwierciedleniem czasu kompilacji dysponuje wystarczającą do zbudować działający w czasie rzeczywistym system refleksyjny a la Java/.NET?

Tak. Możesz uzyskać wszystkie potrzebne informacje w czasie kompilacji, korzystając z __traits i tworzyć struktury danych środowiska wykonawczego, których potrzebujesz do odzwierciedlenia w czasie wykonywania.

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).

Nie, po prostu nie jest to możliwe bez względu na to, jak potężny jest D. Niektóre funkcje po prostu się nie przenoszą. Na przykład D ma wbudowany asembler, który jest w 100% niemożliwy do przekonwertowania na C#. Żaden język nie może bez żadnej możliwości konwersji na wszystkie inne języki.

Cechy. Nie mam na myśli cech metaprogramowania wbudowanych w D, mam na myśli obiektowe cechy kompozycji klasowej. Program D wskazywałby zestaw cech do komponowania, a metaprogram je komponował.

Możesz użyć do tego celu template mixins, mimo że nie zapewniają one wykluczenia metod.

Jednostka wnioskowania silnika: Podano trochę notacji dla opcjonalnych jednostek wskazujących, np. jednostka (wartość), czy metaprogram D mógłby zbadać poniższy kod, wyprowadzić właściwe jednostki i wydać komunikat o błędzie w ostatnim wierszu? (Napisałem coś takiego, bo mogę cię zapewnić, że jest to możliwe ogólnie: programowanie):

Tak, to jest proste w D.Jest już at least one implementation.

+0

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

+0

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

+0

Jest możliwe, że wierzę, ale wymagałoby to tłumacza języka podczas kompilacji ... Byłby to ogromny projekt ... – DejanLekic

Powiązane problemy