1

Я готов где-то, хотя я не смог найти его после много поиск, что если кто-то парень, где создать новый язык программирования, это будет полностью ссылочно прозрачный, где все это выражение.Если все в языке программирования является выражением, было бы оно прозрачным?

Некоторые вопросы о ссылочной прозрачности показывают, что некоторые языки, такие как Ruby и Perl, имеют почти все как выражение.

Возможно ли это/существует?

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

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

ответ

3

Если по выражению мы понимаем все, что возвращает значение, вычисление, которое не является выражением, не должно возвращать значение, а ссылочная прозрачность может быть безопасно удалена. Так что да, ссылочная прозрачность требует, чтобы все было выражением.

Но все, что является выражением, не означает, что побочных эффектов не существует. Например, на языке C существует много выражений, которые имеют побочные эффекты: принимают любое выражение, включающее операторы increment and decment ++ и -.

Есть несколько языков программирования без побочных эффектов. Haskell является наиболее широко используемым. Он использует умный трюк, называемый монадами, для разрешения ситуаций, требующих изменения состояния. Например, чтобы напечатать «Hello» на экране, Haskell не изменяет существующий юниверс в единицу, где слово появляется на экране; он создает и возвращает новый юниверс, где слово находится на экране.

+0

Я слышал о Хаскелле, но не знал, что это так. Можем ли мы сказать, что 'x ++' в C является выражением, но чьи части не являются всеми выражениями, и существует некоторый оператор в _grammer_, который является частью оператора '++'? Хотя это, вероятно, «расщепляющие волосы». – RussW

+0

Я думаю, что все, что имеет значение, - это вызывать выражение «x ++» или нет. Если вы хотите определить «выражение» как «вычисление, возвращающее значение, которое имеет * и * не производит никаких побочных эффектов», то обязательно, если все, являющееся выражением, подразумевает ссылочную прозрачность, но тогда вам нужно новое слово для вычислений, возвращающих значения, и может или могут не вызывать побочных эффектов. – Joni

2

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