rfc:ripples
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:ripples [2013/10/30 10:13] – [Proposal] krakjoe | rfc:ripples [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 22: | Line 22: | ||
try { | try { | ||
- | while (($buffer = $socket-> | + | while (($buffer = $transcoder-> |
} | } | ||
- | } catch (SocketTranscodeException | + | } catch (DataDecodeException |
| | ||
} | } | ||
- | } catch (SocketReadException $sex) { | + | } catch (SocketReadException $sre) { |
} | } | ||
} | } | ||
- | } catch (SocketDisconnectedException $se) { | + | } catch (SocketDisconnectedException $sde) { |
} | } | ||
Line 52: | Line 52: | ||
Warnings have an even bigger problem in that they do not affect your code //at all//; you only see them during development, | Warnings have an even bigger problem in that they do not affect your code //at all//; you only see them during development, | ||
- | What constitutes a warning currently, does not necessarily constitute an exception; take the arbitrary example of a socket timeout, | + | Our code can only detect |
- | But our code can only detect such conditions deductively by extrapolating it from the current state of the program; inferring | + | What constitutes a warning currently, does not necessarily constitute an exception; take the arbitrary example |
So, that's warnings, they don't affect anything in any useful way and cause us to undertake more work than is necessary. | So, that's warnings, they don't affect anything in any useful way and cause us to undertake more work than is necessary. | ||
Line 60: | Line 60: | ||
===== Proposal ===== | ===== Proposal ===== | ||
- | A //Ripple// will encapsulate or describe conditions on the scale from warning to exception, a //dam// will deal with those conditions and, if no exceptions/ | + | A //Ripple// will encapsulate or describe conditions on the scale from warning to exception, a //dam// will deal with those conditions and, if no exceptions/ |
<code php> | <code php> | ||
try { | try { | ||
- | do { | + | while ($socket-> |
- | | + | |
- | drop new SocketDisconnectRipple($socket); | + | |
- | } | + | |
- | + | ||
try { | try { | ||
- | + | $data = $socket-> | |
- | if (!($data = $socket-> | + | |
- | drop new SocketReadRipple($socket); | + | |
- | } | + | |
- | + | ||
try { | try { | ||
- | while (($buffer = $socket-> | + | while (($buffer = $transcoder-> |
} | } | ||
- | } catch (SocketTranscodeException | + | } catch (DataDecodeException |
/* this is exceptional */ | /* this is exceptional */ | ||
/* nothing can be done to recover execution */ | /* nothing can be done to recover execution */ | ||
} | } | ||
- | + | } dam (SocketReadRipple $sr) { | |
- | } dam (SocketReadRipple $sex) { | + | |
- | /* possibly $socket-> | + | |
} | } | ||
- | + | } | |
- | } while ($socket-> | + | } dam (SocketDisconnectRipple $sd) { |
- | + | ||
- | } dam (SocketDisconnectRipple $se) { | + | |
- | + | ||
} | } | ||
</ | </ | ||
- | The flow of this program could be described as fragmented, but it is *not* broken, execution | + | Dropping ripples may look like: |
+ | |||
+ | <code php> | ||
+ | /* ... */ | ||
+ | drop new SocketReadRipple($this); | ||
+ | /* ... */ | ||
+ | </ | ||
+ | |||
+ | The flow of this program could be described as fragmented, but it is //not// broken, execution | ||
+ | |||
+ | We throw exceptions to be caught, unconditionally altering the flow of execution; we can drop ripples to be dammed, allowing execution to recover. | ||
===== Backward Incompatible Changes ===== | ===== Backward Incompatible Changes ===== | ||
Line 133: | Line 133: | ||
Do we have in ripples a viable replacement for warnings and notices ? | Do we have in ripples a viable replacement for warnings and notices ? | ||
- | ===== Proposed Voting Choices | + | ===== Preempted Opinions |
* You are crazy | * You are crazy |
rfc/ripples.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1