Discussions in support of the LOLCODE.com wiki
You are not logged in.
We the undersigned, being of sound mind and minimal patience, have hereby decided amongst ourselves upon some extensions to 1.0 so that we may expedite our implementations.
---
These are a series of extensions to the 1.0 reccommendation. They're entirely backward compatible, and entirely unofficial. Nobody is required to implement these by any stretch of the implementation, but we got tired of waiting. We tried to take only the least controversial proposed extensions and integrate them with the existing language. We naturally hope that this is what (part of) 1.1 will look like, but if it doesn't, we'll update accordingly.
Herein the proposals:
"HAI" is now defined as "HAI [(TO|2) <version>]". Version is alphanumeric. The 1.0 reccommendation is "1.0" and this unofficial spec is "IRCSPECZ". If a compiler encounters a "HAI" with no version, it should attempt to compile it using the most recent/complete spec it knows. If it encounters a version it is familiar with, it should attempt to compile it as that version. If it encounters a version it is not familiar with, it should return an error and exit.
"IZ" now permits any number of "MEBBE [IZ] <condition>" blocks, each introducing an 'else if' block. These come after the 'YARLY' block and before the 'NOWAI' block.
The "YR" and "UR" keywords are treated as synonyms (they're used interchangeably by many people).
GTFO is deprecated. (It was never actually in 1.0, but it's commonly used as if it is)
ENUF is introduced, serving the same purpose as GTFO. It can optionally take the name of the loop to exit: "ENUF [[OV [YR|UR]] <loopname> ]".
MOAR is introduced, serving as a 'continue' statement. It optionally takes the name of the loop to exit, with the same syntax as ENUF.
A switch statement is introduced. This takes the form:
WTF [IZ] <condition>?
{ OMG <literal> [!]
<statements>}
[ OMGWTF [?]
<statements> ]
KTHXExecution implicitly falls through from one "OMG" to the next until it hits an "ENUF", at which point it exits the switch statement. However, if a non-empty "OMG" block has no "ENUF" statement at the end, the compiler/interpreter should emit a warning to that effect.
BTW is 'officially' the comment keyword (in this unofficial spec).
"KTHX" to terminate loops is deprecated in favor of the old (and more flavorsome) "IM OUTTA YR <loop>".
"DIAF" is deprecated in favor of "BYES".
---
Comments are welcome. Once again, this isn't supposed to serve as an official spec, but as something unofficial with the less controversial extensions so that we implementors have something to be getting on with.
Signed,
Arachnid,
[other names omitted to protect the guilty. Take credit if you wish!]
Offline
Sigh, this apparently happened while I was at work. (Getting my cluster up and running! W00t!)
Let's see...
Arachnid wrote:
"HAI" is now defined as "HAI [(TO|2) <version>]". Version is alphanumeric. The 1.0 reccommendation is "1.0" and this unofficial spec is "IRCSPECZ". If a compiler encounters a "HAI" with no version, it should attempt to compile it using the most recent/complete spec it knows. If it encounters a version it is familiar with, it should attempt to compile it as that version. If it encounters a version it is not familiar with, it should return an error and exit.
+1
"IZ" now permits any number of "MEBBE [IZ] <condition>" blocks, each introducing an 'else if' block. These come after the 'YARLY' block and before the 'NOWAI' block.
+1 MEBBE
-1 YARLY
The "YR" and "UR" keywords are treated as synonyms (they're used interchangeably by many people).
+1
GTFO is deprecated. (It was never actually in 1.0, but it's commonly used as if it is)
ENUF is introduced, serving the same purpose as GTFO. It can optionally take the name of the loop to exit: "ENUF [[OV [YR|UR]] <loopname> ]".
+1
MOAR is introduced, serving as a 'continue' statement. It optionally takes the name of the loop to exit, with the same syntax as ENUF.
+10! (+1)
A switch statement is introduced. This takes the form:
Code:
WTF [IZ] <condition>? { OMG <literal> [!] <statements>} [ OMGWTF [?] <statements> ] KTHXExecution implicitly falls through from one "OMG" to the next until it hits an "ENUF", at which point it exits the switch statement. However, if a non-empty "OMG" block has no "ENUF" statement at the end, the compiler/interpreter should emit a warning to that effect.
+1
BTW is 'officially' the comment keyword (in this unofficial spec).
+1
"KTHX" to terminate loops is deprecated in favor of the old (and more flavorsome) "IM OUTTA YR <loop>".
+1
"DIAF" is deprecated in favor of "BYES".
-1 Code clarity, LOL-ishness! I see these being used mostly without arguments, so BYES/DIAF are a lot clearer. (i.e. "If file hasn't changed, BYES... if the file doesn't exist, DIAF!")
---
Comments are welcome. Once again, this isn't supposed to serve as an official spec, but as something unofficial with the less controversial extensions so that we implementors have something to be getting on with.
Signed,
Arachnid,
[other names omitted to protect the guilty. Take credit if you wish!]
Signed,
Eko ![]()
Last edited by etherealflaim (2007-06-07 02:30:36)
Offline
I'm down with a temporary movement forward, as long as there's minimal kvetching if we right turn and head in a different direction.
Does ENUF have LOLCAT precedence? Not that it needs it, I'm just wondering.
Peter
Offline
Arachnid wrote:
These are a series of extensions to the 1.0 reccommendation. They're entirely backward compatible, and entirely unofficial. Nobody is required to implement these by any stretch of the implementation, but we got tired of waiting. We tried to take only the least controversial proposed extensions and integrate them with the existing language. We naturally hope that this is what (part of) 1.1 will look like, but if it doesn't, we'll update accordingly.
+1
"HAI" is now defined as "HAI [(TO|2) <version>]". Version is alphanumeric. The 1.0 reccommendation is "1.0" and this unofficial spec is "IRCSPECZ". If a compiler encounters a "HAI" with no version, it should attempt to compile it using the most recent/complete spec it knows. If it encounters a version it is familiar with, it should attempt to compile it as that version. If it encounters a version it is not familiar with, it should return an error and exit.
+1
"IZ" now permits any number of "MEBBE [IZ] <condition>" blocks, each introducing an 'else if' block. These come after the 'YARLY' block and before the 'NOWAI' block.
+1
The "YR" and "UR" keywords are treated as synonyms (they're used interchangeably by many people).
Indifferent
GTFO is deprecated. (It was never actually in 1.0, but it's commonly used as if it is)
+1 Didn't like the language (trying to get lil kids here to laugh!)
ENUF is introduced, serving the same purpose as GTFO. It can optionally take the name of the loop to exit: "ENUF [[OV [YR|UR]] <loopname> ]".
+1
MOAR is introduced, serving as a 'continue' statement. It optionally takes the name of the loop to exit, with the same syntax as ENUF.
-10! I liked the idea of using "MOAR <variable>[!!#]" as a alternative to UP
A switch statement is introduced. This takes the form:
Code:
WTF [IZ] <condition>? { OMG <literal> [!] <statements>} [ OMGWTF [?] <statements> ] KTHXExecution implicitly falls through from one "OMG" to the next until it hits an "ENUF", at which point it exits the switch statement. However, if a non-empty "OMG" block has no "ENUF" statement at the end, the compiler/interpreter should emit a warning to that effect.
+1, -1 I'm confused, if KTHX is depreciated, why use it in the example? Otherwise +1 ![]()
BTW is 'officially' the comment keyword (in this unofficial spec).
+1 Comments are always good, though I'd like to see a quicker way for comments for us lazy typers
Also, multi-line comments?
"KTHX" to terminate loops is deprecated in favor of the old (and more flavorsome) "IM OUTTA YR <loop>".
+1, -1 More stuff to type...
"DIAF" is deprecated in favor of "BYES".
+1 Never understood what DIAF was anyways
---
Comments are welcome. Once again, this isn't supposed to serve as an official spec, but as something unofficial with the less controversial extensions so that we implementors have something to be getting on with.
Enough comments?
Oh, if I can sign it, I do ![]()
Signed,
Zenix
Offline
Arachnid wrote:
"HAI" is now defined as "HAI [(TO|2) <version>]". Version is alphanumeric. The 1.0 reccommendation is "1.0" and this unofficial spec is "IRCSPECZ". If a compiler encounters a "HAI" with no version, it should attempt to compile it using the most recent/complete spec it knows. If it encounters a version it is familiar with, it should attempt to compile it as that version. If it encounters a version it is not familiar with, it should return an error and exit.
+1
"IZ" now permits any number of "MEBBE [IZ] <condition>" blocks, each introducing an 'else if' block. These come after the 'YARLY' block and before the 'NOWAI' block.
+1
The "YR" and "UR" keywords are treated as synonyms (they're used interchangeably by many people).
+1
GTFO is deprecated. (It was never actually in 1.0, but it's commonly used as if it is)
/shrug
ENUF is introduced, serving the same purpose as GTFO. It can optionally take the name of the loop to exit: "ENUF [[OV [YR|UR]] <loopname> ]".
/shrug
MOAR is introduced, serving as a 'continue' statement. It optionally takes the name of the loop to exit, with the same syntax as ENUF.
+1
A switch statement is introduced. This takes the form:
Code:
WTF [IZ] <condition>? { OMG <literal> [!] <statements>} [ OMGWTF [?] <statements> ] KTHXExecution implicitly falls through from one "OMG" to the next until it hits an "ENUF", at which point it exits the switch statement. However, if a non-empty "OMG" block has no "ENUF" statement at the end, the compiler/interpreter should emit a warning to that effect.
+1 but don't like KTHX
BTW is 'officially' the comment keyword (in this unofficial spec).
+1
"KTHX" to terminate loops is deprecated in favor of the old (and more flavorsome) "IM OUTTA YR <loop>".
+1
"DIAF" is deprecated in favor of "BYES".
-1
Signed,
Greg/bornyesterday
BTW what is the IRC channel information?
Offline
zenix wrote:
I'm confused, if KTHX is depreciated, why use it in the example?
It's deprecated for loops, but it doesn't make sense to use "IM OUTTA YR <label>" for switch statements or IFs. Until we can agree on something more flavorsome, KTHX is it.
The irc channel is #lolcode on irc.freenode.net.
Offline
Church's Bathroom Spec.
We the undersigned, being of minimal mind and/or patience, have hereby decided amongst my^H^H ourselves upon some extensions to 1.0 so that we may bigfoot our implementations.
Herein the proposals:
GTFO is deprecated. (It was never actually in 1.0, but it's commonly used as if it is. And we can't have that.)
Oh, don't worry your heads about it. I've got it all under control.
---
The Bathroom channel is #backroom on second.floor.can't.miss.it
Offline
Church wrote:
Church's Bathroom Spec.
We the undersigned, being of minimal mind and/or patience, have hereby decided amongst my^H^H ourselves upon some extensions to 1.0 so that we may bigfoot our implementations.
Herein the proposals:
GTFO is deprecated. (It was never actually in 1.0, but it's commonly used as if it is. And we can't have that.)
Oh, don't worry your heads about it. I've got it all under control.
---
The Bathroom channel is #backroom on second.floor.can't.miss.it
If there's something you don't like about this, feel free to say instead of giving sarcastic commentary. Given that there are a bunch of implementors out there with little to do, and a bunch of proposals that most are in agreement over, and given that we're prepared to change what we implement when 1.1 is decided upon, should we have simply sat around doing nothing? Or all picked different features with slightly different syntax to work on while we wait?
Offline
Arachnid wrote:
If there's something you don't like about this, feel free to say instead of giving sarcastic commentary. Given that there are a bunch of implementors out there with little to do, and a bunch of proposals that most are in agreement over, and given that we're prepared to change what we implement when 1.1 is decided upon, should we have simply sat around doing nothing? Or all picked different features with slightly different syntax to work on while we wait?
I think that's the problem. There are implementors itching to get cracking. That's understandable, but we should focus on the language first. This is part of the reason I've been advocating deciding what the spec would encompass before deciding on the particulars.
And, yeah, sarcasm isn't helpful. Sorry about that.
Offline
-1 to MOAR as continue. Continue blatantly needs to be PROCEED
Offline
Arachnid wrote:
ENUF is introduced, serving the same purpose as GTFO. It can optionally take the name of the loop to exit: "ENUF [[OV [YR|UR]] <loopname> ]".
I more or less agree with everything else you said, but this especially is awesome.
+1 ENUF OV YR [loopname]
+1 BYES... I didn't like DIAF very much.
Offline
Heliomance wrote:
-1 to MOAR as continue. Continue blatantly needs to be PROCEED
+1
Last edited by Leo Natan (2007-06-09 21:22:57)
Offline
Arachnid wrote:
A switch statement is introduced. This takes the form:
Code:
WTF [IZ] <condition>? { OMG <literal> [!] <statements>} [ OMGWTF [?] <statements> ] KTHXExecution implicitly falls through from one "OMG" to the next until it hits an "ENUF", at which point it exits the switch statement. However, if a non-empty "OMG" block has no "ENUF" statement at the end, the compiler/interpreter should emit a warning to that effect.
Why on earth must execution fall through from OMG to OMG? I can think of no sane reason that this should be so, or that anyone might want this, other than "it was in C". (BTW, the only reason it was in C is that it can be compiled down to some damn fast assembly language, not for elegance-of-language reasons)
This is going to bite n00bs. +1 everything else though, and +1 for this if OMGs stop execution at the next OMG.
Offline
randomity wrote:
Why on earth must execution fall through from OMG to OMG? I can think of no sane reason that this should be so, or that anyone might want this, other than "it was in C". (BTW, the only reason it was in C is that it can be compiled down to some damn fast assembly language, not for elegance-of-language reasons)
This is going to bite n00bs. +1 everything else though, and +1 for this if OMGs stop execution at the next OMG.
Because without fall-through, a switch statement is just a glorified series of if-else statements. There are many situations in which you want to have several different cases execute the same code, and without fall-through on a switch, the only way to do that is by repeating yourself or with a huge multi-condition if statement. There's a reason every language that has switch allows fall-through.
This has also been hashed out thoroughly on the thread about the WTF statement.
Offline
On further thought, I'm going to have to -1 the whole idea of an official unofficial spec.
What I see happening is, we now have 2 parallel "official" means of developing the language. One, through the forums and another with these "unofficial" recommendations and specs that then get included in implementations.
So, if a developer has got decisions made, especially ones that they might particularly like, there's little to no motivation to participate or drive the "standard" decision making process.
I would rather see these things take the form of Proposals for Vote & put in the voting forum for v1.2 than have them languish here as tacitly accepted decisions about the future of the language.
If you stand behind some of these things, break them down into individual topics, post 'em up, let people talk about them, gather info, create a proposal, & have a vote. If this were done, we'd have this all as part of the language by v1.2 (end of June!), rather than just the little pieces of crap we've voted on so far. Implementors would be more apt to sign-off on proposals to get them to vote, just so they'd have something to implement, rather than moving forward coding something that will likely change anyway.
I agree that you want to implement something. I'm with you on that. So, go ahead and post something on your development web page that says "This is how I plan to handle this sort of stuff." You gotta, if you want to move forward. But, if you want to introduce them to the rest of the group, take them and put them through the system.
So, no, I believe this is a bad idea and should not continue.
Thanks,
Peter
Offline
Actually, now that I re-read it, the whole idea that you are deprecating things for flavor reasons indicates that this is not just a "stopgap" measure, but a full-on development of the language. DIAF and BYES do the same thing. Why not just leave it at DIAF until an official decision is made? Or, if you want it to be BYES, why not create a proposal and make it so officially?
Peter
Offline
risser wrote:
On further thought, I'm going to have to -1 the whole idea of an official unofficial spec.
What I see happening is, we now have 2 parallel "official" means of developing the language. One, through the forums and another with these "unofficial" recommendations and specs that then get included in implementations.
So, if a developer has got decisions made, especially ones that they might particularly like, there's little to no motivation to participate or drive the "standard" decision making process.
As stated in the original topic, we intend to conform to the official specs - this is merely a stopgap measure 'while we wait'. Nobody - to the best of my knowledge - is going to conform to LOLSPECZ and ignore the official specs - LOLSPECZ will be obsoleted by 1.1.
I would rather see these things take the form of Proposals for Vote & put in the voting forum for v1.2 than have them languish here as tacitly accepted decisions about the future of the language.
If you stand behind some of these things, break them down into individual topics, post 'em up, let people talk about them, gather info, create a proposal, & have a vote. If this were done, we'd have this all as part of the language by v1.2 (end of June!), rather than just the little pieces of crap we've voted on so far. Implementors would be more apt to sign-off on proposals to get them to vote, just so they'd have something to implement, rather than moving forward coding something that will likely change anyway.
The items for LOLSPECZ were almost entirely taken from proposals that seemed to have relatively little controversy for what we felt were the most egregious omissions from 1.0. Eg, those features that were going to end up in the language anyhow. We didn't want to wait for the whole excruitatingly slow standards process before we could do anything, so we accepted as a caveat that we may have to change our compilers when we have an official spec to work from.
I agree that you want to implement something. I'm with you on that. So, go ahead and post something on your development web page that says "This is how I plan to handle this sort of stuff." You gotta, if you want to move forward. But, if you want to introduce them to the rest of the group, take them and put them through the system.
The only difference between that and this is that with IRCSPECZ, a bunch of developers have agreed on the same things, rather than us all going different directions while we wait. It also benefits users, since I'm sure there are those out there hankering to use a more complete language.
Offline
-1 MOAR for continue.
+1 PROCEED for continue.
+1 MOAR for incrementation.
-1 unofficial spec. It is not hard* to change the keywords around after building an implementation. What's the big deal?
* Edit: Actually it's trivial.
Last edited by superjer (2007-06-12 21:01:14)
Offline
superjer wrote:
-1 unofficial spec. It is not hard* to change the keywords around after building an implementation. What's the big deal?
* Edit: Actually it's trivial.
Erm, that's the whole point: We picked features we expected to appear in LOLCode and agreed on a common way of implementing them so we could get some work done, with a minimum of changes later. As you point out, it's easy to change, so it'll be easy to conform to the official spec, once we have one that covers those features.
Offline
When we did it, most of the proposals weren't up to vote yet, so we could hardly go with what was winning. They were being discussed, though, we perceived general agreement that the features were going to be there in some form or another, so we said "how about x?" and implemented it that way, secure in the knowledge that however they ended up being specified, the change would be relatively simple.
Offline
Forgive me, I was cranky.
It happens to the best of us.
Offline
I have a quick comment that probably won't get read about this whole forum proposal process and what you Forum only kiddies keep telling us implementers. Actually, a few comments.
1) Without us, you have nothing. Keep us bored long enough, and we'll leave and play with some other fun toy. This is not a threat or me feeling self-important, it's just the way life is.
2) When we post things as proposals (like you CONSTANTLY keep telling us to do when you don't like what we've done), if they aren't contentious enough, people ignore them and they never get their non-implementer signoff (or implementer signoff, because they fall to the bottom of the index) and thus never get to a vote (and by induction, never make it to rec/spec). When things get decided on IRC, they have plenty of implementer approval, but no approval from the forum people, so when they get here they get shot down and if a vote is proposed, you say it didn't satisfy the requirements and ignore it anyway.
3) The implementers know what they're talking about. People don't sign on the channel and make decisions or votes that go into or really influence our irc-generated recommendations. There is no accountability here on the forum, there is no motivation to have read the topics before you vote, and there is no incentive to peruse all of the previous threads to avoid rehashing things that have already been discussed. And on forums, people HATE having a long post ignored or cast aside, because they spent a long time typing it. On IRC, you get told really fast if you missed the big discussion and they've moved on, and/or that your idea has been accepted/rejected/proposed already and here is the biggest reason why. Multi-player notepad is better, in my opinion, than a wall full of post-it notes.
[edit] It's late. Spelling mistakes. There are probably more.
Last edited by etherealflaim (2007-06-14 05:11:13)
Offline
etherealflaim wrote:
1) Without us, you have nothing.
Well, they have YACC and similar tools, right. Creating a simple parser or compiler doesn't exactly require a computer science degree -it's about the most basic programming you can do.
An optimized or feature-rich compiler, debugger, and IDE on the other hand are a different matter...
Offline