It’s About Trust!

"The List"

Language Spec     


Exec Bios

Google VFred

Classic VB


A Marketeer's Worst Nightmare

This is the list that started it all. It's been referenced in numerous places, including:

The list could go on and on, but to get a taste for how widespread the problem is recognized, just do a Google search for "Visual Fred" OR dotnot. The Microsoft marketeers apparently consider these sorts of concerns to be a source of amusement:

“We didn't break the language; we enhanced it,” laughed Bixhorn

Ari Bixhorn, Product Manager for Visual Basic.NET (Microsoft), Microsoft Tweaks Visual Basic.NET, Software Development Times, 1 May 2001

Before anyone spends hours writing "rebuttals" to the points below, it may help to understand the original purpose of this list. The points are not intended to highlight unintelligent design, in either Classic VB or VFred. Can that be said any clearer? The points are intended solely to demonstrate the enormity of incompatibility between Classic VB and VFred. That's it. In a nutshell, there is no backward- or forward-compatibility, between the two languages.

Depending who you ask, each point below may be considered anywhere from "gratuitous" to "essential." Either way, if the feature in question is one you used in Classic VB, you will need to address this change, and determine what, if any, workaround may be available. But the point is, the fact a workaround is necessary indicates something's broken. That something, in this case, is your code/investment.

So, without further ado, the bullets you will not see coming from Microsoft.

In Visual Fred...

  1. VarPtr is not supported available.
  2. StrPtr is not supported available.
  3. ObjPtr is not supported available.
  4. As Any is not supported for API Declares.
  5. Use of ByVal/ByRef directly within API calls is not supported.
  6. Private class variables are not private to the class instance.
  7. Arrays may not have a lower bound other than zero.
  8. Dynamic arrays are not allowed within structures (UDTs)
  9. Arrays are not declared using the upper bound. (Addressed in Beta2)
  10. Option Base is not supported.
  11. Variants are not supported. Object is now the default data type.
  12. Currency is not supported.
  13. Dates are not stored internally as Double values.
  14. Longs are not 32-bits; they are 64-bits.
  15. Integers are not 16-bits; they are 32-bits.
  16. True, coerced to an Integer, is not -1, but is 1 instead. (Addressed in Beta2)
  17. The Imp and Eqv operators are not supported.
  18. Fixed-length Strings are not supported.
  19. DefInt, DefLong, et al., are not supported.
  20. Dim may not always create procedure-level variables.
  21. Redim will not create arrays not already declared.
  22. Local variables are not necessarily visible (in scope) throughout a procedure.
  23. VarType is not supported.
  24. Empty is not supported.
  25. Null is not supported.
  26. IsEmpty is not supported.
  27. IsMissing is not supported.
  28. IsNull is not supported.
  29. IsObject is not supported.
  30. Let is not supported.
  31. Core language constants do not have a "vb" prefix (vbRed becomes Red).
  32. Terminate will not fire when an object's last reference is released.
  33. Object finalization code will not execute in a predictable order.
  34. Implicit object creation is not delayed until first reference.
  35. Public object variables are not safe from alteration when passed as parameters.
  36. Can not expose Property procedures with mixed visibility (Friend Set/Public Get).
  37. Procedure parameters are not by default passed ByRef anymore.
  38. ParamArray arguments are not passed ByRef anymore.
  39. Property parameters may not be passed ByRef anymore.
  40. Implements is not implemented the same, so must be rewritten.
  41. Static is not supported as a procedure level modifier.
  42. Use of As New does not force auto-reinstantiation when an object is released.
  43. Parenthesis are not optional when calling procedures.
  44. Set is not supported for object assignment.
  45. Parameterless default properties are not supported.
  46. Default values for Optional parameters are not optional.
  47. Code is not compiled to native, thus making decompilation much easier.
  48. Resource files have changed format and old ones are not supported.
  49. LSet is not supported.
  50. RSet is not supported.
  51. UDTs are not Types, but are called Structures instead.
  52. UDTs are not by default contiguous blocks of memory, but are objects.
  53. Enums will not be recognized unless fully-qualified.
  54. While/Wend loops are not supported.
  55. GoSub/Return is not supported.
  56. On/GoTo is not supported.
  57. On/GoSub is not supported.
  58. Line numbers are not supported. Labels may be numeric.
  59. Erl is not supported.
  60. The MsgBox function is not supported.
  61. The DoEvents function is not supported.
  62. The Date statement is not supported.
  63. The Time statement is not supported.
  64. And, Or, XOr, and Not are not bitwise operators. (Addressed in Beta2)
  65. Comparison operators are not evaluated before logical operators. (Addressed in Beta2)
  66. Sqr is not supported.
  67. Sgn is not supported.
  68. Atn is not supported.
  69. The String function is not supported.
  70. Control arrays are not supported.
  71. The native Forms collection is not supported.
  72. UnloadMode detection is not offered, as QueryUnload is history.
  73. ListBox controls do not offer an ItemData property.
  74. ListBox controls do not offer an NewIndex property.
  75. Windowless controls are not supported.
  76. Image controls are not supported.
  77. Shape controls are not supported.
  78. Line controls are not supported.
  79. OLE Container controls are not supported.
  80. Label controls will not have a Caption property.
  81. The Tag property is not supported. (Addressed in Beta2)
  82. The ToolTipText property is not supported.
  83. The TextHeight property is not supported.
  84. The TextWidth property is not supported.
  85. Setting a Timer control's Interval to 0 does not disable it.
  86. Top-level menus may not be used as context menus.
  87. Old forms using vbPixels for Scalemode will not upgrade correctly.
  88. DDE is not supported.
  89. Circle is not supported.
  90. Cls is not supported.
  91. Line is not supported.
  92. PSet is not supported.
  93. Point is not supported.
  94. AutoRedraw is not supported.
  95. PrintForm is not supported.
  96. Scale is not supported.
  97. The Name property for forms and controls is not exposed at runtime. (Addressed in Beta2)
  98. Print will not include a linefeed at the end of a line.
  99. File I/O will not be compatible, at all, and must be rewritten.
  100. Printer object methods are not automatically upgraded and must be rewritten.
  101. Clipboard object methods are not automatically upgraded and must be rewritten.
  102. The Err object is not shared between managed (.NET) and unmanaged (ActiveX) code.
  103. The App object is not shared between managed (.NET) and unmanaged (ActiveX) code.
  104. Screen.MousePointer does not have a direct replacement.
  105. Webclasses are not supported.
  106. DHTML projects are not supported.
  107. UserControl projects are not supported.
  108. ActiveX Document projects are not supported.
  109. The IDE Extensibility Model is not backwardly compatible.
  110. Run->Break->Edit->Continue development is not supported.
  111. The Immediate window will not work in Design mode.
  112. SDI will not be an option in the IDE -- MDI or nothing.
  113. Debug.Print is not supported.
  114. Debug.Assert is not supported.
  115. Data binding with DAO is not supported.
  116. Data binding with RDO is not supported.

First they came for...