Thread View: pl.comp.lang.tcl
2 messages
2 total messages
Started by Googie
Tue, 10 Jan 2006 08:52
Mechanizm stubs
Author: Googie
Date: Tue, 10 Jan 2006 08:52
Date: Tue, 10 Jan 2006 08:52
25 lines
1948 bytes
1948 bytes
W wątku o libgg Wojciech K. wspomniał o stubs'ach. Przy okazji pisania rozszerzeń spotykałem się z tym zagadnieniem i próbowałem je zrozumieć, ale dokumentacja na ten temat jest dla mnie niezrozumiała. Wiem, że pozwala on (mechanizm) na używanie danego rozszerzenia w postaci binarnej, z różnymi wersjami Tcl zainstalowanymi u różnych osób (nie koniecznie takimi samymi jak wersja, z którą zostało to rozszerzenie skompilowane), czyli "Tcl version-independent". Wiem też że w dalszej analizie można dzięki temu pisać rozszerzenia, które można potem skompilować i używać na różnych Linuksach bez potrzeby rekompilowania, na różnych BSD, itd (statyczne linkowanie z innymi bibliotekami, których używa rozszerzenie). Czyli ostatecznie - jest sens, żeby takie rozszerzenie wsadzać do starkit'a i w takiej postaci rozprowadzać. Nie rozumiem tylko na jakiej zasadzie to działa i dlaczego implementacja stubs wygląda (IMO) tak dziwacznie? Aha - i czy te deklaracje w nagłówku to wszystko co trzeba zrobić, żeby w pełni zaimplementować stubs? Będę wdzięczny za wyjaśnienia :) -- Pozdrawiam! Googie
Re: Mechanizm stubs
Author: Wojciech Kocjan
Date: Tue, 10 Jan 2006 11:17
Date: Tue, 10 Jan 2006 11:17
43 lines
2919 bytes
2919 bytes
On Tue, 10 Jan 2006 09:52:59 +0100, Googie <no@spam.org> wrote: > W wątku o libgg Wojciech K. wspomniał o stubs'ach. Przy okazji pisania > rozszerzeń spotykałem się z tym zagadnieniem i próbowałem je zrozumieć, > ale dokumentacja na ten temat jest dla mnie niezrozumiała. Fakt, też długo nie rozumiałem. > Wiem, że pozwala on (mechanizm) na używanie danego rozszerzenia w > postaci binarnej, z różnymi wersjami Tcl zainstalowanymi u różnych osób > (nie koniecznie takimi samymi jak wersja, z którą zostało to > rozszerzenie skompilowane), czyli "Tcl version-independent". Wiem też że > w dalszej analizie można dzięki temu pisać rozszerzenia, które można > potem skompilować i używać na różnych Linuksach bez potrzeby > rekompilowania, na różnych BSD, itd (statyczne linkowanie z innymi > bibliotekami, których używa rozszerzenie). Założenie jest takie, że Tcl_InitStubs pobiera z Tcl_Interp wskaźnik do struktury, która wskazuje na wszystkie funkcje Tcl. Podobnie z Tk. Nie musisz łączyć z konkretnym libtcl*.so. To dobre, bo np zlinkowanie -ltcl8.3 nie zadziała z 8.4, a stubs pozwala zlinkować z każdą wersją. Jeśli chodzi o wykorzystanie to -DUSE_TCL_STUBS, w *_Init i *_SafeInit robisz Tcl_InitStubs (przykład w tclgg) i potem już niczym się to nie różni. Jedyny minus - nie możesz linkować wewnętrznych funkcji Tcl, ale to zrozumiałe, że tego się nie powinno robić (jedynie BLT to robi i dlatego jest linczowane często :-) ... > Czyli ostatecznie - jest sens, żeby takie rozszerzenie wsadzać do > starkit'a i w takiej postaci rozprowadzać. > > Nie rozumiem tylko na jakiej zasadzie to działa i dlaczego implementacja > stubs wygląda (IMO) tak dziwacznie? Aha - i czy te deklaracje w nagłówku > to wszystko co trzeba zrobić, żeby w pełni zaimplementować stubs? Dlaczego dziwacznie? > Będę wdzięczny za wyjaśnienia :) Jak nadal nie rozumiesz to znasz moje gg i tclgg :-) -- WK
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads