Я работаю над созданием постепенно типизированного языка как личного проекта, и я застрял в определенном дизайнерском решении относительно неизменности.Неизменяемость: свойство переменной, значение или API?
Говоря об этом в языке агностик (и, вероятно, грубый), я говорю, что есть две вещи, которые могут быть неизменными или постоянными: привязка переменных и само значение.
Постоянная привязки переменных является как const
в Javascript или final
в Java, где переменная не может быть переназначена. Значение, являющееся неизменным, равно const
в C++ или Object.freeze()
в Javascript.
Вопрос, который у меня возникает, заключается в том, что в случае неизменяемых значений (а не привязок), что должно быть непреложностью?
Значение/объект в Javascript's Object.freeze
?
var point = {x: 10};
var frozenPoint = Object.freeze(point);
или его часть, как на C++?
const Point p(10);
или как переменное связывание, как в случае ржавчины?
let p = Point { x: 10 };
// vs let mut p = Point { x: 10 };
или как часть API библиотеки? Facebook Immutable.js, библиотека Google Guava для Java (ImmutableList
класс) и т. Д.
Я понимаю, что для этого, вероятно, нет «правильного» ответа, так что я действительно ищу, это сравнение философий и мотивов для этих подходов.
Я понимаю эту точку зрения, но я не могу согласиться с тем, что это «правильный ответ». Несомненно, это субъективное мнение, что чистая неизменность - это «лучший» способ сделать что-то. Целевая аудитория, которую я представляю, вероятно, предпочла бы способ управлять изменчивостью, и поэтому я ищу способ обеспечить это управление элегантно и «правильно». –
Современные чисто функциональные языки дают возможность иметь мутации, а также очень элегантные и без ошибок способы управления ими. Это делается только на более высоком уровне, чем семантика основного языка. Поэтому высказывание «Haskell - лучший императивный язык». – libeako
Я понимаю мнение аудитории, но я не согласен с ней. Вместо того, чтобы дать настоятельной аудитории еще один язык, их следует поощрять переходить к чисто функциональному программированию. – libeako