# It is so nice to program in a sane language!

**URL:** https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227
**Category:** Offtopic
**Created:** [December 13, 2019, 10:41am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227 "2019-12-13T10:41:25Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)
#### Post date: [December 13, 2019, 10:41am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/1 "2019-12-13T10:41:26Z")

</div>

Just watched Gary Bernhardt’s “wat”. JavaScript:  
 ![image](https://global.discourse-cdn.com/julialang/original/3X/4/a/4a715eb20384d3b5ea7b0994038577367993cc43.png)  
It is so nice to work with a sane programming language  
rather than this lunacy!

---

<div class="post-metadata">

### Author: ![antoine-levitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/antoine-levitt/32/4008_2.png) [@antoine-levitt](https://discourse.julialang.org/u/antoine-levitt)
#### Post date: [December 13, 2019, 10:57am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/2 "2019-12-13T10:57:40Z")

</div>

Julia isn’t exactly immune to this kind of interesting behavior. What does

```julia
function g(a)
  if a
    f() = 2
  else
    f() = 3
  end
  return f
end

```

do? 🙂 ([disallow methods of local functions in different blocks · Issue #15602 · JuliaLang/julia · GitHub](https://github.com/JuliaLang/julia/issues/15602))

---

<div class="post-metadata">

### Author: ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)
#### Post date: [December 13, 2019, 11:07am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/3 "2019-12-13T11:07:58Z")

</div>

Yes, this one is weird. It does have a “right” way solution though:

```julia
julia> function g(a)                                           
         if a                                                  
           f = () -> 2                                         
         else                                                  
           f = () -> 3                                         
         end                                                   
         return f                                              
       end                                                     
g (generic function with 1 method)                             
                                                               
julia> g(true)()                                               
2                                                              
                                                               
julia> g(false)()                                              
3                                                              
                                                               
julia> 

```

The wrong way just needs to be caught by the compiler, I think.

---

<div class="post-metadata">

### Author: ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)
#### Post date: [December 13, 2019, 11:09am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/4 "2019-12-13T11:09:06Z")

</div>

By the way, if you know of some weirdness in Julia, do post it here please.

---

<div class="post-metadata">

### Author: ![antoine-levitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/antoine-levitt/32/4008_2.png) [@antoine-levitt](https://discourse.julialang.org/u/antoine-levitt)
#### Post date: [December 13, 2019, 11:10am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/5 "2019-12-13T11:10:37Z")

</div>

```julia
f = 2
f1 = 2
2f + 2f1

```

edit: heh, nice, discourse highlighting gives it away

---

<div class="post-metadata">

### Author: ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)
#### Post date: [December 13, 2019, 11:11am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/6 "2019-12-13T11:11:49Z")

</div>

```julia
julia> a = -1
-1

julia> 1^a === 1^(-1)
false

```

```julia
julia> a = 1; b = 2; a + b = 3;

julia> 1 + 4
3

```

```julia
julia> a = 1 + 2
           - 3
-3

julia> a
3

```

---

<div class="post-metadata">

### Author: ![antoine-levitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/antoine-levitt/32/4008_2.png) [@antoine-levitt](https://discourse.julialang.org/u/antoine-levitt)
#### Post date: [December 13, 2019, 11:14am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/7 "2019-12-13T11:14:41Z")

</div>

Nice! Should

```julia
julia> x + y = 2
+ (generic function with 1 method)

```

just be forbidden?

---

<div class="post-metadata">

### Author: ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)
#### Post date: [December 13, 2019, 11:17am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/8 "2019-12-13T11:17:43Z")

</div>

> [@kristoffer.carlsson](#):
>
> a = 1; b = 2; a + b = 3

```julia
julia> a = 1; b = 2; a + b = 3                                 
ERROR: error in method definition: function Base.+ must be explicitly imported to be extended                                 
Stacktrace:                                                    
 [1] top-level scope at none:0                                 
 [2] top-level scope at REPL[10]:1    

```

A bit of protection…

---

<div class="post-metadata">

### Author: ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)
#### Post date: [December 13, 2019, 11:31am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/9 "2019-12-13T11:31:10Z")

</div>

> [@PetrKryslUCSD](#):
>
> A bit of protection…

If you have used `Base.+`, in the module, yes.

---

<div class="post-metadata">

### Author: ![pablosanjose](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pablosanjose/32/7006_2.png) [@pablosanjose](https://discourse.julialang.org/u/pablosanjose)
#### Post date: [December 13, 2019, 11:50am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/10 "2019-12-13T11:50:39Z")

</div>

Haha! What a fantastic thread! For readers not so familiar with Julia, most of these are mere curiosities, I’ve never had any of them creep up on me (save perhaps thinking I was adding methods to Base functions without remembering to import them first). Julia is _highly_ consistent and sane in my experience…

---

<div class="post-metadata">

### Author: ![Tamas\_Papp](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tamas_papp/32/25949_2.png) [@Tamas\_Papp](https://discourse.julialang.org/u/Tamas_Papp)
#### Post date: [December 13, 2019, 11:56am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/11 "2019-12-13T11:56:44Z")

</div>

Numbers being iterable and trailing 1 indexes can be somewhat surprising:

```julia
julia> size(1.0)
()

julia> 1.0[1, 1, 1]
1.0

julia> collect(1.0)
0-dimensional Array{Float64,0}:
1.0

```

---

<div class="post-metadata">

### Author: ![antoine-levitt](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/antoine-levitt/32/4008_2.png) [@antoine-levitt](https://discourse.julialang.org/u/antoine-levitt)
#### Post date: [December 13, 2019, 12:38pm UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/12 "2019-12-13T12:38:27Z")

</div>

I encountered both wats above in real-world code. The worst was when had a complicated interpolation scheme where I sampled a function `f(x,y)` at points 0, 1 and 2 in both directions, and wanted to compute a second derivative with `(f02 - 2f01 + f00)`. That was a fun hour debugging why my results were wrong… (and not even completely wrong, since my function f was about 10…) In general though I agree with you, julia is pretty consistent.

---

<div class="post-metadata">

### Author: ![jw3126](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jw3126/32/3086_2.png) [@jw3126](https://discourse.julialang.org/u/jw3126)
#### Post date: [December 13, 2019, 12:40pm UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/13 "2019-12-13T12:40:29Z")

</div>

```julia
julia> where where where where where where where
Any

```

---

<div class="post-metadata">

### Author: ![lostella](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lostella/32/356_2.png) [@lostella](https://discourse.julialang.org/u/lostella)
#### Post date: [December 13, 2019, 12:46pm UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/14 "2019-12-13T12:46:07Z")

</div>

This seems to be happening with any odd number of `where` greater than 1?

---

<div class="post-metadata">

### Author: ![jw3126](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jw3126/32/3086_2.png) [@jw3126](https://discourse.julialang.org/u/jw3126)
#### Post date: [December 13, 2019, 12:47pm UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/15 "2019-12-13T12:47:11Z")

</div>

It is basically

```julia
T where T where S

```

with the symbol `where` instead of `T` and `S`.

---

<div class="post-metadata">

### Author: ![PetrKryslUCSD](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/petrkryslucsd/32/215825_2.png) [@PetrKryslUCSD](https://discourse.julialang.org/u/PetrKryslUCSD)
#### Post date: [December 13, 2019, 1:08pm UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/16 "2019-12-13T13:08:57Z")

</div>

I always thought writing `1x` and `2f` instead of `1*x` and `2*f` was a bad idea.  
As my father used to say “just because you could doesn’t mean you should”.

---

<div class="post-metadata">

### Author: ![klaff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/klaff/32/7637_2.png) [@klaff](https://discourse.julialang.org/u/klaff)
#### Post date: [December 13, 2019, 6:52pm UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/17 "2019-12-13T18:52:33Z")

</div>

I much prefer `2π` over `2*π`, which is better still than `2*pi` or the ugliest `=2*PI()`. Also I like being able to write `√(2log(2))`.

But every once in a while I get carried away and try to write `2πf`, which doesn’t work out so well.

---

<div class="post-metadata">

### Author: ![leiteiro](https://avatars.discourse-cdn.com/v4/letter/l/b5e925/32.png) [@leiteiro](https://discourse.julialang.org/u/leiteiro)
#### Post date: [December 13, 2019, 8:30pm UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/18 "2019-12-13T20:30:23Z")

</div>

In this case the best is to use [tau](https://tauday.com/tau-manifesto) 😉 .

---

<div class="post-metadata">

### Author: ![dpsanders](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/dpsanders/32/3573_2.png) [@dpsanders](https://discourse.julialang.org/u/dpsanders)
#### Post date: [December 14, 2019, 1:23am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/19 "2019-12-14T01:23:06Z")

</div>

How many times have I or my students been caught out by `for i in n` instead of `for i in 1:n`. I really wish the former was just made a syntax error.

---

<div class="post-metadata">

### Author: ![Mason](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mason/32/2423_2.png) [@Mason](https://discourse.julialang.org/u/Mason)
#### Post date: [December 14, 2019, 1:25am UTC](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227/20 "2019-12-14T01:25:51Z")

</div>

> [@dpsanders](#):
>
> How many times have I or my students been caught out by `for i in n` instead of `for i in 1:n` . I really wish the former was just made a syntax error.

Conversely, I often find this syntax convenient. 🤷‍♂️

[Next page](https://discourse.julialang.org/t/it-is-so-nice-to-program-in-a-sane-language/32227.md?page=2)
