Сложность обнаружения IDE и автоматическое завершение зависит от языкового синтаксиса?
-
13-12-2019 - |
Вопрос
Менее проверки / менее строгим анализом кода, необходимые для обеспечения ошибок среды развития и автоматическое завершение языков программирования, которые состоят в основном из читаемых человеком фразами и слов (I.E. Python, VB.NET)?Это в отличие от языков C-стиля C, которые больше зависят от символов и пунктуации для структуры кода.
Решение
У меня есть опыт / я несу ответственным за строительство Десятки языковых передних концов .
Свободно языки против пунктуационных языков, как правило, одинаково трудно разобрать и статистически анализировать.
Люди, которые определяют языки любого вида, либо украшают их в течение десятилетий (например, COBOL с 1958 года), либо построены сложные языки (C ++, Scala, Ruby) с комплексным синтаксисом и сложным разрешением имени и правила вывода в виде типа; Поставщики компилятора затем продолжают добавить неясный синтаксис для поддержки странных вещей, которые они делают или для предоставления блокировки клиента (E.G., MS «Управляемого C ++», DLL-объявлениями и т. Д.). Существует третья проблема из-за паршивых определений; Верхние языки могут иметь точные правила о том, как они работают, но многие языки имеют небрежные определения (например, PHP), которые создают темные угловые случаи, которые должны быть вытянуты от болезненных экспериментов с фактической реализацией.
C ++ был нашим худшим, особенно С Комитетом C ++ 11 делает массивный недавний беспорядок. У нас есть полноразмерные анализаторы C ++, но все еще работают над полным именем для C ++ 11 сверху нашей реализации C ++ 98. (Код разрешения имени составляет около 250 000 строк кода и его недостаточно!).
IBM Cobol - это близкий второй; Язык - это просто гигант, и есть все виды смешных правил разрешения имени («неквалифицированное имя может относиться к конкретному имени без квалификации, если ссылка однозначная», так что это название однозначном ссылке в этом контексте?). < / P >.
После того, как вы получите разрешение прошедшего анализа и имени / типа, вы попадаете в контрольный поток, поток данных, точек - к анализу, диапазон Anlaysis, Call Graph Construction, ... которые, как правило, примерно одинаковое количество усилий, что и более ранние фазы; Мы уходим меньше, имеем действительно хорошие библиотеки, которые поддерживают эти задачи.
со всем этим в качестве анализа фона, вы можете начать делать «статический анализ» умного вида, которые хотят люди.
Другим плакатом отметил, что восстановление от синтаксических ошибок и (акцент) «Продолжайте генерировать значимые сообщения об ошибках». Все, что я могу сказать, это «Аминь, брат». Смотрите это, чтобы ответьте https://stackovflow.com/a/6657974/120163 для обсуждения того, что идет не так, когда вы иметь «частичные программы», что по сути, что вы получаете, когда синтаксис замораживает ошибку, угадаю на решение.