2009-09-10 10 views
9

Mam projekt strony serwera w języku C++, w którym muszę osadzić pewne skrypty. Jest to część serwera typu MMO online. Mam duże doświadczenie w korzystaniu z TCL i wydaje mi się, że to naturalne dopasowanie. Zrobiłem minimalną ilość Lua w dniach mojej gry i zastanawiam się, czy to może być lepszy język dla skryptów osadzonych. Dobrze jest także nauczyć się nowego języka. Jakie są względne mocne i słabe strony TCL vs Lua? Dzięki!TCL vs Lua - wykonywanie skryptów na serwerze mmo

Odpowiedz

20

Szczerze, oboje doskonale nadają się do tego zadania. Oba są łatwe do osadzenia w aplikacji i mają dość prostą składnię. Wiem, że bardzo proste jest dodawanie nowych komend (do interakcji z aplikacją) w Tcl, a mi się mówi, że Lua jest bardzo dobra w tego typu sprawach.

Moją rekomendacją byłoby zabawić się z Luą przez jakiś czas, aby zobaczyć, jak ci się podoba (skoro już znasz Tcl) ... a następnie wybierz ten, który najbardziej Ci odpowiada. Jeśli piszesz dużo kodu, skończysz z nim pracować, więc będziesz potrzebował czegoś, z czego możesz skorzystać. Ostatecznie, oba języki powinny być dość łatwe dla twoich końcowych użytkowników.

Moje osobiste preferencje to Tcl, zarówno dlatego, że nie lubię Lua (zrobiłem rozsądną ilość programowania w nim dla Warcraft addons) i ponieważ uwielbiam Tcl (zrobiłem w nim wiele programów do pracy profesjonalnej i prywatnej).

Edycja: Dodano notatkę, że obie są łatwe dla użytkowników końcowych. Otrzymałem 2 głosy w dół i nie mogłem wymyślić nic innego, co mogłoby być inne niż wyjaśnienie, dlaczego część mojego oświadczenia.

6

Interfejs API Lua C jest wyjątkowo łatwy do zintegrowania z aplikacją. Z C masz pełny dostęp do stanu Lua i jego natywnych typów danych. Zalecam używanie Lua tylko po to, aby uzyskać implementację tabeli mieszania, nawet bez konieczności wykonywania skryptów.

Funkcje Lua zapisane w C mogą być wprowadzane jako nazwy globalne, gromadzone w tabeli, jak większość standardowych funkcji bibliotecznych, lub implementowane w bibliotekach DLL i ładowane dynamicznie w środowisku wykonawczym. Pozwala to aplikacji na zapewnienie stabilnego API, a także na obsługę wtyczek napisanych w języku Lua lub C.

Lua jako język jest zaskakująco potężny, ze wsparciem dla stylów programowania funkcjonalnego i obiektowego. Jest także zaskakująco lekki: kompletny zestaw źródłowy i pełna dokumentacja mieszczą się w dobrze poniżej 1 MB, a cała VM, kompilator i standardowe biblioteki w bibliotece DLL mają tylko 164 KB w systemie Windows.

Nie badałem poważnie TCL od wersji 2 lub więcej ... Nie będę próbował ich porównywać w konkretny sposób. Sądzę, że obaj zostali wymyśleni, aby pasować do tej samej niszy i mniej więcej w tym samym czasie. Z pewnością są to zarówno dojrzałe języki, jak i popularne społeczności użytkowników.

7

Podejrzewam, że Tcl będzie miał więcej bibliotek, które mogą okazać się potrzebne lub wygodne po drodze.

16

Sądzę, że jestem przeciwieństwem RHSeeger. Używałem zarówno Lua, jak i TCL osadzonych w grach (w nawiasie gier online) i nie tknęłbym TCL ponownie z bargepolką 10 ', gdybym miał wybór. Moją bardzo subiektywną opinią jest to, że Lua jest rozsądnym językiem, a TCL nie. W porównaniu do innych opcji języków skryptowych, składnia TCL jest bardzo niejasna dla większości ludzi, ze wszystkimi znakami zestawu, wyrażenia i dolara i wieloma nawiasami itp. Jedyną obiektywną korzyścią jest łatwość osadzania - ale Lua nie jest garbaty w w tym dziale.

Jeśli ten interfejs skryptowy jest wyłącznie dla Ciebie, możesz równie dobrze przejść do TCL, ponieważ Lua nie zaoferuje ci niczego nowego (chyba, że ​​zorientujesz się na obiekt). W rękach doświadczonego użytkownika TCL jest rozsądnym narzędziem.Jeśli jednak spodziewasz się, że mniej doświadczeni użytkownicy skorzystają z systemu, to skorzystaj z Lua - prostsza składnia zapewni im dużą produktywność.

+5

Uważam za zabawne, że możemy mieć tak odmienne opinie. Wszystko, co mówisz, sprawia, że ​​Lua jest lepsza niż Tcl, jest to coś, co powiedziałbym, że czyni Tcl lepszym od Lua. Składnia Tcl jest dla mnie znacznie czystsza i bardziej oczywista niż Lua, itd. – RHSeeger

+10

Zgadzam się z RHSeeger na komentarz, że "co powiesz o Lua powiedziałbym o Tcl". Ty (Kylotan) powiedziałeś, że myślałeś, że Lua jest lepsza dla mniej doświadczonych użytkowników, ale myślę też, że jest odwrotnie. Głównym problemem z Tcl IMO jest to, że doświadczeni programiści mają za sobą zbyt dużo bagażu - oczekiwania co do tego, jak powinien działać język. Tcl jest niekonwencjonalny ze względu na swoją prostotę, ale ta prostota jest jego siłą. Wszystko, co musisz wiedzieć o Tcl, możesz wyrazić na jednej stronie internetowej. –

+3

To jest na granicy rozprzestrzeniania się w "wojnach językowych". Myślę, że jest to kwestia odpowiedniego narzędzia do pracy i, poza składnią, oba narzędzia w tym przypadku są prawie tak samo dopasowane, ale moim zdaniem Tcl wygrywa z powodu swojej dojrzałości, a zatem jest biblioteką; w rzeczy samej Lua wydaje się notorycznie tygodniowy w tym dziale. Jeśli chodzi o składnię, tak Lua może wydawać się bardziej znajoma, prawie Basic/Python-esque, i to rzeczywiście może być siła. Ale dla tych, którzy tylko zarysowali powierzchnię Tcl, zachęcam was: drapcie głębiej. Kiedy go "zdobędziesz", jest praktycznie na tym samym poziomie, co "dostanie" Lispa lub Haskella. –

7

Jak stwierdzili inni, oba języki będą działać bardzo dobrze. Trzecią opcją, która równie dobrze mogłaby działać, jest JavaScript, ponieważ pasuje ona mniej więcej do tej samej niszy. Zamiast próbować Woo Cię do jednego lub drugiego (Ponieważ bardzo lubię oba języki) spróbuję skupić się na niektórych obiektywnych różnicach i wskazać, gdzie myślę, że jedno wyprzedza drugie.

Najważniejszą kwestią występującą na serwerze gry może być surowa wydajność. Oba języki są dojrzałe i dobrze zoptymalizowane, ale jednocześnie zdają sobie sprawę, że niektóre problemy najlepiej zoptymalizować poprzez odroczenie skompilowanego kodu. Oba języki używają zasadniczo tego samego mechanizmu do wykonania tego. Z punktu widzenia samych języków wygląda na to, że Lua jest trochę szybsza. link

Z punktu widzenia bibliotek, który jest kolejnym ważnym czynnikiem, żaden język nie wymaga użycia żadnych bibliotek, aby były użyteczne; to znaczy, że oba języki są bardzo zwarte, w porównaniu do języków takich jak Java, które wymagają dużych bibliotek runtime; Ponownie, jest to konsekwencja ich pierwotnych wymagań projektowych. Oba języki mają obfite biblioteki do wyboru, ale moim zdaniem przynajmniej TCL ma nieco więcej różnorodności w tej kategorii. tcl :(Tcl Extension Archive/Tcl Extension Repository) lua: (LuaForge)

Kolejna różnica dotyczy samych podstawowych języków. Oba języki cenią prostotę nad stylem, ale właśnie tam kończy się podobieństwo. Lua wykorzystuje większość składni dla większości programistów, z bardzo prostą gramatyką bez kontekstu. Składnia TCL jest również prosta, ale tak naprawdę nie ma nic wspólnego z innymi istniejącymi językami, chociaż wygląda trochę podobnie jak język powłoki UNIX. Tcl jest prawdopodobnie łatwiejszy dla nieprogramistów, ponieważ jego składnia poleceń zorientowana liniowo jest całkiem jasna, ale programiści doświadczeni w innych językach zwykle sprzeciwiają się jej tajemnej składni. Żadne z nich nie jest strasznie wybaczające pod względem generowania kodu, ale oba mają silne możliwości metaprogramowania (porównywalne, ale być może nie tak solidne, jak makra CLISP).

+0

Nie myślałem o JavaScript. To jest możliwy pomysł ... –

+1

Javascript może mieć tę zaletę, że jest znajomy zwykłym programistom, ale ma wadę nielicznych bibliotek uruchomieniowych, przynajmniej dla implementacji C. – SingleNegationElimination

0

Lua ma LuaJIT, który jest kompilator JIT że osiąga prędkość C na wąskich pętli i służy do projektów jak Snabb Switch, w którym wydajność jest krytyczne (Zasady gry może obsługiwać gigabitów na sekundę, wszystkie przetwarzane przez LuaJIT). LuaJIT ma również łatwy w użyciu FFI, który pozwala na dostęp do funkcji C bez wpisywania kodu C.

PUC-Lua (standardowa implementacja) obsługuje odzyskiwanie po wyczerpaniu pamięci. Ani LuaJIT, ani TCL nie.

Powiązane problemy