Autor Wątek: Generowanie klas w czasie działania programu  (Przeczytany 2535 razy)

therealremi

  • Gość
# Październik 28, 2007, 23:10:47
Wrzuciłem to do tego działu bo akurat tool jest w C#, ale w razie potrzeby język jest do wymiany.
Otóż pisze toola do automatyzacji builda. Problem w tym, że szef (który nie jest programistą) chce aby zarówno obiekty jak i działania na nich wykonywane były definiowane poza programem. On się bardzo boi rekompilacji (która notabene trwa krócej niż ładowanie plików konfiguracyjnych) i nie mam możliwości przekonania go, że tool skończy jako kompilator (bo przecież tak będzie?). Może więc ktoś ma jakieś rady/pomysły zaimplementowanie generowania klas "w locie" na podstawie ich opisów. Pisze "klas" ale oczywiście z tego co wiem to nie jest to możliwe(?) - chodziłoby o obiekty pełniące podobne funkcje jak klasy.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

therealremi

  • Gość
# Październik 28, 2007, 23:33:50
.
« Ostatnia zmiana: Kwiecień 21, 2008, 22:10:45 wysłana przez Szalonuki »

Offline Xion

  • Moderator
    • xion.log

# Październik 28, 2007, 23:47:37
W .NET to jest możliwe, bo we framework jest wbudowany kompilator. Jego użycie jest, z tego co mi wiadomo, aczkolwiek dość skomplikowane. Tak czy siak, warto wygooglać, co w trawie piszczy.

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Październik 28, 2007, 23:53:45
Może jednak prościej byłoby przekonać szefa, że lepiej wiesz, jak napisać program :D. Polecam książki "Sztuka perswazji" oraz "Manipulować, ale jak?" ;).

therealremi

  • Gość
# Październik 29, 2007, 00:06:48
Twój szef ma rację. Odpuść sobie C# i użyj języka skryptowego (np. make ;) ). Albo w ogóle dostosuj jakiś istniejący system budowania zamiast wynajdywać koło ponownie.

Offline Esidar

  • Użytkownik

# Październik 29, 2007, 00:19:45
Oczywiście to pytanie retoryczne, ale może do niego trafi "Czy szef który nie jest programistą będzie potem tego toola skryptował ?". Czy też może będzie to robić programista, który będzie mieć przez to 2x więcej roboty ?

Jeśli robienie builda polega na skopiowaniu paru plików, to nawet .cmd wystarczy. Ale jeśli trzeba dokonywać konwersji danych, to skończy się na tym że robienie builda będzie zajmować kilka godzin zamiast jednej.

Kwestia tego jak duży ten build będzie i jak złożony to będzie proces.

Możesz rzucić okiem na to http://www.scons.org/

Offline mINA87

  • Użytkownik

# Październik 29, 2007, 04:54:28
Zapoznaj się z tym - gotowy framework z kodem źródłowym:
http://www.members.optusnet.com.au/~olegshilo/
Albo wykorzystaj go, albo na jego bazie będziesz w stanie coś własnego napisać o podobnej funkcjonalności.
Równiez to jest ciekawe - tutaj integracja CLR w kodzie niezarządzanym
http://msdn2.microsoft.com/en-us/library/ms404385.aspx
a tutaj zarządzanym:
http://msdn2.microsoft.com/en-us/library/9x0wh2z3(VS.80).aspx
//edit:
I jeszcze jeden artykulik:
http://msdn.microsoft.com/msdnmag/issues/06/08/CLRInsideOut/default.aspx
« Ostatnia zmiana: Październik 29, 2007, 04:57:05 wysłana przez mINA87 »

therealremi

  • Gość
# Październik 29, 2007, 14:38:59
Oczywiście to pytanie retoryczne, ale może do niego trafi "Czy szef który nie jest programistą będzie potem tego toola skryptował ?". Czy też może będzie to robić programista, który będzie mieć przez to 2x więcej roboty ?
No niestety szef tez korzysta z tego toola. Zeby bylo smieszniej to nie przeszkadza mu pisanie zarombistych, megazagniezdzonych makr w edytorze tekstowym, ale na dzwiek slowa "rekompilacja" dostaje gesiej skorki. Wszyscy chyba wiedza jak szybka jest kompilacja w C#?


Jeśli robienie builda polega na skopiowaniu paru plików, to nawet .cmd wystarczy. Ale jeśli trzeba dokonywać konwersji danych, to skończy się na tym że robienie builda będzie zajmować kilka godzin zamiast jednej.
Kwestia tego jak duży ten build będzie i jak złożony to będzie proces.
Jest to build calej gry (mozliwe ze na 4 platformy), polaczony z konwersja i obrobka wszystkich plikow przez nia wykorzystywanych, i bedzie wykorzystywany przy wielu projektach.

Najsmnieszniejsze ze dostaje zadania typu "zaimplementuj aliasy dla typow obiektow zeby nie trzeba bylo wpisywac nazwy nowego typu do deklaracji kazdej funkcji na nim operujacej za kazdym razem po jego dodaniu", podczas gdy na z daleka widac ze po prostu potrzebne jest dziedziczenie i funkcje wirtualne.

Offline vashpan

  • Użytkownik
    • Strona

# Październik 29, 2007, 19:38:39
Toz to jakas masakra :D Szef nieprogramista szefuje programistom. To tak jakbym ja byl szefem budowy Stadionu Narodowego. Nie zycze ci zle ale obawiam sie ze z takim kierownictwem firma za dlugo nie pociagnie ;)

My wiemy ile zajmuje taka rekompilacja, ale twoj szef chyba nie i to jest najsmutniejsze. :(

Offline Esidar

  • Użytkownik

# Październik 29, 2007, 21:11:12
Najsmnieszniejsze ze dostaje zadania typu "zaimplementuj aliasy dla typow obiektow zeby nie trzeba bylo wpisywac nazwy nowego typu do deklaracji kazdej funkcji na nim operujacej za kazdym razem po jego dodaniu", podczas gdy na z daleka widac ze po prostu potrzebne jest dziedziczenie i funkcje wirtualne.

W wolnym tłumaczeniu "chciałbym żeby to było proste bo programować nie umiem ale lubie sobie pogrzebać. I żeby miało większe możliwości niż C++ tak na wszelki wypadek gdyby trzeba było robić builda z uwzględnieniem symulacji trajektorii promu kosmicznego. I napisz mi jak to będzie działać, to Ci powiem co ma to robić."

Albo jest system który można programować (chociażby w C#) i wtedy należy to zostawić programistom, albo jest coś czego nie można programować tak żeby nie programista mógł tego używać. Nie ma czegoś pośredniego w stylu "żeby można było troche poprogramować bo ktoś coś tam umie dłubać". Takie coś nigdy dobrze nie działa.

I podzielam zdanie vashpana, ale nie zgodzę się że firma długo nie pociągnie... znam przykład firmy która ma podobnego szefa i ciągnie... i ciągnie... i ciagnie...

therealremi

  • Gość
# Październik 29, 2007, 21:22:43
Prawdę mówiąc to wydaje mi się, że padłem ofiarą mody na bycie "as generic as possible". Mody, bo w tym akurat wypadku będę musiał po prostu odtworzyć w plikach konfiguracyjnych to co oferuje C# jako język obiektowy.
Właśnie gdyby szef (na szczęście dla firmy tylko mój) nie miał pojęcia o programowaniu to pewnie by mi niczego nie narzuał, a tak to coś tam słyszał, że warto być "generic" i teraz jak nie napisze toola, który w razie potrzeby nie uwzględni symulacji trajektorii promu kosmicznego, to pomyśli, że jestem leniwy.
No ale właśnie, kluczowe tutaj jest to że nie da się tego zrobić "tak troche" do poprogramowania - albo korzystamy z OO i wprowadzamy "jakieś" ograniczenia/specjalizacje albo wychodzi kaszana. Teraz patrze czasami na kod toola, który zastałem i pliki konfiguracyjne - i wybucham dzikim śmiechem.

P.S. szef swoją wiedze ma, trzeba mu przyznać, ale musiałem się wyżalić ;)
« Ostatnia zmiana: Październik 29, 2007, 22:31:42 wysłana przez therealremi »

Offline SirMike

  • Użytkownik
    • SirMike's Techblog

# Październik 29, 2007, 21:45:05
Wrzuciłem to do tego działu bo akurat tool jest w C#, ale w razie potrzeby język jest do wymiany.
Otóż pisze toola do automatyzacji builda. Problem w tym, że szef (który nie jest programistą) chce aby zarówno obiekty jak i działania na nich wykonywane były definiowane poza programem. On się bardzo boi rekompilacji (która notabene trwa krócej niż ładowanie plików konfiguracyjnych) i nie mam możliwości przekonania go, że tool skończy jako kompilator (bo przecież tak będzie?). Może więc ktoś ma jakieś rady/pomysły zaimplementowanie generowania klas "w locie" na podstawie ich opisów. Pisze "klas" ale oczywiście z tego co wiem to nie jest to możliwe(?) - chodziłoby o obiekty pełniące podobne funkcje jak klasy.

To co tutaj opisujesz to brzmi jak herezja :) Oczywiscie nie napisales kontekstu w jakim to wystepuje wiec wiekszosc z nas z definicji traktuje to jako totalny kretynizm.
Kompilacja zewnetrznego kodu w runtime jest bajecznie prosta w C# ale bez szczegolow nie moge Ci powiedziec czy Twoje podejscie (i Twojego szefa) jest sluszne.

Offline skmskm

  • Użytkownik

# Październik 30, 2007, 19:06:14
Lepiej taki szef niż żaden.
A może spróbuj podłączyć do toola jakiś kompilator GCC lub coś w tym stylu(możesz mu kazać zrobić dll'ke z tych klas co tool dostanie i ją wywoływać).