Казалось бы, нет ничего лучше традиционного Паскалевского оператора присваивания. Однако прогресс на месте не стоит и к настоящему времени есть ряд хороших расширений.
1. Использование для совмещения определения переменных с инициализацией.
переменная[:тип] := выражение
Если тип опущен, то он выводится компилятором.
Так можно избегать громозких секций описания и определять локальные переменные прямо в ходе. Опасность - опечатка при переприсваивании с возможностью опустить тип ведет к описанию новой переменной, т.е. синтаксическая ошибка становится семантической, что не есть хорошо.
Поэтому для присваиваний, совмещенных с описаниями есть резон сделать указание типа обязательным.
2. Использование для определения констант.
константа[:тип] ::= выражение
Кто сказал, что константы обязаны вычисляться только во время компиляции?
Константы - это то, что нельзя переприсваивать, а не только то, что вычислено еще до выполнения.
Такая возможность (аналог const в C++) позволяет обнаруживать ошибки переприсваивания того, что по логике алгоритма не должно обновляться. Вдобавок такой оператор позволяет компилятору сильно оптимизировать код.
Для констант необязательность указания типа логична и целессобразна - их никто переприсваивать не будет.
Почему именно ::=? Во-первых не будет коллизиии с операцией сравнения, во-вторых это сочетание знаков в БНФ означает "определено как".
3. Использование структур в левой части оператора присваивания.
Например, вот пример с кортежем:
(i, x) := (1, 1)
Это позволяет сделать код более лаконичным и прозрачным, выделяя логически связанные присваивания, а также позволяет лучше оптимизировать (а то и распараллелить!) код - порядок присваивания элементов внутри структуры не определен.