История изменений
Исправление
stevejobs,
(текущая версия)
:
Да не при чем тут вообще Java, на C++ скорость будет такая же, если не медленней
Например, как работают «тэги», которые используются во всяких вимах для автодополнения. Они просто бегут по тексту, и ищут регулярками паттерны типа «function NAME(params...) { ... }», и дальше NAME появляется в автодополнении
Понятно что результат работы такого алгоритма - полная чушь.
Вместо этого нормальные IDE должны полностью скомпилировать на лету весь проект, и дойти в компиляции до стадии построения финального высокоуровневого AST. Так как IDE понимает не весь AST, оно трансформирует его до понятного подмножества - «модели выполнения» сформулированной в терминах «модели языка».
Так как ты можешь в любой момент вызвать не только свой код, но и любой системный - нужно на лету компилировать не только твой проект, а вообще всю нижележащую платформу. Для C++ это означает - собрать весь линукс со всеми прикладными библиотеками нужными в проекте
И надо держать в голове, что в любой момент кодер может захотеть в отладчике зайти не только в свой код, но и в системный - т.е. нужно на лету декомпилировать то, от чего нет исходников, и держать весь рантайм в режиме максимальной отладки
Плюс в проекте может быть несколько языков (например бэкенд на C++ с фронтом на node.js). Плюс каждый новый фреймворк вводит новую терминологию и по сути создает дополнительный язык. Возможно, проект нужно «перекомпилировать» в разрезе сразу нескольких языков!
Плюс всё это многопоточно
Плюс что угодно из этого может поменяться, в том числе в режиме отладки
Считай сам, сколько это стоит ресурсов, и где тут бутылочное горлышко. По мне так оно в первую очередь в необходимости непрерывно ИНДЕКСИРОВАТЬ ВЕСЬ МИР, и потом держать его в кэше, мгновенно перестраивая кэш в самых скотских условиях. Имхо, по сравнению со сложностью задачи, разница между тем, реализовано это на крестах или жабе - меркнет (вот было бы на питоне или жабоскрипте - да, задница).
Исходная версия
stevejobs,
:
Да не при чем тут вообще Java, на C++ скорость будет такая же, если не медленней
Например, как работают «тэги», которые используются во всяких вимах для автодополнения. Они просто бегут по тексту, и ищут регулярками паттерны типа «function NAME(params...) { ... }», и дальше NAME появляется в автодополнении
Понятно что результат работы такого алгоритма - полная чушь.
Вместо этого нормальные IDE должны полностью скомпилировать на лету весь проект, и дойти в компиляции до стадии построения финального высокоуровневого AST. Так как IDE понимает не весь AST, оно трансформирует его до понятного подмножества - «модели выполнения» сформулированной в терминах «модели языка».
Так как ты можешь в любой момент вызвать не только свой код, но и любой системный - нужно на лету компилировать не только твой проект, а вообще всю нижележащую платформу
И надо держать в голове, что в любой момент кодер может захотеть в отладчике зайти не только в свой код, но и в системный - т.е. нужно на лету декомпилировать то, от чего нет исходников, и держать весь рантайм в режиме максимальной отладки
Плюс в проекте может быть несколько языков (например бэкенд на C++ с фронтом на node.js). Плюс каждый новый фреймворк вводит новую терминологию и по сути создает дополнительный язык. Возможно, проект нужно «перекомпилировать» в разрезе сразу нескольких языков!
Плюс всё это многопоточно
Плюс что угодно из этого может поменяться, в том числе в режиме отладки
Считай сам, сколько это стоит ресурсов, и где тут бутылочное горлышко. По мне так оно в первую очередь в необходимости непрерывно ИНДЕКСИРОВАТЬ ВЕСЬ МИР, и потом держать его в кэше, мгновенно перестраивая кэш в самых скотских условиях. Имхо, по сравнению со сложностью задачи, разница между тем, реализовано это на крестах или жабе - меркнет (вот было бы на питоне или жабоскрипте - да, задница).