Created
January 30, 2017 00:28
-
-
Save onelivesleft/913e8dbfdf0adcb999313d257b5437a3 to your computer and use it in GitHub Desktop.
Unsolicited language feature suggestions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* If you are getting bombarded with suggestions then I apologise for joining the throng. | |
I really like the direction you are going with Jai, and these ideas came to me | |
unbidden; I thought I should share them: */ | |
// 1. Generalise 'else' so it works on any given code block: it executes if the preceding | |
// block did not. Predominately this would be for 'for' and 'while' loops. | |
// For example: | |
if message { | |
while message { | |
printf(message.text); | |
message.next(); | |
} | |
} else { | |
printf("No messages!\n"); | |
} | |
// becomes: | |
while message { | |
printf(message.text); | |
message.next(); | |
} else { | |
printf("No messages!\n"); | |
} | |
// 2. An 'until' keyword, which executes if the preceding block wasn't broken out-of | |
// with a 'break' statement. This common search idiom: | |
index := -1; | |
for items { | |
if it.name == looking_for { | |
index = it.index; | |
break; | |
} | |
} | |
if index == -1 { | |
panic(); | |
return; | |
} | |
// [code utilising index] | |
// becomes: | |
for items { | |
if it.name == looking_for { | |
index := it.index; | |
break | |
} | |
} until { | |
panic(); | |
return; | |
} | |
// [code utilising index] | |
// ...which is not only cleaner, but also doesn't rely on picking a sentinel value (or using | |
// a secondary 'found' bool). Also also, 'index' isn't created if the correct item is not | |
// found: I'm not sure if that's useful or not, but it is kinda interesting. | |
// 3. The idea of a 'broken' keyword also occured, where the block executes if | |
// the previous block exited with a 'break'... but I can't think of a use case for it. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment