Sieve of Eratosthenes in VB

Here is the second (hopefully of many) implementations of the Sieve of Eratosthenes. For this one I wanted to step outside of my comfort zone and do a language which I really don't care that much for.

Function FindPrimes(ByVal max As Integer) As IList(Of Integer)
	Dim vals = New List(Of Integer)(max / (Math.Log(max) - 1.08366))
	Dim maxSquareRoot = Math.Sqrt(max)
	Dim eliminated As New BitArray(max + 1)

	vals.Add(2)

	For i = 3 To max Step 2
	    If (Not eliminated(i)) Then
		If (i < maxSquareRoot) Then
		    For j = i * i To max Step 2 * i
			eliminated(j) = True
		    Next
		End If
		vals.Add(i)
	    End If
	Next

	Return vals
End Function

I won't bother explaining the algorithm or my optimizations again. What I want to talk about is the language.

This one was easy for me; after all, it's the same .NET base libraries that I'm comfortable with. At first I wrote the code with a bunch of "As Integer" garbage everywhere. Once I realized I didn't need it, I went back and scrapped a bunch of the unnecessary code to create what you see above. It looks okay to me, but I still don't like some of the noise that VB requires.

  • End Foo - This has to be my number on gripe about VB syntax. I REALLY hate the wordiness that is required to end a block of code. To my eye it destroys the balance of whitespace in the code and makes it harder to see code depth at a glance.
  • Proper Case Keywords - This is a minor thing, but I really dislike the proper cased keywords. I'm used to seeing words start with a capital letter only if it's a class or public member. For me it's still a whitespace thing and these capital letters everywhere encroach on it big time.

It's not all hate from me though. I actually enjoyed the loop syntax (minus the "Next" statement at the end). The only reason I needed the Step statement was because I was skipping numbers. The syntax just felt natural.

In the end, it's not my favorite language, but it's not my least favorite.  I would squarely place this in the "meh" category. I would write code in VB if I needed to work in a legacy environment, but for new .NET code I would still turn to C#.

As always, if you see something stupid that I did then please let me know and I'll update as necessary.

  • David

    I started BASIC progs almost 40 yers ago, when it much less primitive and have just just decided to play again after probably 25 years of almost no programming.
    My old sieve algortihm was a bit simpler, (out of need in 4x BASIC); and never bothered changing it. You can throw out the array eliminating one loop, and if it passes the test just print it to the screen and (nowdays, a file).
    I can sub,it the code in GW-Basic format, but you might choke on the line numbers.
    My interest was peaked by purchase of a new small computer kit here in Australia (http://www.geoffg.net/maximite.html).
    Then I decided to download VS2010 Express to play, after discovering it’s decimal data type can handle MUCH larger numbers. Now I have to learn VB.