Earlier counterparts of Visual Basic (prior to version 5) compiled the code to P-Code only. Visual Basic 5 and 6 are able to compile the code to either native or P-Code as the programmer chooses. The P-Code is interpreted by the language runtime, also known as virtual machine, implemented for benefits such as portability and small code. However, it usually slows down the execution by adding an additional layer of interpretation of code by the runtime although small amounts of code and algorithms can be constructed to run faster than the compiled native code. Visual Basic applications require Microsoft Visual Basic runtime MSVBVMxx.DLL, where xx is the relevant version number, either 50 or 60. MSVBVM60.dll comes as standard with Windows in all editions after Windows 98 while MSVBVM50.dll comes with all editions after Windows 95. A Windows 95 machine would however require inclusion with the installer of whichever dll was needed by the program.
Criticisms levelled at Visual Basic editions prior to VB.NET include:
Versioning problems associated with various runtime DLLs, known as DLL hell
Inability to create multi-threaded applications, without resorting to Windows API calls
Inability to create Windows services
Variant types have a greater performance and storage overhead than strongly typed programming languages
The development environment is no longer supported by Microsoft.