Re: Call to Action: making Phobos @safe

2016-06-26 Thread Smoke Adams via Digitalmars-d

On Saturday, 25 June 2016 at 22:44:37 UTC, Walter Bright wrote:
Andrei identified a key blocker for D adoption is the 
incomplete implementation of @safe. I'm working on the compiler 
end. But Phobos has a lot of code that is pointlessly not 
@safe, making it frustrating to write @safe code that calls 
Phobos. Some are listed in Bugzilla, most are not.


[...]



How hard would it be to add a compiler switch, similar to -vgs 
that shows every non-safe function? This would not just help out 
with phobos.




Re: Should % ever "overflow"?

2016-06-25 Thread Smoke Adams via Digitalmars-d

On Sunday, 26 June 2016 at 03:54:28 UTC, deadalnix wrote:

On Sunday, 26 June 2016 at 02:05:53 UTC, "Smoke" Adams wrote:

On Sunday, 26 June 2016 at 00:31:29 UTC, deadalnix wrote:
On Saturday, 25 June 2016 at 23:01:00 UTC, "Smoke" Adams 
wrote:

This proves nothing.



This isn't a proof, this is a definition. This is the 
definition that is used by all programming languages out 
there and all CPUs. It isn't going to change because someone 
on the internet think he has a better definition that provide 
no clear advantage over the current one.


Again, no proof at all


Either can't read or you can't think. Which is it ?

and inaccurate. Not every programming language or cpu does 
this. Please don't make up facts to support your "definitions" 
and desires. Having a negative modulo is just ignorant.


Languages:
C#: https://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx
Java: 
https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17.3
C11: 
http://www.open-std.org/jtc1/sc22/wg14/www/docs/C99RationaleV5.10.pdf (See 6.5.5 for update on % operator, mentioning, example at 7.20.6).

Python2: https://docs.python.org/2/reference/expressions.html
Python3: https://docs.python.org/3/reference/expressions.html

CPUs:
Arm7(eeabi): 
https://github.com/wayling/xboot-clone/blob/master/src/arch/arm/lib/gcc/__aeabi_idivmod.S
Arm7(Darwin): 
http://opensource.apple.com//source/clang/clang-163.7.1/src/projects/compiler-rt/lib/arm/modsi3.S
Mips: 
http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html 
(See DIV instruction)

X86: http://x86.renejeschke.de/html/file_module_x86_id_137.html

Now I'm sure there are a weird CPU that isn't produced since 
the 80s and that D will never support that do it in some other 
way, but for all platforms that matter today, this isn't the 
case.


This is not MY definition, this is the definition everybody 
except you uses? Even PHP get this right 
(http://php.net/manual/en/language.operators.arithmetic.php).


Now champion, what do you have supporting your definition ?


Your a moron. I guess you think just because everyone believes in 
Santa Clause it means he exists?


http://mathworld.wolfram.com/Congruence.html
https://en.wikipedia.org/wiki/Modulo_operation
https://en.wikipedia.org/wiki/Modular_arithmetic
http://stackoverflow.com/questions/1082917/mod-of-negative-number-is-melting-my-brain
https://www.securecoding.cert.org/confluence/pages/viewpage.action?pageId=6422581
http://www.mathworks.com/help/matlab/ref/mod.html?requestedDomain=www.mathworks.com

It's one thing to claim that the sign of the modulo is the same 
as the sign of the divisor, but entirely different to claim the 
modulo should be negative.


Of course, I don't expect a neanderthal like yourself to 
understand that. Have fun lemming.


Oh, hey, I'm going to define that your an idiot! Thanks for 
agreeing with me.




Re: Should % ever "overflow"?

2016-06-25 Thread Smoke Adams via Digitalmars-d

On Sunday, 26 June 2016 at 00:31:29 UTC, deadalnix wrote:

On Saturday, 25 June 2016 at 23:01:00 UTC, "Smoke" Adams wrote:

This proves nothing.



This isn't a proof, this is a definition. This is the 
definition that is used by all programming languages out there 
and all CPUs. It isn't going to change because someone on the 
internet think he has a better definition that provide no clear 
advantage over the current one.


Again, no proof at all and inaccurate. Not every programming 
language or cpu does this. Please don't make up facts to support 
your "definitions" and desires. Having a negative modulo is just 
ignorant.






Re: Should % ever "overflow"?

2016-06-25 Thread Smoke Adams via Digitalmars-d

On Friday, 24 June 2016 at 20:43:38 UTC, deadalnix wrote:
On Friday, 24 June 2016 at 20:33:45 UTC, Andrei Alexandrescu 
wrote:
In a checked environment, division may "overflow", e.g. -6 / 
2u must be typed as uint but is not representable properly one.


How about remainder? I suppose one can make the argument that 
remainder should never overflow (save for rhs == 0), because 
it could be defined with either a positive or negative 
denominator (which is not part of the result).


What's the most reasonable behavior?


Andrei


Most reasonable is

numerator = quotient * divisor + remainder

Which means it can be negative.


This proves nothing.

Wiki:

For a ***positive integer n***, two integers a and b are said to 
be congruent modulo n, written:


a ≡ b ( mod n ) , {\displaystyle a\equiv b{\pmod {n}},\,} 
a\equiv b{\pmod {n}},\,


if their difference a − b is an integer multiple of n (or n 
divides a − b). The number n is called the modulus of the 
congruence.



For any "negative" remainder, all one has to do is subtract one 
from the divisor:


quotient*(divisor - 1 + 1) + remainder
= quotient*new_divisor + pos_remainder

where new_divisor = divisor - 1, pos_remainder = quotient + 
remainder


There are problems with allowing the remainder to be negative and 
it is generally best to restrict it to positive values.


e.g., 129 = 2*52 + 25 OR 3*52 - 27.

In the second case, we have 129/52i = 3? Basically by restricting 
to positive integers, we have a more natural interpretation and 
relationship to floor and ceil functions and we don't have to 
worry about it being negative(think of using in in an array 
indexing scheme),







Re: Please rid me of this goto

2016-06-24 Thread Smoke Adams via Digitalmars-d

On Friday, 24 June 2016 at 03:22:11 UTC, Timon Gehr wrote:

On 24.06.2016 04:36, Smoke Adams wrote:



You do realize that e^(-1/t)^t is a counter example?

e^(-1/t) -> 0 as t -> 0
t -> 0 as t -> 0



That's not a counterexample to anything I said. ^ is 
discontinuous at (0,0) and indeed, you can force the limit to 
an arbitrary value by choosing the two expressions the right 
way. That's clear.


but e^(-1/t)^t does not -> 1 as t-> 0, which is obvious since 
it/s 1/e.


So, We can define 0^0 = 1 and maybe that is better than 2, but 
it is
arbitrary in the sense that it's a definition. It may bear 
fruit but it

is not necessarily meaningful.
...


It's meaningful in those cases where you want to use 0^0, and 
otherwise just don't use it.


Suppose a person is running some numerical simulation that 
happens to be
computing an a value for an equation that is essentially based 
on the

above.


Then the numerical simulation is inherently broken. a^b takes 
on any arbitrary non-negative value in an arbitrary small 
region around (0,0) and is undefined at many points in such a 
region. (BTW: It would be fine with me if 0.0^^0.0 was NaN -- 
that's a completely different case than the one at hand: pow on 
integers.)




... break the laws of physics by
arbitrarily defining something to be true when it is not.
...


Utter nonsense. (Also note that the 'laws of physics' typically 
give rise to piecewise analytic functions, and if you only 
consider analytic functions, 0 ^ 0 = 1 is actually the right 
answer.)


Please, it seems you only know enough about math and physics to 
get you into trouble.


1. do you realize that the "equations" of man are only 
approximations to the equations of life? Or do you really think 
gravity behaves exactly as 1/r^2?


Also, what about when r = 0? how do you propose to define it? Set 
it to 0? 1? -infinity? What's the solution here? Surely there is 
a non-arbitrary solution?



2. You hold way to much faith in man.  Math and Science are 
tools, tools are created, manipulated, updated, retooled, and 
used to make other tools.  Their only use is how well they work. 
They work quite well but we cannot prove how accurate they are. 
If you know about Godel, you would know that we can't even prove 
that we can't prove anything(which itself is meaningless).


3. What you are arguing is the convenience factor. Sometimes also 
known as the lazy factor. Just admit it and stop trying to prove 
that somehow god has made this choice.


4. An equation in math is just one form of the same abstract 
mathematical construct. Simply put: f(x) = x = sqrt(x)^2 = 
inv(cos(x)) =  All these types of identities can substituted 
in an equation to change it's form.


5. All forms are different. Obviously x != sqrt(x)^2 in all 
cases. Hence the transformations using identities are not 
actually equal in all cases: sqrt(x)^2 = x only for x >= 0.


6. Symbols are not absolute. They are mans creation and agreement 
on their meaning so they can be useful. x is just chicken scratch 
until everyone agrees on how to interpret it.


7. And this is where the problem lies. Assumptions can be deadly. 
They should only be made when they have to. Your argument about 
using integers only is nonsense because you have made the 
assumption that only integers will ever be used and also that the 
integers are not related to the real number case. Both of these 
are provably false.


e.g., Lets suppose that, for integers, we have PowI(x,y) and for 
reals, PowR(x,y).


Someone does

if (isInteger(x) && isInteger(y)
   return PowI(x,y);
else
   return PowR(x,y);

Why they might do this is immaterial.. I just did it, so it is 
possible. Maybe PowI is faster because of some type of new 
algorithm someone came up with.


8. The truth is the correct answer. The truth of the matter is, 
0^0 is undefined. Accept it, just because you don't like the 
answer doesn't give you the right to change it. This is the same 
belief many have in Santa Clause, the Tooth Fairy, Jesus Christ, 
etc. No proof they exist but they belief it and change the truth 
to match the result(which is anti-science, anti-math, and 
anti-logic, anti-progress, and anti-truth and ultimately 
anti-god).



It's one thing to argue the convenience factor, and this is ok 
but it should be well understood by everyone. The other is to 
argue that what you are saying is fact, and this is clearly 
demonstrably false. Arguing a special case, such as using only 
integers, is just as false because F => F is a false statement.


9. If you are using some other kind of logical system than the 
standard one that all of math and science is built on, then 
forgive me for being wrong... But you didn't state this from the 
beginning and I mistakenly assumed we were in the same reality.











Re: Please rid me of this goto

2016-06-23 Thread Smoke Adams via Digitalmars-d

On Friday, 24 June 2016 at 01:49:27 UTC, Timon Gehr wrote:

On 24.06.2016 02:14, H. S. Teoh via Digitalmars-d wrote:
On Fri, Jun 24, 2016 at 01:58:01AM +0200, Timon Gehr via 
Digitalmars-d wrote:

On 24.06.2016 01:18, H. S. Teoh via Digitalmars-d wrote:
On Thu, Jun 23, 2016 at 11:14:08PM +, deadalnix via 
Digitalmars-d wrote:

On Thursday, 23 June 2016 at 22:53:59 UTC, H. S. Teoh wrote:
This argument only works for discrete sets.  If n and m 
are reals,

you'd need a different argument.



For reals, you can use limits/continuation as argument.


The problem with that is that you get two different answers:

lim  x^y = 0
x->0

but:

lim  x^y = 1
y->0
...


That makes no sense. You want lim[x->0] x^0 and lim[y->0] 0^y.


Sorry, I was attempting to write exactly that but with ASCII 
art. No

disagreement there.


So it's not clear what ought to happen when both x and y 
approach 0.


The problem is that the 2-variable function f(x,y)=x^y has a
discontinuity at (0,0). So approaching it from some 
directions give
1, approaching it from other directions give 0, and it's not 
clear

why one should choose the value given by one direction above
another.  ...


It is /perfectly/ clear. What makes you so invested in the 
continuity

of the function 0^y? It's just not important.


I'm not.  I'm just pointing out that x^y has an *essential*
discontinuity at (0,0),


Which just means that there is no limiting value for that point.


and the choice 0^0 = 1 is a matter of
convention. A widely-adopted convention, but a convention 
nonetheless.
It does not change the fact that (0,0) is an essential 
discontinuity of

x^y.
...


No disagreement here. Nothing about this is 'arbitrary' though. 
All notation is convention, but not all aspects of notations 
are arbitrary.




[...]

not something that the mathematics itself suggest.
...


What kind of standard is that? 'The mathematics itself' does 
not
suggest that we do not define 2+2=5 while keeping all other 
function
values intact either, and it is still obvious to everyone 
that it

would be a bad idea to give such succinct notation to such an
unimportant function.


Nobody said anything about defining 2+2=5.  What function are 
you

talking about that would require 2+2=5?
...


There exists a function that agrees with + on all values except 
(2,2), where it is 5. If we call that function '+', we can 
still do algebra on real numbers by special casing the point 
(2,2) in most theorems, but we don't want to.


It's clear that 0^0=1 is a choice made by convenience, no 
doubt made to
simplify the statement of certain theorems, but the fact 
remains that

(0,0) is a discontinous point of x^y.


Yup.


At best it is undefined, since it's an essential discontinuity,


Nope. x=0 is an essential discontinuity of sgn(x) too, yet 
sgn(0)=0.



just like x=0 is an essential discontinuity of 1/x.


That is not why 1/0 is left undefined on the real numbers. It's 
a convention too, and it is not arbitrary.



What *ought* to be the value of 0^0 is far from
clear; it was a controversy that raged throughout the 19th 
century and

only in recent decades consensus began to build around 0^0=1.
...


This is the 21st century and it has become clear what 0^0 
should be. There is no value in discrediting the convention by 
calling it 'arbitrary' when it is not.



You do realize that e^(-1/t)^t is a counter example?

e^(-1/t) -> 0 as t -> 0
t -> 0 as t -> 0

but e^(-1/t)^t does not -> 1 as t-> 0, which is obvious since 
it/s 1/e.


So, We can define 0^0 = 1 and maybe that is better than 2, but it 
is arbitrary in the sense that it's a definition. It may bear 
fruit but it is not necessarily meaningful.


Suppose a person is running some numerical simulation that 
happens to be computing an a value for an equation that is 
essentially based on the above. Because of numerical rounding, 
lets suppose we end up with t = 0. At that moment the calculation 
goes haywire and destroys a spacecraft with 3 people on it. Those 
people have families and young children who end up growing up 
without a father and turn to crime


All because of some idiot who wanted to break the laws of physics 
by arbitrarily defining something to be true when it is not.


Seriously, your logic has severe consequences.  Just because 0^0 
looks like 1, it is far more complex than that and your tiny 
little brain can't comprehend them. First law of mathematics: 
Please don't kill people, computers can't program themselves and 
grants can't write themselves, nor can the IRS collect from dead 
people.


Please, Just say no to 0^0 = 1!

Luckily, it was only a stimulation and no one got hurt... this 
time!