Предоставление предлагаемых решений в сообщениях об ошибках - PullRequest
1 голос
/ 26 ноября 2009

Инструменты разработчика и программное обеспечение обычно не предоставляют рекомендации по решению в сообщениях об ошибках . Это имеет смысл для компиляторов, потому что они должны точно сказать , что пошло не так.

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

Существует большой набор программного обеспечения, ориентированного на разработчиков, которое было бы неплохо иметь в своем составе «предлагаемое решение (я)» для сообщений об ошибках . Это одна из замечательных функций, которые есть в таких средах разработки, как Eclipse. Но такие программы, как платформы веб-приложений, стандартные / популярные библиотеки и т. Д., Не имеют этой полезной функции.

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

Ответы [ 5 ]

4 голосов
/ 26 ноября 2009

Что вы хотите увидеть?

Error: Null Pointer Exception (suggested solution: Set the object to something).

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

1 голос
/ 26 ноября 2009

Язык программирования имеет возможность быть максимально гибким с точки зрения пользовательского интерфейса. Вы можете заставить компьютер делать что угодно. Обратная сторона медали в том, что если вы наберете не более одного символа, он может не иметь представления, по какой оси была совершена ваша ошибка или где.

Системы с меньшей гибкостью предлагают больше возможностей для решения проблем. Если вы введете (a b c) в свой компилятор Lisp, и он не знает, что такое a, он настолько близок к такому количеству допустимых строк кода, что не может точно предложить ни одного исправления. Если вы неправильно напишите «IDENTIFICATION DIVISION» в начале вашей программы на COBOL, компилятору будет относительно легко обнаружить ошибку и помочь вам. Большинство других языков лежат между этими крайностями.

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

Это ничем не отличается от любого другого искусства. Посмотрите на музыкантов или художников, мастеров боевых искусств, актеров, писателей, шеф-поваров или даже людей, которые учатся говорить по-испански: когда они молоды и неопытны, они попадают в систему, в которой много структур, и если они совершают ошибку кто-то может легко исправить их. По мере того, как они становятся более квалифицированными, им требуется и требуется все меньше и меньше поддержки. Когда они сами стали экспертами, им вообще не нужна поддержка, но оборотная сторона медали в том, что вы не можете так же легко указать, что правильно или неправильно. Если ваш ребенок красит за пределами линий, вы можете объяснить проблему, но если бы Пикассо или Поллок сделали плохой мазок, что бы вы сказали? Или если Филип Гласс ставит записку не на своем месте, или Брюс Ли слишком сильно превращает свое тело в удар? И кто хотел бы работать в искусстве, которое настолько ограничено, что мирские вещи невозможны? Компиляторы COBOL все еще существуют, если кто-то действительно хочет их, но гораздо больше людей платят деньги за ужасные картины, чем за искусные распечатки по номерам.

Точнее, есть сайт, ErrorHelp (далее bug.gd), который позволяет вам печатать сообщение об ошибке и получать результат, и он старше, чем SO, но никто не использует его . Я пробовал. Если только вы не находитесь в контексте, где есть только один возможный ответ, простая проблема, с которой сталкиваются, словарь для предлагаемого решения не работает, и, следовательно, это полный провал в любой области творчества.

1 голос
/ 26 ноября 2009

Трудно найти решение проблемы . Есть так много возможностей, и, как указал @silky, некоторые просто не могут быть диагностированы.

Предупреждения - это другой зверь. Во многих ситуациях современные компиляторы используют их, чтобы сказать: «Я думаю, что вы имели в виду X, когда говорили« Y »; возможно, вы захотите это проверить».

1 голос
/ 26 ноября 2009

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

Я думаю, что большинство современных компиляторов и сред выполнения (Java, Ruby, Go) справляются там неплохо, с номерами строк и трассировкой стека, которые вы можете найти в большинстве ошибок. Даже когда параметры Javascript становятся хорошими, он, безусловно, превосходит старый добрый подход "alert ()" к отладке.

Разве не справедливо оставить предложенные решения для IDE?

Но я согласен, что я видел фреймворки / библиотеки, которые были очень редки с сообщениями об ошибках, и "NullPointerException в строке 264" глубоко внутри какой-то сторонней библиотеки, где у вас нет исходного кода, говорит вам очень близко к ничему .

Если это проблема, я думаю, что она в основном ограничена сторонними библиотеками. «Хорошая причина» заключается, по-видимому, в том, что он был спешно разработан в чье-то свободное время, и они не помещали значимые сообщения об ошибках в список приоритетов.

0 голосов
/ 26 ноября 2009

Большинство IDE имеют свои собственные компиляторы. Это позволяет им выполнять частичную компиляцию, рефакторинг кода и многие другие приемы. Я считаю сообщения об ошибках и предложения весьма полезными. Тот факт, что компилятор не вызывается из командной строки, не означает, что он не является компилятором.

альтернативный текст http://www.theeggeadventure.com/wikimedia/images/1/1f/Eclipse-error.png

...