Results 1 to 10 of 12

Thread: A new age of code!?

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. Default A new age of code!?

    Sourcemod 2 is on the way. This will result in major reprogramming of most mods to take advantage or new features and better performance:

    Why?

    The original SourcePawn compiler is extremely old. It was written by ITB CompuPhase in the 1990s and was originally based off a 1984 journal submission. It is nearly impossible to maintain. The binary format (".smx") is also archaic and inflexible, inhibiting almost any modern language feature or performance improvement.
    Tell me more!

    SourcePawn 2 runs plugins directly from source. That means you can drop ".sp" files in your plugins folder and they just work. Offline syntax and type checking is also supported. There are no plans to remove .smx support, however, .smx files will not be able to take advantage of SourcePawn 2.

    My goal is to support enough SourcePawn language features that 70% of plugins on the forums will work. From there I'll evaluate what features are remaining and whether they're worth adding. In this initial prototype, enough features are working to write very simple plugins, though #include does not work so you must declare natives manually.

    Here are the known language features I have not implemented, but will implement:
    • Const with non-refs
    • Array literals
    • Float comparison
    • Non-branching comparison
    • Global variables
    • Dynamic arrays
    • #include <>
    • Array slicing
    • Float comparisons
    • Booleans
    • The any: tag
    • Optional semicolons
    • Chained relational operators
    • Ternary expressions
    • Passing functions as variables/parameters
    • SortCustom2D, SortStrings
    • Very limited, specific uses of #if and #define


    Eventually, if/as the language reaches maturity, I will start adding new language features that people have been requesting:
    • Resizable arrays
    • Global dynamic arrays
    • Structs
    • Classes
    • Closures/nested functions
    • Discriminated unions
    • Dynamic types
    • First-class FFI


    SourcePawn 2 includes garbage collection. I've implemented a very basic garbage collector that only runs on map changes. For most use cases I've managed to maintain SourcePawn's performance and memory guarantees surrounding arrays, which is great.

    Aside from that, the entire architecture is much more amenable to high-powered performance optimizations than SourcePawn 1. Although the implementation right now is simple (GC is not realtime, and the execution mode is an interpreter), the entire architecture is geared toward making an advanced GC and an optimizing JIT very easy.
    Now for the bad part:
    There are many language features I will not implement. They are either too difficult to support in a modern design, or they are inherently bad features that may impede progress. Next to each I've listed what the eventual replacement will be:
    • Enum structs (replacement: actual structs)
    • #pragma semicolon (replacement: none, semicolons cannot be required)
    • #define X Y (replacement: use "const" or "static const")
    • #define X() ... (replacement: none, use functions)
    • #pragma (none, #pragmas are unneeded and will be ignored)
    • funcenum (replacement undecided)
    • Anything in <functions.inc> (replacement: module system like Java/C#)
    • Variadic arguments (replacement: alternate syntax I can talk about later)
    • Using String: as a non-array tag (replacement: none)
    • Tag mismatches as warnings (replacement: none, these are bugs)
    • #include "" ("use" keyword)
    • Enums with non-uniformly typed values (replacement: none, these are bugs)
    • Naming enums "Float", "String", "bool", etc. (replacement: none, these are bugs)

    #pragma semicolon (replacement: none, semicolons cannot be required)




    Programing without semicolons!? IMPOSSIBLE!!!!!!!!!!!!!




  2. Default

    So use commas in your loop initialization instead?


    Quote Originally Posted by Zero
    So... what your trying to tell me is that you saw a spherical square?

  3. Default

    Well, I used to code for AMXX(pawn). How much different is sourcepawn?

  4. Default

    Quote Originally Posted by ZERO View Post
    Sourcemod 2 is on the way. This will result in major reprogramming of most mods to take advantage or new features and better performance: Now for the bad part:#pragma semicolon (replacement: none, semicolons cannot be required)Programing without semicolons!? IMPOSSIBLE!!!!!!!!!!!!!
    "written by ITB" your welcome people.
    -The enemy of my enemy is my friend-

  5. Default

    so is this gana rebrake wcs?

    Anime-Planet.com - anime | manga | reviews
    Once more into the fray.
    Into the last good fight I'll ever know.
    Live or die on this day.
    Live or die on this day.

  6. Default

    No it is reverse compatable but things that have a LOT of code like wcs will want to be reprogramed for this b/c it will run MUCH FASTER AND MORE STABLE.



  7. Default

    Wait after reading more closely:
    Here are the known language features I have not implemented, but will implement:
    Optional semicolons



  8. Default

    so how long will it take to reprogram all this?

    Anime-Planet.com - anime | manga | reviews
    Once more into the fray.
    Into the last good fight I'll ever know.
    Live or die on this day.
    Live or die on this day.

  9. Default

    Quote Originally Posted by inthebutt View Post
    "written by ITB" your welcome people.



    Quote Originally Posted by ZERO View Post
    Wait after reading more closely:
    Here are the known language features I have not implemented, but will implement:
    Optional semicolons


    Seriously though, all for faster and stabler. Seems like a decent amount of added work to do though.
    Make all your last demands for I will forsake you and I'll meet your eyes for the very first time, for the very last.

    maynard <ibis>: they are awkward and last 2 damn long. I prefer thinner smaller ones

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •