Yeah I have read it. Multiple times, since I forget things and I still 
don't remember all the things.

So basically the difference is that bitwise operators are functions. That 
means its arguments get evaluated before they are passed in. That also 
means, that if that function would be inlined, && would be same as & 
because:

&(x::Bool, y::Bool) = box(Bool,and_int(unbox(Bool,x),unbox(Bool,y)))
I dont really understand that function, since I dont know what box, unbox 
is, but I guess it is something like 
&(x::Bool, y::Bool) = x && y
so if & would be inlined before x, y are evaluated, than && and & would 
have identical meaning ( for booleans ), right?

I was trying to achieve that with @generated, but it didn't work.
function x()
    println("x")
    true
end
function y()
    println("y")
    false
end
@generated and_gen(x::Bool, y::Bool)
    return :(x && y)
end

and_gen(y(), x())

y
>
x
>
false
>

Which is kinda weird, since x and y always returns Bool, so @generated 
should know types of x() and y() before their evaluation. 
and_gen(y()::Bool, x()::Bool) # also doesn't work




On Monday, May 30, 2016 at 1:19:05 PM UTC+2, Tamas Papp wrote:
>
> See 
>
>
> http://docs.julialang.org/en/release-0.4/manual/control-flow/#man-short-circuit-evaluation
>  
>
> A lot of effort went into writing and improving the language manual, so 
> that you can find very detailed answers to questions like this one. It 
> is fine to ask on the list if you can't find it, but giving the whole 
> manual a read is very useful for new users of Julia. 
>
> On Mon, May 30 2016, Ford Ox wrote: 
>
> > Ye I know what bitwise operator does. 
> > I will ask in different way, maybe it will be clearer to you. 
> > 
> > Why people use logical operators ( f.e. in conditions ) instead of 
> bitwise 
> > operators? Is && <: & ? 
> > 
> > 
> > On Monday, May 30, 2016 at 9:58:02 AM UTC+2, Kaj Wiik wrote: 
> >> 
> >> 
> >> Here's a clue: 
> >> 
> >> 
> >> julia> 0b10010011 & 0b10010011 
> >> 0x93 
> >> 
> >> julia> 0b10010011 && 0b10010011 
> >> ERROR: TypeError: non-boolean (UInt8) used in boolean context 
> >> 
> >> 
> >> Kaj 
> >> 
> >> 
> >> On Monday, May 30, 2016 at 9:30:22 AM UTC+3, Ford Ox wrote: 
> >>> 
> >>> For example 
> >>> true & false == true && false 
> >>> 
> >>> Is it just artifact from c where bool types don't exist? 
> >>> 
> >> 
>

Reply via email to