# RFCs This document tracks RFCs, both implemented and not implemented (implemented RFC should eventually go way from here). ## Deprecate clone operator and replace it with .clone method **Status**: Implemented, as optional behavior currently. Can be specified by #forbid-clone-operator or #allow-clone-operator ## Replace let with const Replace 'let' for immutables with 'const' keyword or make them aliases. `const` and `let` for simple types works the same from coder PoV. `let` and `const` declarations for simple types (integer, float, string, null, boolean) can be optimized (we do know in compile time what is it). For other types const should work as 'binding' (like `let` do now). **Status**: Waiting for implementation ## Add .hasindex() for instances, classes, tables, arrays and strings. Should behave as 'in' operator, but exists only for types that can have 'index', and should have correct check of arguments type (arrays and strings can have only integer as index) **Status**: Waiting for implementation ## Add .hasvalue() for tables and arrays. The same as 'contains' for arrays. To make it more consistent with findvalue() and findindex() and hasindex() **Status**: Waiting for implementation ## assignments in 'if' (let and local) ``` if (let a = foo()){ println(a) } ``` equals to (except scope of visibility of 'a'): ``` let a = foo() if (a) { println(a) } ``` This is sometimes much less verbose and safer to use. The same as warlus operator in python, but we do not need it in Quirrel, cause we have expicit declaration of variables **Status**: Waiting for implementation ## Add for and foreach in ranges Syntax like: ``` for (range:integer) for (start_of_range:integer, end_of_range:integer) foreach (i in range:integer) ``` Will allow to make code faster and safer than with for(local i=0; i