www.gnuman.ru

Резюме | Контакты | Работа | Page Title Eraser | GrayModern2 | Статьи
Путешествия | Фотоальбомы | Проект 365 | Блог | Черный список
Как выиграть суд у ГИБДД и вернуть права | Технический департамент своими руками

Пожалуйста, сэр, могу ли я получить компоновщик?

Автор: Джоэл Сполски
Переводчик: Анар Мустафаев
В оригинале статья называется Please Sir May I Have a Linker? и была написана 28 января 2004

По неизвестной причине, превосходная и суперсовременная среда разработки .NET компании Microsoft не содержит одного из ключевых инструментов: инструмента, который был обычным делом в средах разработки программ с, ну, примерно 1950 года, и настолько очевидным, что кажется невероятно странным, что никто не обратил внимание на тот факт, что в .NET, на самом деле, его нет.

О каком инструменте идет речь? О компоновщике (linker). Вот что он делает: собирает откомпилированную версию вашей программы с откомпилированными версиями библиотечных функций, которые ваша программа использует. Затем он удаляет те библиотечные функции, которые ваша программа не использует. И в конце концов, компоновщик создает один бинарный выполняемый файл, который люди могут запустить на своих компьютерах.

Вместо этого в .NET реализована идея «среды исполнения» ... большая, 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 фатально недружелюбна к пользователю, который скачивает софт.

---

Оригинал статьи: http://local.joelonsoftware.com/wiki/Пожалуйста, сэр, могу ли я получить компоновщик?


Другие статьи Джоэла Спольски (The Joel on Software) на русском языке
Маркетологи vs. Разработчики
Похож ли медленный рост на медленную смерть?
О чем ваша компания?
Студенческие проекты и тайм-менеджмент
Особенности Вайфая на конференциях
Новый Офис Fog Creek
Почему форматы Microsoft Office такие сложные? (И как это обойти)
Речь в Йельском университете 1
Речь в Йельском университете 2
Речь в Йельском университете 3
Письмо о стратегии VI
Семь шагов на пути к восхитительной службе по работе с клиентами
Общая картина
Консалтинг по оценке производительности (из писем)
Измерения продуктивности
В поисках Великих Разработчиков
Не дайте Астронавтам Архитектуры вас запугать
Секрет айсберга
Метод отождествления
Метод экономической мотивации
Командный метод управления
Три метода управления (введение)
А ваш язык программирования так может?
Контракты и соглашения которые не стоит подписывать
Ежедневная сборка - ваш союзник и друг
Моя первая проверка Билла Г
Испытание Удобства и Простоты Использования с Морами
Опасности обучения на Java
Как поставлять что-нибудь по почте
Превращение денег в программное обеспечение, которое работает
Три заблуждения теории вычислительной техники
Достигая тех высот
Выбор даты выпуска
Как заставить неправильный код выглядеть неправильно
Совет студентам изучающим вычислительную технику
Верблюды и песочница
Пожалуйста, сэр, могу ли я получить компоновщик?
Как Microsoft проиграла битву за API
Не просто удобство использования
Абсолютный Минимум, который Каждый Разработчик Программного Обеспечения Обязательно Должен Знать о Unicode и Наборах Символов
Как сделать так, чтобы ваше резюме прочитали
Двоекультурие
Бионический офис
Лорд Палмерстон в программировании
Закон Дырявых Абстракций
О вреде премирования
Пять миров
Огонь и движение
Назад, к основам
Весна в Кэмбридже
О вреде многозадачности применительно к людям
По главной улице без оркестра
Тест Джоэла: 12 шагов к лучшему коду
У Microsoft поехала крыша
Cтратегические заметки III. Позвольте мне отказаться!
Пять (неуважительных) причин не иметь тестеров
Ну откуда все эти (неоригинальные) мысли?
Планирование программного обеспечения малой кровью
Стратегические заметки II: Вопрос о курице и яйце
"Я начальник - ты дурак" и команда клоунов
Искусство проведения интервью
А вот ещё про отпуск
Введение в Восхитительный Дизайн
Для чего нужны тестировщики



Правильный CSS! Valid XHTML 1.0 Transitional