проблема остановки и фоновая компиляция? - PullRequest
0 голосов
/ 25 февраля 2009

Я пытаюсь выяснить, как я мог бы написать алгоритм автозаполнения для Lua, но, поскольку у многих языков сценариев отсутствует статическая система типов, я думаю, что мне нужна фоновая компиляция, но во время фоновой компиляции легко остановить проблема, поэтому мне было интересно, если кто-нибудь решал подобные вещи раньше, и каковы стандартные стратегии для решения компиляции и остановки?

Ответы [ 2 ]

1 голос
/ 25 февраля 2009

Вы можете

  • фактически выполняет код, чтобы увидеть, какой тип объекта представлен конкретной переменной, и обрезать выполнение в середине, если это занимает слишком много времени
  • угадайте, какой тип будет иметь фактическая переменная, если у Lua есть типы. Это означает, что вам нужно создать систему типов, что является нетривиальной задачей (вы должны быть достаточно ограничивающими, чтобы рассуждать об объектной модели, и достаточно разрешительными для того, чтобы достаточное количество программ Lua действительно соответствовало вашей модели). Тем не менее, все блестящие новые движки javascript пытаются сделать это, AFAIK, так что вы можете искать там указатели.
  • просто угадайте из синтаксиса. Например, завершение emacs, которое ищет только те же префиксы, работает как charm в тех случаях, когда обычно происходит сбой других IDE (шаблоны C ++)
1 голос
/ 25 февраля 2009

Автозаполнение, основанное на статическом анализе текста, звучит более разумно, чем попытка компиляции в фоновом режиме. Большинство текстовых редакторов, которые предоставляют автозаполнение, используют этот метод, хотя он не такой точный.

Для этого вы можете проанализировать документ, отыскивая имена и записывая область, к которой они относятся. Когда точка перемещается по документу, ваше автозаполнение отмечает область, в которой оно находится в данный момент, и предоставляет имена, которые должны быть доступны в этой точке.

Поскольку LUA по умолчанию является глобальной областью действия, вы можете получить довольно загрязненное пространство имен, если ваши программисты не используют ключевое слово "local" для сужения областей.

...