Hello everybody!
I published Kinx v0.21.0 preview release! Please see Release Page of Kinx
Introduction
At the version 0.21.0 it newly supported an assignment by a pattern matching, case-when, and switch-when syntax.
- Reference
- First motivation ... The post of introduction
- Kinx, I wanted a scripting language with a syntax of C family.
 
- Repository ... https://github.com/Kray-G/kinx
- I am waiting for pull requests.
 
 
- First motivation ... The post of introduction
Pattern Matching
The pattern matching is very useful. For example, you can use it in a declaration like this.
var [a, b, , ...c] = [1, 2, 3, 4, 5, 6];
var { x, y } = { x: 20, y: { a: 30, b: 300 } };
var { x: d, y: { a: e, b: 300 } } = { x: 20, y: { a: 30, b: 300 } };
System.println("a = ", a);
System.println("b = ", b);
System.println("c = ", c);
System.println("d = ", d);
System.println("e = ", e);
System.println("x = ", x);
System.println("y = ", y);
// => .y.b requires 300, but it is 3 in actual.
var { x: d, y: { a: e, b: 300 } } = { x: 20, y: { a: 30, b: 3 } };
At the last case, the right hand side is not matched by the pattern of the left hand side. Therefore you will see an exception of NoMatchingPatternException.
a = 1
b = 2
c = [4, 5, 6]
d = 20
e = 30
x = 20
y = {"a":30,"b":300}
Uncaught exception: No one catch the exception.
NoMatchingPatternException: Pattern not matched
Stack Trace Information:
        at <main-block>(test.kx:14)
You can use a same feature also at an assignment, an argument of a function, and case-when.
Please look at the description for the related features as follows.
- declaration ... https://github.com/Kray-G/kinx/blob/master/docs/spec/statement/declaration.md
- assignment ... https://github.com/Kray-G/kinx/blob/master/docs/spec/statement/expression/assign.md
- function argument ... https://github.com/Kray-G/kinx/blob/master/docs/spec/definition/function.md
- case-when ... https://github.com/Kray-G/kinx/blob/master/docs/spec/statement/expression/case_when.md
Switch-When
I thought I would like to make a case-when being not fallthrough be substitute of a switch-case being fallthrough.
But there was a problem for the performance on it.
- 
case-whenhas been designed that the condition is evaluated by a pattern matching. This means the order of evaluating a condition is sequential from the top.
- On the other hand, switch-caseis designed the order of evaluating a condition is not defined. This means, it will be translated to just aif-else, or it will be translated to a binary search, or it will translated to a jump by table. In particular, a jump by table is important at the point of a performance.
Therefore I have introduced switch-when instead of switch-case. You can use a when label instead of a case label. If you use a when label, the break statement will be automatically inserted after the last statement of when clause.
Of course you can use an else: label instead of a default: label. An else: label means a default: with break.
If you want to use a fallthrough in when, you can also use a fallthrough keyword at the last statement in when.
Conclusion
I sometimes received a reaction like ''Why did you select a fallthrough in switch-case?'', and ''It is a bad selection.'' I believe switch-when will be an answer for that. One of weakpoints in Kinx will be eliminated.
I hope you will be a user of Kinx and try something with this language. I will welcome any feedback.
See you!
 

 
    
Top comments (0)