IntroducciónIntroduction
El ® ® lenguaje de programación de Microsoft Visual Basic es un lenguaje de programación de alto nivel para el marco de Microsoft .net.The Microsoft® Visual Basic® programming language is a high-level programming language for the Microsoft .NET Framework. Aunque está diseñado para ser un lenguaje fácil de aprender, es lo suficientemente eficaz como para satisfacer las necesidades de los programadores experimentados.Although it is designed to be an approachable and easy-to-learn language, it is also powerful enough to satisfy the needs of experienced programmers. El lenguaje de programación de Visual Basic tiene una sintaxis similar a la del inglés, lo que promueve la claridad y la legibilidad del código de Visual Basic.The Visual Basic programming language has a syntax that is similar to English, which promotes the clarity and readability of Visual Basic code. Siempre que sea posible, se usan palabras o frases significativas en lugar de abreviaturas, acrónimos o caracteres especiales.Wherever possible, meaningful words or phrases are used instead of abbreviations, acronyms, or special characters. La sintaxis extraña o innecesaria suele estar permitida pero no es necesaria.Extraneous or unneeded syntax is generally allowed but not required.
El lenguaje de programación de Visual Basic puede ser un lenguaje fuertemente tipado o con tipo flexible.The Visual Basic programming language can be either a strongly typed or a loosely typed language. La escritura dinámica difiere gran parte de la carga de la comprobación de tipos hasta que ya se está ejecutando un programa.Loose typing defers much of the burden of type checking until a program is already running. Esto incluye no solo la comprobación de tipos de conversiones, sino también de llamadas a métodos, lo que significa que el enlace de una llamada al método se puede diferir hasta el tiempo de ejecución.This includes not only type checking of conversions but also of method calls, meaning that the binding of a method call can be deferred until run-time. Esto resulta útil cuando se crean prototipos u otros programas en los que la velocidad de desarrollo es más importante que la velocidad de ejecución.This is useful when building prototypes or other programs in which speed of development is more important than execution speed. El lenguaje de programación Visual Basic también proporciona semántica fuertemente tipada que realiza todas las comprobaciones de tipos en tiempo de compilación y no permite el enlace en tiempo de ejecución de las llamadas a métodos.The Visual Basic programming language also provides strongly typed semantics that performs all type checking at compile-time and disallows run-time binding of method calls. Esto garantiza un rendimiento máximo y ayuda a garantizar que las conversiones de tipos son correctas.This guarantees maximum performance and helps ensure that type conversions are correct. Esto resulta útil cuando se crean aplicaciones de producción en las que es importante la velocidad de ejecución y la corrección de la ejecución.This is useful when building production applications in which speed of execution and execution correctness is important.
En este documento se describe el lenguaje de Visual Basic.This document describes the Visual Basic language. Está pensada como una descripción completa del lenguaje en lugar de un tutorial de lenguaje o un manual de referencia de un usuario.It is meant to be a complete language description rather than a language tutorial or a user's reference manual.
Notación gramaticalGrammar Notation
Esta especificación describe dos gramáticas: una gramática léxica y una gramática sintáctica.This specification describes two grammars: a lexical grammar and a syntactic grammar. La gramática léxica define cómo se pueden combinar caracteres para formar tokens. la gramática sintáctica define cómo se pueden combinar los tokens para formar Visual Basic programas.The lexical grammar defines how characters can be combined to form tokens; the syntactic grammar defines how the tokens can be combined to form Visual Basic programs. También hay varias gramáticas secundarias que se usan para las operaciones de preprocesamiento como la compilación condicional.There are also several secondary grammars used for preprocessing operations like conditional compilation.
Las gramáticas de esta especificación se escriben en formato ANTLR (vea) http://www.antlr.org/ .The grammars in this specification are written in ANTLR format -- see http://www.antlr.org/.
El caso no es importante en Visual Basic programas.Case is unimportant in Visual Basic programs. Para simplificar, todos los terminales se proporcionarán en mayúsculas y minúsculas estándar, pero el uso de mayúsculas y minúsculas lo hará.For simplicity, all terminals will be given in standard casing, but any casing will match them. Los terminales que son elementos que se pueden imprimir del juego de caracteres ASCII se representan mediante sus correspondientes caracteres ASCII.Terminals that are printable elements of the ASCII character set are represented by their corresponding ASCII characters. Visual Basic tampoco distingue el ancho al coincidir con los terminales, lo que permite que los caracteres Unicode de ancho completo coincidan con sus equivalentes Unicode de ancho medio, pero solo en un token completo.Visual Basic is also width insensitive when matching terminals, allowing full-width Unicode characters to match their half-width Unicode equivalents, but only on a whole-token basis. Un token no coincidirá si contiene caracteres de ancho medio y de ancho completo combinados.A token will not match if it contains mixed half-width and full-width characters.
Los saltos de línea y la sangría se pueden agregar para mejorar la legibilidad y no forman parte de la producción.Line breaks and indentation may be added for readability and are not part of the production.
CompatibilidadCompatibility
Una característica importante de un lenguaje de programación es la compatibilidad entre las distintas versiones del lenguaje.An important feature of a programming language is compatibility between different versions of the language. Si una versión más reciente de un lenguaje no acepta el mismo código que una versión anterior del lenguaje o lo interpreta de forma distinta a la versión anterior, se puede colocar una carga en un programador al actualizar su código de una versión del lenguaje a otra.If a newer version of a language does not accept the same code as a previous version of the language, or interprets it differently than the previous version, then a burden can be placed on a programmer when upgrading his code from one version of the language to another. Como tal, se debe conservar la compatibilidad entre las versiones excepto cuando la ventaja de los consumidores del lenguaje sea una naturaleza clara y abrumadora.As such, compatibility between versions must be preserved except when the benefit to language consumers is of a clear and overwhelming nature.
La siguiente directiva rige los cambios en el idioma Visual Basic entre las versiones.The following policy governs changes to the Visual Basic language between versions. El término lenguaje, cuando se utiliza en este contexto, solo se refiere a los aspectos sintácticos y semánticos del propio lenguaje Visual Basic y no incluye ninguna clase .NET Framework incluida como parte del Microsoft.VisualBasic espacio de nombres (y los subespacios de nombres).The term language, when used in this context, refers only to the syntactic and semantic aspects of the Visual Basic language itself and does not include any .NET Framework classes included as a part of the Microsoft.VisualBasic namespace (and sub-namespaces). Todas las clases del .NET Framework están tratadas por una directiva de control de versiones y compatibilidad independiente fuera del ámbito de este documento.All classes in the .NET Framework are covered by a separate versioning and compatibility policy outside the scope of this document.
Tipos de interrupciones de compatibilidadKinds of compatibility breaks
En un mundo ideal, la compatibilidad sería del 100% entre la versión existente de Visual Basic y todas las versiones futuras de Visual Basic.In an ideal world, compatibility would be 100% between the existing version of Visual Basic and all future versions of Visual Basic. Sin embargo, puede haber situaciones en las que la necesidad de una interrupción de compatibilidad puede superar el costo que puede imponer a los programadores.However, there may be situations where the need for a compatibility break may outweigh the cost it may impose on programmers. Estas situaciones son:Such situations are:
Nuevas advertencias.New warnings. La introducción de una nueva advertencia no es, por se trata de una interrupción de compatibilidad.Introducing a new warning is not, per se, a compatibility break. Sin embargo, dado que muchos desarrolladores compilan con "tratar advertencias como errores" activado, se debe prestar atención adicional al introducir advertencias.However, because many developers compile with "treat warnings as errors" turned on, extra care must be taken when introducing warnings.
Nuevas palabras clave.New keywords. Es posible que sea necesario introducir nuevas palabras clave al introducir nuevas características de lenguaje.Introducing new keywords may be necessary when introducing new language features. Se realizarán esfuerzos razonables para elegir palabras clave que minimicen la posibilidad de colisionar con los identificadores de los usuarios y usar las palabras clave existentes donde tenga sentido.Reasonable efforts will be made to choose keywords that minimize the possibility of collision with users' identifiers and to use existing keywords where it makes sense. Se proporcionará ayuda para actualizar los proyectos de versiones anteriores y escapar cualquier palabra clave nueva.Help will be provided to upgrade projects from previous versions and escape any new keywords.
Errores del compilador.Compiler bugs. Cuando el comportamiento del compilador es probable con un comportamiento documentado en la especificación del lenguaje, puede ser necesario corregir el comportamiento del compilador para que coincida con el comportamiento documentado.When the compiler's behavior is at odds with a documented behavior in the language specification, fixing the compiler behavior to match the documented behavior may be necessary.
Error de especificación.Specification bug. Cuando el compilador es coherente con la especificación del lenguaje pero la especificación del lenguaje es claramente incorrecta, puede ser necesario cambiar la especificación del lenguaje y el comportamiento del compilador.When the compiler is consistent with the language specification but the language specification is clearly wrong, changing the language specification and the compiler behavior may be necessary. La frase "claramente mal" significa que el comportamiento documentado se ejecuta en el contador de lo que cabría esperar una mayoría clara e inequívoca de los usuarios y produce un comportamiento muy no deseado para los usuarios.The phrase "clearly wrong" means that the documented behavior runs counter to what a clear and unambiguous majority of users would expect and produces highly undesirable behavior for users.
Ambigüedad de la especificación.Specification ambiguity. Cuando la especificación del lenguaje debe deletrear lo que sucede en una situación concreta pero no, y el compilador controla la situación de una manera incoherente o incorrecta (con la misma definición del punto anterior), puede ser necesario aclarar la especificación y corregir el comportamiento del compilador.When the language specification should spell out what happens in a particular situation but doesn't, and the compiler handles the situation in a way that is either inconsistent or clearly wrong (using the same definition from the previous point), clarifying the specification and correcting the compiler behavior may be necessary. En otras palabras, cuando la especificación cubre los casos a, b, d y e, pero omite cualquier mención de lo que ocurre en el caso de c y el compilador se comporta incorrectamente en el caso de c, puede que sea necesario documentar lo que sucede en el caso de c y cambiar el comportamiento del compilador para que coincida.In other words, when the specification covers cases a, b, d and e, but omits any mention of what happens in case c, and the compiler behaves incorrectly in case c, it may be necessary to document what happens in case c and change the behavior of the compiler to match. (Tenga en cuenta que si la especificación era ambigua en lo que ocurre en una situación y el compilador se comporta de una manera que no es claramente equivocada, el comportamiento del compilador se convierte en la especificación de facto).(Note that if the specification was ambiguous as to what happens in a situation and the compiler behaves in a manner that is not clearly wrong, the compiler behavior becomes the de facto specification.)
Realizar errores en tiempo de ejecución en errores en tiempo de compilación.Making run-time errors into compile-time errors. En una situación en la que el código tiene garantizado un error del 100% en tiempo de ejecución (es decir, el código de usuario tiene un error inequívoco en él), puede ser conveniente agregar un error en tiempo de compilación que detecte la situación.In a situation where code is 100% guaranteed to fail at runtime (i.e. the user code has an unambiguous bug in it), it may be desirable to add a compile-time error that catches the situation.
Omisión de especificación.Specification omission. Cuando la especificación del lenguaje no habilita o deshabilita específicamente una situación concreta y el compilador controla la situación de una manera no deseada (si el comportamiento del compilador fuera incorrecto, sería un error de especificación, no una omisión de especificación), puede ser necesario aclarar la especificación y cambiar el comportamiento del compilador.When the language specification does not specifically allow or disallow a particular situation and the compiler handles the situation in a way that is undesirable (if the compiler behavior was clearly wrong, it would a specification bug, not a specification omission), it may be necessary to clarify the specification and change the compiler behavior. Además del análisis de impacto habitual, los cambios de este tipo se restringen aún más a los casos en los que se considera que el impacto del cambio es extremadamente mínimo y la ventaja para los desarrolladores es muy alta.In addition to the usual impact analysis, changes of this kind are further restricted to cases where the impact of the change is considered to be extremely minimal and the benefit to developers is very high.
Nuevas características.New features. En general, la introducción de nuevas características no debe cambiar las partes existentes de la especificación del lenguaje ni el comportamiento existente del compilador.In general, introducing new features should not change existing parts of the language specification or the existing behavior of the compiler. En la situación en la que la introducción de una nueva característica requiere cambiar la especificación de lenguaje existente, este tipo de interrupción de compatibilidad solo es razonable si el impacto sería extremadamente mínimo y el beneficio de la característica es alto.In the situation where introducing a new feature requires changing the existing language specification, such a compatibility break is reasonable only if the impact would be extremely minimal and the benefit of the feature is high.
Seguridad.Security. En situaciones extraordinarias, los problemas de seguridad pueden requerir una interrupción de compatibilidad, como quitar o modificar una característica que es inherentemente insegura y plantea un riesgo de seguridad claro para los usuarios.In extraordinary situations, security concerns may necessitate a compatibility break, such as removing or modifying a feature that is inherently insecure and poses a clear security risk for users.
Las siguientes situaciones no son razones aceptables para introducir interrupciones de compatibilidad:The following situations are not acceptable reasons for introducing compatibility breaks:
Comportamiento no deseado o regrettable.Undesirable or regrettable behavior. El diseño del lenguaje o el comportamiento del compilador, que es razonable pero se considera no deseado o regrettable en Retrospect no es una justificación para la compatibilidad con versiones anteriores.Language design or compiler behavior which is reasonable but considered undesirable or regrettable in retrospect is not a justification for breaking backward compatibility. En su lugar, se debe usar el proceso de desuso del lenguaje, que se describe a continuación.The language deprecation process, covered below, must be used instead.
Algo más.Anything else. De lo contrario, el comportamiento del compilador permanece compatible con versiones anteriores.Otherwise, compiler behavior remains backwards compatible.
Criterios de impactoImpact Criteria
A la hora de considerar si un salto de compatibilidad puede ser aceptable, se usan varios criterios para determinar cuál podría ser el impacto del cambio.When considering whether a compatibility break might be acceptable, several criteria are used to determine what the impact of the change might be. Cuanto mayor sea el impacto, mayor será la barra para aceptar los saltos de compatibilidad.The greater the impact, the higher the bar for accepting the compatibility breaks.
Los criterios son los siguientes:The criteria are:
¿Cuál es el ámbito del cambio?What is the scope of the change? En otras palabras, ¿Cuántos programas se verán afectados?In other words, how many programs are likely to be affected? ¿Cuántos usuarios se ven afectados?How many users are likely to be affected? ¿Con qué frecuencia se escribirá el código que se ve afectado por el cambio?How common will it be to write code that is affected by the change?
¿Hay alguna solución alternativa para obtener el mismo comportamiento antes del cambio?Do any workarounds exist to get the same behavior prior to the change?
¿Es obvio el cambio?How obvious is the change? ¿Los usuarios obtendrán comentarios inmediatos de que algo ha cambiado o sus programas se ejecutarán de manera diferente?Will users get immediate feedback that something has changed, or will their programs just execute differently?
¿Se puede resolver el cambio razonablemente durante la actualización?Can the change be reasonably addressed during upgrade? ¿Es posible escribir una herramienta que pueda encontrar la situación en la que se produce el cambio con una precisión perfecta y cambiar el código para evitar el cambio?Is it possible to write a tool that can find the situation in which the change occurs with perfect accuracy and change the code to work around the change?
¿Cuáles son los comentarios de la comunidad sobre el cambio?What is the community feedback on the change?
Desuso de idiomaLanguage deprecation
Con el tiempo, es posible que las partes del lenguaje o del compilador dejen de estar en desuso.Over time, parts of the language or compiler may become deprecated. Como se explicó anteriormente, no es aceptable interrumpir la compatibilidad para quitar dichas características en desuso.As discussed previously, it is not acceptable to break compatibility to remove such deprecated features. En su lugar, deben seguirse los siguientes pasos:Instead, the following steps must be followed:
Dada una característica que existe en la versión a de Visual Studio, los comentarios deben ser solicitados por la comunidad de usuarios en desuso de la característica y aviso completo antes de que se realice cualquier decisión de desuso final.Given a feature that exists in version A of Visual Studio, feedback must be solicited from the user community on deprecation of the feature and full notice given before any final deprecation decision is made. El proceso de desuso se puede invertir o abandonar en cualquier momento en función de los comentarios de la comunidad de usuarios.The deprecation process may be reversed or abandoned at any point based on user community feedback.
la versión completa (es decir, no una versión de punto) B de Visual Studio se debe liberar con advertencias del compilador que avisen del uso en desuso.full version (i.e. not a point release) B of Visual Studio must be released with compiler warnings that warn of deprecated usage. Las advertencias deben estar activas de forma predeterminada y se pueden desactivar.The warnings must be on by default and can be turned off. Los desuso deben estar claramente documentados en la documentación del producto y en la Web.The deprecations must be clearly documented in the product documentation and on the web.
Se debe liberar una versión completa de Visual Studio con advertencias del compilador que no se pueden desactivar.A full version C of Visual Studio must be released with compiler warnings that cannot be turned off.
Posteriormente, se debe publicar una versión completa D de Visual Studio con las advertencias del compilador en desuso convertidas en errores del compilador.A full version D of Visual Studio must subsequently be released with the deprecated compiler warnings converted into compiler errors. La versión de D debe producirse después del final de la fase de soporte técnico estándar (5 años a partir de esta redacción) de la versión A.The release of D must occur after the end of the Mainstream Support Phase (5 years as of this writing) of release A.
Por último, se puede liberar una versión E de Visual Studio que quita los errores del compilador.Finally, a version E of Visual Studio may be released that removes the compiler errors.
No se permitirán los cambios que no se pueden controlar dentro de este marco de desuso.Changes that cannot be handled within this deprecation framework will not be allowed.