Может ли язык программирования сконструировать принудительный «чистый код»? [закрыто]

19

Поэтому я пишу свои первые проекты на C ++, и кажется, что для того, чтобы сделать код «чистым», нужно больше усилий, чем просто работать. Т.е. кажется, что C ++ «позволяет» писать некрасивый, но работающий код.

Что заставило меня задуматься,

Может ли язык программирования обеспечить чистый код в дизайне? Уже есть такие языки?

Кроме того, как это включено в принципы проектирования в разработке / теории языка программирования? Какие меры используются?

mavavilj
источник
14
Много языков пробовал. На мой взгляд, ни один из них не достиг успеха.
Gort the Robot
5
К сожалению, это полностью основано на мнении, так как не существует объективного определения «чистого кода». Не стесняйтесь обсуждать это в нашей комнате чата , но я уверен, что у каждого там будет свое мнение.
Ixrec
9
Нет, вы можете написать ФОРТРАН на любом языке.
whatsisname
4
Вы спрашиваете, возможно ли защитить язык от идиота. Как говорится, идиоты гениальны .
Gort the Robot
2
Какими характеристиками обладает «чистый код» для целей этого вопроса? Вы должны определить это, иначе любой ответ с любым обоснованием может быть действительным.
Теодорос Чатзигианнакис

Ответы:

20

Основной эффект, который языковой дизайн оказывает на «чистый код», находится на синтаксическом уровне. Языки с большим количеством сокращений и непонятных операторов (Perl / APL) пригодны для «грязного» кода, тогда как языки с меньшим набором элементов (скажем, Python) пригодны для более чистого кода.

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

В конце концов, семантика важнее синтаксиса. Это также та часть, которую труднее всего понять разработчику технического обслуживания (например, «что на самом деле означает этот код? Я вижу, что он делает ...»).

Следовательно, я бы сказал, что нет никакого проекта для обеспечения чистого кода, но вы можете написать простой синтаксис с чистой семантикой, которая облегчит его. Что бы там ни было, чистый код - это, прежде всего, вопрос знаний, мотивации, дисциплины и навыков разработчика.

Майкл
источник
2
Я бы сказал, что система типов может иметь большое значение для обеспечения правильной семантики. Например, строго типизированные языки гарантируют, что переменным назначены значения применимых типов. Язык, который делает типы дешевыми и легкими, поощряет кодирование большего количества семантики в типах. Сильно типизированный язык заставляет программистов выражать намерение по поводу преобразования типов. Язык, который скрывает семантику с помощью шаблона, также затрудняет рассуждение о семантике. Что же касается «чистой» семантики, неясно. Но я бы предположил, что он имеет значительное совпадение с правильной семантикой.
Восстановить Монику
7

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

  • Исключения нулевого указателя.
  • Общие государственные ошибки.
  • Проблемы параллелизма.
  • Непроверенные исключения.

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

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

Карл Билефельдт
источник
6

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

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

JacquesB
источник
3

Если вы можете определить его количественно, вы можете создать язык, который может его оптимизировать.

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

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

Например, не в интересах C # заставлять людей писать

if (condition)
{

вместо того

if (condition) {

Но шашки стиля могут считаться придирчивыми, потому что это то, для чего они предназначены.

Итак, чтобы ответить на вопрос

Может ли язык программирования обеспечить чистый код в дизайне?

акцент мой

Безусловно, до тех пор, пока вы даете четкое определение того, что означает «чистый код».

Например, я мог бы определить «чистый код», чтобы означать:

  • длина строки не более 80 символов
  • функции, состоящие не более чем из 100 строк
  • отступ должен быть двумя пробелами
  • Открытые фигурные скобки должны следовать в конце строки, перед которой стоит ровно один пробел
  • не более двух операторов на строку

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

zzzzBov
источник
1

Нет, не в том смысле, что вы описываете. Обнаружение "уродства" не может быть сделано автоматически!

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

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

Пол Стансифер
источник