Widziałem artykuły omawiające te dwa podobne frameworki, ale większość z nich ma mniej więcej dwa lata. Zakładam, że oba projekty są teraz znacznie bardziej dojrzałe niż dwa lata temu, a sytuacja jest bardziej złożona.

Biorąc więc pod uwagę obecny stan każdej z bibliotek, miałem nadzieję, że ktoś dostarczy szczegółowego wyjaśnienia zalet i wad każdej z nich, co w chwili obecnej powinno być preferowane.

20
cloudraven 18 lipiec 2011, 04:36
Nie wiem, dlaczego są 2 zamknięte prośby. Pytanie jest jak najbardziej zasadne.
 – 
leppie
20 lipiec 2011, 16:56
Dlaczego głosy na „niekonstruktywne”? Pytanie dotyczy faktów i aktualnego stanu projektu, a nie „który bardziej Ci się podoba”. Proszę, nie bądźcie skreśleni z SO ;)
 – 
viraptor
20 lipiec 2011, 16:58
2
Ciekawi mnie też to pytanie. Przyjemna szczegółowa odpowiedź porównująca te dwie rzeczy byłaby bardzo mile widziana, więc ustawię tutaj nagrodę. :-)
 – 
Noldorin
17 wrzesień 2011, 19:08
Dzięki za ustalenie nagrody. Mamy tu bardzo fajną odpowiedź
 – 
cloudraven
1 październik 2011, 00:19

2 odpowiedzi

Najlepsza odpowiedź

CCI

Plusy:

  • Może zapewnić dokładniejszą kontrolę nad wydajnością
  • Najnowsza wersja jest nieco bardziej dojrzała

Cons:

  • Model obiektowy jest bardziej skomplikowany (i mylący, jeśli jesteś nowy w odbiciach IL/niskopoziomowych, tak jak ja)

Cecil (odnosi się do nowszej wersji git-hub)

Plusy:

  • Ma prostszy model obiektowy, więc łatwiej będzie zacząć

Cons:

  • Najnowsza wersja jest mniej dojrzała, więc dostępnych jest mniej próbek kodu
  • API to praca w toku
  • Nie będziesz mieć tak dużej kontroli nad buforowaniem nazw (dla wydajności)

Który bym wybrał

Analizując zalety i wady, wygląda na to, że wybrałbym CCI zamiast Cecila. Ale nie zrobiłbym tego.

Cecil jest dobrze prosperujący, ma łatwy projekt API, ma aktywne autorstwo (dobrze, 7,5 miesiąca temu, i nadal wydaje się, że teraz) i bezbolesne było debugowanie każdego napotkanego problemu.

Programowanie CCI było dość bolesne — projektowanie oparte na interfejsie jest za daleko. Kod jest trudny do debugowania. Niektóre rzeczy na pierwszy rzut oka wydają się kompletne, ale nie są lub nie obsługują więcej niż jednego przypadku użycia. Treści NameTable sprawiły, że zakręciło mi się w głowie (więcej niż już było).

12
Merlyn Morgan-Graham 22 wrzesień 2011, 07:36
Nie pamiętam, ale myślę, że CCI ma lepszą obsługę generowania kodu na wysokim poziomie. Wsparcie było również dobre/szybkie dla Cecila :)
 – 
Merlyn Morgan-Graham
17 wrzesień 2011, 19:22
Czy możesz przedstawić jakieś bezpośrednie dowody na niektóre z tych komentarzy? Ciekawi mnie też wydajność. Podejrzewam, że Cecil włożył w to o wiele więcej pracy. Wydaje się, że jest również częściej używany w projektach open-source. jakieś pomysły?
 – 
Noldorin
22 wrzesień 2011, 06:56
@Noldorin: To jest moje anegdotyczne doświadczenie z wypróbowania obu 7 i pół miesiąca temu. Dostałem półdziałające rozwiązanie w CCI i porzuciłem je dla Cecila. Tak, prawdopodobnie od tamtego czasu włożono w to dużo więcej pracy, Cecil. Pamiętam, że moje największe problemy dotyczyły: wykrywania wszystkich typów zależnych, określania typów bazowych i generowania kodu. Mój projekt polegał na zastanowieniu się nad wykresem typów i wyczyszczonymi wersjami typów z generowaniem kodu, przy użyciu list zamiast tablic, typów dopuszczających wartość null itp. CCI zapewniało automatyczne (ale niekompletne?) przechodzenie po wzorcach użytkowników. Nie sądzę, żeby Cecil to zrobił.
 – 
Merlyn Morgan-Graham
22 wrzesień 2011, 07:09
@Noldorin: Myślę też, że CCI miało obsługę kodowania na wysokim poziomie (?), a Cecil nie. Użyłem więc szablonów T4 do generowania kodu po utworzeniu podstawowych typów/właściwości. Przepraszam, jeśli cokolwiek z tego okaże się dezinformacją, po prostu nie dotykałem tego odkąd skończyłem ten projekt. Zajęło mi trochę kodowania bohaterów... :)
 – 
Merlyn Morgan-Graham
22 wrzesień 2011, 07:10
1
@cloudraven: Nie wiem, o ile więcej kontroli to naprawdę daje. Pozwala zoptymalizować wydajność za pomocą tabeli ciągów, ale poza tym myślę, że mają one techniczną parzystość z kodami operacji, które pozwalają emitować i gdzie pozwalają je emitować. CCI ma wysokopoziomowe opakowanie do obsługi generowania kodu, ale nie zawsze jest to przydatne (np. jeśli jesteś podobny do mnie i wolisz/możesz użyć szablonu T4 do wykonania rzeczywistego generowania kodu).
 – 
Merlyn Morgan-Graham
1 październik 2011, 00:40

Cecil - bo dla mnie wsparcie społeczności jest lepsze niż CCI. Zawsze szybciej znajdowałem odpowiedzi na listach mailingowych/witrynach dla cecil.

1
Vijay Gill 20 lipiec 2011, 16:52