Требуется ли меньше проверок/менее тщательный анализ кода для обеспечения обратной связи об ошибках среды разработки и автоматического завершения для языков программирования, которые состоят в основном из удобочитаемых фраз и слов (например, Python, VB.NET)? Это отличается от языков C-стиля, которые больше зависят от символов и пунктуации для структуры кода.
Сложность обнаружения ошибок IDE и автозаполнения зависит от синтаксиса языка?
Ответы (1)
У меня есть опыт/я отвечаю за создание десятков языковых интерфейсов.
Словесные языки и пунктуационные языки, как правило, одинаково сложны для синтаксического анализа и статического анализа.
Люди, которые определяют языки любого типа, либо украшали их десятилетиями (например, COBOL с 1958 года), либо создавали сложные языки (C++, Scala, Ruby) со сложным синтаксисом и сложными правилами разрешения имен и вывода типов; затем поставщики компилятора продолжают добавлять неясный синтаксис для поддержки странных вещей, которые они делают, или для обеспечения блокировки клиента (например, MS «управляемый C++», объявления DLL и т. д.). Есть и третья проблема паршивых определений; лучшие языки могут иметь четкие правила о том, как они работают, но многие языки имеют небрежные определения (например, PHP), что создает темные углы, которые должны быть сглажены болезненными экспериментами с фактической реализацией.
C++ был нашим худшим, особенно. с комитетом С++ 11, который недавно устроил массовый беспорядок. У нас есть полные синтаксические анализаторы C++, но мы все еще работаем над разрешением полных имен для C++11 поверх нашей реализации C++98. (Код разрешения имени составляет около 250 000 строк кода, и этого недостаточно!).
IBM COBOL занимает второе место; язык просто гигантский, и есть всякие забавные правила разрешения имен («неквалифицированное имя может ссылаться на конкретное имя без уточнения, если ссылка однозначна». Итак, является ли это имя однозначной ссылкой в данном контексте?).
После того, как вы преодолеете синтаксический анализ и разрешение имени/типа, вы попадете в поток управления, поток данных, анализ точек, анализ диапазона, построение графа вызовов... которые, как правило, требуют такого же объема усилий, как и более ранние этапы; нам сойдет с рук меньше, если у нас будут действительно хорошие библиотеки, поддерживающие эти задачи.
Со всем этим в качестве фонового анализа вы можете начать делать «статический анализ» умного типа, который нужен людям.
Другой автор отметил, что восстановление после синтаксических ошибок и (выделено) «продолжать генерировать содержательные сообщения об ошибках». Все, что я могу сказать на это, это «Аминь, брат». См. этот ответ SO https://stackoverflow.com/a/6657974/120163 для обсуждения того, что идет не так, когда вы иметь «частичные программы», что, по сути, является тем, что вы получаете, когда исправляете синтаксическую ошибку, догадываясь об исправлении.