Don't get sidetracked by the implementation. Also, inlining has nothing
to do with it.

& is a function, && is a control flow construct. The only way you could
replicate && and || is with a macro, such that

a && b

would get expanded to something like

if a
    b
else
    false
end

But of course syntax restricts you from doing that (macros start with
@), so you have them in Julia as primitives.

Best,

Tamas

On Mon, May 30 2016, Ford Ox wrote:

> 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