HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Для запуска кода на любом языке, необходимо установить его интерпретатор (или компилятор). В разных операционных системах это делается по-разному: где-то используются пакетные менеджеры, например,<em>apt</em>или<em>yum</em>, где-то скачивается установщик. Некоторые языки бывают предустановленны сразу, например, Python. На него многое завязано в дистрибутивах линукса.</p>
1 <p>Для запуска кода на любом языке, необходимо установить его интерпретатор (или компилятор). В разных операционных системах это делается по-разному: где-то используются пакетные менеджеры, например,<em>apt</em>или<em>yum</em>, где-то скачивается установщик. Некоторые языки бывают предустановленны сразу, например, Python. На него многое завязано в дистрибутивах линукса.</p>
2 <p>Стандартный способ установки работает хорошо только в самом начале, когда происходит первичная настройка. Затем, с течением времени, начинают всплывать разные проблемы. Например, в какой-то момент выходит новая версия языка, которую нужно подключить к проекту. Обычно, должно пройти какое-то время, перед тем, как язык станет доступным для установки через пакетные менеджеры. И здесь либо придется ждать, что не всегда желательно, либо искать другой способ установки. Последнее нередко превращается в серьёзное испытание, с часами гугления и установкой дополнительных библиотек. Все это в конце концов засоряет систему и иногда ломает её.</p>
2 <p>Стандартный способ установки работает хорошо только в самом начале, когда происходит первичная настройка. Затем, с течением времени, начинают всплывать разные проблемы. Например, в какой-то момент выходит новая версия языка, которую нужно подключить к проекту. Обычно, должно пройти какое-то время, перед тем, как язык станет доступным для установки через пакетные менеджеры. И здесь либо придется ждать, что не всегда желательно, либо искать другой способ установки. Последнее нередко превращается в серьёзное испытание, с часами гугления и установкой дополнительных библиотек. Все это в конце концов засоряет систему и иногда ломает её.</p>
3 <p>Другая серьёзная проблема - установка сразу нескольких версий одного языка. Такое бывает нужно, когда разработчик переключается между разными проектами, требующими разные версии. Насколько часто такое происходит? Крайне часто. Чем дальше в разработку, тем больше вариантов: разные проекты в компании, свои проекты, опенсорс.</p>
3 <p>Другая серьёзная проблема - установка сразу нескольких версий одного языка. Такое бывает нужно, когда разработчик переключается между разными проектами, требующими разные версии. Насколько часто такое происходит? Крайне часто. Чем дальше в разработку, тем больше вариантов: разные проекты в компании, свои проекты, опенсорс.</p>
4 <p><em>Здесь нужно упомянуть, что всё это мало касается тех, кто целиком ушел в Docker и Docker Compose. Однако даже в этом случае, нужны языки для работы с опенсорсом.</em></p>
4 <p><em>Здесь нужно упомянуть, что всё это мало касается тех, кто целиком ушел в Docker и Docker Compose. Однако даже в этом случае, нужны языки для работы с опенсорсом.</em></p>
5 <h2>Менеджеры версий</h2>
5 <h2>Менеджеры версий</h2>
6 <p>Для решения этих проблем разработчики придумали менеджеры версий. Менеджер версий - это специальная программа, предназначенная для управления версиями языка. С его помощью устанавливают нужные версии и производят переключение между ними. В отличие от пакетных менеджеров, входящих в операционные системы, менеджеры версий всегда позволяют ставить последние версии языков, как только они выходят (включая установку альфа- и бета-версий).</p>
6 <p>Для решения этих проблем разработчики придумали менеджеры версий. Менеджер версий - это специальная программа, предназначенная для управления версиями языка. С его помощью устанавливают нужные версии и производят переключение между ними. В отличие от пакетных менеджеров, входящих в операционные системы, менеджеры версий всегда позволяют ставить последние версии языков, как только они выходят (включая установку альфа- и бета-версий).</p>
7 <p>Например, для Node.js это<a>NVM</a>(Node Version Manager):</p>
7 <p>Например, для Node.js это<a>NVM</a>(Node Version Manager):</p>
8 <p>Для упрощения работы менеджеры версий обычно позволяют создать специальный файл внутри проекта, который зафиксирует нужную версию языка. В некоторых случаях менеджеры версий сами отслеживают этот файл и переключают версию автоматически.</p>
8 <p>Для упрощения работы менеджеры версий обычно позволяют создать специальный файл внутри проекта, который зафиксирует нужную версию языка. В некоторых случаях менеджеры версий сами отслеживают этот файл и переключают версию автоматически.</p>
9 <p>В современном мире сложно представить себе язык, у которого бы не было менеджера версий. Более того некоторые языки, такие как Ruby, имеют множество разных менеджеров версий, которые конкурируют между собой:</p>
9 <p>В современном мире сложно представить себе язык, у которого бы не было менеджера версий. Более того некоторые языки, такие как Ruby, имеют множество разных менеджеров версий, которые конкурируют между собой:</p>
10 <ul><li>go: gvm, g</li>
10 <ul><li>go: gvm, g</li>
11 <li>java: jabba</li>
11 <li>java: jabba</li>
12 <li>ruby: rbenv, rvm, chruby</li>
12 <li>ruby: rbenv, rvm, chruby</li>
13 <li>php: phpenv, phpbrew</li>
13 <li>php: phpenv, phpbrew</li>
14 <li>python: pyenv</li>
14 <li>python: pyenv</li>
15 </ul><p>Менеджеры версий позволили решить ещё несколько важных задач. Как правило, когда программист взаимодействует с языком, установленным напрямую, то ему приходится использовать<em>sudo</em>при установке глобальных пакетов. Дело в том, что стандартная схема установки языка предназначена для всех пользователей сразу. Поэтому все нужные файлы, включая глобальные пакеты, попадают в общие директории для которых нужны права администратора. С точки зрения безопасности это довольно большая дыра, которой могут воспользоваться (и иногда пользуются) разработчики опенсорс библиотек. Менеджеры версий устанавливают всё в домашнюю директорию текущего пользователя, где у него и так полные права. С одной стороны это позволяет не запускать установку пакетов от имени администратора, а с другой - не засоряется система. Удалить язык и все его пакеты через менеджер версий невероятно просто. Достаточно стереть директорию (правда, лучше это делать средствами самого менеджера версий).</p>
15 </ul><p>Менеджеры версий позволили решить ещё несколько важных задач. Как правило, когда программист взаимодействует с языком, установленным напрямую, то ему приходится использовать<em>sudo</em>при установке глобальных пакетов. Дело в том, что стандартная схема установки языка предназначена для всех пользователей сразу. Поэтому все нужные файлы, включая глобальные пакеты, попадают в общие директории для которых нужны права администратора. С точки зрения безопасности это довольно большая дыра, которой могут воспользоваться (и иногда пользуются) разработчики опенсорс библиотек. Менеджеры версий устанавливают всё в домашнюю директорию текущего пользователя, где у него и так полные права. С одной стороны это позволяет не запускать установку пакетов от имени администратора, а с другой - не засоряется система. Удалить язык и все его пакеты через менеджер версий невероятно просто. Достаточно стереть директорию (правда, лучше это делать средствами самого менеджера версий).</p>
16 <h2>Универсальный менеджер</h2>
16 <h2>Универсальный менеджер</h2>
17 <p>Решив одни проблемы, менеджеры версий добавили другие. Во-первых, их слишком много, и они иногда меняются, сначала популярен один, затем другой. Во-вторых, сам процесс установки менеджера версий может оказаться сложнее установки языка. Проблема в том, что им нужно быть универсальными и работать везде, что крайне проблематично, учитывая разнообразие современных экосистем. Достаточно посмотреть размер документации NVM, чтобы оценить масштаб катастрофы. В-третьих, все эти менеджеры работают по-разному и имеют разные команды. Из-за этого усложняется процесс переключения между ними при работе с разными языками.</p>
17 <p>Решив одни проблемы, менеджеры версий добавили другие. Во-первых, их слишком много, и они иногда меняются, сначала популярен один, затем другой. Во-вторых, сам процесс установки менеджера версий может оказаться сложнее установки языка. Проблема в том, что им нужно быть универсальными и работать везде, что крайне проблематично, учитывая разнообразие современных экосистем. Достаточно посмотреть размер документации NVM, чтобы оценить масштаб катастрофы. В-третьих, все эти менеджеры работают по-разному и имеют разные команды. Из-за этого усложняется процесс переключения между ними при работе с разными языками.</p>
18 <p>Всё это привело к следующему логическому шагу. В конце концов появился универсальный менеджер<a>asdf</a>, который, благодаря плагинам, способен работать с любыми языками. Неполный список его преимуществ:</p>
18 <p>Всё это привело к следующему логическому шагу. В конце концов появился универсальный менеджер<a>asdf</a>, который, благодаря плагинам, способен работать с любыми языками. Неполный список его преимуществ:</p>
19 <ul><li>Одна единственная утилита командной строки для работы со всеми языками</li>
19 <ul><li>Одна единственная утилита командной строки для работы со всеми языками</li>
20 <li>Единый интерфейс взаимодействия для всех языков</li>
20 <li>Единый интерфейс взаимодействия для всех языков</li>
21 <li>Автоматическое переключение на нужную версию языка внутри каждого проекта</li>
21 <li>Автоматическое переключение на нужную версию языка внутри каждого проекта</li>
22 <li>Простая система плагинов, позволяющая добавить любые языки</li>
22 <li>Простая система плагинов, позволяющая добавить любые языки</li>
23 </ul><p>Сейчас<em>asdf</em>набрал достаточно большую популярность и постепенно заменяет собой все остальные менеджеры версий (технически под капотом там часто используются менеджеры, специфические для конкретных языков). У него чуть более сложная система команд из-за необходимости поддерживать множество языков, но в остальном он резко упрощает весь процесс.</p>
23 </ul><p>Сейчас<em>asdf</em>набрал достаточно большую популярность и постепенно заменяет собой все остальные менеджеры версий (технически под капотом там часто используются менеджеры, специфические для конкретных языков). У него чуть более сложная система команд из-за необходимости поддерживать множество языков, но в остальном он резко упрощает весь процесс.</p>
24 <h2>Вывод</h2>
24 <h2>Вывод</h2>
25 <p>Работа с разными версиями языков - непростая задача, которую решают менеджеры версий и докер (для продвинутых). Среди всех менеджеров выделяется<em>asdf</em>, который становится универсальным инструментом для управления любыми языками и даже обычными программами.</p>
25 <p>Работа с разными версиями языков - непростая задача, которую решают менеджеры версий и докер (для продвинутых). Среди всех менеджеров выделяется<em>asdf</em>, который становится универсальным инструментом для управления любыми языками и даже обычными программами.</p>