Eve Online > Dyskusje ogólne

Please support open letter to CCP

<< < (2/3) > >>

Ellaine:
Stackless Python jest cokolwiek egzotycznym jezykiem skryptowym.
Jego zalozenia wydawaly sie dawno temu ojcom projektu fajne i ladne.
Python jest fajny, ladny, modny, dorodny i nowoczesny. Jest jednak jezykiem skryptowym. Wszystkie cywilizowane jezyki skryptowe wspolczesnie sa (moga byc) prekompilowane przynajmniej do binarnego betakodu (analogicznie do Javy) ale skryptowosc niesie ze soba obciazenia optymalizacyjne jakich nie maja jezyki projektowane z gory jako kompilowane (jak C).
Np musza przechowywac hashtable z nazwami zmiennych, bo zawsze w jezyku skryptowym moze sie uwidziec programiscie odwolac sie do zmeinnej po nazwie ze stringa. Architektura prekompilowanego skrypta musi tez byc gotowa na to ze nagle ktos wykona kawalek kodu w postaci tekstu. Taki C nie ma tych obciazen, Java jest w polowie drogi, a Python je ma (chyba ze sie wogole calkowicie myle co do pythona i gadam nie na temat, co jest mozliwe bo ogladalem go lata temu). So - skryptowy -> wolniejszy.

Stackless to uroczy pomysl zeby nie bylo stosu. Nie ma stosu, nie ma wywolywania funkcji w funkcji. To wymusza pewien styl pisania podobny do np AJAXa;
W normalnym jezyku mozesz miec (jezyk jest podobny do Javy ale nie jest zadnym prawdziwym jezykiem jesli wejdziesz w szczegoly);

--- Kod: ---class Laser extends Dzialo {
 ...
 strzelaj(cel) {
   obrazenia = this.obrazenia * cel.getResisty(this);
   cel.zadajObrazenia(obrazenia);
   getStatek().getLocalSystem().sendEvent(new PokazywanieKolorowejKreseczki(this, cel));
 }
 obslugaEventaPilotNacisnalSpust() {
   this.strzelaj(getStatek().getAktualnieWybranyCel()));
 }
 ...
}

--- Koniec kodu ---
W stackless nie masz stosu, nie ma stosu nie ma wywolania innej funkcji, wiec juz linijka;

--- Kod: ---   obrazenia = this.obrazenia * cel.getResisty(this);

--- Koniec kodu ---
nie jest mozliwa bo nie mozesz odwolac sie do funkcji (metody) cel.getResisty(*). Jesli chcesz oprogramowac strzelanie laserem musisz postepowac mniej wiecej tak;


--- Kod: ---class Laser extends Dzialo {
 ...
 obslugaEventaPilotNacisnalSpust() {
   sendEvent(new ZadawanieObrazen(getStatek.getAktualnieWybranyCel, this.obrazenia));
   sendEvent(getStatek.getLocalSystem, new PokazywanieKolorowejKreseczki(getStatek, getStatek.getAktualnieWybranyCel));
 }
 ...
}
class Statek {
 obslugaEventaZadawanieObrazen(jakich) {
   hapeki = hapeki - jakich*this.MojeResisty;
 }
}

--- Koniec kodu ---

Czyli - nie masz jednej funkcji (metody) ktora obsluguje calosc zdazenia, wylicza sobie wszystko dociagajac dane z innych metod, tylko zglaszasz zdarzenia do kolejki i listenery to po kolei chwytaja. Dlatego mozliwe jest np ze juz skonczyles strzelac z lasera ale z powodu laga obrazenia pojawia sie u celu dopiero po paru sekundach. Wszelkie zlozone procesy to nie rozbudowane odnogi funkcji obslugi guzika tylko serie wzajemnie wywolujacych sie zdarzen ktora bedzie sie toczyc nawet jesli gosciowi ktory wcisnal guzik dawno padl klient i proces go obslugujacy.
Jest to w jakims stopniu logiczne i uzasadnione dla gry sieciowej, ale nie jest bardzo intuicyjne dla przecietnego programisty. Dlatego miedzy innymi byly zawsze takie proste misje - ciezko bylo zwerbowac duzo ludzi byli wystarczajaco bystrzy zeby skryptowac misje w stackles pythonie i jednoczesnie chcieli robic misje (a nie nalezec do glownego dev team) ... no i jeszcze przeniesc sie do Islandii.
Do tego Stackless Python niesie ze soba ograniczenia architektoniczne ktore bardzo utrudniaja rozwoj i optymalizacje czegokolwiek zaczynajac od pewnej skali.

Gdyby wszystko od poczatku bylow  C++, problemy bylyby inne, ale tak ogolniej wielka optymalizacja calosci bylaby prawdodpobnie bardziej realna (chociaz wszystko zalezy od poczatkowych zalozen architelktury jeszcze bardziej niz od jezyka - o tych jednak nie wiadomo za duzo poza sercem CCP).

vulor:
Liczyłem, że coś wiesz na temat stackless i się tą wiedzą podzielisz.
Wygląda na to, że  ja wiem o tym więcej.  ;)


--- Cytat: Ellaine Tash-Murkon w Marzec 31, 2007, 15:45:02 ---
W stackless nie masz stosu, nie ma stosu nie ma wywolania innej funkcji, wiec juz linijka;

--- Kod: ---   obrazenia = this.obrazenia * cel.getResisty(this);

--- Koniec kodu ---
nie jest mozliwa bo nie mozesz odwolac sie do funkcji (metody) cel.getResisty(*). Jesli chcesz oprogramowac strzelanie laserem musisz postepowac mniej wiecej tak;

--- Koniec cytatu ---

Stackless Python jest w 100% kompatybilny z "stackfull" Pythonem. Różnica jest w implementacji interpretera. Nie jestem specjalistą od stackless pythona, ale z tego co wiem różnica polega na nieprzechowywaniu stosu wykonywanego skryptu na stosie interpretera, lecz na stercie (AFAIK perl ma podobnie).

--- Cytuj ---Stackless Python
A Python Implementation That Does Not Use The C Stack
--- Koniec cytatu ---
To nie znaczy, że Stackless Python nie ma stosu.

Tym samym 70% twojego postu to totalny BS.


PS. Już nie musisz tłumaczyć na czym polega problem skalowalności Stackless Pyhtona. Czytając sobie o tym języku sam do tego doszedłem.
Tzn. wydaje mi się, że wiem na tak 90% dlaczego:

--- Cytat: Ellaine Tash-Murkon w Marzec 31, 2007, 15:45:02 --- Stackless Python niesie ze soba ograniczenia architektoniczne ktore bardzo utrudniaja rozwoj i optymalizacje czegokolwiek zaczynajac od pewnej skali.

--- Koniec cytatu ---

Ellaine:
Moje wnioski z czytania peanow przeciw watkom a za mikrowtkami sa wlasnie takie. Ale zapewne jeden z nas zle zrozumial po pierwszym rzucie okiem na strony o stacklessie i przyklady. Zostaje eksperyment - czyli kazdy pisze cos malego w SP i majac juz prawdziwe doswiadczenie moze opowiedziec jak bylo a nie spekulowac :D

Pozostaje prawda cytat z Wikipedii;

--- Cytat: Wikipedia ---Python is designed around a philosophy which emphasises the importance of programmer effort over computer effort, and it rejects more arcane language features, prioritising readability over speed or expressiveness.

--- Koniec cytatu ---

A poprzedni post nie mial wyjasnic problemow skalowalnosci Stacklessa tylko nature architektury wogole. Skoro wyciagnales zgola odmienne wnioski czytajac zapewne te same strony, znaczy ze moje wnioski sa niepewne i palcem po piasku pisane, wiec prosze mi nie wierzyć  póki nie sprobuje i nie wypowiem sie jako prawdziwy stackless pythonowiec :)

theorbis:
Hi Hastrabull,

I read that thread on forums even before i saw link here.  Yes, we do read and follow forums at CCP all the time ;)

I share your concerns about current difficulties with game mechanics involving huge battles, and i assure you we are working on solution for the problem. As someone pointed out, Revelations 2 is most likely candidate for changes to happen.

Best Regards,
The Orbis

Hastrabull:
Orbis,
Great, thanks for the info :) I really do appreciate it.

Btw, its great to have someone straight from CCP watching our small forums here :)

Now lets wait for revelations 2

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej