Execute SNUSP/D: Difference between revisions

m
Fixed syntax highlighting.
m (changed, _join_ state of new thread thread should be inherited from original thread)
m (Fixed syntax highlighting.)
 
(6 intermediate revisions by 5 users not shown)
Line 1:
{{implementation|SNUSP}}{{collection|RCSNUSP}}[[Category:D]]
 
This [[D]] implementation supports commands from all the three SNUSP variants, as described on the [http[eso://esolangs.org/wiki/SNUSP |Esolang SNUSP page]], plus an extended mode, '''SUPERNATURAL'''.
 
'''SUPERNATURAL Mode''':
Line 7:
#Read the char in current code pointer as input, assign it to memory currently pointed to by memory pointer.
*'''* : join and wait tasks''' (telepathy):
#A task ishas initializeda asstate property of free-state/join/wait;
#A task is by default initialized as free-state;
::*#The splited new thread inherites free/join/wait-state from the old thread.;
#When a free-state task first executes this '''*''' command, the task enters into a join-state;
#Then if a join-state task executes another '''*''' command, the task enters into a wait-state;
#A wait-state task stops its execution, and waits until all alive join-state tasks are inturning into a wait-state, which then all these wait-state tasks are return to free-state;
#This command enables global synchronization of the tasks.
#Difference to original specification:
Line 16 ⟶ 18:
::*In this implementation, the order of execution is first-created-first-executed;
::*The original specification specifies that ''(&)SPLIT''-ed old thread skips the immediate code (see below a->b->c->d example), which may lead to anti-intuition codes (which is good for an esoteric language :). This implementation retain old-thread-skips-immediate-code behavior in ''BLOATED'' mode, but new-thread-skips-immediate-code in ''SUPERNATURAL'' mode ( A->B->C->D example). 1->2->...->8 is thread creation order in ''SUPERNATURAL'' mode.
:::<codett style="line-height: 1em;">$*&\==&\:&\:&\:=\<br>&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;~&nbsp;&nbsp;~&nbsp;&nbsp;~&nbsp;&nbsp;~&nbsp;&\=>&nbsp;new(B)<br>&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;2A&nbsp;3B&nbsp;4C&nbsp;5D&nbsp;&nbsp;\=>&nbsp;old(A)<br>&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;\=!\=!\=!\===*..=.#<br>&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;/=!/=!/=!/===*.=.=.#<br>&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;1b&nbsp;6c&nbsp;7d&nbsp;8a&nbsp;&/\=>&nbsp;old(a)<br>&nbsp;&nbsp;&nbsp;;&nbsp;&nbsp;&nbsp;~&nbsp;&nbsp;~&nbsp;&nbsp;~&nbsp;&nbsp;~&nbsp;&nbsp;/\=>&nbsp;new(b)<br>&nbsp;&nbsp;&nbsp;\==&/;&/;&/;=/&nbsp;&nbsp;<br></codett>
*'''^ : wrapwarp''' (teleport):
::*The splited new thread inherites free/join/wait-state from the old thread.
*'''^ : wrap''' (teleport):
#The code pointer will bounce back to the code space boundary in its reverse direction;
#then forward and stop after the first '''^''' it encounter in normal direction.
#Example :
<d>module snud ;
:::==a^A&lt;=cp==B^==&lt;=C^==
::when the code pointer cp heading into A's^, next turn, the code pointer will be in C. if no such ^ in the reverse direction, the code pointer will be in ''a'' next turn.
<syntaxhighlight lang="d">module snud ;
private import std.string, std.random ;
 
Line 206 ⟶ 210:
private char[char] acceptCmd ;
private uint Id = 0 ;
}</dsyntaxhighlight>
Sample SNUSP using a console io :
<syntaxhighlight lang="d">module rcsnusp ;
import snud ;
import std.stdio, std.file, std.conv ;
Line 259 ⟶ 263:
 
return result ;
}</dsyntaxhighlight>
9,485

edits