Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

discussion + links #1

Closed
timotheecour opened this issue Feb 2, 2019 · 1 comment
Closed

discussion + links #1

timotheecour opened this issue Feb 2, 2019 · 1 comment

Comments

@timotheecour
Copy link

timotheecour commented Feb 2, 2019

IDE's in nim for nim

not sure what's the plugin support with these (good plugin support is indeed fundamental)

client/server communication for plugins

  • sublime model (uses async)
  • RPCS
    • nimtwirp (uses protobuf)
    • GRPC (also supports bidirectional streaming but that feature seems overkill for plugin; i don't know of a nim port)
    • capn'proto (also supports advanced RPC feature to access arbitrary nested data efficiently); has nim ports

shared memory vs RPC (client/server)

shared memory

  • probably simpler for simple things, but may be more complex once you run into memory sharing issues
  • need to take care of blocking issues (could freeze editor)
  • not good for security (eg if plugins are untrusted)
  • a bad plugin could crash the editor
  • potentially faster in memory intensive applications; not sure it applies for text editor unless you're dealing with giant files, then it could be relevant
  • doesn't help with remote editors

RPC

base GUI editor

scintilla

    • open source
  • ported nimscintilla to nimterop - took 10 minutes!

  • not sure how feature-rich compared to sublimetext (including syntax files, tabs, panes within tabs etc)

  • not sure how efficient compared to sublimetext (eg large text buffers, 100's of panes)

  • not sure how advanced it is compared to sublime

sublimetext

    • closed source
    • rich plugin API
    • python (type safety etc); but can be wrapped into a nim API, at some cost

use cases

  • editing a remote file; this should be lag-free except maybe on save/load

misc links

@genotrance
Copy link
Owner

Feud had come quite a ways. Plugin system that started out based on nimterop's has come quite a ways and is working well.

Some plugins use shared memory and threads and feud makes it relatively easy.

RPC has been based on nng and is working fine. Using the bus protocol for now but leverage is still primitive.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants