🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.tcl
2 messages
2 total messages Started by Googie Tue, 10 Jan 2006 08:52
Mechanizm stubs
#303
Author: Googie
Date: Tue, 10 Jan 2006 08:52
25 lines
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
#304
Author: Wojciech Kocjan
Date: Tue, 10 Jan 2006 11:17
43 lines
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