Maybe. We are reaching the limits of my knowledge on the matter.
If I remember correctly, the issue with reflection-only loading was that it was leaking memory. I think the reason is that once an assembly is loaded, it can't be unloaded. So, every parse request in the IDE loads the assembly into memory again. A caching mechanism in Cobra.Compiler.dll that reuses data for assemblies that haven't changed might slow the leak enough to keep the system responsive for a longer coding session perhaps.
I seem to remember reading something about loading the assembly file into a byte array and then loading from that instead of directly off the disk. I'm not sure if that would make any difference though.
Didn't you add an environment variable to turn on reflection only loading? If so I could do some tests.
Forums
Help test next version of MonoDevelop/Xamarin Studio add-in
Re: Help test next version of MonoDevelop/Xamarin Studio add
Ah yes, it's all coming back to me now.
Yes, a cache would help, but not really solve the problem. (We'll want one eventually to improve responsiveness.)
Also, I lean towards System.Reflection not because there is anything wrong with Cecil, but because we already have the code that reads libraries through System.Reflection.
I did some more digging and came across a solution I had read about before, but not yet tried. AppDomain has methods for loading assemblies, but not in reflection-only mode. However, you can create a temporary app domain and invoke Assembly.ReflectionLoadOnly from that, then dispose of the app domain when you're done. Here is a fairly tight example: https://gist.github.com/Shandem/7147978
But then we get into cross app domain calls, marshal by ref, performance issues, etc. Hmm. Maybe we should just use Cecil after all...
Yes, a cache would help, but not really solve the problem. (We'll want one eventually to improve responsiveness.)
Also, I lean towards System.Reflection not because there is anything wrong with Cecil, but because we already have the code that reads libraries through System.Reflection.
I did some more digging and came across a solution I had read about before, but not yet tried. AppDomain has methods for loading assemblies, but not in reflection-only mode. However, you can create a temporary app domain and invoke Assembly.ReflectionLoadOnly from that, then dispose of the app domain when you're done. Here is a fairly tight example: https://gist.github.com/Shandem/7147978
But then we get into cross app domain calls, marshal by ref, performance issues, etc. Hmm. Maybe we should just use Cecil after all...
- Charles
- Posts: 2515
- Location: Los Angeles, CA
Re: Help test next version of MonoDevelop/Xamarin Studio add
thriwkin wrote:I want to think about it, maybe it will take a few days, before I post a reply.
nerdzero,
I thought that my reply would be out-of-topic here.
Therefore I started another thread.
- thriwkin
- Posts: 26
Re: Help test next version of MonoDevelop/Xamarin Studio add
Hi nerdzero
I sometimes get the following error when working in MonoDevelop.
happens right after typing '.' dot (for example .myVar.doThat)
thanks.
"Error in text editor extension chain"
Details: (stack trace)
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object
at Cobra.Compiler.UseDirective.FindSymbol (System.String name) [0x00000] in <filename unknown>:0
at Cobra.Compiler.NameSpace._symbolsForNameFromUseDirectives (System.String name, Cobra.Core_ert_7d347f46c489d84e6e8efe588eda67f2.Set`1 members) [0x00000] in <filename unknown>:0
at Cobra.Compiler.NameSpace.SymbolForName (System.String name) [0x00000] in <filename unknown>:0
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <filename unknown>:0
at Cobra.Core_ert_7d347f46c489d84e6e8efe588eda67f2.CobraImp.InvokeMethod (System.Object obj, System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0
at Cobra.Compiler.Compiler.SymbolForName (System.String name, Boolean haveThis, Boolean isLowerOkay) [0x00000] in <filename unknown>:0
at Cobra.Compiler.Compiler.SymbolForName (System.String name, Boolean haveThis) [0x00000] in <filename unknown>:0
at Cobra.Compiler.AbstractTypeIdentifier._symbolForName (System.String name) [0x00000] in <filename unknown>:0
at Cobra.Compiler.GenericTypeIdentifier._resolveType () [0x00000] in <filename unknown>:0
at Cobra.Compiler.AbstractTypeIdentifier.get_RealType () [0x00000] in <filename unknown>:0
at Cobra.Compiler.ProperDexer._bindInt () [0x00000] in <filename unknown>:0
at Cobra.Compiler.Node.BindInt () [0x00000] in <filename unknown>:0
at Cobra.Compiler.ProperDexer.get_ResultType () [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.Completion.CobraCompletionTextEditorExtension._getTypeForMemberCompletion (ISyntaxNode node) [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.Completion.CobraCompletionTextEditorExtension.HandleCodeCompletion (MonoDevelop.Ide.CodeCompletion.CodeCompletionContext context, Char completionChar, System.Int32& triggerWordLength) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.CompletionTextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.Completion.CobraCompletionTextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Debugger.ExceptionCaughtTextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.SourceEditor.ExtensibleTextEditor.ExtensionKeyPress (Key key, UInt32 ch, ModifierType state) [0x00000] in <filename unknown>:0
I sometimes get the following error when working in MonoDevelop.
happens right after typing '.' dot (for example .myVar.doThat)
thanks.
"Error in text editor extension chain"
Details: (stack trace)
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object
at Cobra.Compiler.UseDirective.FindSymbol (System.String name) [0x00000] in <filename unknown>:0
at Cobra.Compiler.NameSpace._symbolsForNameFromUseDirectives (System.String name, Cobra.Core_ert_7d347f46c489d84e6e8efe588eda67f2.Set`1 members) [0x00000] in <filename unknown>:0
at Cobra.Compiler.NameSpace.SymbolForName (System.String name) [0x00000] in <filename unknown>:0
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
--- End of inner exception stack trace ---
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <filename unknown>:0
at Cobra.Core_ert_7d347f46c489d84e6e8efe588eda67f2.CobraImp.InvokeMethod (System.Object obj, System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0
at Cobra.Compiler.Compiler.SymbolForName (System.String name, Boolean haveThis, Boolean isLowerOkay) [0x00000] in <filename unknown>:0
at Cobra.Compiler.Compiler.SymbolForName (System.String name, Boolean haveThis) [0x00000] in <filename unknown>:0
at Cobra.Compiler.AbstractTypeIdentifier._symbolForName (System.String name) [0x00000] in <filename unknown>:0
at Cobra.Compiler.GenericTypeIdentifier._resolveType () [0x00000] in <filename unknown>:0
at Cobra.Compiler.AbstractTypeIdentifier.get_RealType () [0x00000] in <filename unknown>:0
at Cobra.Compiler.ProperDexer._bindInt () [0x00000] in <filename unknown>:0
at Cobra.Compiler.Node.BindInt () [0x00000] in <filename unknown>:0
at Cobra.Compiler.ProperDexer.get_ResultType () [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.Completion.CobraCompletionTextEditorExtension._getTypeForMemberCompletion (ISyntaxNode node) [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.Completion.CobraCompletionTextEditorExtension.HandleCodeCompletion (MonoDevelop.Ide.CodeCompletion.CodeCompletionContext context, Char completionChar, System.Int32& triggerWordLength) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.CompletionTextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.Completion.CobraCompletionTextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Debugger.ExceptionCaughtTextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.SourceEditor.ExtensibleTextEditor.ExtensionKeyPress (Key key, UInt32 ch, ModifierType state) [0x00000] in <filename unknown>:0
Falun Dafa is Good.
Truth, Compassion, Forbearance is Good.
Truth, Compassion, Forbearance is Good.
- kobi7
- Posts: 82
- Location: Israel
Re: Help test next version of MonoDevelop/Xamarin Studio add
I've noticed this myself. I pushed a change to GitHub a couple days ago that I think should reduce the frequency with which this happens. If you're running anything higher than Cobra svn 3013 the add-in won't compile right now though.
- nerdzero
- Posts: 286
- Location: Chicago, IL
Re: Help test next version of MonoDevelop/Xamarin Studio add
It will build now. I applied your patch. Thanks.
- Charles
- Posts: 2515
- Location: Los Angeles, CA
Re: Help test next version of MonoDevelop/Xamarin Studio add
Hi!
After updating I don't see the problem anymore
thanks, kobi
After updating I don't see the problem anymore
thanks, kobi
Falun Dafa is Good.
Truth, Compassion, Forbearance is Good.
Truth, Compassion, Forbearance is Good.
- kobi7
- Posts: 82
- Location: Israel
Re: Help test next version of MonoDevelop/Xamarin Studio add
Cool. Thanks for reporting back, kobi.
- nerdzero
- Posts: 286
- Location: Chicago, IL
Re: Help test next version of MonoDevelop/Xamarin Studio add
Hello,
I started programming in Cobra today. I love it so far but I'm having some issues with the editor.
I have never worked with Monodevelop nor .Net or C# so I have no idea how to troubleshoot this.
First when trying to install the Monodevelop binding I'm getting errors.
I included git status to show I haven't broke anything. I suspect it has something to do with my cobra or monodevelop version
So I installed the binding using the gui as instructed in http://mdrepo.ramonrocha.com. All was working perfectly for about 6 hours but now I'm getting this error too.
I didn't want to open a github issue because I know it's probably an error on my setup.
I started programming in Cobra today. I love it so far but I'm having some issues with the editor.
I have never worked with Monodevelop nor .Net or C# so I have no idea how to troubleshoot this.
First when trying to install the Monodevelop binding I'm getting errors.
- Code: Select all
~/Programming/Cobra/MonoDevelop.CobraBinding (master) wil$ cobra install.cobra
===============================================================================
This will compile and install the Cobra Language Binding addin for MonoDevelop.
The compiled assemblies will be copied to:
/home/wil/.local/share/MonoDevelop-4.0/LocalInstall/Addins/MonoDevelop.CobraBinding.0.5.2/
===============================================================================
Do you wish to continue? [Y/N]
y
Running xbuild...
Running /usr/local/bin/cobra...
Failed!
std out:
Compilation failed - 1 error, 0 warnings
std err:
Completion/Icons.cobra(47): error: Cannot compile initialization expression at this point. Add an explicit type to the `var` ("as <type>") or move to a `cue init` or change the expression.
The addin was not installed due to compilation errors.
~/Programming/Cobra/MonoDevelop.CobraBinding (master) wil$ git s
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
~/Programming/Cobra/MonoDevelop.CobraBinding (master) wil$
I included git status to show I haven't broke anything. I suspect it has something to do with my cobra or monodevelop version
- Code: Select all
~/Programming/Cobra/MonoDevelop.CobraBinding (master) wil$ cobra --about
The Cobra Programming Language svn:3116 (post 0.9.6) / 2014-05-28
on Mono 3.2.8 CLR v4.0.30319 on Ubuntu 14.04 LTS
at /usr/local/cobra/Cobra-svn-3116/bin/cobra.exe
Copyright (C) 2003-2014 by Cobra Language LLC. All Rights Reserved.
On the web: http://cobra-language.com/
Source: http://cobra-language.com/source
Support: http://cobra-language.com/support
License: http://www.opensource.org/licenses/mit-license.php
Usage: cobra -h
- Code: Select all
~/Programming/Cobra/MonoDevelop.CobraBinding (master) wil$ mono --version
Mono JIT compiler version 3.2.8 (Debian 3.2.8+dfsg-4ubuntu1)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
TLS: __thread
SIGSEGV: altstack
Notifications: epoll
Architecture: amd64
Disabled: none
Misc: softdebug
LLVM: supported, not enabled.
GC: sgen
- Code: Select all
MonoDevelop
Version 4.0.12
So I installed the binding using the gui as instructed in http://mdrepo.ramonrocha.com. All was working perfectly for about 6 hours but now I'm getting this error too.
- Code: Select all
System.NullReferenceException: Object reference not set to an instance of an object
at MonoDevelop.CobraBinding.TypeSystem.ParsedCobraDocument._getNodeFromIds (System.Collections.Generic.List`1 ids, ISyntaxNode parent, System.Collections.Generic.List`1 containingRegions) [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.TypeSystem.ParsedCobraDocument._getNodeFromIds (System.Collections.Generic.List`1 ids, System.Collections.Generic.List`1 containingRegions) [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.TypeSystem.ParsedCobraDocument.ResolveTextToNode (System.String text, System.Collections.Generic.List`1 containingRegions) [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.TypeSystem.ParsedCobraDocument.ResolveOffsetToNode (Int32 offset, Mono.TextEditor.TextDocument txtDoc) [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.Completion.CobraCompletionTextEditorExtension.HandleParameterCompletion (MonoDevelop.Ide.CodeCompletion.CodeCompletionContext context, Char completionChar) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.CompletionTextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.Completion.CobraCompletionTextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.Formatting.CobraIndentationTextEditorExtension.<>n__FabricatedMethod3 (Key , Char , ModifierType ) [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.Formatting.CobraIndentationTextEditorExtension+<>c__DisplayClass1.<KeyPress>b__0 () [0x00000] in <filename unknown>:0
at MonoDevelop.CobraBinding.Formatting.CobraIndentationTextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Ide.Gui.Content.TextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.Debugger.ExceptionCaughtTextEditorExtension.KeyPress (Key key, Char keyChar, ModifierType modifier) [0x00000] in <filename unknown>:0
at MonoDevelop.SourceEditor.ExtensibleTextEditor.ExtensionKeyPress (Key key, UInt32 ch, ModifierType state) [0x00000] in <filename unknown>:0
I didn't want to open a github issue because I know it's probably an error on my setup.
- wilbertom
- Posts: 3
Re: Help test next version of MonoDevelop/Xamarin Studio add
Hi wilbertom,
Just last night (didn't even announce it yet), I created a new package and uploaded it to mdrepo.ramonrocha.com so currently GitHub and the add-in repo host the same thing, v0.5.2. Unfortunately, it only works on MonoDevelop/Xamarin Studio 4.2.5 and it appears you are on 4.0.12. Some APIs changed between these two versions so that's probably why it won't build for you, but that error message is weird. You could try to build this older version of the add-in from October: https://github.com/ramon-rocha/MonoDeve ... 721876.zip I think that's the last version that worked for 4.0.12 but I'm not sure if the latest version of Cobra will build it. You might be rim-rocked between incompatible versions of MonoDevelop and Cobra with regards to the addin.
Regarding the crash with the installation from the repo, does it happen all the time or only when you are working on a certain project or file? If you can help me reproduce it then I can probably fix it.
Oh, and to make things more confusing, the latest version of MonoDevelop is 5.0 which was just released today. This weekend, I will be pushing some changes to the add-in to make it work on that version as well.
Just last night (didn't even announce it yet), I created a new package and uploaded it to mdrepo.ramonrocha.com so currently GitHub and the add-in repo host the same thing, v0.5.2. Unfortunately, it only works on MonoDevelop/Xamarin Studio 4.2.5 and it appears you are on 4.0.12. Some APIs changed between these two versions so that's probably why it won't build for you, but that error message is weird. You could try to build this older version of the add-in from October: https://github.com/ramon-rocha/MonoDeve ... 721876.zip I think that's the last version that worked for 4.0.12 but I'm not sure if the latest version of Cobra will build it. You might be rim-rocked between incompatible versions of MonoDevelop and Cobra with regards to the addin.
Regarding the crash with the installation from the repo, does it happen all the time or only when you are working on a certain project or file? If you can help me reproduce it then I can probably fix it.
Oh, and to make things more confusing, the latest version of MonoDevelop is 5.0 which was just released today. This weekend, I will be pushing some changes to the add-in to make it work on that version as well.
- nerdzero
- Posts: 286
- Location: Chicago, IL
Who is online
Users browsing this forum: No registered users and 7 guests