11 ms·
As an emacs user I have to say that IntelliJ (and pretty much any modern IDE) feels snappier than emacs configured to do anything comparable (lsp-mode/eglot, co
by the-lazy-guy 4y ago
As an emacs user I have to say that IntelliJ (and pretty much any modern IDE) feels snappier than emacs configured to do anything comparable (lsp-mode/eglot, corfu/company, tree-sitter etc).
While IDEs may require more resources, they usually utilize them better.
Emacs is fundamentally single-threaded and not great at async things. With most of the logic written in a very slow non-JIT friendly language with naive blocking GC. Rendering pipeline is also a mess. Underlying internal datastructures are also very naive (which is a good thing when you implement things in C).
Things are slowly changing. emacs now is a lot better than 5 years. So may be in 10 years it will really rival more modern competitors in terms of performance.
Having said all this, emacs universality and extensibility keep me with it.
- omnicognate 4y agoThe asyncness of Intellij IDEs annoys me at times. I'm used (from emacs) to bashing out a series of key combinations in the expectation that the effects of one will be complete before the next is processed. There are cases in Intellij IDEs (can't remember specifics, I'm blissfully back in emacsland and don't anticipate using an IDE again in the near future) where that can result in the later keypresses being processed before the window pops up or whatever from the earlier ones. Just a minor annoyance, really. It would be nice for emacs to improve on the async front, but synchronicity does have its benefits when interacting with humans. I sometimes find the lack of asynchronous behaviour annoying in emacs, but not very often despite using EXWM (so locking up emacs means locking up the window manager).
- singron 4y agoI use IdeaVim on a Mac and I'm 80% sure it reorders keystrokes sometimes when I go between normal and insert mode.
- pindab0ter 4y agoI've never had this happen to me. Could you describe what happens a bit more clearly? Now I'm curious.
- singron 4y agoE.g. I'm in insert mode, then I press esc to go to normal mode and press j to go down one line. Instead, j is inserted. I can't be sure I didn't just make a typo, but this has happened much more often in Intellij than in vim proper, so I think there is something going on where IDEA has a hiccup and scrambles or eats some inputs.
- 29athrowaway 4y agoYou can lower the autocomplete time threshold.
- marcosdumay 4y agoThis is a major annoyance in Visual Studio. You have to stay all the time waiting for feedback from the software, otherwise your commands will get processed on the wrong order. And yes, autocompletion fires from many different keys, and if it misses the keys order, it will automplete into some completely different code.
- nverno 4y agoDoesn't lsp run in a separate process for other editors as well? I've only found emacs slow for larger Java projects in the past, using eclim, and font-locking very large javascript files. But the new lsp-java seems to have cleared that up, and I'm not sure what changed w/ javascript-mode, but it also seems much faster since a few years ago.
- oblio 4y agoLSP runs in a separate process, but handling that process is synchronous in Emacs, I think. So if LSP is slow for something, Emacs will block.
- lallysingh 4y agoYes it gives us both a super-predictable queued operations model for using emacs, and serial operation in a parallel world. Years ago when single core performance was king this wasn't an issue, but now we're stuck having to optimize the long hot path.
- jonnycomputer 4y agoThe next AMD processor should have an optional Emacs dedicated core.
- comfypotato 4y agoSince you mentioned the single-threadedness (and it’s relevant to the discussion of IDE/Emacs): what’s the status of any initiative to move Emacs to multiple cores? I’m single, and I hope to one day have a family etc.. If I end up staying single for long enough, helping move Emacs onto multiple cores is something I fantasize about contributing back to the community that has helped my life so much. Does anyone have any input?
- db48x 4y agoMost of what Emacs does just won’t benefit from massive parallelism. CPUs are ridiculously fast at processing text (AVX2 instructions can process vectors of 32 bytes at a time), and most of the stuff that _can_ benefit from parallelism should just be moved to an external process. For example, querying your compiler for a list of methods that apply to the current object, or a list of functions that start with “Foo” are mostly moving to external processes using LSP as the communication protocol. It would be nice for some things to use background threads, like Gnus polling your IMAP server for email, and Emacs does have the threading mechanisms to handle that now. It’s just a matter of time before someone does the work :)
- comfypotato 4y agoHey! Exactly the response I was looking for. Thanks for this. Your response reminded me of an Intel project about regular expressions. I think it’s called hyperscan, but I’m not sure. It’s a regex engine (I think that’s the correct terminology) that makes dedicated use of very specific Intel instructions to reach incredible regex speeds on Intel processors. Would be cool if Emacs could make use of this tech when configured properly. I bet there are some internals that rely on regex.
- ykonstant 4y agoDoes emacs use specialized instruction sets like AVX2?
- lallysingh 4y agoHa! No. Native compilation just snuck in a little while ago. SIMD will take... longer.
- pabs3 4y agoEmacs now has AoT compilation of EmacsLisp, using GCC's JIT library: https://blog.phundrak.com/emacs-29-what-can-we-expect/ https://blog.phundrak.com/emacs-29-what-can-we-expect/
- the-lazy-guy 4y agoThis is awesome! I use it since initial "gccemacs" announcements. It is still order of magnitude slower than JS. Dynamic binding, ability to redefine or advice any function and fundamentally cache-unfriendly core datastructures (cons-cells) and absence of JIT hotspot optimization do not help to catch up with competition :(
- ragnese 4y agoYeah, Emacs's performance isn't really that great when going head-to-head as an IDE. Yes, it uses less memory and disk cache, but if we're talking about, e.g., working on a large Rust project with Emacs+lsp-mode/eglot+rust-analyzer, you're going to be in the ballpark of IntelliJ for memory usage, and the responsiveness will be nowhere near it. I will say, though, that the disk usage will be much less, and that has mattered for me on this 256GB disk MBP- between Xcode, Docker, and all these package managers for various languages, my disk space has become a precious commodity. I still like Emacs. I prefer free software. I love Magit. But, the UI responsiveness is honestly frustrating when using LSP.
- jmount 4y agoFor me Emacs pretty much grinds to a halt if I turn on showing line numbers.
- User23 4y agoYou’re probably using the old notoriously slow linum-mode. The newer line-number-mode is much snappier.
- TacticalCoder 4y agoTry to determine which one you're using by running "M-x linum-mode" and then "M-x display-line-numbers-mode". Note that you can use both at the same time (which would make zero sense: it's only to troubleshoot which one is problematic for you). Do not use linum-mode anymore. I can display buffers with hundreds of thousands of lines while showing the line numbers (Emacs 29 / native compilation / display-line-numbers-mode / CPU is an AMD 3700X with 32 GB of RAM) and Emacs is ultra responsive.
- mort96 4y agoThis is the kind of thing which infuriates me the most about emacs. There are thousands of similar but not equivalent ways of doing the same thing, both StackOverflow and the emacs wiki contains some (but not all, and not the same, and usually not the right, and usually contradictory) ways of doing things. And it's impossible to figure out which way is the right one without asking around in IRC channels. Why oh why couldn't they improve linenum-mode instead of introducing a new mode.
- mplanchard 4y agoFor anything lsp related, this fork by the lsp authors has been noticeably snappier and more pleasant to use for me (large rust project): https://old.reddit.com/r/emacs/comments/ymrkyn/async_nonblocking_jsonrpc_or_lsp_performance https://old.reddit.com/r/emacs/comments/ymrkyn/async_nonbloc... It moves the json rpc stuff to be async, and makes a real difference in terms of perceived performance.
- the_duke 4y agoThis. I tried to switch to Emacs multiple times, but the lagginess in a non-trivial setup just kills me. I always went back to Neovim.
- throw23948672 4y agoI tried to switch to emacs but couldn't find an introductory tutorial that was written for mere mortals. Currently use vim, or things like gedit and kate that come w/ a DE. I would really like to learn to use emacs, but the last so called "beginner" tutorial I tried started with _learn a new lisp dialect so you can write emacs extensions_. Seriously. Does anyone know where to find a tutorial that teaches you how to do things like open a file, type some stuff, and save the file? Maybe show whitespace change highlighting modes and a few hotkeys if I want to get fancy... but like otherwise normal beginner stuff?
- ReneFroger 4y agoMaybe https://emacs.zeef.com https://emacs.zeef.com might be your friend? There are some tutorials listed there for Emacs.
- owl57 4y agoThere's a built-in tutorial, called by pressing ctrl-h (or f1) and then t.
- celrod 4y agoAside from the built in docs, mastering emacs is quite beginner friendly. It's aimed at people with prior programming experience, but not any emacs experience. You can get a few chapters for free.