|
See also:
Dermot Hogan on 'The Strange Death of Visual Basic'
Visual Basic:: Past, Present Future
"I have to confess that I rather
like VB .NET" (Editorial) |
Everything has to come to an end
at some time. So why are some people kicking up such
a fuss about the phasing out of VB6? We asked Microsoft
Product Manager for Visual Basic, Jay Roxe,
to respond to users' concerns. Here's what he had to
say.... |
bitwise: Previously, VB
had a clear and distinct advantage over C++ for RAD.
Now, there seems little to choose between C# and
VB .NET in this respect. So (bearing in mind that,
in the words of the head of the C# Quality Assurance
Team, Eric Gunnerson, ‘C#
is the native language for the .NET Common Language
Runtime’)
why would anyone choose VB .NET over C#?
Jay Roxe: As somebody
who worked as a developer on the CLR team for more than
4 years, I can say that both are great languages. Both
are designed to provide the full-power of the .NET Framework
to developers, but there is a difference in philosophy.
C# has been targeted at the more-code focused developer,
while VB is targeted at a developer who will work with
the tool more extensively while crafting their code.
You can see this in Visual Studio 2005 – C#
has put investments into things like iterators while
Visual Basic has invested in features like AutoCorrect
and the My namespace. Both languages are picking up features
like Generics, Edit and Continue and the new drag-and-drop
data binding. VB 2005 is the natural choice for VB6 developers
that want a single environment that can handle the challenges
associated with Windows, Web, Office and mobile development.
I’d also like to take a second to address Eric’s
quote and the idea that there is a native language for
the .NET Common Language Runtime. Portions of the CLR
are written in C# and portions are written in VB – both
languages are first-class citizens on the CLR as are
C++, J# and many others. There is no native or preferred
language for the CLR, as a matter of fact there are over
90 languages supported by VS, all with equal access to
the same great framework.
bitwise: Many
VB 6 people feel that they have, in effect, been dumped
by Microsoft. Why won’t
Microsoft support VB6 for as long as people are using
it? After all, IBM is still supporting O/S2! What can
we deduce from this about the relative attitudes of
IBM and Microsoft towards their customers?
Jay Roxe: Visual Basic
6.0 is still supported by Microsoft. This past March,
Microsoft transitioned from free to paid support for
Visual Basic seven years after the product originally
released. We are providing extended support through March
31, 2008 and then custom support agreements through March
2012. The important thing to note is that Microsoft is
still supporting Visual Basic.
If you want to compare the VB support lifecycle to
that of OS/2 or other IBM software, do it carefully.
According to IBM’s website, the most recent version
of OS/2 Warp shipped in December 2001 and will be supported
through December 2006, for customers on current maintenance
contracts (in other words, they are paying annual fees).
This is two years shorter than Microsoft provided free support
for VB6 and Microsoft will continue to provide paid
support for another 7 years. IBM’s stated support
policies lag Microsoft’s, and if you look
at IBM’s actual historical support record for
the most current and recent mainstream products, the
total lifecycle averages 40 months – less
than half of the period that Microsoft provided for free
support on VB6.
bitwise: In an interview for Bitwise,
David Intersimone from Borland commented, “recently Microsoft announced
that they weren't going to do any more work on VB 6 or
beyond for Win32. That really everybody should develop
to .NET. That's their decision to tell their customers.
What we're telling developers is, you can still use Win32
development and .NET development at the same time. That
we know the reality is developers and users are going
to be using native code and managed code for many years
to come." Borland has gone to great lengths to offer
this support - they even wrote a version of their Win32
VCL class library for .NET so that, much of the time,
old code can be loaded and compiled into .NET with few
(if any) alterations. All that Microsoft did was provide
a migration wizard which, when operating on real world
code, produces masses of comments but precious little
migration. If Borland can offer first class migration
support for Delphi developers, why can’t Microsoft
offer the same support to VB developers?
Jay Roxe: We’re
glad to see that Borland also recognizes the tremendous
advantage that developers gain by programming on the
.NET platform.
Visual Basic .NET developers have been doing amazing
things. We’ve created a number of case studies
from developers that have had success in bringing their
skills and code forward and in doing new development
using VB.NET. One interesting example is Crutchfield,
an online electronics reseller, who successfully integrated
three disparate Visual Basic 6.0 systems using Visual
Basic .NET. Developers can find out more in the case
study:
http://www.microsoft.com/resources/casestudies/CaseStudy.asp?CaseStudyID=16444
In terms of developers who have successfully upgraded
their skills to Visual Basic .NET, I’d suggest
looking at the American Healthway’s case study
at:
http://www.microsoft.com/resources/casestudies/CaseStudy.asp?CaseStudyID=16380
bitwise: On a more technical level, the
support for unmanaged memory in VB .NET is pretty poor.
C# has "unsafe" code
for this purpose. With VB .NET you have to go around
the houses to read a byte stream from a USB device for
example and convert it into a structure. There is no
equivalent to the VB 6 Fixed String concept which could
be used to define an array of bytes or whatever at a
given offset within a structure. Why not?
Jay Roxe: The overall
assumption shared by this question, and many of the C#
questions in this interview, is that C# is the gold standard
for .NET languages. At Microsoft, we don’t believe
that this is true – every
language is a first-class citizen on the .NET Framework.
Indeed, when it comes to the unsafe code question that
you asked above, you could equally well have asked the
C# team why they chose not to support filtered exceptions,
the My namespace, or any of the other VB-specific features.
The purpose of any high-level programming language
(and I include VB6, VB.NET, C# and many others in this
group) is to remove developers from the challenges associated
with directly managing memory. Huw, you said this well
in your article for DNJOnline earlier this year(http://www.dnjonline.com/article.aspx?ID=mar05_vbvscsharp): “The
trouble with pointers is that they are inherently unsafe.
They make it easy to corrupt memory, overwrite data and
crash your applications.”
bitwise: In .NET 2.0, VB .NET does not handle generics in
the same way as C# - it is considerably less functional
(specifically there is no yield keyword
or equivalent in VB.NET so iterating over a generic list
is less elegantly handled, requires a good deal more
coding and provides no extra benefits). Surely, this
is symptomatic of VB.NET’s status as a second class
language. Comments?
Jay Roxe: The yield keyword is unrelated to generics;
it applies to iterators which are a different feature.
The implementations of Generics in Visual Basic and C#
are equivalent and both provide a full-featured implementation.
We believe that generics will prove to be a very powerful
feature for developers targeted the .NET Framework interested
in writing reusable and strongly-typed code.
The C# team chose to invest in iterators, which is
a feature that makes it easier to implement the IEnumerable or IEnumerator methods. Iterating over the collection
is usually accomplished using the For
Each (or foreach)
construct and has the same functionality in both languages.
Iterators are useful for developers who are implementing
their own collections. However, with the introduction
of generics, I believe that many developers will find
that they are authoring fewer of their own collections
and relying more on the collections which we have provided
within the .NET Framework.
The Visual Basic team chose to invest in a number of
different features such as the My namespace, AutoCorrect
and others. The My namespace is a powerful addition to
the Visual Basic language that provides a speed dial
into the .NET Framework, extensions to the application
framework and access to common application requirements
such as Forms, Resources and Settings.
I don’t believe that differences in the languages
make one a second-class citizen. The teams have chosen
to invest in different features, but this provides advantages
to developers because it gives them a better opportunity
to select the tool that’s right for the job.
To see the roadmap for the languages going forward,
I would suggest that developers read the Developer Tools
Roadmap at: http://msdn.microsoft.com/vstudio/productinfo/roadmap.aspx
Developers looking for information specifically on
VB 2005 and C# should look at the respective MSDN developer
centers at http://msdn.microsoft.com/vbasic and http://msdn.microsoft.com/vcsharp.
bitwise: Why did Microsoft throw out
widely used language constructs such as control arrays
and GoSub? The functionality contained in these VB6
language constructs are not easily replicated in VB
.NET. (Note, here I am specifically referring to a
VB6 ‘control array’ and NOT
an array of Controls which is in both VB6 and VB .NET).
Jay Roxe: Visual Basic
.NET offers developers many more language constructs
than were available in previous versions of the product – examples
of this at a micro-level include XML documentation, unsigned
types, and object oriented development.
Examples at the macro level are more obvious and include
the ability to create Windows, Web, Office and Mobile
applications using the same tool and set of skills. Today’s
Visual Basic is the best tool for the developer looking
to create those line-of-business applications.
When we started the design process for Visual Basic
.NET 2002, we looked at the most common errors that had
plagued developers in earlier versions and on which they’d
sent us the most feedback. GoSub was one of the things
that was most likely to cause difficult-to-diagnose bugs
in programs. After taking community feedback for several
years, we made the decision to remove GoSub.
In many cases, developers can get the same functionality
offered by Control Arrays by defining a single event
handler for a large number of controls – something
that is elegantly handled in VB due to the Handles clause.
We’ve also encountered places where there are a
few more difficult cases and are working with developers
to address those challenges.
Starting with Visual Basic .NET, we’ve published
the language specification. Included in this specification
is a piece on the definition of language compatibility.
I’d invite interested developers to take a look
at that specification at:
http://www.microsoft.com/downloads/details.aspx?familyid=ca6e29d9-47d5-472a-9e65-7d9e4e98be0f&displaylang=en.
bitwise: Finally, several long-term VB
developers who have contacted Bitwise have told us
that they no longer feel able to trust their business
interests to VB and are either considering or are actually
in the process of transferring development to other
languages. Obviously for companies which may have developed
many hundreds of thousands of lines of VB code this
necessarily involves a huge amount of effort and considerable
expense. But, given the lack of response by Microsoft
to numerous complaints from sections of the VB community,
they are making the correct decision. Aren’t
they?
Jay Roxe: We’ve spent a great deal of time working
with the community including our MVPs and others to ensure
that Visual Basic continues to evolve to meet their development
challenges. Ask any VB.NET developer if they would ever
go back to VB6. Developers and corporations that have
made the switch report tremendous advantages in terms
of both developer productivity and the performance of
their applications. For example, a study by Doculabs
showed that a VB .NET/ASP .NET application was three
times faster and supported twice as many users than the
same application written in Visual Basic 6.0 and ASP.
Any seasoned Visual Basic 6.0 developer will tell you
about their deployment headaches. With Visual Basic .NET,
simply copy the application to the machine and it works!
Visual Basic 6.0 applications can break other VB6 apps
or even interfere with the system. By simplifying deployment
challenges, Visual Basic .NET and the .NET Framework
reduce costs and workload for most IT organizations.
With advances in the industry and increased spending
on IT budgets, developers are expected to address ever
more complicated technical challenges. For example, more
developers are being asked to create solutions that integrate
Windows, Web and Office solutions. Mobile solutions are
gaining an increasing amount of popularity. When we looked
at what developers are being asked to do, we knew that
we needed to enable Visual Basic developers and companies
that had bet on Visual Basic to address those challenges.
Microsoft is proud to be a part of the tremendous community
that has grown around Visual Basic 6.0 and Visual Basic
.NET. By many estimates, Visual Basic is the most used
language in the world. When we evaluated the decision
to move the Visual Basic language onto the .NET Framework,
we committed to making Visual Basic a first-class language
on the platform.
We are continuing to demonstrate our commitment to
this community with many of the programs that we’ll
be executing over the next year. We are working extensively
with developers to ensure that they can continue to utilize
the investments that they have made in Visual Basic 6.0
solutions. With Visual Basic 2005, we are introducing
the concept of RegFree COM which allows developers to
utilize COM components in their Visual Basic 2005 code
without having to register the component on the local
machine – indeed they can even run different versions
of the components side-by-side on the same machine. This
enables developers to reuse components that they wrote
in Visual Basic 6.0 without facing deployment challenges.
We’re also launching a series of worldwide educational
events to help developers bring their skills and code
forward to Visual Basic 2005. This autumn, Microsoft’s
Patterns and Practices group will be publishing best-practices
guidance on moving applications from Visual Basic 6 to
Visual Basic 2005 including an assessment tool designed
to help developers and their managers estimate the cost
of making the transition.
I am firmly committed to helping developers to be successful
in transitioning their skills and code from Visual Basic
6.0 to Visual Basic .NET. Microsoft is continuing to
invest in the language and tools for VB.NET. I would
invite developers who have suggestions on ways that we
could continue to support them in this transition to
mail me directly at jroxe@microsoft.com.
Developers interested in trying Visual Basic 2005 can
download Visual Basic 2005 Express edition at http://labs.msdn.microsoft.com/express.
Some sites that developers may be interested in looking
at include:
Doculabs comparison between VB6/ASP and VB.NET/ASP.NET:
http://msdn.microsoft.com/vbasic/productinfo/advantage/default.aspx
The
Visual Basic 6.0 Resource Center:
http://msdn.microsoft.com/vbrun.
July 2005 |