logo WinWrap®

Compile Scripts - Speed up WinWrap Basic Scripts by 100 Times

WinWrap® Basic is an embedded language control available for .NET/COM 32/64 bit Windows applications. The WinWrap® Basic Component is compatible with VBA, Sax Basic, VB.NET and Visual Basic 6.0 style scripts.

Speed up WWB.NET code by 100 times, or more, with the WinWrap® Basic Version 10 compiler option.

Create a Compiled Library with WinWrap® Basic Version 10 Compile Option

  • Compile speed-critical WinWrap® Basic library projects
  • Utilize the full power of VB.NET code
  • Access application defined language extensions
  • Call compiled code directly from WWB.NET scripts
  • Call compiled code via delegates
  • Use any of thousands of .NET Framework Classes

How the WinWrap® Basic Compile Option is Implemented

WinWrap® Basic implements the WWB.NET/Compiled language using Microsoft's VB.NET compiler component. A WWB.NET/Compiled project is compiled on demand the first time it is used. Changes to the project cause the code to be recompiled on demand the next time it is used. The compiled code is completely managed by the WinWrap® Basic environment. Additionally, the language extensions added by the application are available from a WWB.NET/Compiled project.

Compile Scripts - Speed up WinWrap Basic Scripts by 100 Times

Where script execution speed is critical, you now have the option of compiling the script as a WWB.NET/Compiled library. Click on one of the links below to evaluate the WinWrap® Basic Compile Option.

When to Use Compiled Code Libraries

WinWrap® Basic's compile option is a good choice for compute intensive code, speed critical code routines.

  • Maximum execution speed is critical
  • Compiled computations are guaranteed to be fast
  • Or, the computations can be broken into chunks

Why You Still Need Scripted Code

WinWrap® Basic's WWB.NET scripting development and execution environment has been optimized for script writers and users.

  • Allows users to pause and halt executing scripts
  • Cooperatively multitasks with the foreground task
  • Optimized debugging features
  • Call compiled code libraries

WinWrap® Basic Compile Option Performance Demo

The following WWB.NET and WWB.NET/Compiled code demonstrates how to use the WinWrap® Basic Version 10 compiled option.

WWB.NET compile option demo output:
Calculate Primes in Compiled Library Code
  224737 is the 20000th prime
  Compiled library code calculated 20000 primes in 252 ms
Calculate Primes in Scripted Code
  224737 is the 20000th prime
  Scripted code calculated 20000 primes in 45818 ms
182x Speed Improvement for Compiled Library Code

Steps for Creating a WinWrap® Basic Compile Option Performance Demo

You can download this WinWrap® Basic compile option demo code by clicking the following link: WinWrap® Basic Version 10 WWB.NET Compile Option Demo.

Using the WinWrap® Director program shipped with WinWrap® Basic .NET Version follow the instructions below to create a demo program for calculating the first n primes.

  1. Download the WinWrap® Basic compile code demo
  2. Open WinWrap® Director (shipped with WinWrap® Basic evaluation)
  3. Open the PrimesProject.wwp project with WinWrap® Director
  4. Select the PrimesProject-MainModule.wwm
  5. Run the demo by pressing the Project | Run menu choice
  6. Monitor primes calculations as they progress
  7. Observe the compile speed increase for this primes calculation

The primes will be calculated first with compiled code (fast) and then with script code (not as fast). The highest prime calculated will be printed out as the primes calculations progresses.

Executable Project PrimesProject.wwp

In the Executable Project PrimesProject.wwp the "EntryPoint Main" command selects the "Sub Main()" subroutine to begin executing. The "ReferenceProject" command brings the CompiledProject symbols into this executable project.
'#Language "WWB.NET" Project PrimesProject EntryPoint Main LoadModule "PrimesProject-MainModule.wwm" LoadModule "PrimesProject-Engine.wwm" ReferenceProject "PrimesLibrary.wwp" End Project
You can use F8 (Step Into) to see PrimesProject.wwp "Sub Main" execute line-by-line.
Imports System.Collections Module MainModule Public Sub Main Debug.Clear Dim limit As Integer = 10000 Dim prime As Long Dim tstart As Date Debug.Print "Calculate Primes in Compiled Library Code" tstart = Now prime = PrimesLibrary.Engine.NthPrime(limit) Dim compiledMS As Long = (Now-tstart).TotalMilliseconds Debug.Print " " & prime & " is the " & limit & "th prime" Debug.Print " Compiled library code calculated " & limit & " primes in " _ & compiledMS & " ms" Debug.Print "Calculate Primes in Scripted Code" tstart = Now prime = Engine.NthPrime(limit) Dim scriptedMS As Long = (Now-tstart).TotalMilliseconds Debug.Print " " & prime & " is the " & limit & "th prime" Debug.Print " Scripted code calculated " & limit & " primes in " _ & scriptedMS & " ms" Dim ratio As Integer = scriptedMS/compiledMS Debug.Print ratio & "x Speed Improvement for Compiled Library Code" Stop End Sub End Module
The NthPrime function calulates the nth prime, returning it to the calling routine.
Imports System.Collections Public Module Engine Private primes As ArrayList Public Function NthPrime(ByVal limit As Integer) As Long primes = New ArrayList primes.Add(2) Dim n As Long = 1 Do Until primes.Count >= limit n += 2 If IsPrime(n) Then primes.Add(n) Loop Return primes.Item(limit-1) End Function Private Function IsPrime(ByVal n As Long) As Boolean Dim limit As Long = CLng(n ^ .5) For Each prime As Long In primes If prime > limit Then Exit For If n Mod prime = 0 Then Return False Next Return True End Function End Module

Compiled Project CompiledProject.wwp

WinWrap® Basic designates compiled code with the '#Language "WWB.NET/Compiled" directive.
'#Language "WWB.NET/Compiled" Project PrimesLibrary LoadModule "PrimesLibrary-Engine.wwm" End Project
The NthPrime function calulates the nth prime, returning it to the calling routine.
Imports System.Collections Public Module Engine Private primes As ArrayList Public Function NthPrime(ByVal limit As Integer) As Long primes = New ArrayList primes.Add(2) Dim n As Long = 1 Do Until primes.Count >= limit n += 2 If IsPrime(n) Then primes.Add(n) Loop Return primes.Item(limit-1) End Function Private Function IsPrime(ByVal n As Long) As Boolean Dim limit As Long = CLng(n ^ .5) For Each prime As Long In primes If prime > limit Then Exit For If n Mod prime = 0 Then Return False Next Return True End Function End Module
You can download this WinWrap® Basic compile option demo code by clicking the following link: WinWrap® Basic Version 10 WWB.NET Compile Option Demo. Then open the PrimesProject.wwp project with WinWrap® Director. WinWrap® Director is part of the WinWrap® Basic Scripting Engine evaluation.

Conclusion

Speed up WWB.NET code by 100 times, or more, with the WinWrap® Basic Version 10 compiler option. Where execution speed is critical WinWrap® Basic Version 10's new compile capability will provide the solution.

Further Reading: Industry Discussion of Visual Basic Compiler and .NET Framework

Visual Basic on Wikipedia, "The Visual Basic compiler is shared with other Visual Studio languages (C, C++)."

Cross Compiler on Wikipedia, "Microsoft developed the Common Language Runtime (CLR) which forms the core for their DotNET (.NET) compiler in the Visual Studio IDE."

Visual Basic Development Center by Microsoft, "The .NET Framework has two main components: the common language runtime and the .NET Framework class library."

Visual Basic Home by Microsoft.

Copyright Polar Engineering, Inc.