Пожалуйста, сэр, могу ли я получить компоновщик?
Joel on Software - Пожалуйста, сэр, могу ли я получить компоновщик?
Пожалуйста, сэр, могу ли я получить компоновщик?
Автор: Джоэл Сполски
Переводчик: Анар Мустафаев
28 января 2004
По неизвестной причине, превосходная и супер современная среда разработки .NET компании Microsoft пропустила один их ключевых инструментов… инструмент который был обычным делом в средах разработки программного обеспечения с, ну, примерно 1950 года, и настолько очевидным, что кажется невероятно странным, что никто не обратил внимание на тот факт, что в .NET, на самом деле, его нет.
О каком инструменте идет речь? О компоновщике (linker). Вот что он делает: собирает откомпилированную версию вашей программы с откомпилированными версиями библиотечных функций, которые ваша программа использует. Затем, он удаляет те библиотечные функции, которые ваша программа не использует. И в конце концов, компоновщик создает один бинарный выполняемый файл, который люди могут запустить на своих компьютерах.
Вместо этого, в .NET реализована идея «среды времени выполнения» (runtime)… большая, 22 мегабайтная, парообразная куча кода, которая динамически компонуется и которую каждый обязан записать на свой компьютер перед тем как использовать .NET приложения.
Среды выполнения - это проблема очень похожая на проблему с DLL, потому что если приложение 1 было разработано для среды выполнения 1, и выходит среда выполнения версии 2, то, внезапно, по какой-то непредсказуемой причине приложение 1 перестает правильно работать. Например, сейчас, после обновления среды выполнения с версии 1.0 до 1.1, наша внутренняя корпоративная контрольная панель округляет количество продаж до четвертого десятичного знака. А обычно несовместимости бывают еще хуже.
Фактически .NET включает в себя обширную технологическую систему называемую «явности» (manifests), которые явно сложны и задуманы для того чтобы каким-то образом только правильная среда выполнения могла быть использована с данным приложением, но я не знаю никого, кто может разгадать как их использовать.
Все это требует рассказать одну историю. На вечеринке в Fog Creek, в канун Нового Года, мы хотели чтобы в главной комнате несколько компьютеров показывали обратный отсчет времени до полуночи. Майкл написал приложение на C# с WinForms за 60 секунд. Это отличная среда разработки.
Моя работа заключалось в том что бы записать программу countdown.exe на три компьютера и запустить ее. Это звучит просто.
Как бы ни так. Двойной щелчок на EXE и я получаю смешное недружелюбное сообщение об ошибке где-то в mscoree.dll или что-то такое, с неуместным дампом моего пути. Естественно, нет сомнения в том что среда выполнения .NET просто не была проинсталированна. К счастью я программист и сразу определил в чем проблема.
Как я инсталлирую среду выполнения? “Простейший” путь через Windows Update. Но Windows Update сначала заставляет меня проинсталлировать все критические обновления, а только потом среду выполнения. Это, разумно, да? Два из “критических” обновлений – это Windows service pack и новая версия Internet Explorer, и оба требуют перезагрузить компьютер.
Как я уже говорил, для запуска этого маленького .NET приложения мне нужно загрузить 70 или 80 мегабайт (хорошо, что у нас скоростной доступ в Интернет) и перезагрузиться три или четыре раза. И это в софтверной компании! Я знаю как долго это длится, потому что когда загрузка началась в первый раз, я включил «Office Space» на большом экране, и к тому времени когда фильм закончился, инсталляция почти завершилась. Каждые десять минут во время просмотра фильма я должен был вскакивать, бежать к компьютеру, чтобы нажать ОК в каком-нибудь дурацком диалоговом окне.
Этого достаточно чтобы вызвать разочарование от использования доморощенных программ. Но подумайте о нашем продукте CityDesk. Практически все наши пользователи загружают бесплатную пробную версию перед тем как купить этот продукт. Им надо загрузить около 9 Мб и не предъявляется никаких дополнительных требований. И, практически, пока никто их этих пользователей не имеет среды выполнения .NET.
А если мы попросим пользователей из небольших организаций и домашних пользователей, сначала пройти через весь ад инсталляции среды выполнения длительностью с целый фильм, то, я думаю, мы потерям 95% из них. Они пока не клиенты, они потенциальные клиенты, и я не могу позволить себе отказаться от 95% моих потенциальных клиентов только ради использования более удобной среды разработки.
“Но, Джоэл”, могут мне сказать, “это же ясно, что скоро у достаточного количества пользователей будет эта среда выполнения и тогда проблема исчезнет.”
Я тоже так думал, а потом обнаружил что Microsoft поставляет новую версию среды выполнения каждые шесть или двенадцать месяцев. Понемногу увеличивающееся количество людей имеющих ее опять падает до нуля. И будь я проклят, если я буду тестировать мое приложение на трех различных версиях среды выполнения только для того чтобы получить прирост клиентов на 1,2% на одну из трех версий.
Я просто хочу все скомпоновать в один статический EXE файл, который для запуска не предъявляет никаких особых требований. Мне не важно, что он несколько больше. Все что мне было бы необходимо - это функции которые я действительно использую, интерпретатор байт кода и немного от среды выполнения. Мне не нужен целый компилятор C# который является частью среды выполнения. Я уверяю что код CityDesk не нуждается в компиляции какого-то ни было программного кода на C#. Мне не нужны целых 22 МБайт. Самое большее что мне нужно это 5 или 6 МБайт.
Я знаю компании, которые обладают технологией сделать это, но им нужно разрешение от Microsoft чтобы распространять части среды выполнения, такие как интерпретатор байт-кода. Эй, Microsoft, проснись, дай нам замечательный кусочек технологий 1950-х годов, и позволь мне сделать один EXE файл, который запускается на любом компьютере с ОС Win 98 или более поздней без всяких дополнительных требований. Но нет, .NET фатально не дружелюбна к пользователю, который скачивает софт.
В английском оригинале статья называется
Please Sir May I Have a Linker?
Джоель Спольски - основатель Fog Creek Software, небольшой компании по
разработке программного обеспечения, расположенной в Нью-Йорке.
Окончил Йельский Университет, работал программистом и управляющим в
Microsoft, Viacom и Juno.
Содержимое этих страниц представляет собой мнение одного человека.
Всё содержимое Copyright ©1999-2005 by Joel Spolsky. All Rights Reserved.
FogBUGZ | CityDesk | Fog Creek Software | Joel Spolsky