Среда локальных модулей
Меня всегда немного раздражала система добавления модулей (заголовочных файлов и т.п. для однообразия всех буду звать модулями), принятая во многих языках. То есть, модули разделены на стандартные и локальные. В C и C++ синтаксис их включения немного различается:
#include "local.h"
#include <standart.h>
То есть надо запоминать эти особенности.
В Питоне до последних версий (считай, до 3-й) такого различия не было, но можно было получить ошибку, если, например, я из своего локального модуля пытаюсь импортировать одноимённый стандартный.
Тут есть ещё несколько недостатков:
1. Если у меня возникает вопрос, то я должен искать, где реально располагаются стандартные эти модули.
2. Если я переношу свой проект на другую систему, то там может не оказаться определённого стандартного модуля. Это усугубляется тем, что, например, в Питоне принято "расширять" стандартную библиотеку всякими левыми пакетами (например, NumPy, wxPython и т.п.).
Казалось бы, решение очевидное - заменить стандартную библиотеку на стандартный репозиторий пакетов (с системой зависимостей). Нужен пакет или модуль - скачал себе в локальный проект. Компилятор отдельно (с минимумом стандартных функций, выражений, которые не требуют импорта модулей), а репозиторий - отдельно. Но какая-то странная лжеэкономность мешает, наверное.
Кто что думает по этому поводу?
Вначале ищет в локальном проекте, потом, если не нашёл, то уже в стандартной библиотеке. Это если без тонкостей. В новых версиях немного систему поменяли. Но большинство программистов пользуются версиями со старой системой (ибо большинство сторонних библиотек заточены для 2.x версий).
Кто создаёт пакет, тот и прописывает. Как-то же в системе пакетов Debian-а сделали. Вроде бы работает.
Конечно, тут будет некоторая морока с подключением пакетов. Но можно выдумать систему не особо сложнее чем apt-get install... С другой стороны, есть же в C заморочка с подключением библиотек (.lib, .a, .so...) и ничего.
.NET? ;)
Вроде нашел (после упоминания в IRC) что-то похожее:
http://en.wikipedia.org/wiki/Global_Assembly_Cache
но пока не совсем вник.
В принципе, я понял, что в идеальном случае локальная система должна содержать не только все необходимые пакеты, но и сам компилятор (интерпретатор). И Python почти позволяет такое провернуть.
И вроде бы в какой-то версии SmallTalk-а превращение экземпляра среды в конкретный проект было на уровне философии. Хотя, может заблуждаюсь.