Autor Wątek: Data-driven programming - źródła  (Przeczytany 6370 razy)

Offline Shelim

  • Użytkownik
    • Homepage

# Grudzień 09, 2011, 09:05:15
Czy ktoś zna jakieś książki, tutoriale, lub pokrewne materiały ukazujące problematykę Data-driven programming w kontekście gier komputerowych z przykładowymi kodami źródłowymi i/lub szczegółami implementacji? Wszystkie materiały jakie trafiam w Google'ach operują na teorii i wyjaśniają mechanizmy, natomiast nie dają żadnej podstawy do implementacji w praktyce (więcej nawet, przekazują czasami sprzeczne informacje na temat mechanizmów, jak np. używanie Struct of Array zamiast Array of Struct i jednoczesnego trzymania własności w obiekcie).

Jeżeli takich materiałów nie ma, to czy ktoś zna może jakiś w miarę mało skomplikowany projekt open source'owy który jedzie na data-driven? :)

Offline Mr. Spam

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

Offline Ciunkos

  • Użytkownik
    • Black Sheep

# Grudzień 09, 2011, 12:28:03
Może nie znajdujesz szukanych informacji ponieważ szukasz data driven zamiast data oriented. Według mnie te dwa terminy różnią się w znacznym stopniu.

Offline Kos

  • Użytkownik
    • kos.gd

# Grudzień 09, 2011, 12:51:41
Tu masz circla o Data oriented Design: https://plus.google.com/115950681746193428612/posts (Google, y u no friendly urls?  ლ(ಠ益ಠ)ლ)

Może mi ktoś wyjaśni, jaka (i czy) jest różnica między starym jak świat pojęciem "Data-driven design" (które najczęściej widzę opisane jako "to co zostało zastąpione przez jedyny słuszny OOP") oraz "Data-oriented design", które na forum mieliśmy już omawiane mnóstwo razy? Czy one w ogóle mogą być użyte w jednym kontekście?


Offline mihu

  • Użytkownik
    • mihu

# Grudzień 09, 2011, 12:51:58
Z tego co piszesz to rzeczywiście raczej chodzi ci o data-oriented, a nie data-driven.
Z tego co czytam twity różnych pro_gramistów gier, to oni widzą data-oriented przede wszystkim jako układanie danych w pamięci w sposób przyjazny dla cache - po prostu.
Inni piszą, że jest to sposób patrzenia na program jako dane i transformacje na nich (zamiast np. jako obiekty).
Nie wiem czy szukanie projektu, który "jedzie na data-oriented" ma sens. Mimo iż można pewnie tego paradygmatu na siłę używać do całego kodu jaki się pisze, to sądzę, że w większości się tego używa do pisania w taki sposób mniejszych funkcjonalności/systemów, które są time-critical. I na takie coś przykładów jest sporo. Ostatnio yarpen podał fajnego linka: https://profiles.google.com/115332336196774795982/buzz/9L1HaA3NuZS

Offline Esidar

  • Użytkownik

# Grudzień 09, 2011, 13:00:40
Tak. A gdy wstawisz kropkę w odpowiednim miejscu, to będziesz mieć data-managed programming. Krzyżyk daje data-processed programming, a mały jelonek to data-focused programming.

Kos: nie ma żadnej różnicy. To tylko szczegóły, których się trzymają programiści którzy chcą koniecznie zabłysnąć więc wymyślają setki nazw na to samo.

Natomiast materiały są np. na gdcvault. Scott Bilas - Data Driven Game Object System, Rob Fermier - Creating a Data Driven Engine i jeszcze parę innych (jak chociażby Methods for attaching data to objects, czy Duran Alex - Building Object System). Same prezentacje bez kodu (po co ci analizowanie kilku MB kodu ?) i dają pojęcie z czym to się je.
« Ostatnia zmiana: Grudzień 09, 2011, 13:02:39 wysłana przez Esidar »

Offline Shelim

  • Użytkownik
    • Homepage

# Grudzień 09, 2011, 13:08:25
@Esidar, dzięki - o takie materiały mi dokładnie chodziło :)

Offline yarpen

  • Użytkownik

# Grudzień 09, 2011, 13:27:50
Z nowszych jest jeszcze prezentacja rodaka - http://www.gdcvault.com/play/1911/Theory-and-Practice-of-the

Offline mihu

  • Użytkownik
    • mihu

# Grudzień 09, 2011, 13:43:59
Tak. A gdy wstawisz kropkę w odpowiednim miejscu, to będziesz mieć data-managed programming. Krzyżyk daje data-processed programming, a mały jelonek to data-focused programming.

Kos: nie ma żadnej różnicy. To tylko szczegóły, których się trzymają programiści którzy chcą koniecznie zabłysnąć więc wymyślają setki nazw na to samo.
Co do sensu terminów zawsze można się sprzeczać (np. żeby zabłyszczeć), ale trudno zaprzeczyć że pod pojęciem data-driven w kontekście gier na ogół w necie znajduje się to, do czego linki podaliście (gameobjecty jako zbiory komponentów itd.), a pod pojęciem data-oriented raczej niskopoziomowe optymalizacje struktur danych w celu wydajnego dostępu do nich. Pewnie, że jedno z drugim ma wiele wspólnego.

Offline Kos

  • Użytkownik
    • kos.gd

# Grudzień 09, 2011, 15:38:12
Cytuj
trudno zaprzeczyć że pod pojęciem data-driven w kontekście gier na ogół w necie znajduje się to, do czego linki podaliście (gameobjecty jako zbiory komponentów itd.),

BTW jak się zastanawiałem, to mi wyszło, że jeśli próbujemy zaprojektować logikę gry unikając pionowych hierarchii dziedziczenia (http://forum.warsztat.gd/index.php?topic=23433.msg274640#msg274640), to zaczynamy od ujednolicenia klasy i wyrzuceniu dodatkowych specyficznych dla rodzaju obiektu funkcjonalności w klasy połączone asocjacją. A od tego do dużego, hucznego hasła System Komponentów wcale nie jest tak daleko!

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Grudzień 09, 2011, 19:18:37
Ja też zebrałem trochę linków na temat Data-Oriented Design (DOD):
http://www.asawicki.info/news_1422_data-oriented_design_-_links_and_thoughts.html

Chyba, że naprawdę pytasz o programowania Data-Driven? Też jest takie coś http://en.wikipedia.org/wiki/Data-driven_programming przykładowo XSLT jest takim językiem. Ale do tego nie znajdziesz chyba informacji w kontekście programowania gier.

Offline Esidar

  • Użytkownik

# Grudzień 09, 2011, 19:50:09
Ja też zebrałem trochę linków na temat Data-Oriented Design (DOD):
http://www.asawicki.info/news_1422_data-oriented_design_-_links_and_thoughts.html
Niepotrzebnie mieszasz.

Linki które podałeś jako "DOD" opisują to samo co dokumenty które ja podałem i które w nazwie mają "Data-driven".

A XSLT to nie jest sposób programowania. Gdyby nim był, to konwerter z PDF do HTML też byś musiał do nich zaliczyć. Albo konwerter z C++ na lua.

Offline Dab

  • Redaktor
    • blog

# Grudzień 09, 2011, 20:01:21
Data-driven to sposób projektowania, a data-oriented to sposób programowania. Przy czym jedno i drugie się ze sobą doskonale łączy (zwykle przez system komponentowy).

Offline Kos

  • Użytkownik
    • kos.gd

# Grudzień 09, 2011, 20:02:24
Błagam, niech każde następne wyjaśnienie ma słowo "według" wtrącone gdzieś w treści.

Offline Dab

  • Redaktor
    • blog

# Grudzień 09, 2011, 20:04:51
To nie konstrukcja rakiet, że każda rzecz ma nazwę według norm ANSI.

Ale proszę, data driven: http://gamearchitect.net/Articles/DataDrivenDesign.html (Kyle Wilson, May 29, 2002)
I don't think a game engine should contain a single line of game-specific code.  Not one.  No hardcoded weapon types.  No hardcoded HUD layout.  No hardcoded unit AI.

A data-oriented to chyba wiadomo.

Offline Kos

  • Użytkownik
    • kos.gd

# Grudzień 09, 2011, 20:21:20
Okay, i to jest jeden kontekst i jedno znaczenie.

Drugie znaczenie w innym kontekście jest na zalążku na wikipedii jako "zły" sposób na object-oriented design i swoiste przeciwieństwo responsibility driven design, odwołując się do publikacji Wirfs-Brock, R.; Wilkerson, B. (1989). "Object-oriented design: a responsibility-driven approach". Ciekawe, o co dokładnie chodziło.

Trzecie znaczenie (pytanie, czy ten sam kontekst, co powyżej) jest stosowane, jak Esidar pokazał, zamiennie z DoD.