Если все в языке программирования является выражением, будет ли оно прозрачным по ссылкам?

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

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

Это возможно / существует?

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

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам