🟦 VB.NET — 2002

⬅️ Atlas · 🗂️ Todas las fichas · 📚 Índice de clases

VB.NET es el heredero de Visual Basic, el lenguaje que más gente ha usado para escribir su primer programa que hacía algo útil. Su historia contiene una de las rupturas de compatibilidad más traumáticas que ha vivido un ecosistema — y también la prueba de que la accesibilidad es una característica técnica, no un adorno.

🎯 Por qué está en este programa

VB.NET es un primo de la familia .NET (Atlas), cuyo representante en el núcleo es C#; y es el pariente moderno de VBA, que sí tiene ficha entre los lenguajes vivos.

Aporta al programa dos cosas: la demostración de que en el CLR el lenguaje es intercambiable —VB.NET y C# compilan al mismo IL y comparten biblioteca (clase 157)— y el caso de estudio de una migración forzada, VB6 a VB.NET, que la clase 175 usa como advertencia.

Año 2002 (VB.NET); VB1 era de 1991 y VB6, de 1998
Autoría Microsoft; VB original inspirado en QuickBASIC de Alan Cooper
Familia .NET; descendiente de BASIC por vía de Visual Basic
Paradigma Orientado a objetos, imperativo y dirigido por eventos
Tipado Estático, con Option Strict Off opcional que lo relaja
Memoria La del CLR: recolección de basura
Ejecución Bytecode IL sobre el CLR, con JIT
Estado 🟡 En mantenimiento: Microsoft no añade características desde 2020

📜 Historia

Visual Basic (1991) hizo algo que ningún lenguaje había hecho: puso el diseñador visual y el lenguaje juntos, de forma que alguien sin formación podía arrastrar un botón, hacer doble clic y escribir lo que debía pasar. Es el modelo que después copió Delphi —y lo hizo mejor— y del que salió toda la programación dirigida por eventos (clase 120).

Millones de personas escribieron su primer programa útil en VB, y buena parte del software interno de las empresas de los noventa está escrito en él. VB6 (1998) fue el punto culminante.

Y entonces llegó .NET (2002), y con él VB.NET — que no era compatible con VB6. El modelo de objetos cambiaba, los formularios cambiaban, los tipos cambiaban. Había herramientas de migración y no bastaban.

La reacción fue una de las mayores rebeliones de usuarios de la historia de Microsoft: hubo peticiones firmadas por decenas de miles de desarrolladores pidiendo que se mantuviera VB6, y el resentimiento duró años. Muchos equipos no migraron: se quedaron en VB6 —cuyo tiempo de ejecución Microsoft siguió soportando en Windows durante dos décadas— o se fueron a otro sitio.

Es exactamente la lección de la clase 175 y de la 143: una ruptura de compatibilidad técnicamente justificada puede costar el ecosistema. Lo mismo le pasó a Python 2→3 —doce años de migración—, a D con D2, a Scala 3 y a Perl con la saga de Perl 6.

En 2020, Microsoft anunció que VB.NET seguirá soportado pero ya no evolucionará: las características nuevas del lenguaje irán a C# y a F#.

🏭 Dónde vive hoy

🧠 Lo que enseña: el lenguaje como decisión intercambiable

Este es el punto que hace interesante la ficha (clase 157):

VB.NET, C# y F# compilan al MISMO bytecode (IL).
Comparten:
  - el sistema de tipos común (CTS)
  - la biblioteca de clases base entera
  - el recolector de basura y el modelo de excepciones
  - y las herramientas: depurador, perfilador, gestor de paquetes

Una biblioteca escrita en C# se usa desde VB.NET sin envoltorio, sin conversión y sin fricción — lo mismo que ILE en IBM i y Language Environment en z/OS (clase 157).

Y la consecuencia es la de la clase 155: en el CLR, elegir lenguaje es una decisión de equipo, no de arquitectura. Se pueden mezclar en el mismo sistema, componente a componente.

Y VB.NET tiene una característica propia que merece conocerse:

Option Strict On       ' ← comprobación estricta: conversiones explícitas obligatorias
Option Strict Off       ' ← permite conversiones implícitas y enlace tardío

El mismo lenguaje, con o sin red. Option Strict Off permite escribir código dinámico al estilo de VB6 —cómodo y peligroso—, y On lo convierte en un lenguaje estático estricto.

Es tipado gradual por fichero (clase 146), y la recomendación universal del ecosistema es activarlo siempre, con las excepciones justificadas.

🔄 Estado actual

⚙️ Cómo se ejecuta hoy

dotnet run                            # con un proyecto .vbproj
vbc Venta.vb && ./Venta                # compilador de línea de comandos

dotnet test                            # pruebas (clase 139)

🧪 El programa de la clase 041 en VB.NET

Imports System.Globalization

Module Venta
    Sub Main()
        Dim v = Console.ReadLine().Split(" "c)
        Dim precio = Double.Parse(v(0), CultureInfo.InvariantCulture)
        Dim cantidad = Double.Parse(v(1), CultureInfo.InvariantCulture)
        Dim descuento = Double.Parse(v(2), CultureInfo.InvariantCulture)
        Console.WriteLine("Total: " & (precio * cantidad * (1 - descuento)).ToString("F2", CultureInfo.InvariantCulture))
    End Sub
End Module

Lo que hay que ver.

📚 Fuentes y bibliografía


⏮️ Volver al Atlas · 🗂️ Todas las fichas · 🔗 Relacionadas: C# · VBA · BASIC · Delphi · F#