2015-05-27 51 views
9

Przez krótki czas analizowałem biblioteki quasi-cytatów dla Haskella. Biblioteki te pozwalają Haskell na integrację z innymi językami. Do integracji z C, wydaje się, że dwa pakiety o podobnej funkcjonalności:Jakie są różnice między inline-c i language-c-inline?

Jak szukam zbudować bibliotekę quasi-notowanie moje własne, interesują mnie wybory projektowe, różnice API, wydajność itp.

Jedyna różnica jaką znam to to, że language-c-quote obsługuje C i Objective-C, natomiast inline-c obsługuje C.

Jak wyróżniłbyś te pakiety? Jakie są podstawowe różnice? Czy w rzeczywistości są podobne?

Odpowiedz

7

Niektóre różnice gdzie (na krótko) omówione w inline-c's reddit announcement:

Jak to porównać do języka-c-inline?

  • W inline-c mamy bardzo prostą bibliotekę rdzenia, który jest łatwo rozszerzalny o dodatkowe anty quoters. Chciałem, aby podstawowa funkcjonalność była bardzo przewidywalna i sprawić, że bardziej zaawansowane urządzenia zostaną dostosowane do konkretnych przypadków użycia. W trybie language-c-inline układ rozrządowy działa z użyciem kombinacji zakodowanych reguł i funkcji szablonu Haskella dostarczanych przez użytkownika.
  • Chcieliśmy, aby język zawierał kod C tak prosty, jak to tylko możliwe. Inline C jest spliced ​​z quasi quoter i nie działa szablon Haskell. Wewnętrzny kod C określa zmienne Haskella do przechwytywania za pomocą anti-quoterów, a typy docelowe są wszystkie określone za pomocą składni C. Jak już mówiłem w poście na blogu, bardzo mnie to obchodziło, aby mieć pewność, że to, co dostajesz w C, jest tym, czego oczekujesz. W związku z tym badane są tylko anty-cytaty: reszta kodu C nie jest parsowana i pozostawia dosłowny, więc nie musimy się martwić o ewentualne niezgodności między kompilatorem C, którego używa użytkownik, a parserem Haskell C, który używa language-c-inline. .
  • Dbamy również o to, aby infrastruktura i proces budowy przebiegły sprawnie. Funkcja addTopDecl jest używana, aby uniknąć konieczności wypełniania tabel w środowisku wykonawczym, takim jak language-c-inline, a także stosować różne sztuczki, aby upewnić się, że wszystko będzie działać sprawnie w różnych wersjach. Na przykład nazwy wygenerowanych funkcji C są oparte na haszowaniu zawartości samej funkcji. Jest to bardzo ważne, aby zagwarantować, że powtarzające się kompilacje tego samego pliku przez cabal - na przykład podczas kompilacji z obsługą profilowania - powodują wygenerowanie tych samych symboli C, upewniając się, że symbole są takie same tylko wtedy, gdy fragmenty C w module są takie same.

    [...]

W skrócie, dwie biblioteki są bardzo podobne w duchu, ale zakodowany inline-c być lepiej dostosowane do naszych potrzeb przyjmujących różne decyzje projektowe. Niektóre z powyższych zalet można łatwo przenieść do language-c-inline, szczególnie tych z ostatniego punktu.

The announcement on fpcomplete zawiera również dodatkowe informacje, ale w sumie, tak, ich nieco podobne.

+0

Dzięki! Nie zdawałem sobie sprawy, jak ostatnie 'inline-c' było. –