# What features will I miss in Julia?

**URL:** <https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577>\
**Category:** New to Julia\
**Created:** [May 7, 2017, 12:47pm UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577 "2017-05-07T12:47:58Z")\
**Posts on this page:** 20\
**Page:** 4

<div class="post-metadata">

**Author:** ![Balinus](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/balinus/32/243_2.png) [@Balinus](https://discourse.julialang.org/u/Balinus)\
**Post date:** [May 18, 2017, 6:37pm UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/64 "2017-05-18T18:37:19Z")

</div>

Based on discussion here, that’s what I put in my `.juliarc.jl` file. The cost of the first plot is taken at launch.

```julia
using Plots
default(show = true, size=(1100,800)) # personal preference, not necessary for this trick
p = plot(1:10);Plots.close();

```

Of course, this means that firing up Julia now takes about 15sec to launch. But I much prefer to spend the 15s at launch as opposed to anxiously waiting to see my “_new freshly-baked results that might shatter the scientific world… if only I could see the results NOW_” 😉

---

<div class="post-metadata">

**Author:** ![jonathanBieler](https://avatars.discourse-cdn.com/v4/letter/j/82dd89/32.png) [@jonathanBieler](https://discourse.julialang.org/u/jonathanBieler)\
**Post date:** [May 18, 2017, 6:49pm UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/65 "2017-05-18T18:49:14Z")

</div>

There’s still #16467 (which prevents you to use workspace when using some packages) that is quite annoying, hopefully it gets fixed at some point. Thinking about it I should maybe evaluate all my code in a dummy package and then just use another one when I want a clean workspace.

---

<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:** [May 18, 2017, 7:03pm UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/66 "2017-05-18T19:03:43Z")

</div>

Yes, putting code you develop in a module is something I strongly recommend. I haven’t used workspace in years…

---

<div class="post-metadata">

**Author:** ![traktofon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/traktofon/32/591_2.png) [@traktofon](https://discourse.julialang.org/u/traktofon)\
**Post date:** [May 19, 2017, 1:33am UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/67 "2017-05-19T01:33:57Z")

</div>

> [@kristoffer.carlsson](#):
>
> putting code you develop in a module is something I strongly recommend

Actually, after #265 was fixed, I found the opposite to be true. The reason is that my modules usually contain type definitions, and when reloading/replacing a module in the REPL, any data which was defined using the types of the original module will go into an “orphaned type” state so that all the module functions can no longer be applied to those types. This is true even if the type definition was not changed in the updated module.

To clarify what I mean, consider the following module in “Foos.jl”:

```julia
module Foos
type Foo; x::Int; end
f(foo::Foo) = foo.x + 1
end

```

And this REPL session (on 0.6.0-rc1):

```julia
julia> include("Foos.jl");

julia> foo = Foos.Foo(10)
Foos.Foo(10)

julia> Foos.f(foo)
11

julia> include("Foos.jl");
WARNING: replacing module Foos

# now foo has a type which is out of scope
julia> Foos.f(foo)
ERROR: MethodError: no method matching f(::Foos.Foo)
Closest candidates are:
  f(::Foos.Foo) at <redacted>/Foos.jl:3

```

(Also, the error message is maximally unhelpful.)

For this reason, I only put stable code (e.g. type definitions) into the module, but the functions which are under development, I put them into a seperate file outside of the module scope. Reloading this file will just update the function definitions, and avoids replacing the module. Once the function has stabilized, I put it in the module.

---

<div class="post-metadata">

**Author:** ![bramtayl](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/bramtayl/32/3614_2.png) [@bramtayl](https://discourse.julialang.org/u/bramtayl)\
**Post date:** [May 19, 2017, 4:31am UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/68 "2017-05-19T04:31:41Z")

</div>

RStudio has a number of really great features that I can only assume will also come to juno in time. Working with RMarkdown files is really seamless in RStudio; unless I’m mistaken, there’s no “knit” button in juno. I do think that Hadley Wickham is a shining star in the R world who really understands that programming is done by humans. For example, devtools is a really great package which I think has really accelerated development in the R ecosystem. I’ve been working on `PackageGenerator.jl` to make “batteries included” Julia packages, so we’re getting there (and there are a lot of really great packages working on literate programming, include documenter, weave, macrotools, etc). But I do think that everyone could learn some lessons from the Hadleyverse, including:

1. Functions with full words separated by underscores (and in general, programming that follows natural language as closely as possible)
2. Gearing everything towards absolute beginners (and being more friendly to people who ask stupid questions, as I often do)
3. An emphasis on tooling and workflow over content

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [May 19, 2017, 4:35am UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/69 "2017-05-19T04:35:05Z")

</div>

The suggested workflow [atom-julia-client/workflow.md at master · JunoLab/atom-julia-client · GitHub](https://github.com/JunoLab/atom-julia-client/blob/master/manual/workflow.md) actually suggests using an empty buffer rather than the console to develop code within the scope of a module. I always do that (with a ‘scratch.jl’ file), then just rerun the code up the point where I’m at to regenerate the state.

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [May 19, 2017, 7:12am UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/70 "2017-05-19T07:12:28Z")

</div>

> [@bramtayl](#):
>
> being more friendly to people who ask stupid questions

You find the R community more friendly towards beginners? I in contrast find the julia-community much more friendly and welcoming (to people who appear to be making an effort), though with a tendency to urge people to contribute rather than to request.

---

<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:** [May 19, 2017, 7:15am UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/71 "2017-05-19T07:15:28Z")

</div>

I think that @bramtayl was talking about the support forums for packages of Hadley. The corresponding mailing lists are quite friendly.

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [May 19, 2017, 7:25am UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/72 "2017-05-19T07:25:37Z")

</div>

Fair enough. Oh, by the way, there is markdown preview in Atom [markdown-preview-plus](https://atom.io/packages/markdown-preview-plus). There is no such thing as JuliaMarkdown, though, of course - the rMarkdown feature of RStudio seems more intent on competing with something like Jupyter?

---

<div class="post-metadata">

**Author:** ![ValdarT](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/valdart/32/24146_2.png) [@ValdarT](https://discourse.julialang.org/u/ValdarT)\
**Post date:** [May 19, 2017, 9:20am UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/73 "2017-05-19T09:20:23Z")

</div>

I would say that rmarkdown and Jupyter are quite different. Weave.jl ([GitHub - JunoLab/Weave.jl: Scientific reports/literate programming for Julia](https://github.com/mpastell/Weave.jl)) is the “JuliaMarkdown” that closely resembles rmarkdown. Would be nice if it was integrated with Juno. : )

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [May 19, 2017, 9:57am UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/74 "2017-05-19T09:57:00Z")

</div>

Wouldn’t that really only be a question of a button that could run `weave`, save to a temporary html file, then render that file to an Atom pane?

---

<div class="post-metadata">

**Author:** ![ValdarT](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/valdart/32/24146_2.png) [@ValdarT](https://discourse.julialang.org/u/ValdarT)\
**Post date:** [May 19, 2017, 10:21am UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/75 "2017-05-19T10:21:51Z")

</div>

Seems so. Especially since the syntax highlighting is already implemented ([language-weave](https://atom.io/packages/language-weave)). Very nice work from @mpastell and others!

---

<div class="post-metadata">

**Author:** ![mkborregaard](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkborregaard/32/556_2.png) [@mkborregaard](https://discourse.julialang.org/u/mkborregaard)\
**Post date:** [May 19, 2017, 10:51am UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/76 "2017-05-19T10:51:23Z")

</div>

There’s actually an open issue for this [https://github.com/JunoLab/Juno.jl/issues/30](https://github.com/JunoLab/Juno.jl/issues/30)

---

<div class="post-metadata">

**Author:** ![cstjean](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/cstjean/32/1444_2.png) [@cstjean](https://discourse.julialang.org/u/cstjean)\
**Post date:** [May 19, 2017, 2:57pm UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/77 "2017-05-19T14:57:41Z")

</div>

> [@traktofon](#):
>
> Actually, after #265 was fixed, I found the opposite to be true. The reason is that my modules usually contain type definitions, and when reloading/replacing a module in the REPL, any data which was defined using the types of the original module will go into an “orphaned type” state so that all the module functions can no longer be applied to those types. This is true even if the type definition was not changed in the updated module.

[`ClobberingReload.creload("modulename")`](https://github.com/cstjean/ClobberingReload.jl#using-creload) doesn’t have that issue, because it reevaluates the code inside the module (as does Autoreload.jl and Atom) instead of creating a new module with new types .

---

<div class="post-metadata">

**Author:** ![jonathanBieler](https://avatars.discourse-cdn.com/v4/letter/j/82dd89/32.png) [@jonathanBieler](https://discourse.julialang.org/u/jonathanBieler)\
**Post date:** [May 19, 2017, 4:29pm UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/78 "2017-05-19T16:29:45Z")

</div>

Personally I find the whole workflow situation to be quite unsatisfying. I’ve been using Julia for 3 years and I’m still puzzled about the whole thing. Imagine explaining this to a new comer [atom-julia-client/workflow.md at master · JunoLab/atom-julia-client · GitHub](https://github.com/JunoLab/atom-julia-client/blob/master/manual/workflow.md)

The fact that you need external tooling is also a sign that something’s not ideal with the base language. Maybe it’s just a necessary evil and there’s not much do do about it, but it doesn’t feel so great currently.

---

<div class="post-metadata">

**Author:** ![ggggggggg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ggggggggg/32/265_2.png) [@ggggggggg](https://discourse.julialang.org/u/ggggggggg)\
**Post date:** [May 19, 2017, 4:59pm UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/79 "2017-05-19T16:59:22Z")

</div>

I’ve been writing my code in a package, and putting my exploratory code in `runtests.jl`, then just running `Pkg.test("mypkg")` over and over. It runs fresh every time, so I can change anything, it goes pretty fast for small package (it gets cumbersome eventually). I also end up with way better test coverage this way. It still not ideal, but its easy and I understand it. Once the debugger is easier to use, I’m guessing that will solve most of my remaining complaints.

---

<div class="post-metadata">

**Author:** ![purplishrock](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/purplishrock/32/13451_2.png) [@purplishrock](https://discourse.julialang.org/u/purplishrock)\
**Post date:** [May 20, 2017, 6:28pm UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/80 "2017-05-20T18:28:17Z")

</div>

i miss data type definitions from Haskell , i.e.

data Foo = A Int | B Double | C

Really, really, very useful, and of course even more so when you have “case” to go along with it.

I expect I can get the same sort of functionality by using separate types and Union and typealias, but not nearly as elegant.

The good news is that even though julia doesn’t have “case” there is the match package which is quite nice !

---

<div class="post-metadata">

**Author:** ![pkofod](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/pkofod/32/2179_2.png) [@pkofod](https://discourse.julialang.org/u/pkofod)\
**Post date:** [May 20, 2017, 8:31pm UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/81 "2017-05-20T20:31:44Z")

</div>

> [@purplishrock](#):
>
> The good news is that even though julia doesn’t have “case” there is the match package which is quite nice !

For what it’s worth, “Julia has” and “there’s a package for” is pretty much the same in Julia, and that it a major strength. Practically nothing has to be in Base, other than what is there because it is handy.

---

<div class="post-metadata">

**Author:** ![Juan](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/juan/32/7657_2.png) [@Juan](https://discourse.julialang.org/u/Juan)\
**Post date:** [July 12, 2017, 3:21pm UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/82 "2017-07-12T15:21:51Z")

</div>

I’ve seen than Weave is not updated since three years ago. And the same happens with Judo.jl.  
Is there any alternative?

---

<div class="post-metadata">

**Author:** ![ChrisRackauckas](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/chrisrackauckas/32/77_2.png) [@ChrisRackauckas](https://discourse.julialang.org/u/ChrisRackauckas)\
**Post date:** [July 12, 2017, 3:40pm UTC](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577/83 "2017-07-12T15:40:25Z")

</div>

It was updated last month.

[https://github.com/mpastell/Weave.jl](https://github.com/mpastell/Weave.jl)

[Previous page](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577.md?page=3)

[Next page](https://discourse.julialang.org/t/what-features-will-i-miss-in-julia/3577.md?page=5)
