Postanowiłem wreszcie napisać w pygtk coś więcej niż prosty dialog
(ambitne postanowienie, nie?) i zaraz na wstępie się zaciąłem.
Otóż "sercem" powstającego programiku jest pewna (moja prywatna)
biblioteka pisana w C. Coś w stylu:
struct mylib_conf *mylib_init(jakieś parametry);
char *mylib_funkcja(struct mylib_conf *conf,jakieś parametry);
void mylib_free(struct mylib_conf *conf);
przy czym tych "mylib_funkcja" jest oczywiście więcej.
Wszystko pięknie-ładnie, jak z Pythona do C parametry przekazać to się
już naumiałem, jak wyniki pobrać też tylko nie mam pojęcia co mam zrobić
z tym nieszczęsnym "conf". Jest to zupełnie prywatna struktura w
bibliotece, aplikacja nie powinna się jej zawartością interesować tylko
zapamiętać wskaźnik i bez wnikania w szczegóły przekazywać wywoływanym
funkcjom.
No i teraz pytanie: jak to ma wyglądać od strony Pythona, który o ile mi
wiadomo takowych "wskaźników" nie przewiduje?
W Iconie radziłem sobie naokoło (funkcja typu "init" zwracała string z
szesnastkowym zapisem adresu) ale nie wydaje mi się to specjalnie
szczęśliwym rozwiązaniem.
Aha, wszystko to działa na Linuksie, na chwilę obecną inne systemy mnie
nie interesują.
Jakaś idea? Najchętniej coś do podpatrzenia...
ethanak
--
mailto=window.atob('ZXRoYW5ha0Bwb2xpcC5jb20=');
http://www.blubuntu.polip.com/ - a jednak sie da :)
Jesli uzywam interfejsu z biblioteki Python.h to rzutuje taki wskaznik
na intigera i taki adres zapamietuje gdzies w pythonie, a w kodzie c
spowrotem na wskaznik -- nie jest to zbyt eleganckie ale dziala. Mozesz
tez poszukac czegos w bibliotece ctypes, napewno bedzie bardziej
profesjonalnie, a jeszcze lepiej uzyc Boost::Python, genialna
biblioteka! Taki przykladzik z boost python:
----------- plik *.h----------------------
class PotentialFunctions
{
protected:
std::vector<std::vector<numbertype> > learning_set;
std::vector<int> labels;
PotentialFunction *potf;
public:
void learn(std::vector<std::vector<numbertype> >&,
std::vector<int>&); int calculateOutput(const
std::vector<numbertype>&); void setPotentialFunction
(PotentialFunction&);
PotentialFunctions();
PotentialFunctions(const PotentialFunction&);
virtual ~PotentialFunctions();
};
----------- plik *cpp interfejsu miedzy py a c++ ----------------------
deklaracja klasy:
class_<PotentialFunctionsWrapper>("PotentialFunctions", init<>
()) .def(init<const PotentialFunctionWrapper&>())
.def("calculateOutput",
&PotentialFunctionsWrapper::calculateOutput) .def("learn",
&PotentialFunctionsWrapper::learn);
i przykladowy kodzik wrappera:
int PotentialFunctionsWrapper::calculateOutput(list sample)
{
int size = len(sample);
std::vector<numbertype> vec(size);
for (int n=0; n<size; ++n){
vec[n] = extract<numbertype>(sample[n]);
}
return PotentialFunctions::calculateOutput(vec);
}
------------------------------------------------------------
Wszystkie obiekty obsluguje sie tak jak w pythonie
np.: jak masz pythonowy obiekt list to masz tez jego wszystkie metody:
insert, find, index, .....
class_<ExponentialPotentialFunctionWrapper,
bases<PotentialFunctionWrapper> >("ExponentialPotentialFunction",
init<numbertype>());
I mamy udostepniana klase c++ z konstruktorem(tylko z konstruktorem bo
wiecej nie potrzebowalem)
--
Dobra, koniec dyskusji.
Znasz takie zdanie na "p"?
> Dnia Wed, 30 Apr 2008 11:52:19 +0200, Sulsa napisał(a):
> [...]
> > Jesli uzywam interfejsu z biblioteki Python.h to rzutuje taki wskaznik
> > na intigera
>
> Dobra, koniec dyskusji.
>
> Znasz takie zdanie na "p"?
>
Zdania zaczynaja sie z wielkich liter, wiec na "p" nie znam.
A c++ i c to dwa różne języki, weź te se wbij do tego czegoś co masz
zamiast mózgu.
A zdanie się miało zaczynać od "pomyśl", ale fakt, dla Ciebie jako
nieprzyzwyczajonego może być zbyt trudne.
ethanak
PS. Czy to tylko ja mam takie wrażenie że ten pan powinien się znaleźć na
dnie KF-a?
Do takich zabaw dość przyjemny jest Cython [1] [2]. Generalnie pozwala
on w dość prosty sposób opakowywać biblioteki napisane w C.
Co do wskaźników, to zwykle przyjmuje się takie rozwiązanie,
iż struktury z C opakowywane są w klasy (a właściwie typy) Pythona
i dopiero nimi się posługujemy na poziomie Pythona.
Z poniższego przykładu powinieś się pokapować jak to działa.
Tu akurat opakowałem strukturę `dirent` z "dirent.h" typem `Directory`.
Czyli mamy taki prosty programik w C:
<code>
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
int main()
{
DIR* pdir;
struct dirent* pdirent;
pdir = opendir(".");
pdirent = readdir(pdir);
while (pdirent != NULL)
{
printf("%s\n", pdirent->d_name);
pdirent = readdir(pdir);
}
closedir(pdir);
return 0;
}
</code>
Aby analogicznie użyć struktury `dirent` i funcji `opendir`, `readdir`
i `closedir` z poziomu Pythona, możemy zrobić coś takiego:
<code>
# pydir.pyx
cdef extern from "sys/types.h":
ctypedef unsigned long int __ino_t
ctypedef long int __off_t
cdef extern from "dirent.h":
ctypedef struct DIR
cdef struct dirent:
__ino_t d_ino
__off_t d_off
unsigned short int d_reclen
unsigned char d_type
char d_name[256]
DIR* opendir(char* __name)
dirent* readdir(DIR* __dirp)
int closedir(DIR* __dirp)
cdef class Directory:
cdef DIR* c_dir
cdef dirent* c_dirent
cdef object root
def __init__(self, root):
self.root = root
self.init()
cdef init(self):
self.c_dir = opendir(self.root)
self.c_dirent = readdir(self.c_dir)
def __iter__(self):
return self
def __next__(self):
if self.c_dirent != NULL:
dname = self.c_dirent.d_name
self.c_dirent = readdir(self.c_dir)
return dname
closedir(self.c_dir)
raise StopIteration
</code>
Z pliku `pydir.pyx` tworzymy rozszerzenie `pydir.so` Pythona przy pomocy
distutils, czyli takiego pliku `setup.py`:
<code>
# setup.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext as build_pyx
setup(name="PyDir",
ext_modules=[Extension('pydir', ['pydir.pyx'])],
cmdclass = {'build_ext': build_pyx})
</code>
$ python setup.py build_ext -i
W bieżącym katalogu powinien się utworzyć moduł `pydir.so`,
który możemy używać tak:
<code>
# test_pydir.py
import pydir
def listdir(root):
for dname in pydir.Directory(root):
print dname
listdir('.')
</code>
Prawda, że proste? ;)
Cython ma swoje ograniczenia (np. nie obsługuje generatorów), ale w większości
przypadków (przynajmniej moich) się sprawdza.
[1] http://www.cython.org/
[2] http://wiki.cython.org/
RW
> Dnia Wed, 30 Apr 2008 23:26:39 +0200, Sulsa napisał(a):
> [...]
> > Zdania zaczynaja sie z wielkich liter, wiec na "p" nie znam.
>
> A c++ i c to dwa różne języki, weź te se wbij do tego czegoś co masz
> zamiast mózgu.
Jakbys cos mial w tej pustej bani to bys wiedzial ze te jezyki maja
spora czesc wspolna i bez problemu mozna wymieniac miedzy kodem
napisanym w obu struktury danych oraz wywolywac funkcje
>
> A zdanie się miało zaczynać od "pomyśl", ale fakt, dla Ciebie jako
> nieprzyzwyczajonego może być zbyt trudne.
Fakt jakbys nie byl takim skonczonym idiota(mozesz spytac matki czy u
was to dziedziczne bo byc moze to nie twoja wina) to bys przestrzegal
chociaz najprostrze zasady gramatyki, takie o ktorych wie juz trzecio
klasista.
[...]
> Prawda, że proste? ;)
Prościutkie, dokładnie o to mi chodziło. Dzięki!
Troszkę mi to zmieniło koncepcję modułu, ale mam wrażenie że na bardziej
"pytoniasty" sposób :)
Idę czytać o cythonach i pyrexach.
> Jakbys cos mial w tej pustej bani to bys wiedzial ze te jezyki maja
> spora czesc wspolna i bez problemu mozna wymieniac miedzy kodem
> napisanym w obu
Nom, szczególnie kod z C++ można wykorzystywać w C. No normalnie jak ulał
pasuje!
Pozdrawiam.
Jak nie masz zielonego pojecia o czym piszesz to chociaz zechciej uzyc
google zanim opowiesz na jakiegos posta. Podpowiem ci ze funkcje i
struktury mozna bezproblemu exportowac.
--
Google zwrocilo cos takiego:
http://yosefk.com/c++fqa/picture.html#fqa-6.11
--
Radomir `The Sheep' Dopieralski <http://sheep.art.pl>
I abhor a system designed for the "user", if that word is
a coded pejorative meaning "stupid and unsophisticated". -- Ken Thompson
>> Nom, szczególnie kod z C++ można wykorzystywać w C. No normalnie jak ulał
>> pasuje!
>
> Jak nie masz zielonego pojecia o czym piszesz to chociaz zechciej uzyc
> google zanim opowiesz na jakiegos posta. Podpowiem ci ze funkcje i
> struktury mozna bezproblemu exportowac.
Ja nie wiem, co Ty chcesz eksportować, ale kod C++ to taki, który
wykorzystuje szablony, klasy, przeciążanie funkcji, operatorów, STL, itp.
Nawet zwykłego void f(int) {} skompilowanego kompilatorem C++ nie
zlinkujesz z f(3) skompilowanego kompilatorem C, bo się sygnatury nie będą
zgadzać (sygnatury funkcji z C++ są "upiększone" typami argumentów i
wartości zwracanych z powodu możliwości przeciążania nazw funkcji).
Oczywiście, kod C++ jest w dużym stopniu backward-compatible z C, bo to był
jeden z ważniejszych celów podczas projektowania języka, no ale w drugą
stronę to nie ma opcji. No chyba, że kod w C++ jest tak prymitywny, że się
niczym nie różni od C, no ale to po co w takim przypadku tworzyć nowe
nazwy?
PS Spróbuj wyeksportować jakies biblioteki z boost do C :-)
Pozdrawiam.
> Ja nie wiem, co Ty chcesz eksportować, ale kod C++ to taki, który
> wykorzystuje szablony, klasy, przeciążanie funkcji, operatorów, STL, itp.
wiec printf("%s", "Hello world") nie jest kodem c++?
> Nawet zwykłego void f(int) {} skompilowanego kompilatorem C++ nie
> zlinkujesz z f(3) skompilowanego kompilatorem C, bo się sygnatury nie będą
> zgadzać (sygnatury funkcji z C++ są "upiększone" typami argumentów i
> wartości zwracanych z powodu możliwości przeciążania nazw funkcji).
hint: extern "c"
da sie wyeksportowac ale taki kod podlega pewnym restyrkcja.
temat byl uzycie c w pythonie a nie c++ w c a potem c w pythonie, wiec
nie rozumiem o co kaman
--
>> Ja nie wiem, co Ty chcesz eksportować, ale kod C++ to taki, który
>> wykorzystuje szablony, klasy, przeciążanie funkcji, operatorów, STL, itp.
>
> wiec printf("%s", "Hello world") nie jest kodem c++?
Podaj przykład prawdziwego programu, a nie jednej linijki kodu. Tak samo
mogę napisać, że można łatwo wymieniać kod między Javą, Pythonem, C, C++,
PHP tylko dlatego bo zmienna = 1; jest poprawnym kodem wszystkich tych
języków.
>> Nawet zwykłego void f(int) {} skompilowanego kompilatorem C++ nie
>> zlinkujesz z f(3) skompilowanego kompilatorem C, bo się sygnatury nie
>> będą zgadzać (sygnatury funkcji z C++ są "upiększone" typami argumentów i
>> wartości zwracanych z powodu możliwości przeciążania nazw funkcji).
>
> hint: extern "c"
Wiem. Ale...
> da sie wyeksportowac ale taki kod podlega pewnym restyrkcja.
Te restrykcje to zasady panujące w C. C++ stworzono również po to, żeby
pozbyć się problemów jakie panowały w C. Po co je przywracać? Funkcja
zadeklarowana z extern "C" nie może być przeciążana, a przeciążanie to
bardzo ważny ficzer.
extern "C" bywa przydatne tylko od święta i powinno być traktowane jak
konstrukcja hmm... wyjątkowa w C++. A przeciążanie jest standardowe.
> temat byl uzycie c w pythonie a nie c++ w c a potem c w pythonie, wiec
> nie rozumiem o co kaman
O to, że napisałeś "te jezyki [C i C++] maja spora czesc wspolna i bez
problemu mozna wymieniac miedzy kodem napisanym w obu". Natomiast ja Ci
próbuję uświadomić, że jak kod C można kompilować kompilatorem C++ (w
większości przypadków), tak odwrotnie jest to niemożliwe, chyba, że
kod "C++" nie wykorzystuje żadnych bardziej wyrafinowanych ficzerów języka.
Ale jeśli nie wykorzystuje, to to jest C, a nie C++.
Pozdrawiam.
> O to, że napisałeś "te jezyki [C i C++] maja spora czesc wspolna i bez
> problemu mozna wymieniac miedzy kodem napisanym w obu". Natomiast ja Ci
> próbuję uświadomić, że jak kod C można kompilować kompilatorem C++ (w
> większości przypadków), tak odwrotnie jest to niemożliwe, chyba, że
> kod "C++" nie wykorzystuje żadnych bardziej wyrafinowanych ficzerów języka.
> Ale jeśli nie wykorzystuje, to to jest C, a nie C++.
Dobra wymienianie sie kodem to nie jest kompilowanie pascala
kompilatorem basica, tylko *linkowanie* kodu napisanego w tych
jezykach. Jak uwazasz ze to jest takie fe to popatrz na takie
biblioteki jak gtkmm
Nie. Jest kodem C, Hello world w C++ wygląda zupełnie inaczej.
http://en.wikipedia.org/wiki/C%2B%2B#Hello_world_program
bart
--
"drop in my perimeter, it's a lovely fuckin' war, bravo six out"
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
Och, znaczy Python i C to to samo, bo przecież można użyć ctypes ;-P
bart
--
"In theory, this should not happen. In practice, it seems to." (c)acornscsi.c
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
> On 2008-05-03, citizen Sulsa testified:
> > On Sat, 03 May 2008 12:02:26 +0200
> > Rudy <a.r.dabrow...@gmail.com> wrote:
> >
> >> Ja nie wiem, co Ty chcesz eksportować, ale kod C++ to taki, który
> >> wykorzystuje szablony, klasy, przeciążanie funkcji, operatorów, STL, itp.
> >
> > wiec printf("%s", "Hello world") nie jest kodem c++?
>
> Nie. Jest kodem C, Hello world w C++ wygląda zupełnie inaczej.
> http://en.wikipedia.org/wiki/C%2B%2B#Hello_world_program
Naprawde? a co w tej linijce nie jest kodem c++? Podaj konstrukcje
ktore sa bledne.
> On 2008-05-03, citizen Sulsa testified:
> > On Sat, 03 May 2008 14:22:13 +0200
> > Rudy <a.r.dabrow...@gmail.com> wrote:
> >
> >> O to, że napisałeś "te jezyki [C i C++] maja spora czesc wspolna i bez
> >> problemu mozna wymieniac miedzy kodem napisanym w obu". Natomiast ja Ci
> >> próbuję uświadomić, że jak kod C można kompilować kompilatorem C++ (w
> >> większości przypadków), tak odwrotnie jest to niemożliwe, chyba, że
> >> kod "C++" nie wykorzystuje żadnych bardziej wyrafinowanych ficzerów języka.
> >> Ale jeśli nie wykorzystuje, to to jest C, a nie C++.
> >
> > Dobra wymienianie sie kodem to nie jest kompilowanie pascala
> > kompilatorem basica, tylko *linkowanie* kodu napisanego w tych
> > jezykach.
>
> Och, znaczy Python i C to to samo, bo przecież można użyć ctypes ;-P
Pokaz mi wspolny podzbior c i pythona, jakbys troche sie orientowal w
temacie to wiedzial bys ze specyfikacja c zaleca zachowywanie jak
najwiekszej czesci wspolnej z c++
> On 2008-05-03, citizen Sulsa testified:
>> On Sat, 03 May 2008 12:02:26 +0200
>> Rudy <a.r.dabrow...@gmail.com> wrote:
>>
>>> Ja nie wiem, co Ty chcesz eksportować, ale kod C++ to taki, który
>>> wykorzystuje szablony, klasy, przeciążanie funkcji, operatorów, STL,
>>> itp.
>>
>> wiec printf("%s", "Hello world") nie jest kodem c++?
>
> Nie. Jest kodem C, Hello world w C++ wygląda zupełnie inaczej.
> http://en.wikipedia.org/wiki/C%2B%2B#Hello_world_program
Akurat tutaj możnaby się sprzeczać, bo wiem, że jest sporo osób, które
zdecydowanie bardziej wolą strumienie C od iostream i mają na to sensowne
argumenty (kiedyś była o tym dyskusja na pclc). No ale nawet jeśli to po
coś jest boost::format.
A że Sulsa nie ma racji to inna sprawa ;)
Pozdrawiam.
Wiec odpwiedz na proste pytanie, co w tym kodzie jest niezgodne ze
standardem c++?
> Wiec odpwiedz na proste pytanie, co w tym kodzie jest niezgodne ze
> standardem c++?
Czy ty do jasnej cholery umiesz słuchać?! Czy chociaż raz zdarzyło Ci się na
Usenecie przeczytać czyjś post i odpowiedzieć w całości na kontrargumenty,
albo nie upierać się jak dziecko przy debilnych poglądach? Bo to żałosne
jest.
"> wiec printf("%s", "Hello world") nie jest kodem c++?
Podaj przykład prawdziwego programu, a nie jednej linijki kodu. Tak samo
mogę napisać, że można łatwo wymieniać kod między Javą, Pythonem, C, C++,
PHP tylko dlatego bo zmienna = 1; jest poprawnym kodem wszystkich tych
języków."
Zrozumiałeś to, czy nie? Ten kod JEST kodem C++, ale to jest jedna linijka.
Czy po jednym genie jesteś w stanie ocenić jaki jest człowiek?
Jak nie odpowiesz na wszystko co napisałem po kolei i sensownie, to nie
odpisuję, bo szkoda czasu.
Miłego.
W PHP nazwy zmiennych zaczynają się od znaku dolara :p
--
Eluś
>
> Podaj przykład prawdziwego programu, a nie jednej linijki kodu. Tak samo
> mogę napisać, że można łatwo wymieniać kod między Javą, Pythonem, C, C++,
> PHP tylko dlatego bo zmienna = 1; jest poprawnym kodem wszystkich tych
> języków."
>
Tez napisalem ci ze wymienianie kodu jest na etapie *LIKOWANIA*. Podany
kod byl odnosnie wspolnego podzbioru c i c++, ktory jest duzy i jest on
utrzymywany zgodnie z zaleceniami standartu. Teraz pokaz mi taki
wspolny podzbior umozliwiajacy pisac programy, albo zalecenie standardu
miedzy php a java albo zamilcz jak nie potrafisz podac przykladu na
bzdure, ktora sam wymysliles.
>> wiec printf("%s", "Hello world") nie jest kodem c++?
>
> Nie. Jest kodem C
Panie Ogryczak
Niech sie Pan polozy dzis do lozka ze standardem C++.
#include <cstdio>
printf("%s", "Hello world");
jest _pelnoprawnym_ kodem C++
AK
> Zrozumiałeś to, czy nie? Ten kod JEST kodem C++, ale to jest jedna
> linijka.
I co z tego, ze jedna linijka ?
Pierwsze slysze, aby poprawnosc kodu w danym jezyku zalezala
od ilosci linijek ;)
Polecam lekture standardu C++ (hint: pakiet biblioteczny cstdio).
AK
>> Podaj przykład prawdziwego programu, a nie jednej linijki kodu. Tak samo
>> mogę napisać, że można łatwo wymieniać kod między Javą, Pythonem, C, C++,
>> PHP tylko dlatego bo zmienna = 1; jest poprawnym kodem wszystkich tych
>> języków."
>>
>
> Tez napisalem ci ze wymienianie kodu jest na etapie *LIKOWANIA*.
A co za różnica. Możemy to uogólnić do tego, żeby "zrobić użytek" z kodu
napisanego w C++ w kodzie C.
> Podany
> kod byl odnosnie wspolnego podzbioru c i c++, ktory jest duzy
Dawno temu było C. Pan Bjarne zagłębiając się w czeluście swojego hobby
dotarł do Simuli, Ady, i paru innych perełek. Stwierdził, że posiadają one
mechanizmy znacznie usprawniające tworzenie programów, ale wysoki poziom
abstrakcji czyni je zbyt wolnymi. C było wtedy najpopularnijeszym językiem.
Stąd, Bjarne i wiele innych stworzyli nadzbiór C (w celu zgodności wstecz
jest to tylko nadzbiór, a nie w całości nowy język), który wraz z upływem
lat stawał się coraz obszerniejszy. Nazwali to C++. Na dzień dzisiejszy
podzbiór ten posiada takie mechanizmy jak cały obiektowy arsenał, szablony,
wyjątki, przestrzenie nazw, przeciążanie nazw, nowe rzutowania i ogromna
biblioteka STL prawie w całości bazujaca na szablonach. Poza tym jest
jeszcze boost. I w nowym standardzie przyjdą kolejne ficzery. Teraz zrozum,
że prawie każdy program, który mieni się być "napisanym w C++" korzysta
przynajmniej z JEDNEGO z tych mechanizmów, które wymieniłem. I ja chcę,
żebyś mi pokazał kod C, który wykorzystuje w jakiś sposób kod C++
zdefiniowany jak wyżej. Niezależnie czy po linkowaniu, czy po przeklejeniu
kodu C++ do kodu C i skompilowaniu kompilatorem C. Po prostu zrób pożytek z
szablonów, z przeciążnej funkcji, z klasy, czy z STLa.
Kod, który nie wykorzystuje żadnych bajerów z C++ istotnie może być
wykorzystany w C. Ale pomyśl, czy jest sens nazywać to C++ skoro nie różni
się niczym od C? Po to używamy C++, żeby wykorzystywać to czego w C nie ma,
inaczej nie byloby sensu tworzyć nowego języka.
Pozdrawiam.
> I co z tego, ze jedna linijka ?
> Pierwsze slysze, aby poprawnosc kodu w danym jezyku zalezala
> od ilosci linijek ;)
Przecież napisałem, że to poprawny kod :) Ty też sądzisz, że po jednej
linijce kodu zgodnego ze standardami C i C++ można ocenić, że (cyt.
Sulsę) "bez problemu mozna wymieniac miedzy kodem napisanym w obu"?
Pozdrawiam.
No i? Poniżej masz pełnoprawny kod Pythona.
from goto import goto, label
i = 0
label .blabla
i = i + 1
zrobCos(i)
goto .blabla
bart
--
"kiedy rozum śpi, włącza się automatyczna sekretarka"
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
Pisze ci półgłówku poraz trzeci ze kod sie wymienia na poziomie
*LINKOWANIA*
--
--
Tak, tak.. Python i C++ to ten sam język, bo można je połączyć za
pomocą boost::python ;-P
bart
--
"This is an information document and does not specify any level of standard."
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
> On 2008-05-08, citizen Sulsa testified:
> > Przyklad juz wskazalem boost:python, python ma TYLKO api umozliwiajace
> > łączenie kodu C, a jednak boosta::python idealnie nadaje sie do pisania
> > modulow w c++. Magia Jakas?
>
> Tak, tak.. Python i C++ to ten sam język, bo można je połączyć za
> pomocą boost::python ;-P
Myslisz zanim napiszesz, boost::python laczy kod c i c++!!!!!
No i? Z Fortranem też możesz połączyć. YPB?
Właśnie odkryłeś, że linkowanie pozwala połączyć biblioteki
napisane w różnych językach. Niesamowite.
bart
--
"Przeciez nie ma internetu bez przegladarki" - (c)Dariusz Kaminski
http://candajon.azorragarse.info/ http://azorragarse.candajon.info/
> Pisze ci półgłówku poraz trzeci ze kod sie wymienia na poziomie
Ty chyba nie rozumiesz na czym polega dyskusja.
Rzuć jeszcze jeden epitet, a obiecuję Ci siarczystego plonka.
RW
No. Nareszcie choć jeden głos rozsądku.
--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:239B ]
[ 16:55:00 user up 11702 days, 4:50, 1 user, load average: 0.01, 0.28, 0.19 ]
Women are nothing but machines for producing children. -- Napolean Bonaparte
Zdecyduj się w końcu. Część wspólna czy linkowanie?
BTW. specyfikacja ctypes wymaga zgodności struktur z C.
pzdr
--
"Never underestimate the power of human stupidity" -- L. Lang
>
> Zdecyduj się w końcu. Część wspólna czy linkowanie?
>
Mowa jest o dwoch rzeczach: o wspolnym podzbiorze c i c++ oraz o
łączeniu tych dwoch jezykow.