<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Visual Basic</title><link>http://www.panopticoncentral.net/category/2.aspx</link><description>Visual Basic</description><dc:language>en-US</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Paul Vick</dc:creator><title>Reserved words: what are they good for? (Absolutely nothing?)</title><link>http://www.panopticoncentral.net/archive/2008/05/08/23317.aspx</link><pubDate>Thu, 08 May 2008 12:01:00 GMT</pubDate><guid>http://www.panopticoncentral.net/archive/2008/05/08/23317.aspx</guid><category domain="http://www.microsoft.com/blogs">Visual Basic</category><wfw:comment>http://www.panopticoncentral.net/comments/23317.aspx</wfw:comment><comments>http://www.panopticoncentral.net/archive/2008/05/08/23317.aspx#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.panopticoncentral.net/comments/commentRss/23317.aspx</wfw:commentRss><trackback:ping>http://www.panopticoncentral.net/services/trackbacks/23317.aspx</trackback:ping><description>&lt;p&gt;Random musing for the day: I was thinking about reserved words in programming languages and whether they're &lt;em&gt;really&lt;/em&gt; necessary at a lexical level. As you know, most programming languages define in their lexical grammar a set of words that cannot be used anywhere in the language except when explicitly specified in the grammar. For example, VB reserves the word "Object". So you can't just say:&lt;/p&gt;&lt;pre class="code"&gt;    &lt;span style="color: green"&gt;' Error: Keyword is not valid as an identifier.
    &lt;/span&gt;&lt;span style="color: blue"&gt;Sub Object&lt;/span&gt;()
    &lt;span style="color: blue"&gt;End Sub
&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Many languages (such as VB) allow you to work around this by providing some sort of lexical escape that suppresses the reserved nature of the word. So you &lt;em&gt;can&lt;/em&gt; say in VB:&lt;/p&gt;&lt;pre class="code"&gt;    &lt;span style="color: blue"&gt;Sub &lt;/span&gt;[Object]()
    &lt;span style="color: blue"&gt;End Sub
&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Confusingly, many keywords that we've been adding to VB lately haven't been reserved words, to reduce the need to modify people's code when they upgrade. Instead, they've been contextual keywords, that is to say they're only reserved in certain syntatic contexts. For example, From is not a reserved word in VB in the lexical grammar, but if you start an expression with From and then follow it with an identifier, we say "Oh, yes, you're starting a query..." For example:&lt;/p&gt;&lt;pre class="code"&gt;    &lt;span style="color: blue"&gt;Dim &lt;/span&gt;From &lt;span style="color: blue"&gt;As Integer &lt;/span&gt;= 10
    &lt;span style="color: green"&gt;' OK: Unambiguously the local variable
&lt;/span&gt;    &lt;span style="color: blue"&gt;Dim &lt;/span&gt;x = From + 10
    &lt;span style="color: green"&gt;' OK: Unambiguously a query
&lt;/span&gt;    &lt;span style="color: blue"&gt;Dim &lt;/span&gt;y = &lt;span style="color: blue"&gt;From &lt;/span&gt;a &lt;span style="color: blue"&gt;In New Integer&lt;/span&gt;() {1, 2, 3, 4}
&lt;/pre&gt;
&lt;p&gt;Which leads me to wonder: why bother with lexically reserved words at all? Why not just make &lt;em&gt;all&lt;/em&gt; of your keywords contextual? When I started on VB, I guess I just accepted the practice since that's what the language did before I showed up, but now I'm not so sure. Maybe there's some blindingly obvious reason that I'm not seeing (probably there is). I can think of some historical reasons why keywords weren't all contextual:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Maybe it simplified writing a parser in "the old days," or it simplified building a parser generator.
&lt;li&gt;Maybe it was because people were writing code in editors that didn't have syntax coloring. "int int = 5; int = (int)int * (int)int / (int)int" looks pretty nonsensical if you don't have nice coloring to tell you which are the keywords and which aren't. 
&lt;li&gt;Maybe there were grammatical problems with doing it? The previous example makes me wonder about whether C could handle it; I'm not an expert on how the C grammar handles the cast operator.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Anyway, it's not extremely relevant at the moment--we're not going to just start unreserving all the keywords in VB--but just something interesting to think about...&lt;/p&gt;&lt;img src ="http://www.panopticoncentral.net/aggbug/23317.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Paul Vick</dc:creator><title>Collection initializer expressions</title><link>http://www.panopticoncentral.net/archive/2008/05/05/23212.aspx</link><pubDate>Mon, 05 May 2008 18:23:00 GMT</pubDate><guid>http://www.panopticoncentral.net/archive/2008/05/05/23212.aspx</guid><category>VB10</category><category domain="http://www.microsoft.com/blogs">Visual Basic</category><wfw:comment>http://www.panopticoncentral.net/comments/23212.aspx</wfw:comment><comments>http://www.panopticoncentral.net/archive/2008/05/05/23212.aspx#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://www.panopticoncentral.net/comments/commentRss/23212.aspx</wfw:commentRss><trackback:ping>http://www.panopticoncentral.net/services/trackbacks/23212.aspx</trackback:ping><description>&lt;p&gt;&lt;em&gt;WARNING: This is a &lt;A href="http://www.panopticoncentral.net/archive/2007/10/03/22266.aspx"&gt;speculative post&lt;/a&gt;. Caveat emptor.&lt;/em&gt;  &lt;p&gt;Well, I appear to be on a rhythm of about once a month posts, which seems OK for the moment. Moving on to another "future" topic, one of the most annoying things that we cut (at least, from my perspective) from VB 2008 was collection initializers. Collection initializers were a little different than the corresponding C# feature, because our plan was to introduce stand-alone initializers that didn't have any intrinsic type. Instead the initializers "snap to" a particular type when they're converted to it, just like lambdas and AddressOf expressions. For example:&lt;pre class="code"&gt;&lt;span style="color: green"&gt;' This works since VB 7.0!
&lt;/span&gt;&lt;span style="color: blue"&gt;Dim &lt;/span&gt;a() &lt;span style="color: blue"&gt;As Integer &lt;/span&gt;= {1, 2, 3, 4}
&lt;span style="color: green"&gt;' This now creates a list.
&lt;/span&gt;&lt;span style="color: blue"&gt;Dim &lt;/span&gt;b() &lt;span style="color: blue"&gt;As &lt;/span&gt;List(&lt;span style="color: blue"&gt;Of Integer&lt;/span&gt;) = {1, 2, 3, 4}
&lt;span style="color: green"&gt;' This assigns a new list to b.
&lt;/span&gt;b = {5, 6, 7, 8}

&lt;span style="color: green"&gt;' If M takes Integer(), that's what it'll get. If it takes List(Of Integer), that's what it'll get.
&lt;/span&gt;M({1, 2, 3, 4, 5})&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;This is kind of nice, in that you can initialize collection types and arrays without having to state a type at all. We do the same trick C# does about looking for an Add method on a object that implements IEnumerable, so you can also use this syntax to initialize dictionaries:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;Dim &lt;/span&gt;d &lt;span style="color: blue"&gt;As &lt;/span&gt;Dictionary(&lt;span style="color: blue"&gt;Of Integer&lt;/span&gt;, &lt;span style="color: blue"&gt;String&lt;/span&gt;) = {{1, &lt;span style="color: #a31515"&gt;"One"&lt;/span&gt;}, {2, &lt;span style="color: #a31515"&gt;"Two"&lt;/span&gt;}, {3, &lt;span style="color: #a31515"&gt;"Three"&lt;/span&gt;}}&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;All this is pretty straightforward, but there is some discussion about what type you should get if there is an absence of a target type. For example, assuming that local type inference is on, what should the following be typed as?&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;Dim &lt;/span&gt;x = {1, 2, 3, 4}
&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;Our initial thought was that we should just infer the dominant type of the initializer and then create an array of that type. So the above example would type x as Integer(). And then the following:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;Dim &lt;/span&gt;y = {{1, 2}, {3, 4}, {5, 6}}&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Would infer a type of Integer(,), a two-dimensional array of Integer. With more nesting, you'd get more dimensional arrays. However, as we talked about it more, it seemed like maybe it might be more useful to infer List(Of T) for the 1-dimensional initalizer, Dictionary(Of K, V) for the 2-dimensional initializer, and nothing for more dimensions. So the type of x would instead be List(Of Integer) and the type of y would be Dictionary(Of Integer, Integer).&lt;/p&gt;
&lt;p&gt;Both seem reasonable, so I'm curious what people would think. Remember, we will only fill in a type if we're in a context (like type inference) where there's no target type to use. We'll always use a target type if there is one.&lt;/p&gt;&lt;img src ="http://www.panopticoncentral.net/aggbug/23212.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Paul Vick</dc:creator><title>Implicitly implemented interfaces</title><link>http://www.panopticoncentral.net/archive/2008/04/07/23114.aspx</link><pubDate>Mon, 07 Apr 2008 15:59:00 GMT</pubDate><guid>http://www.panopticoncentral.net/archive/2008/04/07/23114.aspx</guid><category>VB10</category><category domain="http://www.microsoft.com/blogs">Visual Basic</category><wfw:comment>http://www.panopticoncentral.net/comments/23114.aspx</wfw:comment><comments>http://www.panopticoncentral.net/archive/2008/04/07/23114.aspx#Feedback</comments><slash:comments>28</slash:comments><wfw:commentRss>http://www.panopticoncentral.net/comments/commentRss/23114.aspx</wfw:commentRss><trackback:ping>http://www.panopticoncentral.net/services/trackbacks/23114.aspx</trackback:ping><description>&lt;p&gt;&lt;em&gt;WARNING: This is a &lt;a href="http://www.panopticoncentral.net/archive/2007/10/03/22266.aspx"&gt;speculative post&lt;/a&gt;. Caveat emptor.&lt;/em&gt; &lt;p&gt;This one is a little more speculative than the others, but it’s something that we’d like to get some feedback on. One complaint that we get from time to time has to do with interface implementation. A lot of people like the fact that there’s a nice explicit interface implementation syntax in VB, but sometimes it starts to feel, well, a little &lt;em&gt;verbose&lt;/em&gt;. Even if you let the IDE create all the interface implementations for you, there’s still a lot of extra characters with all those “Implements IFoo.Bar”s, especially when the implementing method is the same name as the interface method. &lt;p&gt;One idea we’ve been kicking around is relaxing our rules to allow for implicit interface implementation. Today, when we’re checking interface implementation for some interface I1 what we do is: &lt;ul&gt; &lt;li&gt;Check to see if any base classes implement any of the members of I1. If so, we mark those methods as implemented.&lt;/li&gt; &lt;li&gt;Check to see if the current class implements any of the members of I1. If so, we mark those methods as implemented. If the current class implements a method that a base class implemented, the current class replaces that implementation.&lt;/li&gt; &lt;li&gt;If all of the methods of I1 are not implemented, we give an error.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;What we would do is slightly modify the rules to:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Check to see if any base classes implement any of the members of I1. If so, we mark those methods as implemented.&lt;/li&gt; &lt;li&gt;Check to see if the current class implements any of the members of I1. If so, we mark those methods as implemented. If the current class implements a method that a base class implemented, the current class replaces that implementation.&lt;/li&gt; &lt;li&gt;&lt;em&gt;If there are any methods of I1 that are not implemented, we check to see if there is a method with the same name and signature in the current class, and if there is, then that method implements the interface method.&lt;/em&gt;&lt;/li&gt; &lt;li&gt;If all of the methods of I1 are not implemented, we give an error.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;What this would mean is that you could do something like this:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;Class &lt;/span&gt;C1
    &lt;span style="color: blue"&gt;Implements &lt;/span&gt;IComparable(&lt;span style="color: blue"&gt;Of Integer&lt;/span&gt;)

    &lt;span style="color: blue"&gt;Public Function &lt;/span&gt;CompareTo(&lt;span style="color: blue"&gt;ByVal &lt;/span&gt;other &lt;span style="color: blue"&gt;As Integer&lt;/span&gt;) &lt;span style="color: blue"&gt;As Integer

    End Function
End Class
&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;And not get any errors. There are a couple of things to note here if you’re familiar with C#, though. First, unlike in C#, if you declare a method in a derived class that has the same name as an interface method that is declared in a base class, you will still have to explicitly implement the interface method if you want the derived class method to take over. For example:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;Class &lt;/span&gt;Derived
    &lt;span style="color: blue"&gt;Inherits &lt;/span&gt;Base
    &lt;span style="color: blue"&gt;Implements &lt;/span&gt;IComparable(&lt;span style="color: blue"&gt;Of Integer&lt;/span&gt;)

    &lt;span style="color: green"&gt;' Will not take over IComparable(Of Integer).CompareTo since Base already implements it!
    &lt;/span&gt;&lt;span style="color: blue"&gt;Public Function &lt;/span&gt;CompareTo(&lt;span style="color: blue"&gt;ByVal &lt;/span&gt;other &lt;span style="color: blue"&gt;As Integer&lt;/span&gt;) &lt;span style="color: blue"&gt;As Integer

    End Function
End Class&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;One could argue whether the derived class should or shouldn’t take over the implementation, but the bottom line is that if we allowed this we would be opening a potentially serious backwards compatibility problem. The above code could be written today (assuming Base implements IComparable(Of Integer)), and CompareTo will &lt;em&gt;not&lt;/em&gt; take over the implementation of the interface. If recompiling your application in some future version of VB switched the implementation, this could introduce a very subtle and possibly very bad bug into your program. So it’s really a non-starter.&lt;/p&gt;
&lt;p&gt;The other difference from C# is that we won’t search base classes for implicit interface implementations. For example, the following code would still give you an error:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;Class &lt;/span&gt;Base
    &lt;span style="color: blue"&gt;Public Function &lt;/span&gt;CompareTo(&lt;span style="color: blue"&gt;ByVal &lt;/span&gt;other &lt;span style="color: blue"&gt;As Integer&lt;/span&gt;) &lt;span style="color: blue"&gt;As Integer

    End Function
End Class

Class &lt;/span&gt;Derived
    &lt;span style="color: blue"&gt;Inherits &lt;/span&gt;Base
    &lt;span style="color: green"&gt;' Error: IComparable(Of Integer).CompareTo is not implemented!
    &lt;/span&gt;&lt;span style="color: blue"&gt;Implements &lt;/span&gt;IComparable(&lt;span style="color: blue"&gt;Of Integer&lt;/span&gt;)
&lt;span style="color: blue"&gt;End Class&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;This can also be debated, but in the end we tend to err on the side of being more conservative—since Base didn’t implement IComparable(Of Integer) itself, it seems odd to pick it up when implementing the interface, as we have no way of knowing for sure that it’s really appropriate. There are also other highly technical issues relating to the mechanics of interface implementation that would make this situation complicated, especially if Base was in another assembly that we had no control over.&lt;/p&gt;
&lt;p&gt;So the question is: would people find this useful? Annoying?&lt;/p&gt;&lt;img src ="http://www.panopticoncentral.net/aggbug/23114.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Paul Vick</dc:creator><title>Automatically implemented properties</title><link>http://www.panopticoncentral.net/archive/2008/03/27/23050.aspx</link><pubDate>Thu, 27 Mar 2008 15:30:00 GMT</pubDate><guid>http://www.panopticoncentral.net/archive/2008/03/27/23050.aspx</guid><category>VB10</category><category domain="http://www.microsoft.com/blogs">Visual Basic</category><wfw:comment>http://www.panopticoncentral.net/comments/23050.aspx</wfw:comment><comments>http://www.panopticoncentral.net/archive/2008/03/27/23050.aspx#Feedback</comments><slash:comments>30</slash:comments><wfw:commentRss>http://www.panopticoncentral.net/comments/commentRss/23050.aspx</wfw:commentRss><trackback:ping>http://www.panopticoncentral.net/services/trackbacks/23050.aspx</trackback:ping><description>&lt;p&gt;&lt;em&gt;WARNING: This is a &lt;a href="http://www.panopticoncentral.net/archive/2007/10/03/22266.aspx"&gt;speculative post&lt;/a&gt;. Caveat emptor.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;I apologize for the long silence, things have been a little busy around Panopticon Central these days! Anyway, I wanted to go back to talking about some of the things that we’re thinking about for the next version, and I thought I’d go over a small one: automatically implemented properties. As the name implies, these would be basically the same thing you get in C# 3.0’s &lt;a href="http://msdn2.microsoft.com/en-us/library/bb384054.aspx"&gt;auto-implemented properties&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;What we’re talking about is allowing you to have a simple property declaration like so:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;Public Property &lt;/span&gt;x() &lt;span style="color: blue"&gt;As Integer&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;This would generally expand under the covers to look something like this:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;Private &lt;/span&gt;_x &lt;span style="color: blue"&gt;As Integer
Public Property &lt;/span&gt;x() &lt;span style="color: blue"&gt;As Integer
    Get
        Return &lt;/span&gt;_x
    &lt;span style="color: blue"&gt;End Get
    Set&lt;/span&gt;(&lt;span style="color: blue"&gt;ByVal &lt;/span&gt;value &lt;span style="color: blue"&gt;As Integer&lt;/span&gt;)
        _x = value
    &lt;span style="color: blue"&gt;End Set
End Property&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;The one major difference that we’re considering from C#’s auto-implemented properties is to allow initializers on the auto-implemented property. In other words, something like:&lt;/p&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;Public Property &lt;/span&gt;x &lt;span style="color: blue"&gt;As Integer &lt;/span&gt;= 10
&lt;span style="color: blue"&gt;Public Property &lt;/span&gt;y &lt;span style="color: blue"&gt;As New &lt;/span&gt;List(&lt;span style="color: blue"&gt;Of Integer&lt;/span&gt;)()&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;
&lt;p&gt;I think C# also doesn’t let you bind to the underlying field, but just like with other auto-generated stuff in VB, I think we’d err on the side of allowing you to bind to it if you really needed to. You can also make them Overridable if you like, to allow derived classes to provide their own implementation.&lt;/p&gt;
&lt;p&gt;Just a little feature, but one that can be useful.&lt;/p&gt;&lt;img src ="http://www.panopticoncentral.net/aggbug/23050.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Paul Vick</dc:creator><title>Implicit line continuations</title><link>http://www.panopticoncentral.net/archive/2008/02/27/22910.aspx</link><pubDate>Wed, 27 Feb 2008 16:55:00 GMT</pubDate><guid>http://www.panopticoncentral.net/archive/2008/02/27/22910.aspx</guid><category>VB10</category><category domain="http://www.microsoft.com/blogs">Visual Basic</category><wfw:comment>http://www.panopticoncentral.net/comments/22910.aspx</wfw:comment><comments>http://www.panopticoncentral.net/archive/2008/02/27/22910.aspx#Feedback</comments><slash:comments>38</slash:comments><wfw:commentRss>http://www.panopticoncentral.net/comments/commentRss/22910.aspx</wfw:commentRss><trackback:ping>http://www.panopticoncentral.net/services/trackbacks/22910.aspx</trackback:ping><description>&lt;p&gt;&lt;em&gt;WARNING: This is a &lt;a href="http://www.panopticoncentral.net/archive/2007/10/03/22266.aspx"&gt;speculative post&lt;/a&gt;. Caveat emptor.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;One of the things that we'd &lt;em&gt;like&lt;/em&gt; to address in the next version is line continuations. We know that they tend to annoy many developers who want to break their logical lines across multiple physical lines, and we've gotten many requests to get rid of them altogether. Unfortunately, there's a reason we haven't just dropped them--they actually are needed in certain scenarios. For example, take the following contrived example:&lt;/p&gt;&lt;pre class="code"&gt;    &lt;span style="color: blue"&gt;Sub &lt;/span&gt;Main()
    &lt;span style="color: blue"&gt;End &lt;/span&gt;_
    &lt;span style="color: blue"&gt;Sub
&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;If I remove the line continuation, I'll now get a compile error because "End" now is the "End" statement, and the Sub looks like it's trying to start a new subroutine in the middle of the current subroutine. There are quite a few of these syntactic ambiguities sprinkled throughout our grammar, some of which might be quite obscure and unnoticed until someone's code actually broke. So instead of taking a maximalist approach and trying to remove the line continuation &lt;em&gt;everywhere&lt;/em&gt;, we've been thinking about a more minimalist approach and looking at where removing the line continuation might be most useful. This produced a much more tractable list of places where we might productively remove the line continuation. In particular:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;After binary operators in expression contexts. Note that this does not include assignment operators. For example:&lt;pre class="code"&gt;a = b +
    c&lt;/pre&gt;
&lt;li&gt;After the following punctuators: comma (","), open parenthesis ("("), open curly brace ("{"), begin embedded expression in XML ("&amp;lt;%="). For example: &lt;pre class="code"&gt;Console.WriteLine(
    &lt;span style="color: #a31515"&gt;"{0} {1}"&lt;/span&gt;,
    FirstName,
    LastName)
&lt;/pre&gt;
&lt;li&gt;Before the following punctuators: close parenthesis (")"), close curly brace ("}"), end embedded expression in XML ("%&amp;gt;"). For example:&lt;pre class="code"&gt;Console.WriteLine(
    &lt;span style="color: #a31515"&gt;"{0} {1}"&lt;/span&gt;,
    FirstName,
    LastName
)&lt;/pre&gt;
&lt;li&gt;After an open angle bracket ("&amp;lt;") in an attribute context, before a close angle bracket ("&amp;gt;") in an attribute context, and after a close angle bracket in a non-file-level attribute context (i.e. an attribute that does not specify "Assembly" or "Module"). For example: &lt;pre class="code"&gt;    &amp;lt;
        Conditional(&lt;span style="color: #a31515"&gt;"Foo"&lt;/span&gt;),
        Conditional(&lt;span style="color: #a31515"&gt;"Bar"&lt;/span&gt;)
    &amp;gt;
    &amp;lt;
        Conditional(&lt;span style="color: #a31515"&gt;"Baz"&lt;/span&gt;)
    &amp;gt;
    &lt;span style="color: blue"&gt;Sub &lt;/span&gt;Main()
    &lt;span style="color: blue"&gt;End Sub
&lt;/span&gt;&lt;/pre&gt;
&lt;li&gt;Before and after query expression operators. For example:&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;Dim &lt;/span&gt;ys = &lt;span style="color: blue"&gt;From &lt;/span&gt;x &lt;span style="color: blue"&gt;In &lt;/span&gt;xs
         &lt;span style="color: blue"&gt;Where &lt;/span&gt;x &amp;gt; 5
         &lt;span style="color: blue"&gt;Select&lt;/span&gt;
            ten = x * 10,
            twenty = x * 20,
            thirty = x * 30&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;One thing that is not currently on the list is allowing an implicit line continuation after a dot, so you couldn't break up "a.b.c" implicitly. It's not that we can't do dot, just that it's quite a bit more expensive and problematic for Intellisense. We'd be interested to hear if this is something people really want to/need to do, or if it's just a nice-to-have.&lt;/p&gt;
&lt;p&gt;Are there any other places that we missed that you can think of?&lt;/p&gt;&lt;img src ="http://www.panopticoncentral.net/aggbug/22910.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Paul Vick</dc:creator><title>Lang .NET 2008, Scripting, and Visual Basic</title><link>http://www.panopticoncentral.net/archive/2008/02/20/22883.aspx</link><pubDate>Wed, 20 Feb 2008 17:02:00 GMT</pubDate><guid>http://www.panopticoncentral.net/archive/2008/02/20/22883.aspx</guid><category>VB10</category><category domain="http://www.microsoft.com/blogs">Visual Basic</category><wfw:comment>http://www.panopticoncentral.net/comments/22883.aspx</wfw:comment><comments>http://www.panopticoncentral.net/archive/2008/02/20/22883.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.panopticoncentral.net/comments/commentRss/22883.aspx</wfw:commentRss><trackback:ping>http://www.panopticoncentral.net/services/trackbacks/22883.aspx</trackback:ping><description>&lt;p&gt;&lt;em&gt;WARNING: This is a &lt;a href="http://www.panopticoncentral.net/archive/2007/10/03/22266.aspx"&gt;speculative post&lt;/a&gt;. Caveat emptor.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Several weeks ago, I gave a presentation entitled &lt;em&gt;Bringing Scripting (Back) to Visual Basic&lt;/em&gt; at the Lang .NET 2008 conference. A &lt;a href="http://langnetsymposium.com/talks/2-04%20-%20Visual%20Basic%20-%20Paul%20Vick.html"&gt;video&lt;/a&gt; of the presentation has now been posted, so you can check it out for yourself. (The presentation was also covered by EWeek in an article entitled &lt;a href="http://www.eweek.com/c/a/Application-Development/Microsoft-Bringing-Sexy-Back-to-Visual-Basic/"&gt;Bringing Sexy Back to Visual Basic&lt;/a&gt;.)&lt;/p&gt; &lt;p&gt;The main theme of the presentation is the same one I've been talking about on and off over the past year or two: moving Visual Basic back towards it's scripting roots. The main thrust of this presentation was the technical side of the story--namely, what we would need to do to the existing Visual Basic compiler to be able to effectively use it as a scripting engine. The presentation talks some about the way the compiler is structured, how it might change and some of the things were thinking about enabling. In particular, what we'd like to see is not just that Visual Basic can be embedded anywhere, but that all the services that the compiler provides--parsing, semantic analysis, code generation--are available to be used by any program that needs them. The DLR is a key part of this, but there's a lot of work on top of that.&lt;/p&gt; &lt;p&gt;I also showed some fun demos of some prototypes that we've whipped up using our current codebase. Nothing we're committing to at the moment, but it gives you some of the flavor of what we're thinking about.&lt;/p&gt; &lt;p&gt;One thing this presentation &lt;em&gt;didn't&lt;/em&gt; cover (and which Ted Neward brought up in the Q&amp;amp;A afterward) is what we might do to the language itself to make it more scripting-friendly. That's an area where things are less well-defined and even more speculative than what I talked about, so I left it out for now. Maybe soon I can talk more about it...&lt;/p&gt;&lt;img src ="http://www.panopticoncentral.net/aggbug/22883.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Paul Vick</dc:creator><title>Visual Basic Yesterday, Today and Tomorrow</title><link>http://www.panopticoncentral.net/archive/2007/12/27/22755.aspx</link><pubDate>Thu, 27 Dec 2007 16:07:00 GMT</pubDate><guid>http://www.panopticoncentral.net/archive/2007/12/27/22755.aspx</guid><category domain="http://www.microsoft.com/blogs">Visual Basic</category><wfw:comment>http://www.panopticoncentral.net/comments/22755.aspx</wfw:comment><comments>http://www.panopticoncentral.net/archive/2007/12/27/22755.aspx#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.panopticoncentral.net/comments/commentRss/22755.aspx</wfw:commentRss><trackback:ping>http://www.panopticoncentral.net/services/trackbacks/22755.aspx</trackback:ping><description>&lt;P&gt;A month or two ago, &lt;A class="" href="http://blogs.msdn.com/vbteam/archive/tags/Paul+Yuknewicz/default.aspx" target=_blank mce_href="http://blogs.msdn.com/vbteam/archive/tags/Paul+Yuknewicz/default.aspx"&gt;Paul Yuknewicz&lt;/A&gt;&amp;nbsp;and I sat down to record a &lt;A href="http://www.hanselminutes.com/"&gt;Hansselminutes&lt;/A&gt; podcast with &lt;A class="" href="http://www.hanselman.com/blog/" target=_blank mce_href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/A&gt;, talking about the past, present and future of Visual Basic. It was a lot of fun, &lt;A class="" href="http://www.hanselminutes.com/default.aspx?showID=110" target=_blank mce_href="http://www.hanselminutes.com/default.aspx?showID=110"&gt;check it out&lt;/A&gt;!&lt;/P&gt;
&lt;P&gt;Also, here's a little holiday love for VB from some Microsofties you might recognize:&lt;/P&gt;&lt;IFRAME src="http://channel9.msdn.com/EmbedVideo.aspx?PostID=367997" frameBorder=0 width=320 scrolling=no height=301 mce_src="http://channel9.msdn.com/EmbedVideo.aspx?PostID=367997"&gt;&lt;/IFRAME&gt;&lt;img src ="http://www.panopticoncentral.net/aggbug/22755.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Paul Vick</dc:creator><title>(Almost) final VB 9.0 language specification posted</title><link>http://www.panopticoncentral.net/archive/2007/12/27/22754.aspx</link><pubDate>Thu, 27 Dec 2007 16:02:00 GMT</pubDate><guid>http://www.panopticoncentral.net/archive/2007/12/27/22754.aspx</guid><category domain="http://www.microsoft.com/blogs">Visual Basic</category><category>Visual Basic 2008</category><wfw:comment>http://www.panopticoncentral.net/comments/22754.aspx</wfw:comment><comments>http://www.panopticoncentral.net/archive/2007/12/27/22754.aspx#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.panopticoncentral.net/comments/commentRss/22754.aspx</wfw:commentRss><trackback:ping>http://www.panopticoncentral.net/services/trackbacks/22754.aspx</trackback:ping><description>&lt;P&gt;I wanted to let people know that an (almost) final VB 9.0 language specification has been &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=39de1dd0-f775-40bf-a191-09f5a95ef500&amp;amp;displaylang=en"&gt;posted on the download center&lt;/A&gt;. The spec is missing some copy-edits from the documentation folks, but is otherwise complete. Since I'm not going to get a chance to incorporate the copy-edits until I am back from vacation in January, I wanted to get the spec out there for anyone interested in documentation of the XML features that weren't present in the previous version of the spec. (I apologize for the lateness of this vis-a-vis the release of the product itself, it's been a busy fall.) 
&lt;P&gt;This updated language specification corresponds to Visual Studio 2008 and covers the following major new features: 
&lt;UL&gt;
&lt;LI&gt;Friend assemblies (InternalsVisibleTo) 
&lt;LI&gt;Relaxed delegates 
&lt;LI&gt;Local type inferencing 
&lt;LI&gt;Anonymous types 
&lt;LI&gt;Extension methods 
&lt;LI&gt;Nullable types 
&lt;LI&gt;Ternary operator 
&lt;LI&gt;Query expressions 
&lt;LI&gt;Object initializers 
&lt;LI&gt;Expression trees 
&lt;LI&gt;Lambda expressions 
&lt;LI&gt;Generic type inferencing 
&lt;LI&gt;Partial methods 
&lt;LI&gt;XML Members 
&lt;LI&gt;XML Literals 
&lt;LI&gt;XML Namespaces &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Questions, comments or criticisms can be sent to &lt;A href="mailto:basic@microsoft.com"&gt;basic@microsoft.com&lt;/A&gt;. Thanks!&lt;/P&gt;&lt;img src ="http://www.panopticoncentral.net/aggbug/22754.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Paul Vick</dc:creator><title>Did something important happen today?</title><link>http://www.panopticoncentral.net/archive/2007/11/20/22627.aspx</link><pubDate>Tue, 20 Nov 2007 00:29:00 GMT</pubDate><guid>http://www.panopticoncentral.net/archive/2007/11/20/22627.aspx</guid><category domain="http://www.microsoft.com/blogs">Visual Basic</category><category>Visual Basic 2008</category><wfw:comment>http://www.panopticoncentral.net/comments/22627.aspx</wfw:comment><comments>http://www.panopticoncentral.net/archive/2007/11/20/22627.aspx#Feedback</comments><slash:comments>31</slash:comments><wfw:commentRss>http://www.panopticoncentral.net/comments/commentRss/22627.aspx</wfw:commentRss><trackback:ping>http://www.panopticoncentral.net/services/trackbacks/22627.aspx</trackback:ping><description>Oh, yeah, that's right. &lt;A href="http://blogs.msdn.com/somasegar/archive/2007/11/19/visual-studio-2008-and-net-framework-3-5-shipped.aspx"&gt;We&lt;/A&gt; &lt;A href="http://blogs.msdn.com/vbteam/archive/2007/11/19/visual-basic-2008-ships.aspx"&gt;shipped&lt;/A&gt;. Hard to believe we've finally reached the finish line...&lt;img src ="http://www.panopticoncentral.net/aggbug/22627.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Paul Vick</dc:creator><title>Is it time to replace Mort?</title><link>http://www.panopticoncentral.net/archive/2007/11/14/22589.aspx</link><pubDate>Wed, 14 Nov 2007 17:30:00 GMT</pubDate><guid>http://www.panopticoncentral.net/archive/2007/11/14/22589.aspx</guid><category domain="http://www.microsoft.com/blogs">Visual Basic</category><wfw:comment>http://www.panopticoncentral.net/comments/22589.aspx</wfw:comment><comments>http://www.panopticoncentral.net/archive/2007/11/14/22589.aspx#Feedback</comments><slash:comments>24</slash:comments><wfw:commentRss>http://www.panopticoncentral.net/comments/commentRss/22589.aspx</wfw:commentRss><trackback:ping>http://www.panopticoncentral.net/services/trackbacks/22589.aspx</trackback:ping><description>&lt;p&gt;Most everyone who's steeped deeply enough in the culture of Visual Studio has probably run across some mention of Mort. Mort is one of a triumvirate of &lt;a href="http://en.wikipedia.org/wiki/Personas"&gt;personas&lt;/a&gt; that the Visual Studio team uses to describe the developers that they are targeting. The other two members of this group are Elvis and Einstein. (I got complaints from internal people the last time I mentioned the personas, so let me take a moment to say that they are &lt;a href="http://www.nikhilk.net/Personas.aspx"&gt;open&lt;/a&gt; &lt;a href="http://wesnerm.blogs.com/net_undocumented/2003/09/who_are_you_mor.html"&gt;knowledge&lt;/a&gt;.) Love them or &lt;a href="http://codebetter.com/blogs/scott.bellware/archive/2006/04/25/143303.aspx"&gt;hate them&lt;/a&gt;, the personas have become an integral part of the way that many people talk about VB, C#, and C++, both inside and outside the halls of Microsoft.&lt;/p&gt; &lt;p&gt;There is a problem, though. Let me illustrate, if I may. First, here's Einstein: &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.panopticoncentral.net/Images/ItstimetoretireMort_A4F1/Einstein.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="Einstein" src="http://www.panopticoncentral.net/Images/ItstimetoretireMort_A4F1/Einstein_thumb.jpg" width="176" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;A bit of a card, to be sure, but generally a pretty brilliant guy. Sure, he's spent most of his life chasing some crazy theory of unification, but overall he's the go-to guy when you've got some rocket science project. And, of course, he's the one claimed by the C++ folks. (Since you pretty much have to be a rocket scientist to fully grok C++...)&lt;/p&gt; &lt;p&gt;Next, we've got Elvis:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.panopticoncentral.net/Images/ItstimetoretireMort_A4F1/Elvis.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="215" alt="Elvis" src="http://www.panopticoncentral.net/Images/ItstimetoretireMort_A4F1/Elvis_thumb.jpg" width="214" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;OK, so maybe Elvis's best years are a little bit behind him and he's just been coasting on his youthful talent. And, yes, maybe he's been hitting the corn dogs a little bit too hard. But, c'mon... He's &lt;em&gt;Elvis&lt;/em&gt;, for heaven's sake! The King! Maybe you don't call him if you want to go to the Moon in a rocket, but if you want to entertain a stadium's worth of rabid, screaming fans who won't notice he's, um, a &lt;em&gt;little&lt;/em&gt; overweight, he's your man. And, of course, he's claimed by the C# folks.&lt;/p&gt; &lt;p&gt;Now, we finally come to Mort:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.panopticoncentral.net/Images/ItstimetoretireMort_A4F1/Mort.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="206" alt="Mort" src="http://www.panopticoncentral.net/Images/ItstimetoretireMort_A4F1/Mort_thumb.jpg" width="205" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Hmmmm. Well. Yes.&lt;/p&gt; &lt;p&gt;Now, I should say that this is not the way that &lt;em&gt;I&lt;/em&gt; think of Mort. Or that this is the way that our &lt;em&gt;team&lt;/em&gt; thinks of Mort. To me, Mort is a smart, pragmatic guy who's more interested in rolling up his sleeves and saving the world than sitting around noodling on some unified field theory or eating copious amounts of doughnuts. But to a large slice of the world who have an opinion about Mort, this is who they see. A toothless, unkempt hillbilly who's best kept up in the mountains of West Virginia and away from all nice and normal folks.&lt;/p&gt; &lt;p&gt;And, of course, he's the one claimed by the VB folks. He's us. See the problem?&lt;/p&gt; &lt;p&gt;Personally, I think it's time to let go of the Mort persona. Send him a nice fat check, a referral to a good orthodontist, and thank him for his hard work. And in his place? Well, I'd like to propose hiring this guy as our new persona:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://www.panopticoncentral.net/Images/ItstimetoretireMort_A4F1/Ben.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="240" alt="Ben" src="http://www.panopticoncentral.net/Images/ItstimetoretireMort_A4F1/Ben_thumb.jpg" width="195" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Ben, as I'll call him, is a pretty pragmatic guy and a bit of a polymath, a jack-of-all-trades. In between a writing and political career, he also finds time to be a postmaster, a publisher, a scientist, and an inventor. In short, he does what most VB programmers do: he multi-tasks like crazy, solving problems wherever he goes. (More information about Ben can be found &lt;a href="http://en.wikipedia.org/wiki/Ben_franklin"&gt;here&lt;/a&gt;, for those not steeped in American history.) Now, sure, Ben's not some rock star like your average &lt;a href="http://en.wikipedia.org/wiki/George_washington"&gt;George&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Thomas_Jefferson"&gt;Thomas&lt;/a&gt; is, getting all the attention with flashy military or political antics, but he's really your guy when you need something done, you need it done &lt;em&gt;right&lt;/em&gt;, and you need it done with a minimum of fuss and bother.&lt;/p&gt; &lt;p&gt;Doesn't Ben sound like a wonderful persona for VB?&lt;/p&gt; &lt;p&gt;Of course, when it comes to product planning stuff like this, what I think doesn't really matter a hill of beans. I'm sure there's no getting rid of Mort, no matter what some people may think of him. But we can dream, can't we?&lt;/p&gt;&lt;img src ="http://www.panopticoncentral.net/aggbug/22589.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>