# What's your favorite syntactical sugar in Julia

**URL:** https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781
**Category:** Teaching & Outreach
**Tags:** question
**Created:** [November 8, 2020, 10:33am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781 "2020-11-08T10:33:13Z")
**Posts on this page:** 20
**Page:** 4

<div class="post-metadata">

### Author: ![Tim\_G](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/tim_g/32/11039_2.png) [@Tim\_G](https://discourse.julialang.org/u/Tim_G)
#### Post date: [May 17, 2021, 3:20am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/61 "2021-05-17T03:20:38Z")

</div>

Primes.jl looks very suspicious. 🤔

`(primes(999).^2).% 24`

---

<div class="post-metadata">

### Author: ![JeffreySarnoff](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeffreysarnoff/32/1980_2.png) [@JeffreySarnoff](https://discourse.julialang.org/u/JeffreySarnoff)
#### Post date: [May 17, 2021, 4:49am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/62 "2021-05-17T04:49:58Z")

</div>

that’s correct, it is a fact for all primes \>= 5

Squared Primes Modulo 24  
Roger B. Nelsen  
Mathematics Magazine, 93 (2020) pg 228  
DOI: 10.1080/0025570X.2020.1736877

 ![image](https://global.discourse-cdn.com/julialang/original/3X/3/8/3805e4e60e0ae8913d2f6a62b778874123c5fa13.jpeg)

---

<div class="post-metadata">

### Author: ![Wei\_Yang](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/wei_yang/32/23951_2.png) [@Wei\_Yang](https://discourse.julialang.org/u/Wei_Yang)
#### Post date: [May 17, 2021, 5:25am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/63 "2021-05-17T05:25:28Z")

</div>

Julia and Primes.jl turned many problems on [https://projecteuler.net/](https://projecteuler.net/) into jokes 😂

---

<div class="post-metadata">

### Author: ![xiaodai](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xiaodai/32/15937_2.png) [@xiaodai](https://discourse.julialang.org/u/xiaodai)
#### Post date: [May 19, 2021, 4:35am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/65 "2021-05-19T04:35:15Z")

</div>

Since Julia 1.6 I think

```julia
a = 1
b = 2
c = 3
d = 4

f(a, b; c, d) = a+b+c+d

f(a, b; c = c, d = d)

# no need to name them with `=` if variable name is same as argument name
f(a, b; c, d) 

```

---

<div class="post-metadata">

### Author: ![viraltux](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/viraltux/32/15236_2.png) [@viraltux](https://discourse.julialang.org/u/viraltux)
#### Post date: [May 19, 2021, 5:33am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/66 "2021-05-19T05:33:56Z")

</div>

That’s what I do with Emacs

---

<div class="post-metadata">

### Author: ![chelate](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chelate/32/14777_2.png) [@chelate](https://discourse.julialang.org/u/chelate)
#### Post date: [May 19, 2021, 6:50am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/67 "2021-05-19T06:50:18Z")

</div>

When reduction operators take generators:

`f(k) = sum(x^2 for x in 1:k)`

even better than math notation!

---

<div class="post-metadata">

### Author: ![xiaodai](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/xiaodai/32/15937_2.png) [@xiaodai](https://discourse.julialang.org/u/xiaodai)
#### Post date: [June 18, 2021, 11:26pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/68 "2021-06-18T23:26:36Z")

</div>

> [@chelate](#):
>
> f(k) = sum(x^2 for x in 1:k)

seems much slower than

`f(k) = sum((1:k).^2)`

---

<div class="post-metadata">

### Author: ![Elrod](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elrod/32/22461_2.png) [@Elrod](https://discourse.julialang.org/u/Elrod)
#### Post date: [June 19, 2021, 5:45am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/69 "2021-06-19T05:45:51Z")

</div>

Unfortunately, this doesn’t work with `sum`, but if we define our own:

```julia
julia> function mysum(f, r)
           s = zero(f(first(r)))
           for i ∈ r
               s += f(i)
           end
           s
       end
mysum (generic function with 1 method)

julia> @btime mysum(abs2, 1:$(Ref(10))[])
  1.585 ns (0 allocations: 0 bytes)
385

julia> @btime mysum(abs2, 1:$(Ref(100))[])
  1.586 ns (0 allocations: 0 bytes)
338350

julia> @btime mysum(abs2, 1:$(Ref(1000))[])
  1.588 ns (0 allocations: 0 bytes)
333833500

julia> @btime mysum(abs2, 1:$(Ref(10000))[])
  1.586 ns (0 allocations: 0 bytes)
333383335000

```

LLVM can optimize away the loop, so performance is independent of `k`.

---

<div class="post-metadata">

### Author: ![gustaphe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gustaphe/32/18174_2.png) [@gustaphe](https://discourse.julialang.org/u/gustaphe)
#### Post date: [June 19, 2021, 5:47am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/70 "2021-06-19T05:47:53Z")

</div>

How so?

```julia
using BenchmarkTools, BenchmarkPlots, StatsPlots
K = 10_000
bg = BenchmarkGroup()
bg[:a] = @benchmark sum((1:$K).^2)
bg[:b] = @benchmark sum(x^2 for x in 1:$K)
bg[:c] = @benchmark sum(x -> x^2, 1:$K)
plot(bg; yscale=:log10)

```

![image](https://global.discourse-cdn.com/julialang/original/3X/b/1/b11053325b5cabca2a6490cae64c8ea6c903a08c.png)

The generator method is clearly much faster (but not as fast as the two argument version).

---

<div class="post-metadata">

### Author: ![Elrod](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/elrod/32/22461_2.png) [@Elrod](https://discourse.julialang.org/u/Elrod)
#### Post date: [June 19, 2021, 10:58am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/71 "2021-06-19T10:58:10Z")

</div>

> [@gustaphe](#):
>
> The generator method is clearly much faster

But still about 100x slower than `mysum` would be at that size.

---

<div class="post-metadata">

### Author: ![gustaphe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gustaphe/32/18174_2.png) [@gustaphe](https://discourse.julialang.org/u/gustaphe)
#### Post date: [June 19, 2021, 12:12pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/72 "2021-06-19T12:12:39Z")

</div>

It is indeed a lot faster even than `sum(f, x)`. I wonder what it is about `sum` that can’t be optimized like `mysum` can.

---

<div class="post-metadata">

### Author: ![Oscar\_Smith](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/oscar_smith/32/25343_2.png) [@Oscar\_Smith](https://discourse.julialang.org/u/Oscar_Smith)
#### Post date: [June 19, 2021, 1:04pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/73 "2021-06-19T13:04:13Z")

</div>

I think it’s probably harder to constant fold pairwise summation.

---

<div class="post-metadata">

### Author: ![gustaphe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gustaphe/32/18174_2.png) [@gustaphe](https://discourse.julialang.org/u/gustaphe)
#### Post date: [June 19, 2021, 1:42pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/74 "2021-06-19T13:42:23Z")

</div>

What about `sum` is pairwise? I would expect `sum` to do more or less the same thing as `mysum`

---

<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: [June 19, 2021, 2:03pm UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/75 "2021-06-19T14:03:09Z")

</div>

It’s a technique to increase floating-point accuracy : [Pairwise summation - Wikipedia](https://en.m.wikipedia.org/wiki/Pairwise_summation)

---

<div class="post-metadata">

### Author: ![HerAdri](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/heradri/32/5816_2.png) [@HerAdri](https://discourse.julialang.org/u/HerAdri)
#### Post date: [June 20, 2021, 6:29am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/76 "2021-06-20T06:29:23Z")

</div>

> [@gustaphe](#):
>
> `BenchmarkPlots`

```julia
 pkg> add BenchmarkPlots
    Updating registry at `C:\Users\Hermesr\.julia\registries\General`
    Updating git-repo `https://github.com/JuliaRegistries/General.git`
ERROR: The following package names could not be resolved:
 * BenchmarkPlots (not found in project, manifest or registry)

```

---

<div class="post-metadata">

### Author: ![gustaphe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gustaphe/32/18174_2.png) [@gustaphe](https://discourse.julialang.org/u/gustaphe)
#### Post date: [June 20, 2021, 6:36am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/77 "2021-06-20T06:36:09Z")

</div>

My bad, that’s an unmerged pr. You can clone it and add by directory if you want.

> <https://github.com/JuliaCI/BenchmarkTools.jl/pull/194>
>
> Adds a recipe to visualize the timings of a \`Trial\` or a \`BenchmarkGroup\` of \`Tr…ial\`s using boxplots. Only pulls in \`RecipesBase.jl\` so should be fairly low impact (but I don't know how best to check that).
> 
> \`\`\`julia
> using BenchmarkTools, Plots, StatsPlots
> ...
> result = run(benchmarkgroup)
> plot(result, outliers=false)
> \`\`\`
> 
> !\[benchmarks\](https://user-images.githubusercontent.com/6677110/109364965-4a2cb600-7890-11eb-81b3-7decf7ba1c6f.png)

---

<div class="post-metadata">

### Author: ![RoyiAvital](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/royiavital/32/571_2.png) [@RoyiAvital](https://discourse.julialang.org/u/RoyiAvital)
#### Post date: [February 4, 2022, 10:03am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/78 "2022-02-04T10:03:59Z")

</div>

Another nice thing to do with `end` was given by @giordano in [a Slack thread](https://julialang.slack.com/archives/C6FGJ8REC/p1643494232240059):

![image](https://global.discourse-cdn.com/julialang/original/3X/9/8/982960eafa494a05002fd6ab1301a82b524cef9a.png)

Alexander Palvin:  
I wish it was also possible to store the indexing expression in a variable.

```julia
ix = min(i, end)
x[ix] # same effect as x[min(i, end)]

```

 ![image](https://global.discourse-cdn.com/julialang/original/3X/5/f/5f26a3792586009c4b538f5cd49e0c25dba0c5d7.png)

@giordano , Using the package [`EndpointRanges.jl`](https://github.com/JuliaArrays/EndpointRanges.jl) solved it using:

```julia
julia> using EndpointRanges

julia> using EndpointRanges: Endpoint, IndexFunction

julia> Base.min(x::Endpoint, y::Endpoint) = IndexFunction(r->Base.min(x(r), y(r)))

julia> Base.min(x::Endpoint, y::Number) = IndexFunction(r->Base.min(x(r), y))

julia> Base.min(x::Number, y::Endpoint) = IndexFunction(r->Base.min(x, y(r)))

julia> m = min(3, iend)
IndexFunction{var"#5#6"{Int64, EndpointRanges.IEnd}}(var"#5#6"{Int64, EndpointRanges.IEnd}(3, EndpointRanges.IEnd()))

julia> (1:10)[m]
3

julia> (1:2)[m]
2

```

---

<div class="post-metadata">

### Author: ![sijo](https://avatars.discourse-cdn.com/v4/letter/s/da6949/32.png) [@sijo](https://discourse.julialang.org/u/sijo)
#### Post date: [February 4, 2022, 10:38am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/79 "2022-02-04T10:38:44Z")

</div>

@RoyiAvital that’s more an example of missing sugar though… It’s nice that it can be implemented but it would be nice to have something like this in Base.

---

<div class="post-metadata">

### Author: ![rmsmsgood](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rmsmsgood/32/20544_2.png) [@rmsmsgood](https://discourse.julialang.org/u/rmsmsgood)
#### Post date: [February 4, 2022, 10:54am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/80 "2022-02-04T10:54:54Z")

</div>

`@times` it’s amazing

---

<div class="post-metadata">

### Author: ![gustaphe](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/gustaphe/32/18174_2.png) [@gustaphe](https://discourse.julialang.org/u/gustaphe)
#### Post date: [February 4, 2022, 11:48am UTC](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781/81 "2022-02-04T11:48:35Z")

</div>

What package is that from?

[Previous page](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781.md?page=3)

[Next page](https://discourse.julialang.org/t/whats-your-favorite-syntactical-sugar-in-julia/49781.md?page=5)
