3 ms·
- all the regular expressions in TM grammars are based on oniguruma, a regular expression library written in C. - the only way to interpret the grammars and ge
by alexdima 10y ago
- all the regular expressions in TM grammars are based on oniguruma, a regular expression library written in C.
- the only way to interpret the grammars and get anywhere near original fidelity is to use the exact same regular expression library (with its custom syntax constructs)
in VSCode, our runtime is node.js and we can use a node native module that exposes the library to JavaScript
- in the Monaco Editor, we are constrained to a browser environment where we cannot do anything similar
- we have experimented with Emscripten to compile the C library to asm.js, but performance was very poor even in Firefox (10x slower) and extremely poor in Chrome (100x slower).
- we can revisit this once WebAssembly gets traction in the major browsers, but we will still need to consider the browser matrix we support. i.e. if we support IE11 and only Edge will add WebAssembly support, what will the experience be in IE11, etc.
- alimbada 10y agoSorry if I'm missing something, but why do you care about supporting other browsers? Isn't VSCode built on Electron which is a self contained server/browser environment?
- eduren 10y agoBecause the base Monaco editor is used in other products besides Code. The example I've seen thrown around is configuration editing in Azure consoles.
- wolfgang42 10y agoMonaco is a standalone component which also works in the browser: https://microsoft.github.io/monaco-editor/ https://microsoft.github.io/monaco-editor/ The article says "It was shipped in the form of the Monaco Editor in various Microsoft projects, including Internet Explorer's F12 tools"; presumably some of those projects also embed it into webpages.
- gcp 10y agoMaybe slightly offtopic, but is there any chance we could see a VSCode based on Edge/Chakra? I prefer your font rendering over your competitions', and that's a pretty big issue for an editor.
- Groxx 10y agoIs there a reason the oniguruma syntax can't be translated into other regexes? It'd require a fairly feature-rich engine since oniguruma supports practically everything, but is Chrome missing something fundamental that can't be mimicked? E.g. [::alpha::] could be converted to [a-zA-Z] or the UTF equivalent (though I doubt this particular one is a problem).
- pygy_ 10y agoThey have lookbehind lookup that's only coming now in ESNext , and, more importantly, recursion, if I understand properly[0]. Maybe more things, I stopped reading the docs at that point to comment here. They have other features absent from JS that can be more or less polyfilled, like possessive quantifiers and sticky matching (they do it with an escape sequence, though, so it can only be polyfilled using this trick[1] if the escape character applies to the whole regexp rather than part of it). [0] https://github.com/kkos/oniguruma/blob/1983356862bc3ff795d77e649322c0b3b6583246/doc/RE#L282-L305 https://github.com/kkos/oniguruma/blob/1983356862bc3ff795d77... [1] https://github.com/slevithan/xregexp/issues/152 https://github.com/slevithan/xregexp/issues/152
- Groxx 10y agoYeah, if lookbehinds aren't supported yet, that'd be death. Thanks!