Третій факт: в ASP.NET підтримується безліч мов програмування. Четвертий факт: ASP.NET обслуговується середовищем CLR
Третий факт: в ASP.NET поддерживается множество языков программирования
Хотя при разработке приложения предпочтение, скорее всего, будет отдано какому- то одному языку, выбор языка никак не влияет на то, какие задачи с помощью приложения можно будет решать. Причина в том, что какой бы язык не использовался, код всегда будет компилироваться в IL.
Язык IL является своего рода “трамплином” для любого управляемого приложения. (Под управляемым (managed) приложением понимается любое приложение, которое пишется для .NET и выполняется внутри управляемой среды CLR.) В некотором смысле IL даже можно назвать языком .NET, потому что он является единственный языком, который распознает исполняющая среда CLR.
Чтобы лучше понять, что собой представляет IL, не помешает рассмотреть простой пример. Поэтому давайте возьмем следующий код на языке С#:
using System; namespace HelloWorld {
public class TestClass {
private static void Main(string [ ] args)
{
Console.WriteLine ("Hello World");
}
Этот код показывает, как может выглядеть самое простое из всех возможных в .NET приложений, а именно — простая утилита командной строки, которая отображает в окне консоли предсказуемое сообщение.
Теперь посмотрим на него с другой стороны. Ниже приведен код IL для его метода Main():
.method private hidebysig static void Main(string [ ] args) cil managed {
.entrypoint
// Размер кода 13 (Oxd)
.maxstack 8 IL_0000: nop
IL_0001: ldstr "HelloWorld"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // конец метода TestClass::Main
Просмотреть IL-код для любого скомпилированного приложения .NET довольно легко. Для этого нужно запустить программу дизассемблера IL под названием ildasm.exe, которая устанавливается вместе с Visual Studio и .NET SDK (Software Development Kit — набор инструментальных средств разработки программного обеспечения). Найдите файл ildasm.exe. в каталоге вроде c:\Program Files\Microsoft SDKs\Windows\v7.0A\ bin и запустите его. В окне утилиты выберите в меню File (Файл) пункт Open (Открыть) и укажите необходимый DLL- или EXE-файл, который был создан с помощью .NET.
Совет. Для получения еще больших возможностей дизассемблирования можно воспользоваться другим замечательным (и бесплатным) инструментом — Reflector, который доступен для загрузки по адресу http://www.red-gate.com/products/reflector. Благодаря созданным членами сообщества подключаемым модулям, Reflector позволяет составлять диаграммы, анализировать и декомпилировать IL-код любой сборки.
За счет терпения и небольших логических рассуждений можно разобраться в коде IL и вычислить, что в нем происходит. Тот факт, что IL настолько просто дизассемблируется, чреват проблемами с конфиденциальностью и управлением кодом, но разработчики приложений ASP.NET беспокоиться об этом не должны, потому что весь код ASP.NET сохраняется и выполняется на сервере. Поскольку клиент никогда не получает скомпилированного файла кода, никакой возможности декомпилировать его не будет. Если же подобные проблемы все-таки беспокоят, рассмотрите вариант применения маскировщика для запутывания кода и превращения его в более трудный для понимания. (Маскировщик, например, может переименовать все переменные и назначить им имена вроде f__а__234.) В состав Visual Studio входит ограниченная версия популярного маскировщика Dotfuscator.
Ниже приведен код того же самого консольного приложения на языке Visual Basic:
Imports System
Namespace HelloWorld
Public Class TestClass
Private Shared Sub Main(args() As String)
Console.WriteLine("Hello World")
End Sub End Class End Namespace
Скомпилировав это приложение и просмотрев код IL, можно обнаружить, что он практически идентичен сгенерированному коду IL для версии на языке С#. Хотя разные компиляторы иногда проводить собственную оптимизацию, как правило, результаты одного языка .NET не будут лучше результатов любого другого языка .NET, т.к. все языки используют одну и ту же инфраструктуру. Эта инфраструктура определена в спецификации CLS, которая более подробно описана во врезке “Общая спецификация для языков программирования”.
Важно отметить, что IL был недавно признан стандартом Есmа и ISO. Это может послужить толчком к скорому признанию таковым и других общеязыковых платформ, предназначенных для использования на других платформах. Наилучшим примером является проект Mono, доступный по следующему адресу: http://www.mono-project.com.
Общая спецификация для языков программирования
В среде CLR ожидается, что все объекты будут отвечать определенному ряду правил. Этот ряд правил детально изложен в общей спецификации для языков программирования (Common Language Specification — CLS).
В спецификации CLS описаны многие законы, которые должны обязательно соблюдаться во всех языках, такие как примитивные типы, перегрузка методов и т.д. Любой компилятор, который генерирует код IL для выполнения в среде CLR, должен обязательно следовать всем перечисленным в CLS правилам. Спецификация CLS предоставляет разработчикам, поставщикам и производителям программного обеспечения возможность работать в рамках одинаковых правил в отношении языков, компиляторов и типов данных. Список многих отвечающих требованиям CLS языков доступен по адресу http://dotnetpowered.com/languages.aspx.
Из-за этих требований создание компилятора языка, способного генерировать действительно совместимый с CLR код, может оказаться непростым. Тем не менее, компиляторы могут быть созданы для практически любого языка, и не исключено, что со временем появятся компиляторы для всех существующих языков. Только представьте, что программисты, работавшие на мэйнфреймах и любившие COBOL, смогут воспользоваться своей базой знаний для создания веб-приложений.