summaryrefslogblamecommitdiffstats
path: root/2024/info/julia-after.md
blob: 9a2d879c5e5002f3cfd94db2c223361bb6d3872b (plain) (tree)
1
2
3
4


                                                                
                                                                                                         














































































































































































































                                                                                                                                                      

                                                                                                                      

                                                                                                                                                                                                                                                                                                                                                      


                                                                                                                                       
                                                                                                                                              










                                                                                                                                              

                                                                                                                                                                                                                                                                                                                                                                         

















                                                                                                                                             

                                                                                                                                                                                                                                                                                                                                                                       









                                                                                                                                            




                                                                                                                                                                                                                                                                                                                                                    






                                                                                                                                              








                                                                                                                                                                                                                                                                                                                                         





                                                                                                                                            


                                                                                                                                                                                                                                                                                                                                                                



























                                                                                                                                              







                                                                                                                                            


                                                                                                                                         
                                                                                                                                                                                                                                   
 

                                            
<!-- Automatically generated by emacsconf-publish-after-page -->


<div class="transcript transcript-mainVideo"><a name="julia-mainVideo-transcript"></a><h1>Transcript</h1>

[[!template text="""Hello, I'm very excited to tell you""" start="00:00:00.000" video="mainVideo-julia" id="subtitle"]]
[[!template text="""about shared philosophies""" start="00:00:02.360" video="mainVideo-julia" id="subtitle"]]
[[!template text="""between the Julia programming language and Emacs.""" start="00:00:03.680" video="mainVideo-julia" id="subtitle"]]
[[!template text="""While Julia and Emacs might look like""" start="00:00:06.480" video="mainVideo-julia" id="subtitle"]]
[[!template text="""different pieces of software,""" start="00:00:08.680" video="mainVideo-julia" id="subtitle"]]
[[!template text="""I think there is profound commonalities between the two.""" start="00:00:10.280" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Let's start by introducing Julia.""" start="00:00:13.440" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Julia is a high-level dynamic programming language.""" start="00:00:16.360" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Julia is free and open source software""" start="00:00:19.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""and is used primarily for scientific computing.""" start="00:00:21.680" video="mainVideo-julia" id="subtitle"]]
[[!template text="""The reason Julia is used for scientific computing""" start="00:00:24.640" video="mainVideo-julia" id="subtitle"]]
[[!template text="""is that while Julia is high level""" start="00:00:27.040" video="mainVideo-julia" id="subtitle"]]
[[!template text="""and has a syntax that looks like Python or MATLAB,""" start="00:00:29.680" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Julia can be high performance.""" start="00:00:32.560" video="mainVideo-julia" id="subtitle"]]
[[!template text="""I use it to develop climate models""" start="00:00:34.560" video="mainVideo-julia" id="subtitle"]]
[[!template text="""that run on hundreds of GPUs.""" start="00:00:36.520" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Models that are traditionally developed with C, C++, or Fortran.""" start="00:00:38.480" video="mainVideo-julia" id="subtitle"]]
[[!template text="""But how is this possible?""" start="00:00:43.400" video="mainVideo-julia" id="subtitle"]]
[[!template text="""How can Julia be high performance""" start="00:00:44.760" video="mainVideo-julia" id="subtitle"]]
[[!template text="""but also high level at the same time?""" start="00:00:46.800" video="mainVideo-julia" id="subtitle"]]
[[!template text="""What makes Julia, Julia?""" start="00:00:48.800" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Well, what makes Julia, Julia""" start="00:00:50.425" video="mainVideo-julia" id="subtitle"]]
[[!template text="""is the idea of multiple dispatch.""" start="00:00:52.470" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Multiple dispatch is the concept where a function call is resolved""" start="00:00:54.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""by looking at the types of every single argument involved.""" start="00:00:59.000" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So, let's explore this with this example.""" start="00:01:02.360" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Here, I define a function add that takes two objects""" start="00:01:04.960" video="mainVideo-julia" id="subtitle"]]
[[!template text="""and sums them together.""" start="00:01:07.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And I call add with two different types.""" start="00:01:09.160" video="mainVideo-julia" id="subtitle"]]
[[!template text="""First with just integers and second with floats.""" start="00:01:11.880" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So, let's look at what this produces.""" start="00:01:14.640" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Here is the output of add in Julia.""" start="00:01:17.560" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So, first we have add, a function with one method.""" start="00:01:20.440" video="mainVideo-julia" id="subtitle"]]
[[!template text="""I'm going to explain this in a second.""" start="00:01:23.280" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And then we have our return values 12 and 12.0.""" start="00:01:24.840" video="mainVideo-julia" id="subtitle"]]
[[!template text="""What we cannot see here is that""" start="00:01:28.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Julia has specialized code""" start="00:01:30.800" video="mainVideo-julia" id="subtitle"]]
[[!template text="""for the two different function calls.""" start="00:01:33.440" video="mainVideo-julia" id="subtitle"]]
[[!template text="""For integers and for floating points.""" start="00:01:35.120" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Let's make this more explicit by specifically providing""" start="00:01:38.360" video="mainVideo-julia" id="subtitle"]]
[[!template text="""a new method for the case with floating point.""" start="00:01:42.240" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So here, now I have an add function""" start="00:01:45.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""specifically for floating point. Instead of taking""" start="00:01:47.600" video="mainVideo-julia" id="subtitle"]]
[[!template text="""A + B, this returns A exponent B. Let's call this.""" start="00:01:50.120" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And what we can see here is that""" start="00:01:54.760" video="mainVideo-julia" id="subtitle"]]
[[!template text="""now we have two methods.""" start="00:01:56.800" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So, we add a new method to the same function.""" start="00:01:58.320" video="mainVideo-julia" id="subtitle"]]
[[!template text="""This is a method that is""" start="00:02:00.560" video="mainVideo-julia" id="subtitle"]]
[[!template text="""specifically for floating points.""" start="00:02:01.640" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And instead of having the value 12, we have 100.""" start="00:02:03.680" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And this is where the trick lies.""" start="00:02:06.960" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Julia compiles the most, um, specialized version""" start="00:02:09.040" video="mainVideo-julia" id="subtitle"]]
[[!template text="""that can be compiled. So, a version with integers,""" start="00:02:13.880" video="mainVideo-julia" id="subtitle"]]
[[!template text="""a version with floats. And in this,""" start="00:02:16.840" video="mainVideo-julia" id="subtitle"]]
[[!template text="""compiling is an actual compilation with LLVM""" start="00:02:19.200" video="mainVideo-julia" id="subtitle"]]
[[!template text="""with optimization and so on.""" start="00:02:22.680" video="mainVideo-julia" id="subtitle"]]
[[!template text="""This is not just ahead of time compilation.""" start="00:02:24.480" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Soon as the Julia knows the type,""" start="00:02:27.440" video="mainVideo-julia" id="subtitle"]]
[[!template text="""a function is compiled if it's not compiled already""" start="00:02:30.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""and then it's used.""" start="00:02:33.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""When types are stable and well inferred,""" start="00:02:35.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""this can lead to code that is as performant""" start="00:02:37.160" video="mainVideo-julia" id="subtitle"]]
[[!template text="""or comparable to C and Fortran.""" start="00:02:40.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So, this is what makes Julia, Julia.""" start="00:02:42.160" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Multiple dispatch with just ahead of time compilation""" start="00:02:45.160" video="mainVideo-julia" id="subtitle"]]
[[!template text="""of highly efficient code.""" start="00:02:48.440" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So now, what makes Emacs, Emacs?""" start="00:02:49.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Well, in my opinion, what makes Emacs, Emacs""" start="00:02:53.440" video="mainVideo-julia" id="subtitle"]]
[[!template text="""is interactivity, extensibility, and community.""" start="00:02:56.680" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And I claim that Julia has the same three.""" start="00:03:01.160" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Interactivity, extensibility, and community""" start="00:03:06.200" video="mainVideo-julia" id="subtitle"]]
[[!template text="""are three key pillars for Julia.""" start="00:03:09.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""More specifically, Julia encourages a""" start="00:03:11.840" video="mainVideo-julia" id="subtitle"]]
[[!template text="""REPL-driven, introspective, interactive workflow.""" start="00:03:14.600" video="mainVideo-julia" id="subtitle"]]
[[!template text="""It's largely open to extension and modification""" start="00:03:17.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""to the point that most of Julia is written in Julia.""" start="00:03:19.880" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And Julia has a thriving and welcoming community""" start="00:03:23.560" video="mainVideo-julia" id="subtitle"]]
[[!template text="""with lots of packages. So, let me showcase""" start="00:03:25.960" video="mainVideo-julia" id="subtitle"]]
[[!template text="""a little bit of this REPL-driven, introspective,""" start="00:03:28.800" video="mainVideo-julia" id="subtitle"]]
[[!template text="""interactive workflow with the hope that commonalities""" start="00:03:31.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""with Emacs will emerge naturally.""" start="00:03:34.360" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So, let's start by opening a Julia REPL.""" start="00:03:36.760" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Here, I have a Julia REPL.""" start="00:03:39.920" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Let me give you a tour of the Julia REPL.""" start="00:03:41.760" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So, the REPL comes with lots of useful features,""" start="00:03:44.400" video="mainVideo-julia" id="subtitle"]]
[[!template text="""from a shell to a package manager.""" start="00:03:47.760" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So, for example, let's add the random package.""" start="00:03:51.560" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Um, yeah, I have the random package.""" start="00:03:55.000" video="mainVideo-julia" id="subtitle"]]
[[!template text="""I can look at what's inside.""" start="00:03:58.280" video="mainVideo-julia" id="subtitle"]]
[[!template text="""We have the statistics with random""" start="00:03:59.280" video="mainVideo-julia" id="subtitle"]]
[[!template text="""in this particular environment.""" start="00:04:01.280" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Environments are fully declarative.""" start="00:04:02.480" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So here we have the dependencies of this environment.""" start="00:04:05.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And I can explore in this manifest,""" start="00:04:08.040" video="mainVideo-julia" id="subtitle"]]
[[!template text="""the specific versions that are used.""" start="00:04:10.240" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So we have a shell, we have a package manager,""" start="00:04:14.000" video="mainVideo-julia" id="subtitle"]]
[[!template text="""and then we have a very powerful help system.""" start="00:04:17.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So, for example, I can ask for help for length.""" start="00:04:20.560" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And here we can see we have, well,""" start="00:04:24.200" video="mainVideo-julia" id="subtitle"]]
[[!template text="""the help for length. Lots of information about""" start="00:04:26.640" video="mainVideo-julia" id="subtitle"]]
[[!template text="""how to call length, the expected return values,""" start="00:04:31.000" video="mainVideo-julia" id="subtitle"]]
[[!template text="""examples. And now you can probably start seeing that""" start="00:04:33.400" video="mainVideo-julia" id="subtitle"]]
[[!template text="""this is not that different from calling length.""" start="00:04:36.120" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So this is the output for length,""" start="00:04:37.760" video="mainVideo-julia" id="subtitle"]]
[[!template text="""or for help for length in in Emacs.""" start="00:04:42.120" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So we have help, and we can do more.""" start="00:04:45.000" video="mainVideo-julia" id="subtitle"]]
[[!template text="""We can even look at the source code for length.""" start="00:04:47.960" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So now, what we can see here is that now, well,""" start="00:04:51.880" video="mainVideo-julia" id="subtitle"]]
[[!template text="""we cannot see because it's zoomed in""" start="00:04:57.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""because the font size is huge, but in this page here,""" start="00:04:58.920" video="mainVideo-julia" id="subtitle"]]
[[!template text="""we can see the implementation of length.""" start="00:05:02.800" video="mainVideo-julia" id="subtitle"]]
[[!template text="""It's this line here in the middle,""" start="00:05:04.760" video="mainVideo-julia" id="subtitle"]]
[[!template text="""or these few lines here in the middle.""" start="00:05:06.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And as you... Let's do this again.""" start="00:05:09.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""As we can see here at the bottom,""" start="00:05:12.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""what we are looking at,""" start="00:05:13.000" video="mainVideo-julia" id="subtitle"]]
[[!template text="""this is the source code of Julia.""" start="00:05:13.800" video="mainVideo-julia" id="subtitle"]]
[[!template text="""We can change this.""" start="00:05:15.640" video="mainVideo-julia" id="subtitle"]]
[[!template text="""There's even a macro edit""" start="00:05:17.040" video="mainVideo-julia" id="subtitle"]]
[[!template text="""if you want to change its length.""" start="00:05:20.040" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And yeah, I use the word macro.""" start="00:05:22.760" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Julia supports metaprogramming.""" start="00:05:24.600" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And actually metaprogramming is""" start="00:05:28.640" video="mainVideo-julia" id="subtitle"]]
[[!template text="""one of the key features in Julia.""" start="00:05:30.360" video="mainVideo-julia" id="subtitle"]]
[[!template text="""It's used extensively in the core,""" start="00:05:32.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""but it's also used extensively in packages,""" start="00:05:33.640" video="mainVideo-julia" id="subtitle"]]
[[!template text="""both to extend the Julia ecosystem and functionalities,""" start="00:05:36.400" video="mainVideo-julia" id="subtitle"]]
[[!template text="""but also to develop full domain specific languages.""" start="00:05:40.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Some of the useful macros are, well, I don't know,""" start="00:05:43.480" video="mainVideo-julia" id="subtitle"]]
[[!template text="""like time. Here, we have a built-in""" start="00:05:47.240" video="mainVideo-julia" id="subtitle"]]
[[!template text="""basic performance tool in in in Julia.""" start="00:05:52.240" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And I want to showcase more introspection, macros.""" start="00:05:55.800" video="mainVideo-julia" id="subtitle"]]
[[!template text="""But for that, I'm going to do it slightly different.""" start="00:06:00.480" video="mainVideo-julia" id="subtitle"]]
[[!template text="""I'm going to open a file""" start="00:06:02.960" video="mainVideo-julia" id="subtitle"]]
[[!template text="""example.jl where I define a""" start="00:06:04.040" video="mainVideo-julia" id="subtitle"]]
[[!template text="""function, or our""" start="00:06:06.240" video="mainVideo-julia" id="subtitle"]]
[[!template text="""function add, there was an asterisk""" start="00:06:08.040" video="mainVideo-julia" id="subtitle"]]
[[!template text="""and I will go back to that in a second.""" start="00:06:09.520" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So now, I am going to include this this file,""" start="00:06:11.200" video="mainVideo-julia" id="subtitle"]]
[[!template text="""and I can call my function add, one and two,""" start="00:06:15.240" video="mainVideo-julia" id="subtitle"]]
[[!template text="""and we get three. And now, what I can do is this.""" start="00:06:18.200" video="mainVideo-julia" id="subtitle"]]
[[!template text="""I can look at what code gets compiled""" start="00:06:22.640" video="mainVideo-julia" id="subtitle"]]
[[!template text="""when I call my when I call 1 + 2.""" start="00:06:28.040" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And here, now we can see""" start="00:06:31.360" video="mainVideo-julia" id="subtitle"]]
[[!template text="""that there is some integer stuff.""" start="00:06:33.360" video="mainVideo-julia" id="subtitle"]]
[[!template text="""But if I make this floating point,""" start="00:06:34.640" video="mainVideo-julia" id="subtitle"]]
[[!template text="""now the compiled code changes.""" start="00:06:38.160" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Now, maybe assembly code""" start="00:06:40.240" video="mainVideo-julia" id="subtitle"]]
[[!template text="""is a little bit too hard to read,""" start="00:06:43.600" video="mainVideo-julia" id="subtitle"]]
[[!template text="""so I can look at the LLVM IR representation.""" start="00:06:45.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""In this case we can see that there is promotion.""" start="00:06:48.640" video="mainVideo-julia" id="subtitle"]]
[[!template text="""The promotion will probably go away""" start="00:06:50.400" video="mainVideo-julia" id="subtitle"]]
[[!template text="""if I make everything float. So this we have F add,""" start="00:06:52.240" video="mainVideo-julia" id="subtitle"]]
[[!template text="""floating point add for a double,""" start="00:06:56.040" video="mainVideo-julia" id="subtitle"]]
[[!template text="""but we can also look at""" start="00:06:58.000" video="mainVideo-julia" id="subtitle"]]
[[!template text="""the Julia lowered representation""" start="00:06:59.440" video="mainVideo-julia" id="subtitle"]]
[[!template text="""after the abstract syntax tree is produced.""" start="00:07:04.240" video="mainVideo-julia" id="subtitle"]]
[[!template text="""The reason I put this in a file is because""" start="00:07:06.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""now what I can do is I can change this.""" start="00:07:07.920" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And now, one and two will be two.""" start="00:07:10.120" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So this to me is very reminiscent""" start="00:07:14.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""of how I work in Emacs,""" start="00:07:16.880" video="mainVideo-julia" id="subtitle"]]
[[!template text="""where there is a global state""" start="00:07:18.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""that I can access and modify any time""" start="00:07:20.240" video="mainVideo-julia" id="subtitle"]]
[[!template text="""with no restrictions. And this happens in in Julia too.""" start="00:07:22.960" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Typically, we don't want to modify functions""" start="00:07:27.160" video="mainVideo-julia" id="subtitle"]]
[[!template text="""that are in other packages or they are in base,""" start="00:07:29.560" video="mainVideo-julia" id="subtitle"]]
[[!template text="""but we can do that. For example,""" start="00:07:32.520" video="mainVideo-julia" id="subtitle"]]
[[!template text="""I can change what is plus for integers.""" start="00:07:34.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And if I change with this plus""" start="00:07:37.640" video="mainVideo-julia" id="subtitle"]]
[[!template text="""and make it so that any two integers return zero,""" start="00:07:41.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""well, I can do this. This will break Julia because,""" start="00:07:43.760" video="mainVideo-julia" id="subtitle"]]
[[!template text="""well, Julia is built in Julia.""" start="00:07:46.320" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So if we break this, well, nothing will work.""" start="00:07:48.360" video="mainVideo-julia" id="subtitle"]]
[[!template text="""But I can do that. This to me is one of""" start="00:07:51.400" video="mainVideo-julia" id="subtitle"]]
[[!template text="""the signs of the powerful, introspective,""" start="00:07:53.400" video="mainVideo-julia" id="subtitle"]]
[[!template text="""and powerful interactive type of workflows""" start="00:07:56.200" video="mainVideo-julia" id="subtitle"]]
[[!template text="""that Julia enables.""" start="00:07:58.480" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Finally, I want to talk about the general registry.""" start="00:07:59.280" video="mainVideo-julia" id="subtitle"]]
[[!template text="""This is the equivalent of Melpa.""" start="00:08:03.480" video="mainVideo-julia" id="subtitle"]]
[[!template text="""It comes with with Julia.""" start="00:08:06.400" video="mainVideo-julia" id="subtitle"]]
[[!template text="""But this is very akin to Melpa.""" start="00:08:08.760" video="mainVideo-julia" id="subtitle"]]
[[!template text="""It's built upon Git essentially.""" start="00:08:11.120" video="mainVideo-julia" id="subtitle"]]
[[!template text="""It's collaborative, as relies heavily on GitHub, GitLab.""" start="00:08:14.480" video="mainVideo-julia" id="subtitle"]]
[[!template text="""It's heavily automated.""" start="00:08:19.400" video="mainVideo-julia" id="subtitle"]]
[[!template text="""And comes with lots and lots of tools and packages.""" start="00:08:21.120" video="mainVideo-julia" id="subtitle"]]
[[!template text="""What's beautiful about all these tools and packages""" start="00:08:24.480" video="mainVideo-julia" id="subtitle"]]
[[!template text="""is that in the same way many of Emacs packages""" start="00:08:27.560" video="mainVideo-julia" id="subtitle"]]
[[!template text="""just play nicely with each other""" start="00:08:30.280" video="mainVideo-julia" id="subtitle"]]
[[!template text="""without any input from the developers,""" start="00:08:32.400" video="mainVideo-julia" id="subtitle"]]
[[!template text="""the same is true for Julia packages.""" start="00:08:34.880" video="mainVideo-julia" id="subtitle"]]
[[!template text="""The Julia packages are highly composable,""" start="00:08:37.560" video="mainVideo-julia" id="subtitle"]]
[[!template text="""so two developers can develop""" start="00:08:40.680" video="mainVideo-julia" id="subtitle"]]
[[!template text="""two distinct packages""" start="00:08:42.880" video="mainVideo-julia" id="subtitle"]]
[[!template text="""that end up playing nicely together for free""" start="00:08:44.720" video="mainVideo-julia" id="subtitle"]]
[[!template text="""because of the intrinsic structure, intrinsic way""" start="00:08:47.640" video="mainVideo-julia" id="subtitle"]]
[[!template text="""Julia objects are built.""" start="00:08:51.880" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So, with all of this, I also want to mention that""" start="00:08:54.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""the community, in addition to have all these packages,""" start="00:08:57.480" video="mainVideo-julia" id="subtitle"]]
[[!template text="""is highly active, highly collaborative.""" start="00:09:00.080" video="mainVideo-julia" id="subtitle"]]
[[!template text="""The community meets regularly on places like Slack,""" start="00:09:02.600" video="mainVideo-julia" id="subtitle"]]
[[!template text="""as opposed to the Emacs community""" start="00:09:06.160" video="mainVideo-julia" id="subtitle"]]
[[!template text="""that I'd say maybe meets on Reddit.""" start="00:09:08.200" video="mainVideo-julia" id="subtitle"]]
[[!template text="""So, with all of this, I want to thank you""" start="00:09:10.040" video="mainVideo-julia" id="subtitle"]]
[[!template text="""for your attention, enjoy Emacs, and enjoy Julia.""" start="00:09:13.000" video="mainVideo-julia" id="subtitle"]]

</div><div class="transcript transcript-qanda"><a name="julia-qanda-transcript"></a><h1>Q&A transcript (unedited)</h1>


<div class="transcript-heading">[[!template new="1" text="""Q: Do you have any suggestions for interactive debugging of Julia code in Emacs?""" start="00:00:00.089" video="qanda-julia" id="subtitle"]]</div>[[!template text="""... answer to that. I, I think the infrastructure for an""" start="00:00:00.089" video="qanda-julia" id="subtitle"]]
[[!template text="""ecosystem in Julia in general is as mature as other""" start="00:00:01.509" video="qanda-julia" id="subtitle"]]
[[!template text="""languages, and even debugger infiltrator themselves are""" start="00:00:01.509" video="qanda-julia" id="subtitle"]]
[[!template text="""not particularly well developed. And so I don't think""" start="00:00:01.509" video="qanda-julia" id="subtitle"]]
[[!template text="""there's much we can do about that right now. I think that it's""" start="00:00:15.853" video="qanda-julia" id="subtitle"]]
[[!template text="""unfortunate that most of the development for these type of""" start="00:00:21.570" video="qanda-julia" id="subtitle"]]
[[!template text="""tools is tightly linked to VS code. But even there, I don't""" start="00:00:21.570" video="qanda-julia" id="subtitle"]]
[[!template text="""think that there's much done in terms of interactive""" start="00:00:29.218" video="qanda-julia" id="subtitle"]]
[[!template text="""debugging. So I, yeah, I think this has to be worked on mostly""" start="00:00:29.218" video="qanda-julia" id="subtitle"]]
[[!template text="""on the Julia side first. And then probably Emacs can get""" start="00:00:36.866" video="qanda-julia" id="subtitle"]]
[[!template text="""something out of that. I know that there's development in""" start="00:00:43.820" video="qanda-julia" id="subtitle"]]
[[!template text="""debugger.jl itself for future releases to make it at least""" start="00:00:49.183" video="qanda-julia" id="subtitle"]]
[[!template text="""faster and more stable. But yeah, I think we're not there as""" start="00:00:49.183" video="qanda-julia" id="subtitle"]]
[[!template text="""Julia community itself. So let alone Emacs, integration""" start="00:00:58.809" video="qanda-julia" id="subtitle"]]
[[!template text="""with Emacs. The way I personally debug is mostly using,""" start="00:01:04.192" video="qanda-julia" id="subtitle"]]
[[!template text="""well, debugger and infiltrator with Julia REPL mode in""" start="00:01:08.286" video="qanda-julia" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: Can you call out something that Julia has that Emacs does not, and which could benefit Emacs?""" start="00:01:08.286" video="qanda-julia" id="subtitle"]]</div>[[!template text="""Emacs. The second question, can you call out something that""" start="00:01:08.286" video="qanda-julia" id="subtitle"]]
[[!template text="""Julia has that Emacs does not and which could benefit Emacs?""" start="00:01:18.009" video="qanda-julia" id="subtitle"]]
[[!template text="""Nothing stands out to me except the usual multi-threading""" start="00:01:26.852" video="qanda-julia" id="subtitle"]]
[[!template text="""and things like this. I don't necessarily see something""" start="00:01:28.848" video="qanda-julia" id="subtitle"]]
[[!template text="""that Julia has going on that DMX doesn't have, but I see some""" start="00:01:33.432" video="qanda-julia" id="subtitle"]]
[[!template text="""differences and approaches that I think are important,""" start="00:01:33.432" video="qanda-julia" id="subtitle"]]
[[!template text="""like the community. I think Julia is a very active and tight""" start="00:01:33.432" video="qanda-julia" id="subtitle"]]
[[!template text="""community. Julia uses Slack and is very, very active. I""" start="00:01:47.384" video="qanda-julia" id="subtitle"]]
[[!template text="""think he might say something like that, but it's maybe more""" start="00:01:54.093" video="qanda-julia" id="subtitle"]]
[[!template text="""on Reddit, IRC. JuliaCon is big and brings together lots and""" start="00:01:54.093" video="qanda-julia" id="subtitle"]]
[[!template text="""lots of people. And I think the sense of community is really""" start="00:01:59.078" video="qanda-julia" id="subtitle"]]
[[!template text="""powerful. It's very easy to essentially meet people that""" start="00:02:03.221" video="qanda-julia" id="subtitle"]]
[[!template text="""are interested in what we're building and interested in""" start="00:02:06.364" video="qanda-julia" id="subtitle"]]
[[!template text="""what we're doing and interested in Julian, our, you know,""" start="00:02:06.364" video="qanda-julia" id="subtitle"]]
[[!template text="""hacker spirit. I think Emacs is a very strong community.""" start="00:02:06.364" video="qanda-julia" id="subtitle"]]
[[!template text="""We're here on a Saturday talking about Emacs, which again""" start="00:02:21.228" video="qanda-julia" id="subtitle"]]
[[!template text="""proves that we are doing this. But I'd like to emphasize that""" start="00:02:21.228" video="qanda-julia" id="subtitle"]]
[[!template text="""the community is a really important aspect in Julia that I""" start="00:02:27.192" video="qanda-julia" id="subtitle"]]
[[!template text="""think we should double down on our side. The next question is""" start="00:02:27.192" video="qanda-julia" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: Is there a way to use lisp syntax with Julia, like hy for python or lisp flavoured erlang?""" start="00:02:36.797" video="qanda-julia" id="subtitle"]]</div>[[!template text="""about Lisp syntax with Julia, like what we can do in Python.""" start="00:02:36.797" video="qanda-julia" id="subtitle"]]
[[!template text="""I don't think that's, I don't, I am not aware of any package""" start="00:02:48.038" video="qanda-julia" id="subtitle"]]
[[!template text="""that does that. I would bet that there's something there. I""" start="00:02:48.038" video="qanda-julia" id="subtitle"]]
[[!template text="""think that that's possible. Indeed, there used to be a Lisp""" start="00:02:56.722" video="qanda-julia" id="subtitle"]]
[[!template text="""interpreter in Julia itself until the latest release. The""" start="00:02:59.243" video="qanda-julia" id="subtitle"]]
[[!template text="""syntax parsing was done with a Lisp, it was called TemtoList""" start="00:03:07.647" video="qanda-julia" id="subtitle"]]
[[!template text="""indeed. I think this got rid, get rid of this for our more""" start="00:03:07.647" video="qanda-julia" id="subtitle"]]
[[!template text="""Julia-based solution that is faster and with better code""" start="00:03:16.124" video="qanda-julia" id="subtitle"]]
[[!template text="""provenance. I think that it should be possible to use the""" start="00:03:16.124" video="qanda-julia" id="subtitle"]]
[[!template text="""metaprogramming features in Julia to change the structure""" start="00:03:25.430" video="qanda-julia" id="subtitle"]]
[[!template text="""of your syntax to be a Lispy syntax. I do want to emphasize""" start="00:03:25.430" video="qanda-julia" id="subtitle"]]
[[!template text="""that Julia is heavily inspired by Lisp, so I wouldn't be""" start="00:03:36.238" video="qanda-julia" id="subtitle"]]
[[!template text="""surprised if if something like this were possible.""" start="00:03:36.238" video="qanda-julia" id="subtitle"]]
[[!template text="""I have tried Julia Snail.""" start="00:03:49.309" video="qanda-julia" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: Have you tried the Julia Snail package for Emacs? It tries to be like SLY/SLIME for Common Lisp.""" start="00:03:51.168" video="qanda-julia" id="subtitle"]]</div>[[!template text="""So the next question is about Julia""" start="00:03:51.168" video="qanda-julia" id="subtitle"]]
[[!template text="""Snail. I found Julia REPL to be a little bit easier to set up""" start="00:03:51.270" video="qanda-julia" id="subtitle"]]
[[!template text="""and use. So I just settled on that. I should maybe revisit""" start="00:03:53.312" video="qanda-julia" id="subtitle"]]
[[!template text="""that. In particular, I use the Julia REPL with the vterm""" start="00:04:00.918" video="qanda-julia" id="subtitle"]]
[[!template text="""backend, which essentially makes a companion REPL to my""" start="00:04:03.720" video="qanda-julia" id="subtitle"]]
[[!template text="""scripts. And that works for me. I do think that the tooling""" start="00:04:03.720" video="qanda-julia" id="subtitle"]]
[[!template text="""uh, could be improved. I think there is definitely much room""" start="00:04:15.638" video="qanda-julia" id="subtitle"]]
[[!template text="""and I would like to see improvement in that area. Um, and, uh,""" start="00:04:17.399" video="qanda-julia" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: Is there a data inspector for a Julia REPL available that you can use in Emacs?""" start="00:04:22.940" video="qanda-julia" id="subtitle"]]</div>[[!template text="""so we have data inspector for Julia REPL.""" start="00:04:22.940" video="qanda-julia" id="subtitle"]]
[[!template text="""I don't think so. I don't, is there any data inspector""" start="00:04:32.043" video="qanda-julia" id="subtitle"]]
[[!template text="""in for, for the Julia REPL that we can use in Emacs?""" start="00:04:34.804" video="qanda-julia" id="subtitle"]]
[[!template text="""I'm not sure. I don't think so.""" start="00:04:43.223" video="qanda-julia" id="subtitle"]]
[[!template text="""I think the way I look at data is""" start="00:04:44.840" video="qanda-julia" id="subtitle"]]
[[!template text="""essentially ignoring Emacs when encoded. It's just using the""" start="00:04:47.840" video="qanda-julia" id="subtitle"]]
[[!template text="""REPL. And again, with Julia REPL. So I'm not aware of any""" start="00:04:50.520" video="qanda-julia" id="subtitle"]]
[[!template text="""specialized tool And again, maybe this is, again, a good""" start="00:04:54.760" video="qanda-julia" id="subtitle"]]
[[!template text="""moment to emphasize that tooling, the Julia community""" start="00:04:58.652" video="qanda-julia" id="subtitle"]]
[[!template text="""clusters around VS Code. And there is tools like the, pretty""" start="00:04:58.652" video="qanda-julia" id="subtitle"]]
[[!template text="""much all the work with VS Code, unfortunately. And while""" start="00:05:06.315" video="qanda-julia" id="subtitle"]]
[[!template text="""there's a very, very decent Julia mode and Julia repo mode""" start="00:05:12.578" video="qanda-julia" id="subtitle"]]
[[!template text="""and Julia snail, there's definitely, definitely room for""" start="00:05:12.578" video="qanda-julia" id="subtitle"]]
[[!template text="""improvement.""" start="00:05:12.578" video="qanda-julia" id="subtitle"]]

<div class="transcript-heading">[[!template new="1" text="""Q: Have you tried literate programming Julia (using Org babel or some other means) in Emacs?""" start="00:05:24.443" video="qanda-julia" id="subtitle"]]</div>[[!template text="""Next, we have a question about literate programming in""" start="00:05:24.443" video="qanda-julia" id="subtitle"]]
[[!template text="""Julia. I haven't done much of it with Org Babel or""" start="00:05:24.443" video="qanda-julia" id="subtitle"]]
[[!template text="""anything else. I haven't done much of it. I can say that Julia""" start="00:05:29.505" video="qanda-julia" id="subtitle"]]
[[!template text="""has developed a new iteration of notebooks called Pluto.""" start="00:05:35.827" video="qanda-julia" id="subtitle"]]
[[!template text="""Here I'm thinking about Jupyter notebooks. The Pluto""" start="00:05:46.090" video="qanda-julia" id="subtitle"]]
[[!template text="""notebooks for Julia try to remove a bunch of the pain points""" start="00:05:51.021" video="qanda-julia" id="subtitle"]]
[[!template text="""that Jupyter notebooks have, meaning you cannot easily""" start="00:05:51.021" video="qanda-julia" id="subtitle"]]
[[!template text="""commit them to Git or things like this.""" start="00:05:51.021" video="qanda-julia" id="subtitle"]]
[[!template text="""I haven't used them, but I know some people are very fond of""" start="00:06:06.450" video="qanda-julia" id="subtitle"]]
[[!template text="""them. And so I think that that's what some of the Julia""" start="00:06:06.450" video="qanda-julia" id="subtitle"]]
[[!template text="""community would use for notebooks. And I think they can""" start="00:06:09.872" video="qanda-julia" id="subtitle"]]
[[!template text="""interact with Emacs with no problem. And that would be a form""" start="00:06:15.315" video="qanda-julia" id="subtitle"]]
[[!template text="""of later programming. But if you can do it in Python, you can""" start="00:06:20.974" video="qanda-julia" id="subtitle"]]
[[!template text="""do it in Julia. I think there is no reason. And actually, you""" start="00:06:24.015" video="qanda-julia" id="subtitle"]]
[[!template text="""can take advantage of all this just-in-time or""" start="00:06:30.617" video="qanda-julia" id="subtitle"]]
[[!template text="""just-out-of-time compilation by keeping the same""" start="00:06:30.617" video="qanda-julia" id="subtitle"]]
[[!template text="""session. So I think it will be definitely a nice use case. So""" start="00:06:30.617" video="qanda-julia" id="subtitle"]]
[[!template text="""these are the questions that I see here. I'm going to scroll""" start="00:06:44.681" video="qanda-julia" id="subtitle"]]
[[!template text="""through the comments and see if there's something that I""" start="00:06:48.561" video="qanda-julia" id="subtitle"]]
[[!template text="""should say about comments. I'm excited people want to learn""" start="00:06:48.561" video="qanda-julia" id="subtitle"]]
[[!template text="""Julia. I have to say that if I want to do GPU computing""" start="00:06:56.228" video="qanda-julia" id="subtitle"]]
[[!template text="""nowadays, I find it much easier to do it with Julia than with""" start="00:06:58.990" video="qanda-julia" id="subtitle"]]
[[!template text="""CUDA. So I encourage people to look into that. And I do,""" start="00:06:58.990" video="qanda-julia" id="subtitle"]]
[[!template text="""again, I would like to share what makes me excited about""" start="00:07:11.758" video="qanda-julia" id="subtitle"]]
[[!template text="""Emacs, about this being open, being collaborative, being""" start="00:07:11.758" video="qanda-julia" id="subtitle"]]
[[!template text="""respectable with documentation is something that I find in""" start="00:07:11.758" video="qanda-julia" id="subtitle"]]
[[!template text="""Julia. So I think people that are excited about the same""" start="00:07:11.758" video="qanda-julia" id="subtitle"]]
[[!template text="""features will find a little bit of joy in working with Julia.""" start="00:07:27.367" video="qanda-julia" id="subtitle"]]
[[!template text="""I think I addressed what I have here. I don't know if there's""" start="00:07:38.214" video="qanda-julia" id="subtitle"]]
[[!template text="""anything else that I should add.""" start="00:07:40.189" video="qanda-julia" id="subtitle"]]
[[!template text="""It took me a minute to unmute there.""" start="00:07:51.718" video="qanda-julia" id="subtitle"]]
[[!template text="""No, I think that was awesome. And thank you so much.""" start="00:07:54.040" video="qanda-julia" id="subtitle"]]
[[!template text="""I guess I thought it would""" start="00:07:58.400" video="qanda-julia" id="subtitle"]]
[[!template text="""collapse that shared area on BBB, my mistake, on the stream,""" start="00:08:00.400" video="qanda-julia" id="subtitle"]]
[[!template text="""or I would have left it open. But in any case, no, I thought""" start="00:08:06.560" video="qanda-julia" id="subtitle"]]
[[!template text="""that was great. You did a great job of responding to all the""" start="00:08:12.400" video="qanda-julia" id="subtitle"]]
[[!template text="""questions and comments. And thank you again so much for your""" start="00:08:15.080" video="qanda-julia" id="subtitle"]]
[[!template text="""talk and getting us all excited to learn Julia. Thank you.""" start="00:08:17.880" video="qanda-julia" id="subtitle"]]
[[!template text="""Enjoy EmacsConf. And again, thanks so much for attending,""" start="00:08:24.094" video="qanda-julia" id="subtitle"]]
[[!template text="""for being EmacsConf. Thank you.""" start="00:08:25.335" video="qanda-julia" id="subtitle"]]

</div>Questions or comments? Please e-mail [emacsconf-org-private@gnu.org](mailto:emacsconf-org-private@gnu.org?subject=Comment%20for%20EmacsConf%202023%20julia%3A%20Exploring%20shared%20philosophies%20in%20Julia%20and%20Emacs)


<!-- End of emacsconf-publish-after-page -->