<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Laputa</title>
    <link>http://laputa.sharpdevelop.net/</link>
    <description>The Web log of the #develop team</description>
    <language>en-us</language>
    <copyright>SharpDevelop Core Team</copyright>
    <lastBuildDate>Fri, 12 Feb 2010 15:20:53 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>team@icsharpcode.net</managingEditor>
    <webMaster>team@icsharpcode.net</webMaster>
    <item>
      <trackback:ping>http://laputa.sharpdevelop.net/Trackback.aspx?guid=18dca902-9b8c-46bb-94ce-af8a1b07bc1e</trackback:ping>
      <pingback:server>http://laputa.sharpdevelop.net/pingback.aspx</pingback:server>
      <pingback:target>http://laputa.sharpdevelop.net/PermaLink,guid,18dca902-9b8c-46bb-94ce-af8a1b07bc1e.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://laputa.sharpdevelop.net/CommentView,guid,18dca902-9b8c-46bb-94ce-af8a1b07bc1e.aspx</wfw:comment>
      <wfw:commentRss>http://laputa.sharpdevelop.net/SyndicationService.asmx/GetEntryCommentsRss?guid=18dca902-9b8c-46bb-94ce-af8a1b07bc1e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Laputa started out as the team's joint blog when the team was small, and
feature news were far and few between. As the team has grown, every developer got
their own blog at <a href="http://community.sharpdevelop.net/blogs/">http://community.sharpdevelop.net/blogs/</a>. 
</p>
        <p>
Now, the rest of us is moving too:
</p>
        <p>
          <a href="http://community.sharpdevelop.net/blogs/danielgrunwald/default.aspx">Daniel</a>
        </p>
        <p>
          <a href="http://community.sharpdevelop.net/blogs/christophwille/default.aspx">Chris</a>
        </p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=18dca902-9b8c-46bb-94ce-af8a1b07bc1e" />
      </body>
      <title>The Team Blog is Moving</title>
      <guid isPermaLink="false">http://laputa.sharpdevelop.net/PermaLink,guid,18dca902-9b8c-46bb-94ce-af8a1b07bc1e.aspx</guid>
      <link>http://laputa.sharpdevelop.net/TheTeamBlogIsMoving.aspx</link>
      <pubDate>Fri, 12 Feb 2010 15:20:53 GMT</pubDate>
      <description>&lt;p&gt;
Laputa started out as the team's&amp;nbsp;joint&amp;nbsp;blog when the team was small, and
feature news were far and few between. As the team has grown, every developer got
their own blog at &lt;a href="http://community.sharpdevelop.net/blogs/"&gt;http://community.sharpdevelop.net/blogs/&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Now, the rest of us is moving too:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://community.sharpdevelop.net/blogs/danielgrunwald/default.aspx"&gt;Daniel&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://community.sharpdevelop.net/blogs/christophwille/default.aspx"&gt;Chris&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=18dca902-9b8c-46bb-94ce-af8a1b07bc1e" /&gt;</description>
      <comments>http://laputa.sharpdevelop.net/CommentView,guid,18dca902-9b8c-46bb-94ce-af8a1b07bc1e.aspx</comments>
      <category>Chris</category>
    </item>
    <item>
      <trackback:ping>http://laputa.sharpdevelop.net/Trackback.aspx?guid=11b615fa-52f0-423a-ac18-48e43e3501c0</trackback:ping>
      <pingback:server>http://laputa.sharpdevelop.net/pingback.aspx</pingback:server>
      <pingback:target>http://laputa.sharpdevelop.net/PermaLink,guid,11b615fa-52f0-423a-ac18-48e43e3501c0.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://laputa.sharpdevelop.net/CommentView,guid,11b615fa-52f0-423a-ac18-48e43e3501c0.aspx</wfw:comment>
      <wfw:commentRss>http://laputa.sharpdevelop.net/SyndicationService.asmx/GetEntryCommentsRss?guid=11b615fa-52f0-423a-ac18-48e43e3501c0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
You are building SharpDevelop using debugbuild.bat and getting 
</p>
        <p>
          <em>fatal error C1083: Cannot open include file: 'windows.h': No such file or directory</em>
        </p>
        <p>
or
</p>
        <p>
          <em>\corprofilercallbackimpl.h(19): fatal error C1083: Cannot open include file: 'cor.h':
No such file or directory</em>
        </p>
        <p>
?
</p>
        <p>
One possible cause could be that you have more than one Windows SDK installed on your
box. Simply start the Windows SDK Configuration Tool, and select 7.0A (that's the
version number for Windows 7 SDK with .NET 3.5 SP1 SDK):
</p>
        <p>
          <img border="0" src="http://laputa.sharpdevelop.net/content/binary/winsdkver.png" />
        </p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=11b615fa-52f0-423a-ac18-48e43e3501c0" />
      </body>
      <title>fatal error C1083: Cannot open include file: 'windows.h': No such file or directory</title>
      <guid isPermaLink="false">http://laputa.sharpdevelop.net/PermaLink,guid,11b615fa-52f0-423a-ac18-48e43e3501c0.aspx</guid>
      <link>http://laputa.sharpdevelop.net/fatalErrorC1083CannotOpenIncludeFileWindowshNoSuchFileOrDirectory.aspx</link>
      <pubDate>Tue, 05 Jan 2010 15:01:35 GMT</pubDate>
      <description>&lt;p&gt;
You are building SharpDevelop using debugbuild.bat and getting 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;fatal error C1083: Cannot open include file: 'windows.h': No such file or directory&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
or
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;\corprofilercallbackimpl.h(19): fatal error C1083: Cannot open include file: 'cor.h':
No such file or directory&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
?
&lt;/p&gt;
&lt;p&gt;
One possible cause could be that you have more than one Windows SDK installed on your
box. Simply start the Windows SDK Configuration Tool, and select 7.0A (that's the
version number for Windows 7 SDK with .NET 3.5 SP1 SDK):
&lt;/p&gt;
&lt;p&gt;
&lt;img border=0 src="http://laputa.sharpdevelop.net/content/binary/winsdkver.png"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=11b615fa-52f0-423a-ac18-48e43e3501c0" /&gt;</description>
      <comments>http://laputa.sharpdevelop.net/CommentView,guid,11b615fa-52f0-423a-ac18-48e43e3501c0.aspx</comments>
      <category>Chris</category>
    </item>
    <item>
      <trackback:ping>http://laputa.sharpdevelop.net/Trackback.aspx?guid=cf507c8b-e2b3-4f91-bbf2-98c70e3f7d71</trackback:ping>
      <pingback:server>http://laputa.sharpdevelop.net/pingback.aspx</pingback:server>
      <pingback:target>http://laputa.sharpdevelop.net/PermaLink,guid,cf507c8b-e2b3-4f91-bbf2-98c70e3f7d71.aspx</pingback:target>
      <dc:creator>Daniel Grunwald</dc:creator>
      <wfw:comment>http://laputa.sharpdevelop.net/CommentView,guid,cf507c8b-e2b3-4f91-bbf2-98c70e3f7d71.aspx</wfw:comment>
      <wfw:commentRss>http://laputa.sharpdevelop.net/SyndicationService.asmx/GetEntryCommentsRss?guid=cf507c8b-e2b3-4f91-bbf2-98c70e3f7d71</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Starting with SharpDevelop 3.1 RC2, new
projects are created with a "Target CPU" setting of "x86". Previously, projects were
created as "AnyCPU". This change affects only new projects; existing projects keep
their old setting.<br /><br />
Now, what is the difference between these settings? On 32-bit Windows, there isn't
any. But on 64-bit Windows, for <b>programs</b>, the "x86" setting means your program
will run as a 32-bit process in the "Windows on Windows" emulation layer. AnyCPU programs
would run as a native 64-bit process.<br />
For <b>libraries</b>, the new setting will prevent them from being loaded into 64-bit
processes.<br /><br />
Now, restricting stuff to 32-bit doesn't sound like it's the way forward. Why did
we do this change?<br /><ol><li>
If you never test on 64-bit Windows, the new setting ensures your program will run
in compatibility mode. This is better than breaking on your user's 64-bit machines
because you unknowingly had 32-bit-only code in your program.<br /></li><li>
The SharpDevelop debugger does not yet support 64-bit processes.<br /></li><li>
Microsoft did the same change: Visual Studio 2010 also creates x86 projects by default.</li></ol>
The main problem with the target processor is that <b>you cannot mix libraries with
different processor types</b>. If your program is running as 64-bit process, it cannot
load 32-bit libraries. If your program is running as 32-bit process, it cannot load
64-bit libraries.<br /><b>If you have an existing AnyCPU solution</b> and add new projects to it using SharpDevelop
3.1, <b>you should change the target CPU of all new projects back to AnyCPU.</b><br /><br />
As soon as your program depends on an unmanaged library, you will be forced to pick
the corresponding processor type (e.g. SharpDevelop includes 32-bit SQLite and Subversion,
so it must run as a 32-bit process). Unless your program is completely managed, AnyCPU
is a bad idea because you would have to load a different unmanaged library depending
on the process type your program got loaded into.<br /><br />
For purely managed libraries, the situation is different. Here I must recommend to
use AnyCPU to allow your library to be loaded into any process type. In fact, in the
case of SharpDevelop, only the executable (SharpDevelop.exe) is marked as 32-bit;
all other libraries are AnyCPU.<br /><img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=cf507c8b-e2b3-4f91-bbf2-98c70e3f7d71" /></body>
      <title>SharpDevelop now creates projects as 32-bit by default</title>
      <guid isPermaLink="false">http://laputa.sharpdevelop.net/PermaLink,guid,cf507c8b-e2b3-4f91-bbf2-98c70e3f7d71.aspx</guid>
      <link>http://laputa.sharpdevelop.net/SharpDevelopNowCreatesProjectsAs32bitByDefault.aspx</link>
      <pubDate>Sun, 06 Sep 2009 13:10:51 GMT</pubDate>
      <description>Starting with SharpDevelop 3.1 RC2, new projects are created with a "Target CPU" setting of "x86". Previously, projects were created as "AnyCPU". This change affects only new projects; existing projects keep their old setting.&lt;br&gt;
&lt;br&gt;
Now, what is the difference between these settings? On 32-bit Windows, there isn't
any. But on 64-bit Windows, for &lt;b&gt;programs&lt;/b&gt;, the "x86" setting means your program
will run as a 32-bit process in the "Windows on Windows" emulation layer. AnyCPU programs
would run as a native 64-bit process.&lt;br&gt;
For &lt;b&gt;libraries&lt;/b&gt;, the new setting will prevent them from being loaded into 64-bit
processes.&lt;br&gt;
&lt;br&gt;
Now, restricting stuff to 32-bit doesn't sound like it's the way forward. Why did
we do this change?&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;
If you never test on 64-bit Windows, the new setting ensures your program will run
in compatibility mode. This is better than breaking on your user's 64-bit machines
because you unknowingly had 32-bit-only code in your program.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
The SharpDevelop debugger does not yet support 64-bit processes.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Microsoft did the same change: Visual Studio 2010 also creates x86 projects by default.&lt;/li&gt;
&lt;/ol&gt;
The main problem with the target processor is that &lt;b&gt;you cannot mix libraries with
different processor types&lt;/b&gt;. If your program is running as 64-bit process, it cannot
load 32-bit libraries. If your program is running as 32-bit process, it cannot load
64-bit libraries.&lt;br&gt;
&lt;b&gt;If you have an existing AnyCPU solution&lt;/b&gt; and add new projects to it using SharpDevelop
3.1, &lt;b&gt;you should change the target CPU of all new projects back to AnyCPU.&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
As soon as your program depends on an unmanaged library, you will be forced to pick
the corresponding processor type (e.g. SharpDevelop includes 32-bit SQLite and Subversion,
so it must run as a 32-bit process). Unless your program is completely managed, AnyCPU
is a bad idea because you would have to load a different unmanaged library depending
on the process type your program got loaded into.&lt;br&gt;
&lt;br&gt;
For purely managed libraries, the situation is different. Here I must recommend to
use AnyCPU to allow your library to be loaded into any process type. In fact, in the
case of SharpDevelop, only the executable (SharpDevelop.exe) is marked as 32-bit;
all other libraries are AnyCPU.&lt;br&gt;
&lt;img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=cf507c8b-e2b3-4f91-bbf2-98c70e3f7d71" /&gt;</description>
      <comments>http://laputa.sharpdevelop.net/CommentView,guid,cf507c8b-e2b3-4f91-bbf2-98c70e3f7d71.aspx</comments>
      <category>Daniel</category>
    </item>
    <item>
      <trackback:ping>http://laputa.sharpdevelop.net/Trackback.aspx?guid=57419517-b4cc-43a1-8ca1-c0b99dcd508b</trackback:ping>
      <pingback:server>http://laputa.sharpdevelop.net/pingback.aspx</pingback:server>
      <pingback:target>http://laputa.sharpdevelop.net/PermaLink,guid,57419517-b4cc-43a1-8ca1-c0b99dcd508b.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://laputa.sharpdevelop.net/CommentView,guid,57419517-b4cc-43a1-8ca1-c0b99dcd508b.aspx</wfw:comment>
      <wfw:commentRss>http://laputa.sharpdevelop.net/SyndicationService.asmx/GetEntryCommentsRss?guid=57419517-b4cc-43a1-8ca1-c0b99dcd508b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
Later today, this year's #d^3 will wind down. It is the first time that the event
went over full four days, but we kept the familiar location: Bad Ischl, the heart
of the Salzkammergut (Austria, for those of you thinking in larger geographical
terms).
</p>
        <p>
This year's participants are pictured in the below photo (left to right): Tomasz (Gsoc:
C++ Backend Binding), Daniel (Senior Developer, Architect), Martin (Gsoc: Debugger
Visualizer), Siegfried (Gsoc: Xaml Binding), David (Debugger), Peter (SharpDevelop
Reports), Chris (Project Management).
</p>
        <p>
          <img src="http://laputa.sharpdevelop.net/content/binary/gruppenfoto2009kl.jpg" border="0" />
        </p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=57419517-b4cc-43a1-8ca1-c0b99dcd508b" />
      </body>
      <title>SharpDevelop Developer Days 2009</title>
      <guid isPermaLink="false">http://laputa.sharpdevelop.net/PermaLink,guid,57419517-b4cc-43a1-8ca1-c0b99dcd508b.aspx</guid>
      <link>http://laputa.sharpdevelop.net/SharpDevelopDeveloperDays2009.aspx</link>
      <pubDate>Sun, 30 Aug 2009 13:57:11 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Later today, this year's #d^3 will wind down. It is the first time that the event
went over full four days, but we kept the familiar location: Bad Ischl, the heart
of the Salzkammergut (Austria,&amp;nbsp;for those of you thinking in larger geographical
terms).
&lt;/p&gt;
&lt;p&gt;
This year's participants are pictured in the below photo (left to right): Tomasz (Gsoc:
C++ Backend Binding), Daniel (Senior Developer, Architect), Martin (Gsoc: Debugger
Visualizer), Siegfried (Gsoc: Xaml Binding), David (Debugger), Peter (SharpDevelop
Reports), Chris (Project Management).
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://laputa.sharpdevelop.net/content/binary/gruppenfoto2009kl.jpg" border="0"&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=57419517-b4cc-43a1-8ca1-c0b99dcd508b" /&gt;</description>
      <comments>http://laputa.sharpdevelop.net/CommentView,guid,57419517-b4cc-43a1-8ca1-c0b99dcd508b.aspx</comments>
      <category>Chris</category>
    </item>
    <item>
      <trackback:ping>http://laputa.sharpdevelop.net/Trackback.aspx?guid=2223b9f6-c02d-4943-94b6-2e4ff8d26b46</trackback:ping>
      <pingback:server>http://laputa.sharpdevelop.net/pingback.aspx</pingback:server>
      <pingback:target>http://laputa.sharpdevelop.net/PermaLink,guid,2223b9f6-c02d-4943-94b6-2e4ff8d26b46.aspx</pingback:target>
      <dc:creator>Daniel Grunwald</dc:creator>
      <wfw:comment>http://laputa.sharpdevelop.net/CommentView,guid,2223b9f6-c02d-4943-94b6-2e4ff8d26b46.aspx</wfw:comment>
      <wfw:commentRss>http://laputa.sharpdevelop.net/SyndicationService.asmx/GetEntryCommentsRss?guid=2223b9f6-c02d-4943-94b6-2e4ff8d26b46</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">In SharpDevelop 4.0.0.4711, I have rewritten
the ParserService class.<br /><br />
There are lots of changes.<br />
First, <b>from the point of view of an AddIn implementing IParser:</b><br /><ul><li>
SharpDevelop will not create a single instance of your class, but one instance per
file.</li><li>
Keep in mind that there might be concurrent parser runs for the same file. IParser
implementations must be thread-safe.<br /></li><li>
The ITextBuffer interface now provides a 'Version' property which allows comparing
two versions of the same document and efficiently retrieving the changes between them.</li></ul>
Together, these changes allow for the implementation of incremental parsers. The parser
instance can simply store the ITextBufferVersion of a the last run in a field and
use it to detect the changes to the next version.<br />
We do not plan to write replace our existing parsers with incremental parsers now
- but we are working on an incremental XML parser. The XAML code completion support
is already taking advantage of this; and once we re-implement XML code folding for
SharpDevelop 4, it will likely use this incremental parser, too.<br /><br />
However, a Parser instance should never cache the ICompilationUnit or parts of it:
it now is possible for a file to have multiple compilation units (one per project
that contains it). See "Support for files shared between multiple projects" below.<br /><br />
Originally, I wanted to give a "no-concurrency guarantee" for IParser implementations,
i.e. the ParserService would ensure that there is only a single parser run for each
file. However, to implement this, a per-file lock while calling into the parser was
required. The main thread could wait for existing parser runs to finish while the
parser implementation would wait for the main thread to run an invoked method -&gt;
deadlock.<br />
In the end, I decided the IParser implementation should have the responsibility for
this - if it needs to avoid concurrent execution, it should use a lock.<br /><br />
For someone <b>using the ParserService:</b><br /><ul><li>
Methods dealing with assembly references have been moved into the new class 'AssemblyParserService'.</li><li>
The remaining methods are now documented, in particular regarding their thread-safety.<br /></li><li>
All events are now raised on the main thread. This guarantees that events arrive in
the correct order and makes consuming them easier.</li><li>
EnqueueForParsing has been renamed to BeginParse and now provides a <a href="http://en.wikipedia.org/wiki/Futures_and_promises">future</a> (<a href="http://msdn.microsoft.com/en-us/library/dd321424%28VS.100%29.aspx">Task</a>&lt;ParseInformation&gt;)
to allow waiting for the result. However, to avoid deadlocks, this should not be done
by any thread the parser might be waiting for (especially the main thread).<br /></li><li>
The ParseFile method does not necessarily parse the snapshot of the file you specify
- it might parse a newer version instead (but never an older version). Unlike BeginParse().Wait(),
ParseFile() is safe to call from the main thread.<br /></li><li>
If a file hasn't changed, calling ParseFile is a no-op.<br /></li><li>
The ParseInformation class has been made immutable. Support for 'ValidCompilationUnit'
and 'DirtyCompilationUnit' has been removed.</li><li>
The GetParser() method allows retrieving the IParser instance for a specific file.
This is useful in some special cases for using details of specific IParser implementations.<br /></li></ul>
The API changes here are more limited. Most important is the change to ParseInformation:
the existing concept of keeping an old but valid compilation unit during parse errors
was dropped because the was no useful upper bound on the age of the valid compilation
unit; in some cases the 'valid compilation unit' might be several hours old and would
represent an empty file.<br />
All CompilationUnit-properties on ParseInformation now return same value; the old
properties will be marked [Obsolete].<br /><br />
If a parser wants to reuse information from old parse runs because its error recovery
is not reliable enough, the parser itself now has to maintain this state and mix it
into the new compilation units - doing this is much easier now due to 'one IParser
instance per file'.<br /><br /><br /><b>Support for files shared between multiple projects</b><br />
Also, there has been a major internal change that isn't apparent in the API:<br />
A single file can now have multiple ParseInformation instances - one per project that
contains the file. Previously, files used by multiple projects would show up in code
completion only for one of the projects. Now the file will be parsed once for each
project that contains it.<br /><br />
Because a single IParser instance is used for all these parse runs, it is possible
for incremental parsers to avoid redundantly parsing the file. However, a separate
ICompilationUnit must be produced for each run because it contains a pointer to the
parent project content.<br /><br /><br /><p></p><img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=2223b9f6-c02d-4943-94b6-2e4ff8d26b46" /></body>
      <title>ParserService Refactoring</title>
      <guid isPermaLink="false">http://laputa.sharpdevelop.net/PermaLink,guid,2223b9f6-c02d-4943-94b6-2e4ff8d26b46.aspx</guid>
      <link>http://laputa.sharpdevelop.net/ParserServiceRefactoring.aspx</link>
      <pubDate>Mon, 17 Aug 2009 17:06:32 GMT</pubDate>
      <description>In SharpDevelop 4.0.0.4711, I have rewritten the ParserService class.&lt;br&gt;
&lt;br&gt;
There are lots of changes.&lt;br&gt;
First, &lt;b&gt;from the point of view of an AddIn implementing IParser:&lt;/b&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
SharpDevelop will not create a single instance of your class, but one instance per
file.&lt;/li&gt;
&lt;li&gt;
Keep in mind that there might be concurrent parser runs for the same file. IParser
implementations must be thread-safe.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
The ITextBuffer interface now provides a 'Version' property which allows comparing
two versions of the same document and efficiently retrieving the changes between them.&lt;/li&gt;
&lt;/ul&gt;
Together, these changes allow for the implementation of incremental parsers. The parser
instance can simply store the ITextBufferVersion of a the last run in a field and
use it to detect the changes to the next version.&lt;br&gt;
We do not plan to write replace our existing parsers with incremental parsers now
- but we are working on an incremental XML parser. The XAML code completion support
is already taking advantage of this; and once we re-implement XML code folding for
SharpDevelop 4, it will likely use this incremental parser, too.&lt;br&gt;
&lt;br&gt;
However, a Parser instance should never cache the ICompilationUnit or parts of it:
it now is possible for a file to have multiple compilation units (one per project
that contains it). See "Support for files shared between multiple projects" below.&lt;br&gt;
&lt;br&gt;
Originally, I wanted to give a "no-concurrency guarantee" for IParser implementations,
i.e. the ParserService would ensure that there is only a single parser run for each
file. However, to implement this, a per-file lock while calling into the parser was
required. The main thread could wait for existing parser runs to finish while the
parser implementation would wait for the main thread to run an invoked method -&amp;gt;
deadlock.&lt;br&gt;
In the end, I decided the IParser implementation should have the responsibility for
this - if it needs to avoid concurrent execution, it should use a lock.&lt;br&gt;
&lt;br&gt;
For someone &lt;b&gt;using the ParserService:&lt;/b&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Methods dealing with assembly references have been moved into the new class 'AssemblyParserService'.&lt;/li&gt;
&lt;li&gt;
The remaining methods are now documented, in particular regarding their thread-safety.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
All events are now raised on the main thread. This guarantees that events arrive in
the correct order and makes consuming them easier.&lt;/li&gt;
&lt;li&gt;
EnqueueForParsing has been renamed to BeginParse and now provides a &lt;a href="http://en.wikipedia.org/wiki/Futures_and_promises"&gt;future&lt;/a&gt; (&lt;a href="http://msdn.microsoft.com/en-us/library/dd321424%28VS.100%29.aspx"&gt;Task&lt;/a&gt;&amp;lt;ParseInformation&amp;gt;)
to allow waiting for the result. However, to avoid deadlocks, this should not be done
by any thread the parser might be waiting for (especially the main thread).&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
The ParseFile method does not necessarily parse the snapshot of the file you specify
- it might parse a newer version instead (but never an older version). Unlike BeginParse().Wait(),
ParseFile() is safe to call from the main thread.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
If a file hasn't changed, calling ParseFile is a no-op.&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
The ParseInformation class has been made immutable. Support for 'ValidCompilationUnit'
and 'DirtyCompilationUnit' has been removed.&lt;/li&gt;
&lt;li&gt;
The GetParser() method allows retrieving the IParser instance for a specific file.
This is useful in some special cases for using details of specific IParser implementations.&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
The API changes here are more limited. Most important is the change to ParseInformation:
the existing concept of keeping an old but valid compilation unit during parse errors
was dropped because the was no useful upper bound on the age of the valid compilation
unit; in some cases the 'valid compilation unit' might be several hours old and would
represent an empty file.&lt;br&gt;
All CompilationUnit-properties on ParseInformation now return same value; the old
properties will be marked [Obsolete].&lt;br&gt;
&lt;br&gt;
If a parser wants to reuse information from old parse runs because its error recovery
is not reliable enough, the parser itself now has to maintain this state and mix it
into the new compilation units - doing this is much easier now due to 'one IParser
instance per file'.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Support for files shared between multiple projects&lt;/b&gt;
&lt;br&gt;
Also, there has been a major internal change that isn't apparent in the API:&lt;br&gt;
A single file can now have multiple ParseInformation instances - one per project that
contains the file. Previously, files used by multiple projects would show up in code
completion only for one of the projects. Now the file will be parsed once for each
project that contains it.&lt;br&gt;
&lt;br&gt;
Because a single IParser instance is used for all these parse runs, it is possible
for incremental parsers to avoid redundantly parsing the file. However, a separate
ICompilationUnit must be produced for each run because it contains a pointer to the
parent project content.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=2223b9f6-c02d-4943-94b6-2e4ff8d26b46" /&gt;</description>
      <comments>http://laputa.sharpdevelop.net/CommentView,guid,2223b9f6-c02d-4943-94b6-2e4ff8d26b46.aspx</comments>
      <category>Daniel</category>
    </item>
    <item>
      <trackback:ping>http://laputa.sharpdevelop.net/Trackback.aspx?guid=ec5316c9-cfeb-4cf1-bb31-2afb463bd68a</trackback:ping>
      <pingback:server>http://laputa.sharpdevelop.net/pingback.aspx</pingback:server>
      <pingback:target>http://laputa.sharpdevelop.net/PermaLink,guid,ec5316c9-cfeb-4cf1-bb31-2afb463bd68a.aspx</pingback:target>
      <dc:creator>Daniel Grunwald</dc:creator>
      <wfw:comment>http://laputa.sharpdevelop.net/CommentView,guid,ec5316c9-cfeb-4cf1-bb31-2afb463bd68a.aspx</wfw:comment>
      <wfw:commentRss>http://laputa.sharpdevelop.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ec5316c9-cfeb-4cf1-bb31-2afb463bd68a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">SharpDevelop uses the MSBuild libraries
for compilation. But when you compile a project inside SharpDevelop, there's more
going on than a simple call to MSBuild.<br /><br />
SharpDevelop does not pass the whole solution to MSBuild, but performs one build for
each project. This is done to give SharpDevelop more control - e.g. we can pass properties
to MSBuild per-project. For example, when you click "Run code analysis on project
X", we'll first build all dependencies of X normally, and then project X with code
analysis enabled. A normal MSBuild call (e.g. if you use it on the command line) would
perform code analysis on all dependencies of X, too.<br /><br />
When calling MSBuild on a project on the command line, MSBuild will find all referenced
projects and build them recursively. We have to prevent this kind of recursive build
inside SharpDevelop, as we already took care of the referenced projects. We don't
want MSBuild to check referenced projects for changes repeatedly (this would dramatically
slow down builds), and of course we need to prevent MSBuild from running stuff like
code analysis on the dependencies. Fortunately, the Visual Studio team had the same
requirement, so SharpDevelop can simply set the property "BuildingInsideVisualStudio"
to true to disable recursive builds.<br /><br />
However, using that property, MSBuild will call the C# compiler on every build, even
if no source files were changed. This is desired in Visual Studio - VS has its own
"host compiler" that does change detection. But it's bad for SharpDevelop. As a workaround,
we override the MSBuild target responsible for this and fix it. This is an <b>in-memory
modification </b>to your project file; it never gets saved to disk.<br /><br />
Another point where we use this kind of in-memory modifications is for <b>importing
additional .targets files </b>in your project. Some AddIns in SharpDevelop do this
to add new features to the build process - for example the code analysis AddIn.<br /><br />
Now enter <b>parallel builds</b>. It would be nice to be able to call MSBuild on multiple
threads and compile projects in parallel. Unfortunately, that's not possible. MSBuild
uses the process's <b>working directory</b> as a global variable. In one process,
only one build can run at a time. Even worse: if you have MSBuild in your process,
all your other code must deal with concurrent changes to the working directory.<br /><br />
In <b>.NET 3.5</b>, Microsoft introduced the "/m" switch in MSBuild. This makes MSBuild
create multiple worker processes (usually one per processor), enabling concurrent
builds. Unfortunately, this feature is exposed in the MSBuild API only through a single
method, and that only allows several project files from the hard disk in parallel.
It does not support in-memory projects; it cannot even compile projects in parallel
if there are dependencies. Microsoft solves the latter problem by separating the project
in the solution into 'levels' which depend only on projects from the previous level.
However, this doesn't mix well with the way building is integrated in SharpDevelop
- we don't use levels but do a kind of topological sort on the dependency graph, and
not all SharpDevelop project have to use MSBuild; AddIn authors could choose their
own project format and build engine. In the end, I had to <a href="http://laputa.sharpdevelop.net/CompilingInSharpDevelopJustGot30Faster.aspx">create
my own build worker executable</a>.<br /><br />
Now<b></b>in <b>.NET 4.0</b>, Microsoft created a <b>completely new MSBuild API</b>.
The 'level' problem is solved: the new API allows adding new jobs to a running build.
It also seems like it is possible to build in-memory projects in parallel now. But
as it turned out, in-memory changes only work in the primary build worker (in-process),
all other workers load the file from the hard disk and <b>ignore our changes</b>.<br />
Instead of going back to our custom build worker, however; I decided to find a different
solution for handling our modifications. Microsoft.Common.targets contains several
extensions points adding custom .targets files by setting a property. A good solution
for added a custom new target might be setting "CustomAfterMicrosoftCommonTargets"
to the name of the .targets file. However, this might conflict with projects that
already use this feature, so instead I chose "CodeAnalysisTargets". SharpDevelop comes
with its own code analysis targets, so it doesn't hurt if we disable the Microsoft
targets.<br />
So in the end, the solution is trivial: create a temporary file containing only our
modifications and set a property to tell MSBuild to pick up that file.<br /><br />
Why couldn't I simply write the project file including the modifications into a temporary
file? The <a href="http://msdn.microsoft.com/en-us/library/ms164309.aspx">MSBuild
reserved properties</a> would point to the temporary file and custom build events
using those properties would likely fail.<img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=ec5316c9-cfeb-4cf1-bb31-2afb463bd68a" /></body>
      <title>Compiling with MSBuild in SharpDevelop</title>
      <guid isPermaLink="false">http://laputa.sharpdevelop.net/PermaLink,guid,ec5316c9-cfeb-4cf1-bb31-2afb463bd68a.aspx</guid>
      <link>http://laputa.sharpdevelop.net/CompilingWithMSBuildInSharpDevelop.aspx</link>
      <pubDate>Sat, 13 Jun 2009 13:09:44 GMT</pubDate>
      <description>SharpDevelop uses the MSBuild libraries for compilation. But when you compile a project inside SharpDevelop, there's more going on than a simple call to MSBuild.&lt;br&gt;
&lt;br&gt;
SharpDevelop does not pass the whole solution to MSBuild, but performs one build for
each project. This is done to give SharpDevelop more control - e.g. we can pass properties
to MSBuild per-project. For example, when you click "Run code analysis on project
X", we'll first build all dependencies of X normally, and then project X with code
analysis enabled. A normal MSBuild call (e.g. if you use it on the command line) would
perform code analysis on all dependencies of X, too.&lt;br&gt;
&lt;br&gt;
When calling MSBuild on a project on the command line, MSBuild will find all referenced
projects and build them recursively. We have to prevent this kind of recursive build
inside SharpDevelop, as we already took care of the referenced projects. We don't
want MSBuild to check referenced projects for changes repeatedly (this would dramatically
slow down builds), and of course we need to prevent MSBuild from running stuff like
code analysis on the dependencies. Fortunately, the Visual Studio team had the same
requirement, so SharpDevelop can simply set the property "BuildingInsideVisualStudio"
to true to disable recursive builds.&lt;br&gt;
&lt;br&gt;
However, using that property, MSBuild will call the C# compiler on every build, even
if no source files were changed. This is desired in Visual Studio - VS has its own
"host compiler" that does change detection. But it's bad for SharpDevelop. As a workaround,
we override the MSBuild target responsible for this and fix it. This is an &lt;b&gt;in-memory
modification &lt;/b&gt;to your project file; it never gets saved to disk.&lt;br&gt;
&lt;br&gt;
Another point where we use this kind of in-memory modifications is for &lt;b&gt;importing
additional .targets files &lt;/b&gt;in your project. Some AddIns in SharpDevelop do this
to add new features to the build process - for example the code analysis AddIn.&lt;br&gt;
&lt;br&gt;
Now enter &lt;b&gt;parallel builds&lt;/b&gt;. It would be nice to be able to call MSBuild on multiple
threads and compile projects in parallel. Unfortunately, that's not possible. MSBuild
uses the process's &lt;b&gt;working directory&lt;/b&gt; as a global variable. In one process,
only one build can run at a time. Even worse: if you have MSBuild in your process,
all your other code must deal with concurrent changes to the working directory.&lt;br&gt;
&lt;br&gt;
In &lt;b&gt;.NET 3.5&lt;/b&gt;, Microsoft introduced the "/m" switch in MSBuild. This makes MSBuild
create multiple worker processes (usually one per processor), enabling concurrent
builds. Unfortunately, this feature is exposed in the MSBuild API only through a single
method, and that only allows several project files from the hard disk in parallel.
It does not support in-memory projects; it cannot even compile projects in parallel
if there are dependencies. Microsoft solves the latter problem by separating the project
in the solution into 'levels' which depend only on projects from the previous level.
However, this doesn't mix well with the way building is integrated in SharpDevelop
- we don't use levels but do a kind of topological sort on the dependency graph, and
not all SharpDevelop project have to use MSBuild; AddIn authors could choose their
own project format and build engine. In the end, I had to &lt;a href="http://laputa.sharpdevelop.net/CompilingInSharpDevelopJustGot30Faster.aspx"&gt;create
my own build worker executable&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
Now&lt;b&gt; &lt;/b&gt;in &lt;b&gt;.NET 4.0&lt;/b&gt;, Microsoft created a &lt;b&gt;completely new MSBuild API&lt;/b&gt;.
The 'level' problem is solved: the new API allows adding new jobs to a running build.
It also seems like it is possible to build in-memory projects in parallel now. But
as it turned out, in-memory changes only work in the primary build worker (in-process),
all other workers load the file from the hard disk and &lt;b&gt;ignore our changes&lt;/b&gt;.&lt;br&gt;
Instead of going back to our custom build worker, however; I decided to find a different
solution for handling our modifications. Microsoft.Common.targets contains several
extensions points adding custom .targets files by setting a property. A good solution
for added a custom new target might be setting "CustomAfterMicrosoftCommonTargets"
to the name of the .targets file. However, this might conflict with projects that
already use this feature, so instead I chose "CodeAnalysisTargets". SharpDevelop comes
with its own code analysis targets, so it doesn't hurt if we disable the Microsoft
targets.&lt;br&gt;
So in the end, the solution is trivial: create a temporary file containing only our
modifications and set a property to tell MSBuild to pick up that file.&lt;br&gt;
&lt;br&gt;
Why couldn't I simply write the project file including the modifications into a temporary
file? The &lt;a href="http://msdn.microsoft.com/en-us/library/ms164309.aspx"&gt;MSBuild
reserved properties&lt;/a&gt; would point to the temporary file and custom build events
using those properties would likely fail.&lt;img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=ec5316c9-cfeb-4cf1-bb31-2afb463bd68a" /&gt;</description>
      <comments>http://laputa.sharpdevelop.net/CommentView,guid,ec5316c9-cfeb-4cf1-bb31-2afb463bd68a.aspx</comments>
      <category>Daniel</category>
    </item>
    <item>
      <trackback:ping>http://laputa.sharpdevelop.net/Trackback.aspx?guid=39534573-5893-46b6-866c-a7743e03f68b</trackback:ping>
      <pingback:server>http://laputa.sharpdevelop.net/pingback.aspx</pingback:server>
      <pingback:target>http://laputa.sharpdevelop.net/PermaLink,guid,39534573-5893-46b6-866c-a7743e03f68b.aspx</pingback:target>
      <dc:creator>Daniel Grunwald</dc:creator>
      <wfw:comment>http://laputa.sharpdevelop.net/CommentView,guid,39534573-5893-46b6-866c-a7743e03f68b.aspx</wfw:comment>
      <wfw:commentRss>http://laputa.sharpdevelop.net/SyndicationService.asmx/GetEntryCommentsRss?guid=39534573-5893-46b6-866c-a7743e03f68b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
As you've probably already heard, Microsoft released .NET 4.0 Beta 1 on May, 20th.
</p>
        <p>
SharpDevelop 4.0 will be the SharpDevelop version built on top of .NET 4.0. I've just
got it running:
</p>
        <img border="0" src="http://laputa.sharpdevelop.net/content/binary/RunningOnDotnet4.png" />
        <p>
Yes, that message really reads: "Compiling is not yet implemented". There were huge
changes in MSBuild 4.0 and the parts of SharpDevelop's project system that are talking
to MSBuild will have to be rewritten.
</p>
        <p>
The .NET 4.0 work on SharpDevelop is going on in the dotnet4 branch, for which we
do not provide builds. The dotnet4 branch will be merged back into trunk as soon as
it's good enough so that I think other SharpDevelop contributors can be expected to
use it.
</p>
        <p>
But myself, I'm currently stuck using a dysfunctional version of SharpDevelop for
development. I cannot use previous versions since they cannot compile for .NET 4.0
and don't have code completion for 4.0 libraries. Using the dotnet4 version of SharpDevelop
at least gives me code completion for 4.0 libraries, but it looks like I'll have to
compile from the command line for some time.
</p>
        <p>
I cannot even use Visual Studio 2010 as it doesn't want to open ICSharpCode.SharpDevelop.csproj
- it says it's an unsupported project format. Even if I recreate that project in Visual
Studio, VS doesn't want to open it - looks like a VS bug to me.
</p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=39534573-5893-46b6-866c-a7743e03f68b" />
      </body>
      <title>SharpDevelop running on .NET 4.0 Beta 1</title>
      <guid isPermaLink="false">http://laputa.sharpdevelop.net/PermaLink,guid,39534573-5893-46b6-866c-a7743e03f68b.aspx</guid>
      <link>http://laputa.sharpdevelop.net/SharpDevelopRunningOnNET40Beta1.aspx</link>
      <pubDate>Fri, 22 May 2009 18:50:08 GMT</pubDate>
      <description>&lt;p&gt;
As you've probably already heard, Microsoft released .NET 4.0 Beta 1 on May, 20th.
&lt;/p&gt;
&lt;p&gt;
SharpDevelop 4.0 will be the SharpDevelop version built on top of .NET 4.0. I've just
got it running:
&lt;/p&gt;
&lt;img border="0" src="http://laputa.sharpdevelop.net/content/binary/RunningOnDotnet4.png"&gt; 
&lt;p&gt;
Yes, that message really reads: "Compiling is not yet implemented". There were huge
changes in MSBuild 4.0 and the parts of SharpDevelop's project system that are talking
to MSBuild will have to be rewritten.
&lt;/p&gt;
&lt;p&gt;
The .NET 4.0 work on SharpDevelop is going on in the dotnet4 branch, for which we
do not provide builds. The dotnet4 branch will be merged back into trunk as soon as
it's good enough so that I think other SharpDevelop contributors can be expected to
use it.
&lt;/p&gt;
&lt;p&gt;
But myself, I'm currently stuck using a dysfunctional version of SharpDevelop for
development. I cannot use previous versions since they cannot compile for .NET 4.0
and don't have code completion for 4.0 libraries. Using the dotnet4 version of SharpDevelop
at least gives me code completion for 4.0 libraries, but it looks like I'll have to
compile from the command line for some time.
&lt;/p&gt;
&lt;p&gt;
I cannot even use Visual Studio 2010 as it doesn't want to open ICSharpCode.SharpDevelop.csproj
- it says it's an unsupported project format. Even if I recreate that project in Visual
Studio, VS doesn't want to open it - looks like a VS bug to me.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=39534573-5893-46b6-866c-a7743e03f68b" /&gt;</description>
      <comments>http://laputa.sharpdevelop.net/CommentView,guid,39534573-5893-46b6-866c-a7743e03f68b.aspx</comments>
      <category>Daniel</category>
    </item>
    <item>
      <trackback:ping>http://laputa.sharpdevelop.net/Trackback.aspx?guid=ea055f9a-730b-4579-a97b-fd8cd350e6d8</trackback:ping>
      <pingback:server>http://laputa.sharpdevelop.net/pingback.aspx</pingback:server>
      <pingback:target>http://laputa.sharpdevelop.net/PermaLink,guid,ea055f9a-730b-4579-a97b-fd8cd350e6d8.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://laputa.sharpdevelop.net/CommentView,guid,ea055f9a-730b-4579-a97b-fd8cd350e6d8.aspx</wfw:comment>
      <wfw:commentRss>http://laputa.sharpdevelop.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ea055f9a-730b-4579-a97b-fd8cd350e6d8</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://community.sharpdevelop.net/forums/p/9510/26432.aspx">It is finally
available</a>
        </p>
        <p>
The really newsworthy feature is the profiler - it has been in the works for over
a year, and it is the first full-fledged open source profiler for .NET. Siegfried
would love to hear your feedback in the forums, especially which features should be
next in the pipeline.
</p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=ea055f9a-730b-4579-a97b-fd8cd350e6d8" />
      </body>
      <title>SharpDevelop 3.1 Beta 1</title>
      <guid isPermaLink="false">http://laputa.sharpdevelop.net/PermaLink,guid,ea055f9a-730b-4579-a97b-fd8cd350e6d8.aspx</guid>
      <link>http://laputa.sharpdevelop.net/SharpDevelop31Beta1.aspx</link>
      <pubDate>Thu, 14 May 2009 19:41:52 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://community.sharpdevelop.net/forums/p/9510/26432.aspx"&gt;It is finally
available&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The really newsworthy feature is the profiler - it has been in the works for over
a year, and it is the first full-fledged open source profiler for .NET. Siegfried
would love to hear your feedback in the forums, especially which features should be
next in the pipeline.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=ea055f9a-730b-4579-a97b-fd8cd350e6d8" /&gt;</description>
      <comments>http://laputa.sharpdevelop.net/CommentView,guid,ea055f9a-730b-4579-a97b-fd8cd350e6d8.aspx</comments>
      <category>Chris</category>
    </item>
    <item>
      <trackback:ping>http://laputa.sharpdevelop.net/Trackback.aspx?guid=77dc4d59-d95d-4984-8dac-91a5c6f63ce7</trackback:ping>
      <pingback:server>http://laputa.sharpdevelop.net/pingback.aspx</pingback:server>
      <pingback:target>http://laputa.sharpdevelop.net/PermaLink,guid,77dc4d59-d95d-4984-8dac-91a5c6f63ce7.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://laputa.sharpdevelop.net/CommentView,guid,77dc4d59-d95d-4984-8dac-91a5c6f63ce7.aspx</wfw:comment>
      <wfw:commentRss>http://laputa.sharpdevelop.net/SyndicationService.asmx/GetEntryCommentsRss?guid=77dc4d59-d95d-4984-8dac-91a5c6f63ce7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The time to send in proposals for Google Summer Of Code is over now.
</p>
        <p>
Now we're busy reading your proposals and trying to decide on a ranking. This is a
lot more work than I initially expected - we got lots of proposals during the last
three days. Unfortunately, most of the late proposals were of a rather low quality.
</p>
        <p>
In total, we got 44 proposals from 34 students - much more than I expected.
</p>
        <p>
Here's the list of topics proposals were written on. As you can see, most of
them come straight from the <a href="http://wiki.sharpdevelop.net/gsoc.ashx">ideas
page</a>.
</p>
        <ul>
          <li>
10 proposals on Database tools 
</li>
          <li>
5 class diagram / UML related 
</li>
          <li>
4 Edit and Continue / C# background compilation 
</li>
          <li>
4 ASP.NET 
</li>
          <li>
4 Refactoring 
</li>
          <li>
3 C++ support 
</li>
          <li>
3 Debugger visualizer 
</li>
          <li>
3 Customizable Shortcuts 
</li>
          <li>
1 VB 9 code completion 
</li>
          <li>
1 Pretty printer 
</li>
          <li>
1 XAML code completion 
</li>
          <li>
1 Integrated bug tracking 
</li>
          <li>
1 actually creative idea 
</li>
          <li>
1 idea completely unrelated to SharpDevelop 
</li>
          <li>
1 idea I couldn't understand - due to completely broken English and an empty 'Details'
section 
</li>
          <li>
1 proposal that didn't have any idea</li>
        </ul>
        <p>
But we're looking for students who would like to join the SharpDevelop team; we don't
simply want to get some work done. So it's possible that we'll pick multiple
students from the same 'category'; and having the only proposal on a much required
feature doesn't mean you're automatically accepted.
</p>
        <p>
There also were some Java proposals but I'm not sure where they disappeared to. In
any case, SharpDevelop is a .NET IDE, not a Java one. There are already good open
source Java IDEs available; no need to add Java support to SharpDevelop.
</p>
        <p>
This is our first GSOC and I'm not too sure how we should judge the proposals.
A surprisingly large part of them is obviously disqualified because the proposal is
missing necessary details / the template isn't filled out completely. And what
to do with a student who makes a promising impression but chose a project that isn't
really interesting to us; or looks like it's not enough work for GSOC? What about
projects that look like they cannot be done in the GSOC time frame; but it might be
possible for a good coder and the Bio looks like the student knows what he's doing?
</p>
        <p>
We don't know yet how many slots Google will give to us, so we are as excited
as you are :)
</p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=77dc4d59-d95d-4984-8dac-91a5c6f63ce7" />
      </body>
      <title>GSOC proposals</title>
      <guid isPermaLink="false">http://laputa.sharpdevelop.net/PermaLink,guid,77dc4d59-d95d-4984-8dac-91a5c6f63ce7.aspx</guid>
      <link>http://laputa.sharpdevelop.net/GSOCProposals.aspx</link>
      <pubDate>Sat, 04 Apr 2009 00:16:03 GMT</pubDate>
      <description>&lt;p&gt;
The time to send in proposals for Google Summer Of Code is over now.
&lt;/p&gt;
&lt;p&gt;
Now we're busy reading your proposals and trying to decide on a ranking. This is a
lot more work than I initially expected - we got lots of proposals during the last
three days. Unfortunately, most of the late proposals were of a rather low quality.
&lt;/p&gt;
&lt;p&gt;
In total, we got 44 proposals from 34 students - much more than I expected.
&lt;/p&gt;
&lt;p&gt;
Here's&amp;nbsp;the list of topics proposals were written on. As you can see, most of
them come straight from the &lt;a href="http://wiki.sharpdevelop.net/gsoc.ashx"&gt;ideas
page&lt;/a&gt;.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
10 proposals on Database tools 
&lt;li&gt;
5 class diagram / UML related 
&lt;li&gt;
4 Edit and Continue / C# background compilation 
&lt;li&gt;
4 ASP.NET 
&lt;li&gt;
4 Refactoring 
&lt;li&gt;
3 C++ support 
&lt;li&gt;
3 Debugger visualizer 
&lt;li&gt;
3 Customizable Shortcuts 
&lt;li&gt;
1 VB 9 code completion 
&lt;li&gt;
1 Pretty printer 
&lt;li&gt;
1 XAML code completion 
&lt;li&gt;
1 Integrated bug tracking 
&lt;li&gt;
1 actually creative idea 
&lt;li&gt;
1&amp;nbsp;idea completely unrelated to SharpDevelop 
&lt;li&gt;
1 idea I couldn't understand - due to completely broken English and an empty 'Details'
section 
&lt;li&gt;
1 proposal that didn't have any idea&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
But we're looking for students who would like to join the SharpDevelop team; we don't
simply&amp;nbsp;want to get some work done. So it's possible that we'll pick multiple
students from the same 'category'; and having the only proposal on a much required
feature doesn't mean you're automatically accepted.
&lt;/p&gt;
&lt;p&gt;
There also were some Java proposals but I'm not sure where they disappeared to. In
any case, SharpDevelop is a .NET IDE, not a Java one. There are already good open
source Java IDEs available; no need to add Java support to SharpDevelop.
&lt;/p&gt;
&lt;p&gt;
This is our first GSOC and I'm not too sure&amp;nbsp;how we should judge the proposals.
A surprisingly large part of them is obviously disqualified because the proposal is
missing necessary details / the template isn't filled out completely.&amp;nbsp;And what
to do with a student who makes a promising impression but chose a project that isn't
really interesting to us; or looks like it's not enough work for GSOC? What about
projects that look like they cannot be done in the GSOC time frame; but it might be
possible for a good coder and the Bio looks like the student knows what he's doing?
&lt;/p&gt;
&lt;p&gt;
We don't know yet how many slots Google will give to us, so&amp;nbsp;we&amp;nbsp;are as excited
as you are :)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=77dc4d59-d95d-4984-8dac-91a5c6f63ce7" /&gt;</description>
      <comments>http://laputa.sharpdevelop.net/CommentView,guid,77dc4d59-d95d-4984-8dac-91a5c6f63ce7.aspx</comments>
      <category>Daniel</category>
    </item>
    <item>
      <trackback:ping>http://laputa.sharpdevelop.net/Trackback.aspx?guid=d3ccf7d4-ff3d-4790-b316-87d4e13962dc</trackback:ping>
      <pingback:server>http://laputa.sharpdevelop.net/pingback.aspx</pingback:server>
      <pingback:target>http://laputa.sharpdevelop.net/PermaLink,guid,d3ccf7d4-ff3d-4790-b316-87d4e13962dc.aspx</pingback:target>
      <dc:creator>Daniel Grunwald</dc:creator>
      <wfw:comment>http://laputa.sharpdevelop.net/CommentView,guid,d3ccf7d4-ff3d-4790-b316-87d4e13962dc.aspx</wfw:comment>
      <wfw:commentRss>http://laputa.sharpdevelop.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d3ccf7d4-ff3d-4790-b316-87d4e13962dc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In SharpDevelop 3.1.0.3948, I changed our Subversion integration to use <a href="http://sharpsvn.open.collab.net/">SharpSVN</a> instead
of <a href="http://www.pumacode.org/projects/svndotnet/">SvnDotNet</a>.
</p>
        <p>
SharpSVN exposes more Subversion APIs to managed code, which could result in some
nice features in the (far) future - for example, "SVN Diff" right inside the
text editor.
</p>
        <p>
But the main reason for the upgrade was that SharpSVN supports Subversion 1.6. <strong>If
you are using TortoiseSVN 1.6, you need to update to SharpDevelop 3.1</strong>. The
old SvnDotNet does not work with new working copies.
</p>
        <p>
However, the same is true in the other direction: <strong>if you use SharpDevelop
3.1, you must update to TortoiseSVN 1.6</strong>. No matter which .NET wrapper or
client version is accessing a repository, the underlying Subversion library has
the unpleasant feature to <strong>automatically upgrade working copies</strong>. As
soon as the Subversion 1.6 library inside SharpDevelop touches your working copy,
Subversion 1.5 clients will no longer be able to access it.
</p>
        <p>
You need to <strong>update all Subversion clients</strong> on your machine <strong>at
the same time</strong>. SharpDevelop contains a Subversion client<strong>:</strong></p>
        <ul>
          <li>
SharpDevelop 3.0 comes with Subversion 1.5 and requires TortoiseSVN 1.5.</li>
          <li>
SharpDevelop 3.1 <font size="1">(starting with revision 3948)</font> comes with Subversion
1.6 and requires TortoiseSVN 1.6.</li>
        </ul>
        <p>
          <a href="http://subversion.tigris.org/faq.html#working-copy-format-change">This entry
in the Subversion FAQ</a> describes the problem and offers a working copy downgrade
script, in case you decide to go back to a previous SVN client version.
</p>
        <img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=d3ccf7d4-ff3d-4790-b316-87d4e13962dc" />
      </body>
      <title>Subversion 1.6</title>
      <guid isPermaLink="false">http://laputa.sharpdevelop.net/PermaLink,guid,d3ccf7d4-ff3d-4790-b316-87d4e13962dc.aspx</guid>
      <link>http://laputa.sharpdevelop.net/Subversion16.aspx</link>
      <pubDate>Fri, 03 Apr 2009 20:20:24 GMT</pubDate>
      <description>&lt;p&gt;
In SharpDevelop 3.1.0.3948, I changed our Subversion integration to use &lt;a href="http://sharpsvn.open.collab.net/"&gt;SharpSVN&lt;/a&gt; instead
of &lt;a href="http://www.pumacode.org/projects/svndotnet/"&gt;SvnDotNet&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
SharpSVN exposes more Subversion APIs to managed code, which could result in some
nice features in the (far) future&amp;nbsp;- for example, "SVN Diff" right inside the
text editor.
&lt;/p&gt;
&lt;p&gt;
But the main reason for the upgrade was that SharpSVN supports Subversion 1.6. &lt;strong&gt;If
you are using TortoiseSVN 1.6, you need to update to SharpDevelop 3.1&lt;/strong&gt;. The
old SvnDotNet does not work with new working copies.
&lt;/p&gt;
&lt;p&gt;
However, the same is true in the other direction: &lt;strong&gt;if you use SharpDevelop
3.1, you must update to TortoiseSVN 1.6&lt;/strong&gt;. No matter which .NET wrapper or
client version is accessing a repository, the underlying Subversion library&amp;nbsp;has
the unpleasant feature to &lt;strong&gt;automatically upgrade working copies&lt;/strong&gt;. As
soon as the Subversion 1.6 library inside SharpDevelop&amp;nbsp;touches your working copy,
Subversion 1.5 clients will no longer be able to access it.
&lt;/p&gt;
&lt;p&gt;
You need to &lt;strong&gt;update all Subversion clients&lt;/strong&gt; on your machine &lt;strong&gt;at
the same time&lt;/strong&gt;. SharpDevelop contains a Subversion client&lt;strong&gt;:&lt;/strong&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
SharpDevelop 3.0 comes with Subversion 1.5 and requires TortoiseSVN 1.5.&lt;/li&gt;
&lt;li&gt;
SharpDevelop 3.1 &lt;font size=1&gt;(starting with revision 3948)&lt;/font&gt; comes with Subversion
1.6 and requires TortoiseSVN 1.6.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;a href="http://subversion.tigris.org/faq.html#working-copy-format-change"&gt;This entry
in the Subversion FAQ&lt;/a&gt;&amp;nbsp;describes the problem and offers a working copy downgrade
script, in case you decide to go back to a previous SVN client version.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://laputa.sharpdevelop.net/aggbug.ashx?id=d3ccf7d4-ff3d-4790-b316-87d4e13962dc" /&gt;</description>
      <comments>http://laputa.sharpdevelop.net/CommentView,guid,d3ccf7d4-ff3d-4790-b316-87d4e13962dc.aspx</comments>
      <category>Daniel</category>
    </item>
  </channel>
</rss>