Differences
•GN3 scripts do not require any compiling, while GN4 add-ins have to be compiled in Visual Studio Express as DLL files.
•GN3 scripts do not require any deployment as they're read from database, while GN4 add-ins need to reside as DLL files in the same folder with EXE files. However, GN4 add-ins can be loaded in the database, and deployed automatically on each workstation during the GN4 startup, if your system is setup to do so.
•GN3 script didn't have a dedicated editor, while GN4 add-ins are edited in Visual Studio Express.
•While in GN3 you could make scripts with loose definitions (if you were not using Option Explicit, then the variables were defined on-the-fly), that's not the case in GN4: you need to define all variables before using them.
•A debugger is not available for GN3 scripting, while it's available for GN4.
•GN3 scripts are organized in Ted4 scripts, Fred4 scripts and Shell scripts. Normally, you cannot call a Ted4 script from Fred4 or vice versa, except using very special syntax. Moreover, there are no common scripts that can be called from any GN3 application. That is not anymore so in GN4 - most of scripts defined in Shell.vb can be called from any add-in.
•GN3 scripts are organized in "library" scripts and "other" scripts (system or user). You cannot assign a library script to an action - menu command, key, icon etc, but only system and user scripts. That is not anymore so in GN4 - you can assign any script (without parameters or with a single string parameter) to an action.
•GN3 scripts with parameters cannot be assigned to menus/keys/toolbar, so if you needed to have menu commands that create head, subhead, intro and body, you needed 4 GN3 scripts, very similar to each other, just using different values internally. GN4 scripts with a single string parameter can be assigned to menus/keys/toolbar. Thus, for the same example, you need only one GN4 script and not 4 of them. This can dramatically reduce number of required scripts.
•GN3 scripts are not organized in classes, which means you can write a script on any position in a Tera library script or in a User library script and it will be accessible from all system and user scripts. That is not so in GN4: the scripts are organized in classes (see Add-Ins and Classes and Add-ins and context) so you have to carefully choose where to write it - to make it available for the specific context.
See also
Converting GN3 code to GN4 code