Почему в большинстве языков программирования нет больше структур управления? - PullRequest
2 голосов
/ 25 августа 2009

Почему большинство языков, по-видимому, демонстрируют только базовые структуры управления с логической точки зрения? Такие вещи, как If ... then, Else ..., loop, For each, оператор switch и т. Д. Стандартный список кажется довольно базовым с логической точки зрения.

Почему на пути логики синтаксического сахара не так много? Возможно, что-то вроде механизма предложений, в котором вы можете использовать массив предпосылок или функций, которые возвращают сложные самоссылочные взаимозависимые функции и результаты. Что-то, где вы можете связать воедино сложный массив условий, но представленный таким образом, чтобы его было легко и понятно прочитать в коде.

Помещение 1

Помещение 2 тогда и только тогда, когда Помещение 1

Помещение 3

Помещение 4, если Помещение 2 и Помещение 3

Помещение 5 тогда и только тогда, когда Помещение 4

и т.д ...

Заключение

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

Есть ли объяснение видам структур управления, которые мы обычно видим в основных языках программирования? Существуют ли конкретные структуры управления, которые вы хотели бы видеть непосредственно поддерживаемыми синтаксисом языка? Это только добавляет ненужную сложность к языку?

Ответы [ 9 ]

11 голосов
/ 25 августа 2009

Вы смотрели Пролог ? Программа Prolog - это, по сути, набор правил, превращенный в один большой механизм оценки.

Из моего личного опыта, Пролог немного странный, и я на самом деле предпочитаю ifs, whiles и так далее, но YMMV.

5 голосов
/ 25 августа 2009

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

Вы также можете запросить специальный синтаксис для "часто используемых" арифметических выражений. Кто скажет, что считается обычно используемым? И где вы прекратите добавлять синтаксис особого случая?

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

2 голосов
/ 25 августа 2009

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

Только мое дикое предположение, хотя.

1 голос
/ 25 августа 2009

Это относится к заботе об атомарности. Если вы можете выразить A, B, C, D в более простых структурах Y, Z, то почему бы просто не предоставить A, B, C, D, а вместо этого предоставить Y, Z?

Существующие языки отражают 60 лет разрыва между атомарностью и удобством использования. Современный подход - «маленький язык, большие библиотеки». (C #, Java, C ++ и т. Д.).

1 голос
/ 25 августа 2009

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

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

1 голос
/ 25 августа 2009

Звучит так, как будто вы описываете механизм правил .

1 голос
/ 25 августа 2009

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

Если вы действительно этого хотите, используйте язык, который его предоставляет, или инструменты для его реализации (например, макросы lisp).

0 голосов
/ 25 августа 2009

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

0 голосов
/ 25 августа 2009

Поскольку компьютеры являются двоичными, все решения должны сводиться к 1/0, да / нет, истина / ложь и т. Д.

Чтобы быть эффективными, языковые конструкции должны отражать это.

...