修订版 | c20bcb7f8b322ca0290afe83f0f5df516c83cbd9 (tree) |
---|---|
时间 | 2023-01-01 23:49:29 |
作者 | Albert Mietus < albert AT mietus DOT nl > |
Commiter | Albert Mietus < albert AT mietus DOT nl > |
numbered Heisenbug-Blog
@@ -1,43 +0,0 @@ | ||
1 | -.. include:: /std/localtoc.irst | |
2 | - | |
3 | -.. _Castle-Heisenbug: | |
4 | - | |
5 | -====================== | |
6 | -Heisenbug (start/DRAF) | |
7 | -====================== | |
8 | - | |
9 | - | |
10 | -.. post:: | |
11 | - :category: CastleBlogs, Castle DesignStudy | |
12 | - :tags: Castle, DRAFT | |
13 | - | |
14 | - In Castle, one can dynamically connect components and send “events” over those connections. Typically this is done as | |
15 | - an action on an incoming message (see: :ref:`CCC-Actors`). Depending on ‘:ref:`TheMachinery`’, those events can be | |
16 | - queued and result in a beautiful Heisenbug. | |
17 | - | |
18 | - Before we give a simple example, let’s explain the Heisenbug first. | |
19 | - |BR| | |
20 | - Later, we continue with a generic solution (todo:-) | |
21 | - | |
22 | - | |
23 | -What is e Heisenbug? | |
24 | -======================= | |
25 | - | |
26 | -The heisenbug is named to Werner Heisenberg, who described the “observer effect”: when you look closely, the behavior | |
27 | -changes. The same can happen to software (bugs). The behavior apparently changes when you study -or slightly adjust- | |
28 | -that code. Often this is due (small) changes in timing; possibly even in generated code. Therefore old (oldfashioned), | |
29 | -sequential code on slow CPU’s is less likely to have heisenbugs then concurrent code on fast multi-core systems. It’s | |
30 | -also common in threaded programs. | |
31 | - | |
32 | -The sieve goes wrong | |
33 | --------------------- | |
34 | - | |
35 | -Also my standard Caste demo ‘Sieve of Eratosthenes’ can suffer from this issue. The initial version did work for years, | |
36 | -and failed horrible when another “machinery” was used. | |
37 | - | |
38 | - | |
39 | - | |
40 | - | |
41 | - https://en.wikipedia.org/wiki/Heisenbug | |
42 | - | |
43 | -.. LocalWords: heisenbugs, heisenbug |
@@ -0,0 +1,43 @@ | ||
1 | +.. include:: /std/localtoc.irst | |
2 | + | |
3 | +.. _Castle-Heisenbug: | |
4 | + | |
5 | +====================== | |
6 | +Heisenbug (start/DRAF) | |
7 | +====================== | |
8 | + | |
9 | + | |
10 | +.. post:: | |
11 | + :category: CastleBlogs, Castle DesignStudy | |
12 | + :tags: Castle, DRAFT | |
13 | + | |
14 | + In Castle, one can dynamically connect components and send “events” over those connections. Typically this is done as | |
15 | + an action on an incoming message (see: :ref:`CCC-Actors`). Depending on ‘:ref:`TheMachinery`’, those events can be | |
16 | + queued and result in a beautiful Heisenbug. | |
17 | + | |
18 | + Before we give a simple example, let’s explain the Heisenbug first. | |
19 | + |BR| | |
20 | + Later, we continue with a generic solution (todo:-) | |
21 | + | |
22 | + | |
23 | +What is e Heisenbug? | |
24 | +======================= | |
25 | + | |
26 | +The heisenbug is named to Werner Heisenberg, who described the “observer effect”: when you look closely, the behavior | |
27 | +changes. The same can happen to software (bugs). The behavior apparently changes when you study -or slightly adjust- | |
28 | +that code. Often this is due (small) changes in timing; possibly even in generated code. Therefore old (oldfashioned), | |
29 | +sequential code on slow CPU’s is less likely to have heisenbugs then concurrent code on fast multi-core systems. It’s | |
30 | +also common in threaded programs. | |
31 | + | |
32 | +The sieve goes wrong | |
33 | +-------------------- | |
34 | + | |
35 | +Also my standard Caste demo ‘Sieve of Eratosthenes’ can suffer from this issue. The initial version did work for years, | |
36 | +and failed horrible when another “machinery” was used. | |
37 | + | |
38 | + | |
39 | + | |
40 | + | |
41 | + https://en.wikipedia.org/wiki/Heisenbug | |
42 | + | |
43 | +.. LocalWords: heisenbugs, heisenbug |