Was ist an PAWN schlecht?

  • Doch, eigentlich schon. Gibt genug Firmen, die sich mit Ruby, Perl, Etc. beschäftigen.


    Nadann

    Es gibt viele Seiten bzw. Firmen, die benutzen nen Apache Tomcat, Glassfish, o.Ä, für das Konzipieren ihrer Websites mittels JavaServlets und JavaServerPages.


    Okay dann tuts mir natürlich leid, aber das man dafür so angegangen wird sogar von den moderatoren ist unter aller sau, und dann wundern wieso keine neuen Leute hier herkommen? Ich verstehe schon wieso :)


    Danke bist der erste der konstruktiv mal einen Fehler berichtigt die anderen sind sich ja zu fein und hauen einfach ihren Mund auf aber besser sind sie nicht :)

    • Offizieller Beitrag

    Wir schweifen vom Thema ab, es geht nicht darum welche Sprache für Webentwicklung am Tollsten ist, wir waren beim Thema SAMP und seine Macken / Tücken


    „Nicht das, was du nicht weißt, bringt dich in Schwierigkeiten, sondern dass, was du sicher zu wissen glaubst, obwohl es gar nicht wahr ist.“
    Mark Twain

    ---
    ICH BIN NUR HIER UM LEUTE ANZUSCHREIEN

  • Weiß ich doch aber einige haben hier einen Beitrag abgegeben das sie den Syntax garnicht so unterschiedlich finden.


    LUA gibt einem mehr Möglichkeiten und man kann irgendwie alles in allem Kombinieren und der Interpreter sagt yo, alles klar.


    Ich weiß nicht wie weit das bei PAWN und SA-MP ist, aber in Lua gibt es auch einen großen Vorteil das man Code in andere Dateien outsourcen kann, um so einen bessern Überblick über seine Sachen zu erhalten. Dieses ist gerade bei großen Projekten sinnvoll und erleichtert einem ungemein die Arbeit, wie hier Beispielsweise eine klassische Spielerklasse

    526C4Hj.png Mit freundlichen Grüßen,
    Noneatme

    Einmal editiert, zuletzt von Noneatme ()

  • @Jusonex


    Pawn wird natürlich interpretiert aber jede Sprache wird zuerst Interpretiert durch einen Scanner und Lexer danach kommt die Sinnesanalyse und letztendlich wird alles in einen anderen Code übersetzt der wiederum dazu verwendet wird einen Code für den Prozessor zu generieren. Ich verstehe deine Aussage nicht ganz. ASM ist nicht der schönste "Code" da stimme ich dir voll und ganz zu und ich würde auch keine großen Projekte damit starten wollen da dies eher ineffizient wäre. Ich habe auch nie behauptet das Lua schlechter sei.


    Ich habe OOP nie schlecht bewertet, ich sagte nur dass man es einfach viel zu sehr in den Vordergrund stellt, ich habe schließlich selbst schon eine Sprache geschrieben die OOP verwendet da es Effizienter ist Klassen o.ä. zu gestalten anstatt jedes mal 1000 weitere Zeilen zu kopieren und den gleichen Vorgang damit zu erzeugen. Es spart Zeit, Nerven und Ressourcen. Trotz allen Umständen sollte man Sprachen ohne OOP nicht unterschätzen. Ich weiß selbst wie schwer es ist eine Sprache zu entwickeln und da ich auch schon einige Versuche gesehen habe finde ich Pawn wirklich gelungen als Sprache. Klar die Syntax ist mehr 0815 aber letztendlich kommt es auf die Vorgehensweise unter der Haube an.



    Ich finde einfach man bezieht sich hier im Vergleich mehr auf Sa-mp und MTA, ist letztendlich genauso Sinnlos wie die Diskussion über Apple iOS und Android weil jeder meint er würde auf der besseren Seite stehen. Die Persönliche Meinung dazu ist ok aber im Endeffekt versucht jeder nur die Vorteile seiner Seite zu nennen, vergisst dabei aber auch die Schattenseiten.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Ich finde bei PAWN extrem nervig das es diese ganzen Limits gibt die ziemlich klein sind. Für mein dickes Selfmade brauche ich wesentlich mehr als 1024 Zeichen im String oder 100 Objekte an einem Ort :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich gehe mal davon aus, das einige Limits in den nächsten Updates erhöht werden.

  • Wuerde PAWN das Verwalten von Speicher zulassen, wuerde man die Limits aber umgehen koennen .


    Ob man in SA:MP - das Problem bezieht sich auf SA:MP - nun über C++ (Plugin) oder die Sprache selbst dynamisch Speicher belege und damit agiere, ist in dem Fall völlig egal.


    C++ ist eine verdammt effektive und mächtige Sprache.
    Der Unterschied zwischen einer Scriptsprache und einer Programmiersprache ist dir wohl nicht so ganz klar.



    Ein Script muss nicht mehr Speicher belegen können, als es von vornherein benötigt - dazu wurde Pawn auch entwickelt (VM).

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Das kann durchaus der Realität entsprechen aber ich kenne die Struktur bzw. das Muster nicht wie Objekte im Client registriert werden aber ob das Tatsächlich mit Pawn zu tun hat bzw. mit der AMX Laufzeitumgebung bezweifle ich eher denn der Code in Pawn befolgt nur einen im Speicher enthaltenen Aufruf und da dieser Aufruf eher die Sa-mp DLL Datei anspricht bzw. das Modul selber müsst die Speicherverwaltung dort eher der Grund sein von daher denke ich es liegt eher am Client und den Programmier-Kenntnissen von "Kye" oder wie der sich jetzt nennt.


    Ich kenne mich auch nicht damit aus wie viel Ressourcen für Sa-mp gut sind bzw. wie viele man freigeben sollte damit ein stabiles Spiel stattfinden kann. MTA und Sa-mp haben meines Wissens nach aber ganz andere Module die da im Hintergrund laufen. Ist wie bei einem Prozessor den man übertaktet , beim einen geht es gut, beim anderen stirbt das Ding am Hitzetod entweder weil sie anders gebaut wurden oder von einer ganz anderen Quelle stammen. Kommt drauf an wie weit im Endeffekt die verwendeten Module sind. Bei Kye und seiner "Gang" würde ich aber nicht all zu viel erwarten.



    @BlackAce : ob nun C++ oder Pawn, eines ist klar Pawn wurde einfach für ganz andere Zwecke programmiert. Praktisch für minimale Systeme.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Zitat von Sense

    ASM ist nicht der schönste "Code" da stimme ich dir voll und ganz zu und ich würde auch keine großen Projekte damit starten wollen da dies eher ineffizient wäre.


    Ich habe nie behauptet, dass ASM oder C schlecht sind. Deine vorherige Aussage "Dann sollte "C" oder ASM auch scheiße sein" hörte sich für mich gestern eher so an als würdest du sagen wollen, dass, wenn Pawn (weil es C ähnelt) scheiße ist, C und ASM automatisch auch scheiße seien.
    In meiner Antwort ging es mir vielmehr darum, dass bei einer richtigen Compilersprache, die in x86 Code kompiliert wird, verschiedene Laufzeitfeatures nicht möglich sind, die bei Scriptsprachen ohne weiteres umsetzbar wären, aber in Pawn nicht genutzt werden.
    Und der Geschwindigkeitsvorteil, den man bei ASM und C hat, ist bei einer interpretierten Sprache wie Pawn weg.


    Ein Beispiel dafür ist die dynamische Typisierung: Für mich ist Pawn Pseudo-dynamisch typisiert: Floats müssen explizit angegeben werden - wozu? Weil es einfacher ist und Rechenzeit sowie etwas Speicher spart. Lua dagegen verwendet für Zahlen grundsätzlich doubles, was natürlich mehr Speicher in Anspruch nimmt, aber dafür eine höhere Komfortabilität bietet und das ist das, was bei einer Scriptsprache, die möglichst leicht und "anwendungsorientiert" sein soll, das Wichtigste ist.
    Eine andere Sache sind Strings: Strings werden in Pawn weitgehend so wie in C behandelt (immer vorher genügend große Puffer reservieren etc.), in Lua läuft alles komplett dynamisch ab und wie die Speicherverwaltung intern abläuft interessiert den Scripter nicht.


    Interessant ist an dieser Stelle auch dieses Benchmark: http://codeplea.com/game-scripting-languages
    Man sieht, dass Pawn in Punkto Geschwindigkeit, Lua in allen Disziplinen überlegen ist. Die Frage ist aber wieder: Braucht man das wirklich bei einer reinen eingebetten Scriptsprache, die im Grunde genommen keine großen Berechnungen machen muss?
    Im Prinzip ist das die selbe Diskussion wie auch zwischen C++ und Java. C++ ist in punkto Geschwindigkeit und Speicherbedarf Java überlegen und wird es auch immer sein. Trotzdem ist Java eine angesehene Sprache, weil sie stabiler läuft und durch Laufzeitfeatures wie z.B. einem Garbage Collector in anderen Bereichen überlegen ist, was in verschiedenen Anwendungsbereichen wichtiger ist als Geschwindigkeit.


    Zitat von Sense

    Pawn wird natürlich interpretiert aber jede Sprache wird zuerst Interpretiert durch einen Scanner und Lexer danach kommt die Sinnesanalyse und letztendlich wird alles in einen anderen Code übersetzt der wiederum dazu verwendet wird einen Code für den Prozessor zu generieren.


    Direkter Maschinencode für den Prozessor wird weder in Lua noch Pawn (sofern die weniger gebräuchlichen JIT-Varianten ausgeschlossen werden) generiert. Was du beschrieben hast wäre eher Just-In-Time Compiling. Der Lua/Pawn Interpreter arbeitet den erzeugten Bytecode Befehl für Befehl in entsprechenden Verarbeitungsroutinen auf Interpreterebene ab (und simuliert damit praktisch einen x86-Prozessor).


    Zitat von BlackAce

    Ein Script muss nicht mehr Speicher belegen können, als es von vornherein benötigt - dazu wurde Pawn auch entwickelt (VM)


    SA:MP Stil ist im Voraus so viel Speicher zu reservieren, wie maximal irgendwann benötigt werden könnte. D.h. wenn das Limit bei 1000 Objekten liegt, wird Speicher für alle 1000 Objekte reserviert. Insofern schafft SA:MP Limits, die eigentlich gar nicht da sein müssten. MTA hingegen reserviert Speicher dynamisch zur Laufzeit und nur, wenn er auch benötigt wird. Die Limits, die es in MTA gibt, sind daher nur noch von GTA:SA abhängig.
    Leider zieht sich dieser Stil auch in Pawn weiter durch, sodass bei den meisten Scripts zum Speichern von Daten in Arrays immer für die maximale Anzahl an Spielerslots Speicher reserviert wird. Lua bietet dazu auf der Gegenseite assoziative Tables, in denen wieder nur so viel Speicher reserviert wird, wie erforderlich ist und macht damit andere "Speicherverschwendungen" zumindest ein Stück weit wieder gut.

    Code
    -- leere Table erstellen, die minimalen Speicher benötigt (ähnelt Pawn Arrays)
    playerData = {}
    
    
    -- Wert eintragen
    playerData[player] = "MyVar"

    Einmal editiert, zuletzt von Guenther320 ()