Почему компилятор не может просто скомпилировать мой код во время его ввода? - PullRequest
9 голосов
/ 15 сентября 2010

Почему компилятор не может просто скомпилировать мой код во время его ввода?

С точки зрения пользователя, он может работать так же гладко, как раскраска синтаксиса сегодня.Если вы перестанете печатать достаточно долго (возможно, на пару секунд), компиляция (не связывание) будет завершена, и ошибки кода будут идентифицированы с помощью чего-то вроде окраски синтаксиса.

Это не похоже на мой четырехъядерный монстр-компьютер 3GHzбыл действительно занят чем-то другим.Почему бы не позволить ему все время компилироваться?

Ответы [ 8 ]

6 голосов
/ 15 сентября 2010

Это именно то, что делает редактор кода VB.NET в Visual Studio.

Преимущество намного точнее IntelliSense, чем C #.Недостатком является то, что он тратит поистине огромные объемы процессорного времени и памяти.: - (

5 голосов
/ 15 сентября 2010

Может. Или, чтобы быть более полезным, ответ на этот вопрос зависит от

  1. Какой язык
  2. Какая степень оптимизации вам требуется
  3. Как вы будете раздражены, если вы временно введете что-то немое, и компилятор скомпилирует и вставит результат в двоичный файл, который вы отлаживаете, прежде чем вы сможете это исправить.

Некоторые по-настоящему сильные оптимизации были бы очень беспорядочными на ходу. С другой стороны, базовая компиляция, если нет необходимости беспокоиться о назначении смещений для инструкций X86? Конечно.

3 голосов
/ 15 сентября 2010

Обратите внимание, что IDE вы используете, но именно так работает VB.NET.

3 голосов
/ 15 сентября 2010

Некоторые IDE компилируют (или, по крайней мере, проверяют синтаксис и некоторую семантику) код по мере его ввода. Например, я думаю, что Eclipse это делает. Я думаю, что Visual Basic 6 (и, возможно, более ранние версии) сделал это.

2 голосов
/ 15 сентября 2010

Я не очень разбираюсь в компиляторах или методах преобразования кода в IL, машинный язык и т. Д. Но даже в этом случае я вижу, как изменение моей программы одним оператором управления потоком может полностью лишить работу компиляторасделал до этого момента.При добавлении или изменении одной строки кода целые части программы могут устареть, не использоваться или каким-либо другим образом потребовать переоценки.

Я думаю, что я предпочел бы сохранить эти циклы ЦП для распределенных.net или SETI @ Home вместо того, чтобы постоянно перекомпилировать мой код во время его изменения.

0 голосов
/ 15 сентября 2010

Даже интерпретируемые языки, такие как PHP, поддерживают это в редакторе Komodo.Я уверен, что есть еще много редакторов, которые поддерживают это практически для любого языка.

0 голосов
/ 15 сентября 2010

Плагин Resharper от JetBrains выполняет минимальную проверку синтаксиса вашего кода во время набора текста. Тебе стоит попробовать это.

http://www.jetbrains.com/resharper/

0 голосов
/ 15 сентября 2010

Это полностью зависит от языка.

Языки с контекстно-независимыми синтаксисами «могут» предварительно скомпилировать выражения после ввода. Тем не менее, проект на таких языках всегда выполняется быстро, так зачем использовать процессор, если вы можете быстро пакетировать работу, когда код готов?

Другие языки, такие как печально известный C ++, зависят от контекста. В большинстве случаев компилятор не может понять выражение, не прочитав весь код до выражения. Это действительно очень сложно разобрать, и поэтому мы проверяем ошибки перед компиляцией только сейчас (в VS2010 и других недавних идеях). В этом случае кажется невозможным реализовать запрашиваемую вами функцию.

Тем не менее, я вообще не специалист. Это все, что я знаю об этом.

...