Monthly Archives: May 2006

Happy 15th Birthday to Visual Basic!

Wow, where does the time go? I can remember when VB was just this tall. Soon it’ll be driving!

Microsoft Announces Visual Basic at Windows World ’91 General-Purpose, High-Productivity Programming System for Microsoft Windows

ATLANTA — May 20, 1991 — Microsoft today announced MicrosoftR Visual BasicTM programming system at the Windows World ’91 industry trade show.  Visual Basic is a graphical application development system for Microsoft WindowsTM graphical environment version 3.0 that combines visual design tools with a powerful, general-purpose programming language and Windows .EXE compiler.  It provides a simple solution to the complex task of creating real Windows-based software applications.

“We set out to create the fastest, easiest way to program for the Windows environment,” said Bill Gates, Microsoft founder and CEO.  “My goal from the start was to make developing Windows applications as easy and natural as possible.  We also wanted this tool to appeal to a broad spectrum of people interested in programming for Windows — from professional corporate programmers and consultants solving business problems to independent software vendors and casual programmers.”

Visual Basic programming system combines a rich, event-driven programming model with the world’s most widely used programming language in a tightly integrated package.  General development for the Windows environment is faster than ever.  The Visual Basic programming system provides visual user-interface design capabilities with powerful general-purpose programming tools, making it easy for any programmer to create compiled Windows .EXE files that can be freely distributed without run-time fees or royalties of any kind.

“This is the most important software product of the year, if not the decade,” said Steve Gibson, president of Gibson Research Inc.  “It’s the ultimate intellectual tool. Thanks to Visual Basic, both casual and professional programmers can produce compelling and beautiful results. Now it’s easy to put together real Windows version 3.0 applications.”

“We needed to create an application that incorporated Microsoft Word for Windows and Microsoft Excel,” said Craig Ellis, senior programmer analyst, Reuters Information Systems.  “Visual Basic was the tool to do this.  It filled our needs, allowed us to develop a fast and effective application and cut our development time by more than half.  It’s a fantastic product that allowed us to incorporate a family of Microsoft products into one application.”

The Visual Basic programming system can be used to develop any Windows-based application, including corporate business systems, tools and utilities, front ends to data (mainframe, server and local) or commercial Windows software products.  It is also useful for integrating multiple Windows-based applications and for automating software testing through dynamic data exchange (DDE).

Visual Basic programming system provides visual design tools for creating the user interface components — windows and dialogs — of an application.  A full set of Windows interface components (including command buttons, text fields, list boxes, pictures, drop-down menus and file system controls) are created visually, without writing any code.  The forms engine for building the interface incorporates technology acquired from Cooper Software.  A powerful, structured programming language is then used to add functionality to these interface components, responding to events that are automatically trapped by the system.

The Visual Basic language is a derivative of the Microsoft QuickBasicTM modern programming system, modified for the graphical environment and the event-driven programming language.  It uses a threaded p-code incremental compiler and source-level debugging tools, including an interactive immediate window, in a tightly integrated system.


Support is provided for DDE, the mechanism for exchanging data with other Windows-based applications.  The Visual Basic system also supports dynamic link libraries (DLLs), which allow the user to establish links with other Windows systems facilities and call the Windows API or routines written in other languages and compiled into DLLs.  The control set itself can be extended by developers using C and the Windows SDK and the Microsoft Visual Basic Control Development Kit, available separately.  This extensibility will provide the ability to fully integrate new user interface components into the graphical design and code development environment.  Examples could include multimedia, pen controls and data access.

Printed documentation and online Help provide step-by-step instructions for writing programs.  The online Help system provides context-sensitive reference information and sample code that can be copied and pasted into a Visual Basic program.  An icon library of approximately 400 designs and an icon editor written in Visual Basic language are also included.  “The built-in help is excellent,” said Lee Perryman, deputy director of Associated Press Broadcast Services in Washington, D.C.  “The debugging features are superb, and the controls are rich and feature-packed.  Because there is almost no learning curve for users familiar with the Basic language, Visual Basic makes Windows programming a snap.”

Visual Basic programming system for Windows will be available in June 1991 for a suggested retail price* of $199.  German and French versions are expected to ship in August, with other foreign language versions to follow.

The Visual Basic programming system runs in either the standard or enhanced mode of Microsoft Windows graphical environment version 3.0 or higher.  The system requirements include a personal computer using 80286 processor or higher; hard disk; mouse; CGA, EGA, VGA, 8514, HerculesR or compatible display; MS-DOSR operating system version 3.1 or later and one or more megabyte of memory.

Microsoft Corporation (NASDAQ “MSFT”) develops, markets and supports a wide range of software for business and professional use, including operating systems, network products, languages and applications as well as books, CD-ROM products and hardware for the microcomputer marketplace.


Microsoft, the Microsoft logo and MS-DOS are registered trademarks and Microsoft QuickBasic, Visual Basic and Windows are trademarks of Microsoft Corporation.
Hercules is a registered trademark of Hercules Computer Technology.

*Prices listed are U.S. suggested retail prices.

And many happy returns…


FYI, we just released an updated community preview of our LINQ support for both VB and C#, entitled “Microsoft Visual Studio Code Name “Orcas” Language-Integrated Query, May 2006 Community Technology Preview.” Or you could just call it “the May CTP.” Anyway, this new CTP has a lot of new goodies for VB programmers, as our LINQ support is greatly expanded. To crib straight from the readme, here’s some of the stuff we did:

Enhanced DLinq Support: This CTP adds support for Inheritance, Stored Procedures, User-Defined Functions, and Optimistic Concurrency Conflict Resolution (OCCR).  The new DLinq Designer provides a visual design surface for creating DLinq entity classes from database tables.

LINQ over DataSet: The full power of LINQ can now be applied to the DataSet, allowing you to use the Standard Query Operators and some DataSet-specific extensions to query against DataRows.

“Group By” Query Comprehensions: The compiler now supports “Group By” as a valid clause in LINQ Queries. 

Outlining support for XML Literals in the Editor: In this release, we added outlining support for XML literals. You can now expand or collapse any Xml element literal that spans across more than one line. 

Value extension property for XML axis properties: We added a Value extension property to the collections that are returned from the XML axis properties (i.e. IEnumerable(Of XElement) and IEnumerable(Of XAttribute)). This extension property does two things, it first picks up the first object in that IEnumerable, and if this object exists, it calls the “Value” property on this object (either XElement or XAttribute).

Global Xml namespace support: XML namespaces that are declared using the Imports statement can now be used in the XML literals.Select/From syntax: The previous tech preview supported using Select before From.  In an effort to provide better IntelliSense™, we’re switching to the From/Select format for this CTP.

Joins don’t require “It”:  You don’t need to use the iterator variable “it” anymore when performing a join operation, though it’s still required for grouping operations.

Xml axis properties syntax: The late bound Xml feature has a new name and a new distinct syntax where we wrap the element name with angle brackets. This new syntax makes the Xml axis properties visually distinct and solves problems that the previous CTP syntax had. See more information in this blog.


BASIC principles

John Montgomery’s entry on “Express “Orcas” Principles” got me thinking about the whole “principles” thing. Just like you should always be able to give an elevator pitch for your product, I think you should always have a clear idea of your product’s principles. I particularly liked Bjarne Stroustrup’s description of C++’s principles in “A Brief Look at C++0x”:

C++ is a general-purpose programming language with a bias towards systems programming that:

  • is a better C
  • supports data abstraction
  • supports object-oriented programming
  • supports generic programming

By “systems programming”, I mean programming the kind of tasks traditionally associated with the operating system and fundamental tools. This includes the operating system kernel, device drivers, system utilities, networking, word processing tools, compilers, some kinds of graphics and GUI, database systems, games engines, CAD/CAM, telecommunications systems, etc. This kind of work is strongly represented among current C++ users.

I recently wrote up a paper that tried to distill some new ideas we’ve been kicking around here in VB-land and decided to submit it to Bill’s latest ThinkWeek. Remains to be seen whether he actually reads it (submitting papers is quite in vogue these days, so there are a lot of ‘em), but I started the paper by laying down what I see as VB’s “principles”:

Visual Basic is a general-purpose programming language that prioritizes ease of use. In particular, Visual Basic is designed with the following principles in mind:

  • Approachability. English-like syntax is used to promote the clarity and readability of code. Wherever possible, meaningful English words or phrases are used instead of abbreviations, acronyms or special characters.
  • Simplicity. Extraneous or unneeded syntax is generally allowed but not required. Language semantics prioritize understandable behavior over technically “correct” behavior.
  • Flexibility. Data types can generally be omitted for brevity and speed of development, but can be introduced at any time to improve error checking or environment feedback.
  • Pragmatism. Working in a natural way is a higher priority than language purity. Supporting more than one way to accomplish a task is acceptable if it supports common development methodologies.
  • Platform support. The language enables programmers to take advantage of the major features of the .NET Framework and is always consistent with its conventions.

Do we always fully live up to these principles? Probably not. Do we always strive to achieve them anyway? Definitely.

Discussing VB, scripting, dynamism and such

As the eagle-eyed may have noticed, I recently added a new post category called “VB/Script.” In it I have collected a number of posts that I’ve written over the years concerning VB, scripting, dynamism and so on. Specifically, I’ve pulled together (in chronological order from earliest to latest):

I’m doing this because I expect that in the coming months/years I’ll be talking more about these kinds of things, and I want to make sure they’re all easily accessible. A couple of quick notes on the category name, though. First, I put that slash in there to emphasize that I am not talking about VBScript, the IActiveScript script engine, per se. I’m just talking about “VB” and “scripting.” And, second, I realize that the term “scripting” is so incredibly overloaded as to be practically meaningless—for example, “scripting” doesn’t necessarily mean “dynamism,” even though I’m lumping them together here. However, I don’t want a category named “VB/Scripting/Dynamism/Etc,” so I’m just going to pick a single term and figure that everyone can figure out what I mean. Hopefully, you all can… <g>

Select/From vs. From/Select revisited…

We’ve been hard at work on an updated CTP of the LINQ work, and when you get it (no comment on dates at this point), you’ll notice several new things about the VB LINQ support. One the biggest is going to be the fact that, after trying all the Intellisense tricks we could think of, we’re throwing in the towel on Select/From and adopting the “Yoda style” From/Select syntax. As in:

        Dim WACusts = _

            From c In Customers _

            Where c.State = “WA” _

            Select c

instead of:

        Dim WACusts = _

            Select c _

            From c In Customers _

            Where c.State = “WA”

You can review the arguments for and against in my original Select/From blog entry, but the salient point is and always has been my comment that:

Statement completion is a significant question. We have a bunch of ideas as to how we could finesse this in the IDE, but we haven’t reached a point of being really able to try them out. This may be a real sticking point, time is just going to tell.

And, indeed, this was the sticking point. Many of you tried out the Intellisense support we shipped in the last CTP and found it wanting. We looked at the other options available to us and came to the conclusion that it just wasn’t going to work any of the other ways we could think of, either. So, having concluded that we did our best to get the syntax we wanted, we switched to From/Select so that we could give the Intellisense experience that we think is even more important.

Now you don’t have to be a masochist!

As you may remember, I asked last year whether C# programmers are masochists for using C# to program against the Office model since VB deals with COM much better in a number of cases. My comment was prompted by the publication of Eric Lippert’s and Eric Carter’s book “Visual Studio Tools For Office Using C# with Word, Excel, Outlook and InfoPath.” Well, now you don’t have to be a masochist any more! You can read “Visual Studio Tools For Office Using Visual Basic 2005 with Excel, Word, Outlook and InfoPath”. As Eric Carter says:

This edition of the book focuses on using the Visual Basic 2005 language to program against Office.  Visual Basic is a much easier language to use for Office development than the C# language.  The Visual Basic language and the Office object models “grew up” together over the years and as a result the Visual Basic language deals much more easily with features of the Office object models like optional parameters and loose typing than C# does.  If you compare the Visual Basic edition of this book to the C# edition you will often find the code samples are simpler than the C# samples because of the way Visual Basic simplifies calling the Office object models.

 Check it out!