2016-08-07 4 views
0

tl; dr Мне нужен быстрый рабочий процесс редактирования с компиляцией, но префикс каждого вызова функции в «somenamespace_» раздражает.Какие языки все еще начинаются быстро с большим количеством кода?

Один (спорно) преимуществом C является то, что вы можете иметь отдельные единицы компиляции. Большое количество кода может быть скомпилировано в объекты и библиотеки, которые намного быстрее связывают друг с другом, чем анализируют любой код C. Он может работать медленнее, так как оптимизация не может быть выполнена между единицами корреляции, но очень быстро связывается, особенно с этим компоновщиком ld.gold.

Проблема в том, что это C. Отсутствие пространств имен, в значительной степени.

Но даже C++ не использует (на практике) отдельные блоки учета. Конечно, вы можете, но по большей части речь идет о включении мегабайт шаблонов в заголовочных файлах. Вся философия, стоящая за «частным», заключается в том, чтобы притвориться, что вы разделили интерфейсы, фактически не имея их вообще. Таким образом, стандартная практика на языке важна, потому что даже если я создаю свои собственные изолированные двоичные интерфейсы, если каждая реализация должна # включать те же тонны кода от третьих лиц, время, сохраненное при их изоляции, не складывается. В любом случае, C++ - это ... для меня особенное. На самом деле, я просто хочу пространства имен. (И модули ... вздох)

Языки, такие как python, racket и java, используют частичную компиляцию, которая кажется достаточно быстрой, но вы все равно получаете замедление при запуске для больших проектов, поскольку они должны переводить весь этот байт-код в машинный код каждый раз. Нет возможности (за пределами написания интерфейса C) изолировать код так быстро, чтобы сочетаться с кодом, над которым вы работаете.

Я просто хотел бы узнать, на каких языках, где может быть скрыто большое количество кода за небольшими, быстро загружаемыми интерфейсами, поэтому их компиляция изначально может быть медленной, но затем я могу быстро выполнить компиляцию когда я работаю над его частями. Вместо этого взломать python, где я что-то меняю в индикаторе прогресса, а затем должен сидеть там, глядя на него, когда он загружает стандартную библиотеку, а затем загружает код базы данных, а затем загружает код веб-сервера, а затем загружает код обработки изображений, а затем сидит там еще 20 секунд, выясняя, что объект gobject-introspection для некоторого кода gui.

Это не всегда очевидно. Я смотрю на D, пытаясь понять, когда он анализирует код из зависимостей, когда он перекомпилирует материал без подсказки. Go, похоже, просто удаляет весь код вместе (включая зависимости!) В единый блок компиляции, но, может быть, я ошибаюсь? И я не думаю, что Nim регенерирует все сгенерированные C каждый компилятор, но, возможно, это так? Руст использует отдельные единицы измерения (я думаю), но он все еще медленный, как черт скомпилировать! И python действительно быстро компилируется, так что только после того, как мои проекты начинают становиться большими и успешными, я начинаю смущаться.

ответ

0

Я не изучил другие упомянутые вами языки, такие как Rust, D или Python. Когда вы компилируете программу Nim, она создает папку с именем nimcache. Это содержит все файлы .c и .o. Если вы внесете изменения в программу Nim и перекомпилируете, он попытается повторно использовать файлы в этой папке nimcache. Файлы имеют расширение .c и .o.