2015-05-11 5 views
1

Я понимаю, что одной из главных целей Vim является переносимость и настройка. Обилие комментариев в руководстве о том, что по-разному работает по различным проблемам, меня не удивляет. Тем не менее, я не понимаю, почему почти каждая функция может быть отключена с помощью флага компиляции, с какой целью она работает? Не будет ли проще отключить функции во время выполнения, с какой-то конфигурацией?Почему vim так сильно зависит от конфигурации функций компиляции?

Насколько я понимаю (я пытался погрузиться в код vim, но не писал никаких патчей), это делает базу кода намного сложнее, и именно это разработчики Neovim пытаются удалить. Почему разработчики vim следовали этому подходу?

+4

Короткий вариант? Вернувшись в старые времена, люди хотели делать такие вещи, как поместить Vim на [дискеты] (http://en.wikipedia.org/wiki/Floppy_disk) или запустить его на [Commodore Amiga] (http: //en.wikipedia .org/wiki/Amiga). Пространство было важно. Тем не менее, люди, которые были людьми, означали, что кто-то бесполезный раздувание всегда был чьей-то важной особенностью. Таким образом, zillion компилирует флаги. – lcd047

+0

Итак, размер сборки? Удалили ли функции, действительно уменьшив размер двоичного файла? Кстати, если это так, похоже, это был бы отличный ответ, а не просто комментарий. –

+0

Некоторые флаги также связаны с различными целями построения. Vim - пример программы, которая работает на многих платформах (оболочками будет другой). Он должен предоставлять замены или настройки для вещей, которые могут быть недоступны или работать по-разному на целевом объекте (адресация экрана, распределение памяти, взаимодействие между процессами и т. Д.). –

ответ

1

Есть несколько сил, за то, что много флагов (некоторые из которых уже упоминались в комментариях):

  • портативность: с совершенно разные (и экзотические, такие как DOS и Amiga) операционных систем для поддержки, разные (GUI) библиотеки должны быть включены, так что есть определенная потребность в условной компиляции с помощью #ifdef
  • во многих дистрибутивах Linux, крошечные сборки Vim служит реализации по умолчанию для vi; что один должен не есть какая-либо из расширенных функций
  • она позволяет полную гибкость: разработчики/упаковщики могут смешивать и свободно соответствовать (хотя я предполагаю, что большинство из них будет придерживаться по умолчанию крошечных/большие/огромные пучки функций)

Итак, моя (неофициальная) догадка заключается в том, что полезная и необходимая (см. Выше) функция все чаще использовалась для получения большего количества функций, поскольку Vim рос и созревал. Первоначально это хорошо (согласованность, один механизм для настройки). Когда проблемы начали появляться, было слишком поздно, чтобы ретроактивно переключиться на подход (лучше?) (Например, конфигурация времени исполнения); (разработка и тестирование) теперь будут непомерно высокими.

+0

Vim HEAD почти наверняка не может работать на 16-битной Amiga или DOS. Брэм намекнул на это сам. –