News for hackers. Stuff that matters.
Re:Bloom Programming Language by wruza on Friday May 11, 2018 @05:01PM (#17050778)
I think I don’t understand something important from your explanation, since I still can’t see how gp comment’s loop is possible in Bloom. Not even “possible”, but how it is implemented to be predictable and ever halting.

More realistic example could be an invoice row with a tax or discount, where (discount / (price + discount)) != discount_percent, due to .00 rounding and ieee754 problems in general. How do such systems solve these disrepancies? Is stop point arbitrary or controllable?

edit: i.e. 3% of 11.99 = 0.3597, which is 0.0003 off from 0.36

Re:Bloom Programming Language by sriram_malhar on Friday May 11, 2018 @05:42PM (#17050978)
Recall that in Bloom, dataflow operations are on tables (B1 and C1). It makes no sense to add 1 to a table.

But you can add another set. Say the rules are

B = C + D

C = B + E

where each of these are tables, and + represents union. If you change D (add 1 row), then B will get that row. In turn C will get that row (second rule). Now the computation stops because C has nothing to give B that it doesn't already have. In effect, B and C will always have all of D and E.

A fix point is when things have stopped changing. When it comes to floating point (fixed points vs fix points!), one can have an epsilon beyond which all changes are deemed negligible. If that epsilon has more precision than you need, you have a deterministic answer. Bloom does not implement that out of the box, but you can implement your own lattice types to fit into the system.

Re:Bloom Programming Language by pfraze on Friday May 11, 2018 @06:04PM (#17051070)
That mostly makes sense so I apologize if this is pedantic, but:

Is it not possible for a set to have logically infinite sets in Bloom? For instance, "the set of all integers" ? If so, how does it determine the limits of set sizes - is it connected to bit counts? Eg, "The set of all 8bit integers" ?

Re:Bloom Programming Language by russell_sears on Saturday May 12, 2018 @12:46PM (#17054845)
You can guarantee termination by limiting bit precision, but it is more interesting to limit the set of operators your program uses instead.

For instance, you might have an operator that translates from hostname to IPv4 address.

That function can return billions of different numbers, but if your program’s input only has 10 hostnames in it (and you don’t use string manipulation or other tricks to fabricate hostnames) then you can infer that the IP lookup function only adds 10 new symbols to the sets that your program maintains.

Searching for “herbrand universe” will produce formal writeups of these ideas.

Re:Bloom Programming Language by sriram_malhar on Saturday May 12, 2018 @12:35PM (#17054800)
No, not in Bloom. The sets must be finite.

There is one aspect that is infinite, which is along the time axis. But the way the logic works is that you are never in a position to enumerate all possible behaviours. This is a very superficial answer, and perhaps you'll gain more insight from this paper on the logical semantics:

Dedalus: Datalog in Time and Space.

https://www2.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-...