Re: Call to Action: making Phobos @safe
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"?
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"?
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"?
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
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
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!