With Sergey we spoke:
- about the last releases of ReSharer;
- about the new scheme of subscriptions and licenses;
- about the difficult relations with Microsoft;
- about a rantayma and development of language;
- how Roslyn output changed a situation;
- about work with fidbeky users for improvement of a product;
- about development plans for other products of .NET of a stack;
- about importance of intra-branch communication and exchange of experience;
- about development of products for With ++;
- it is a little about ReSharper C ++ on which even developers of Microsoft have to sit down;
- How users will feel changes;
- As ReSharper will develop further.
There is video
Under a cat — text option of interview.
About new releases of ReSharer and Update Rate
— Sergey, you had a big release, even two recently.
— You can tell a little me that at you there new in new ReSharper? So, very shortly. And, actually, why release there were two at once?
— For previous year we made three big releases - it is ReSharper 9.1, 9.2 and 10.0. And we this year took themselves such speed — to do releases of times in four months, and in each release not to hide a feature, to let out everything as soon as possible. It corresponds better to how the Visual Studio develops — there are some new events all the time. And from this point of view release 10.0 a little in what by quantity of features differed from release 9.2. The only thing that on this release we had a strict restriction: we together with release of all products changed system of licensing of all our IDE therefore date of release was recorded long before this release. Actually, because of the recorded date of release it turned out two.
— That is, it was bagfiks?
— Yes, bagfiks-release which left in two weeks after 10.0.
— It is a lot of pofiksila bugs?
— It is a lot of, about one hundred. Generally of course, users complained of Unit Testing and a bad rezolving of UWP-applications.
— Well now users already calmed down? Everything is all right?
— Already yes. Actually it is necessary to look not that write to Twitter, and on update rate (percent of people who upgraded to the new version), it is twice better, than was for ReSharper 9. That is, for the first three weeks of existence of ReSharper 10 on it twice more people, than proapdeytitsya a year ago.
— And much in general according to your data of people uses old versions?
— I think, no. That is, by the time of release of upcoming version about 30% use the penultimate version, and 70% of people already on new sit. Also are ready to pass on following, the newest, the version.
— That is now there are 30% which use ReSharper 8?
— It is clear. And you somehow tried to communicate, understand with them why they do not want to pass?
— I think that this normal distribution of such activity of developers. And it is a little connected with some vnutreproduktovy reasons.
About the cunning scheme of subscriptions and licenses
— The old license — it was on time or it was according to the version? I could, having that license, proapgreyditsya free of charge?
— Somewhere about two-three years ago we began to sell subscriptions which allowed to be updated within a year on any version. You buy, and you within a year have all versions which we release, regardless of how we they are called. Thus we got rid of a versionirovaniye that there is it allowed us to let out more frequent releases, without being afraid that we will not receive sufficient Upgrade Rate on the major version. Well and for commercial users we still had perpetual (infinite on validity period — a comment of the author) licenses without subscription to updates. Now such licenses already left. I can comment on the new podpisochny scheme, of course.
— Yes, tell, please. At you still time changed, wrote about it much and spoke. You can sum up shortly that as a result turned out. It seems to me, it will be not superfluous for our audience.
— IDE is the product developing together with the market, together with technologies together with our users. It develops one big avalanche. We as the company, of course, would like that all users had an opportunity to use most current release of our product and that licenses were not restriction on this way.
Respectively, when we understood it, we entered subscriptions. Subscriptions all are good, but the subscription is a piece which you have to buy surely. That is you buy to yourself the perpetual-license and to it a subscription. We to it came not at once. We actually separated a payment for a subscription now for the year ahead, and a payment for the perpetual-license.
Our first version of the scheme podpisochny was such: you buy the license for a year, and in a year all take away from you. And we, of course, met the mass of a negative fidbek about it. I think, it is a merit big our marketing specialists, our CEOS that among all this fidbek we could understand what in this situation concerns users. And users are concerned by lack of guarantees that they will be able to continue to use a product.
For example, there were companies which obviously wrote us, about volume, their budget approves, for example, the congress of the United States. And if he does not approve the budget on updating of the version, we just the next year will be left without product. It is the most demonstrative, I think, history which helped to understand that it is necessary to leave the perpetual-license.
Now you buy from us year of a subscription. Within this year you can make a decision that you want to be updated. You are updated and use, and pay then, in a year, by prolongation of this subscription. Thus, when you buy the version — you buy it on this specific timepoint in general without an opportunity to be updated on following. But you can is postponed to buy in addition to itself updates on the version which will appear within this year.
— If you do not purchase, then what occurs?
— You should use that version which you purchased in a year.
— That is there is a rollback back, on the version actual at the moment to purchase?
— Yes. It is possible to consider it as rollback, and it is possible to consider that you within a year make a decision that "I want new". And in that case you pay in a year when you prolong a subscription.
— Listen, this some scheme not simple. You took it from someone or thought up? Whether somebody else works by such principle at the market?
— Adobe company. But there history is simpler, of course. We listen to users much, and because of it our solutions sometimes become sometimes more difficult.
— OK, well there is quite unique history.
— I can give even more examples. Passed Microsoft to the same scheme two days ago.
— Absolutely on same. And on this subject there was no uniform big post on the Internet.
— And how so left? Why in your case there were discussions?
— We the company which works with community more. And even when we entered subscriptions optionally for commercial users and not optionally for our personalshchik, we received a lot of fidbek.
— That is it is possible to tell that your product management lives fidbeky?
— Yes, to a large extent.
About the difficult relations with Microsoft
— And what at you in general the relations with Microsoft? I am a person from the world of Java, and there for a long time, years ten as, a platform more or less open. Talking to children from JetBrains, I understood that they in principle well realize that occurs in the Java-platform and can look at any time at any complex code, understand, even somewhere to popatchit something.
— There it is not necessary to communicate with vendor.
— Exactly. And at you, in the .NET-world how it occurs?
— How we work as we plan our releases, strongly exchanged over the past few years. Also exchanged because the relation of Microsoft to an ecosystem, to work with partners, to the level of openness of the company exchanged. Three years ago the situation was such: there were private bilda of the Visual Studio which were issued only to partners — there was a partner program according to which we closely communicated with Microsoft. We had the right to sabmitit more priority bugs on the Visual Studio.
That is purposefully supported by Microsoft the elected vendors of expansions for the Visual Studio, about hundred or two hundred companies, and for this purpose there were any private programs. Now the majority of a fidbek, the majority of changes and bild can be received absolutely legally through open sources, and the majority of commands with which we communicate, develop in Open Source. Now less and less the Visual Studio becomes the closed product which demands to dostukivatsya to Microsoft to bring fidbek, either to change something, or something to learn new.
— It turns out what you began to do many things independently?
— Visual Studio Industry Partner (VSIP) Program, one may say, stopped being some big benefit for us. We go on actions where it is possible to communicate to command, and it is almost only request from VSIP Program.
— And why they so changed the approach how you think?
— They began to lose developers. Microsoft long was vendor which represented tools for developers who covered all needs for all scenarios. With the advent of mobile platforms everything changed. The tools of Microsoft began not to be enough that to clients of Microsoft the programs to write under Android, under iOS. It is the first reason which started this shift.
The second, probably, factor which affected openness, it probably, Azure. To drag as much as possible developers, and not only .NET, and Java, Python, PHP, Ruby — all developers in the Cloud, it is necessary to represent them tools. There is a clear policy — tools for developers of Microsoft are provided now conditionally free of charge. Though there are cases when it is not free (for example, the Visual Studio), and there are cases when it is not free (for example, Visual Studio Enterprise). Though 6000 dollars it not 14000 dollars as it cost a year ago.
— A year ago and the ruble was another. And whether here, let us assume, receipt to Microsoft of the new CEO influenced a situation a year ago?
— I think that I strongly affected, and it in such sense continued, allowed to do further tools for developers more open. And to move towards the fact that Microsoft is a cloud provider and will strengthen this position. To develop an ecosystem based on tul of Microsoft, an ecosystem of development for all platforms.
— There was still very interesting story connected with a cross-platformennostyyu. There is Mono which under Linux, and is something in this place from Microsoft which will compete somehow. About it you know nothing?
— With Mono history such that it is just that hole in a stack of technologies of Microsoft about which I spoke. Just as the situation is: in Microsoft the client comes with three thousand licenses for the Visual Studio, speaks: "it is necessary for us the program under iOS to write. I sit on your tools 10 years what to do to me?" Addresses the consultant of Microsoft, and that needs to give the answer. Therefore Microsoft has a business challenge – to provide development for iOS.
Respectively, what options are? There is Xamarin, quite working thingummy, is Apache Cordova, there is a native compilation With ++ under different devices. There are three tools which we will develop to cover this scenario. That is cross-platform development is such zatykaniye of holes by means of the external partner.
Usually it so happens in Microsoft that at first they stop up holes by means of the external partner, then let out a product and take this place. But now I do not see such tendencies, I do not see that I Microsoft would try to draw cross-platform development to myself. So far they at a stage of cooperation are. Those libraries which are written on Mono tighten to themselves. Core CLR, virtual computers, some elements of a framework …
— That is it is mutual process?
– Yes, it is very mutual process now. I hope, of course, that it is unified in some point.
— Now they have own implementation of the .NET virtual computer under Linux. Quite crude, so?
— It has a chance to become a normal product.
— But Microsoft about it tells as about a ready ecosystem as though it is a ready-made product, take and use. Probably, it not absolutely so?
— That on it to drag users, it needs to be positioned so. I do not see an overflowing of users from classical ASP.NET on ASP.NET based on Core .NET. Just are not ready yet. I think that it will occur, but not now. Now there are problems with drag and drop of the code.
The matter is that now there are vital issues on the way to drag and drop of the code under DNX, under .NET Core. They are connected with lack of the version of a framework which appeared in release under which you can targetit the libraries that they worked also in classical ASP, and under complete .NET a framework, and in Core CLR. For this purpose Microsoft has many .NET versions: there is Silverlight in browsers, there is Windows Phone, there are Desktop-applications, there is a "complete". net Framework.
Now there was one more stack — Core CLR. And in principle, as separate implementation, it differs in nothing from all others. Microsoft has a solution to write a code under different stacks. Such Haque who for each option of combinations of these platforms is able to generate the code working for three or two of them.
It is not really working scenario because the quantity of such combinations grows, roughly speaking, exponential. Now Microsoft actively works on that from this exponent to get rid and make a platform which you can targetit. That the code which targetit this general platform worked for you everywhere. Then there will be upgraded versions of NuGet-packets which you can use everywhere and compile them under everything, using the same libraries.
— It at them turns out, but, probably, not really quickly. Yes?
— Many design solutions change literally in the eyes. Now that version which is, it is not final, Microsoft already works on other version.
About a rantayma and development of language
— As far as, your way, .NET is a legacy-technology as far as it is live technology? I will explain the question now. Till some moment, maybe, year to the 2008th, there was very powerful development of language. About Runtime I cannot tell, I lack examination. It seems to me, Runtime not really strongly moves ahead. And here language very strongly developed in that zhesamy time. With Java — opposite history, there language very long rebated, and Runtime developed wild rates. It is interesting that, on my feeling, recently with C# too nothing global occurs. Changes were more noticeable earlier. How you consider?
— Quite right. I think that Runtime lags behind JVM very strongly. The virtual computer in .NET possesses very bad garbage collector and very weak JIT compiler. As a result slowly performed code in which it is necessary to insert plugs on plugs turns out to avoid excess allocations and to cope with those functions which automatically do not inlaynitsya. The code automatically is not optimized up to standard. In Java there is no such problem.
— And language?
— There was a period when language developed a little — before release of C# 6. It is connected with transition to the new compiler Roslyn which was delayed for several years. For about two years, on feeling.
— That is, language did not develop approximately versions with the third or fourth?
— With a heel. The fifth version was released, and then began to write the new compiler. Wrote it long and painfully. Generally tried to reach the same performance which was in the native compiler, on condition of all architectural improvements.
As a result of the set purpose reached in the compilation mode. That is, when now С# 6 and C# 5 you use — the Difference in speed is not noticeable. In comparison with other assembly steps compilation did not begin to take more time.
And here from the point of view of support in IDE — the massive failure is available. From the point of view of support of C# 6 in the Visual Studio of 2015 is complete fail. We cannot edit the ReSharper Visual Studio project in release 2015 without ReSharper. It vyzhirat all memory, also all hangs. Such situation.
— Yes, it is quite interesting. Especially at the first stages when you saw the first bilda, likely, there were rough emotions. How you lived with it?
— Hair bristled.
— Yes. It is clear, what at some point you, probably, there pofiksit all major problems and somehow could at least distinctly with it further live?
— Now we support the Visual Studio 2015, roughly speaking, blindly. Ourselves do not use it. We plan moving slowly for it, there in an update it became better. We cut ReSharper so that it was possible to start pieces it. We create smaller Solution'Y that it was possible to begin to use all this.
— IntelliJ IDEA, from the point of view of her perception as the tool, had an enormous progress in 2007, right after entry into the market of Core 2 Duo processors. There was very strong (in comparison with Pentium D) a performance-breakthrough. Respectively, IntelliJ IDEA from the provision "IDEA brakes" passed into provision "O, IDEA — the excellent tool. Now it is possible to work!" IDEA began to work quicker just because iron became sharp better. It was enough. Since then people especially do not complain of IDEA performance. Correctly I understand that in .NET a stack IDE performance — all this still a headache?
— Unfortunately and. We are in quite difficult situation. About a half of bugs with a performance are caused in us by work of the Visual Studio, and the second half — is caused by us. We very often cannot distinguish one from others. Perhaps, in ReSharper typing occurs slowly because now in a background of Roslyn analyzes files and allotsirut hundreds of megabytes per second why just GC dies?
When you are "as if in the code", by Microsoft made some optimization special which consider how typing in IntelliSense interacts with a background code analyzer. Respectively, when we start our activities on autocompletion and type assist, we are influences on how Roslyn background thread works, we have no.
— They intentionally so made?
— I think that they solved the problem. Of course, they did not think of us. It is natural.
How Roslyn output changed a situation
— And as far as the output of Roslyn changed a situation? It for you a headache?
— It became easier for us. The matter is that we became better to understand different types of projects in which Roslyn is used as Language-service. We pull out the compilation model, files, referensa going to compilation from there. In the previous Visual Studio versions when there was no Roslyn, it was quite labor-consuming moment connected with a challenge of a bild, pulling of referens from the Visual Studio directly. It was difficult also with bugs. Now it is much more direct process. We use Roslyn to create modules and how they will interact with the compiler.
— And how the Visual Studio interacts with the compiler? The studio uses the compiler for creation of own model of a code?
— The Visual Studio — yes. In process loads Roslyn.
— And in an old case?
— In an old case was most, only in a native code on With ++ too. It was only possible to guess that it does and where. But it did not influence Garbage Collector in any way, we never saw it in profayler. It, maybe, there was, but it was very fast.
— Whether it is connected with the fact that Roslyn is still crude technology? Or it is connected with the fact that it somehow in a root is incorrectly designed?
— Yes, of course. Very crude. In respect of optimization of the designer of data who is used in Roslyn for the simplest functionality of Rename or when finding errors in all Solution'e it is direct algorithms which stupidly work. But, of course, influence performance eventually.
— That is, in principle, the chance that developers of Microsoft will accelerate Roslyn is?
— The chance is, of course. But there can be a problem with the Microsoft company where such need can be not realized up to standard. Also will not be time, and money for it will be selected.
— It is clear. And that Open Source which occurs now, it is Open Source only from the point of view of "I can look" or "I can zakontribyyutit"?
— Kontribyyushenov I saw very little. Now, in the main Core CLR, all this such shown source code which you can compile or just look, read. I did not hear that in large quantities someone accepted them.
— That is, in principle chances that you will come and you will help them, a pofiksita it all problems with performance, too not really there is a lot of, apparently?
— These problems with performance often lie in the area of compilation of studio with Roslyn. Something we will change chance that we will come and in Roslyn is, of course. We look, we analyze as as occurs. We have an idea of architecture, of architectural problems.
As ReSharper will develop further
— Means, Roslyn builds own model, an own tree, huh? It, probably, something the Concrete Syntax Tree type.
— Yes. Very specific, with spaces, with comments … Specific syntax as it is written in the editor. What in IDE is used it is very specific syntax tree, not AST at all.
— You build code model. At you this tree?
— And at Roslyn — the. Probably, the studio uses it — it is logical. Actually, how you with it live? How you with it will live further?
— We have several directions now. The first is not to use the Visual Studio. The second is to use the Visual Studio, but to start ReSharper separate process. We have a vision, there is a design, a solution when all code model Resharper'ovskiye, all syntax trees, indexes, caches and everything, as for semantic model, is stored in separate process.
— We discussed it with Kirill Skrygan when he told that ReSharper strongly rests against restriction on memory 32-bit the Visual Studio. I told it that it is obvious to do then ReSharper out-of-process what he answered that yes, it is necessary, but it is fraught with Memory Traffic'om.
— Actually, the design solution is in minimizing this Memory-Traffic. It works approximately so: we can perceive studio as an UI-application. That is, to make MVVM. It is possible to consider that the backend of ReSharper'a is such ViewModel for studio which is View. If to consider a traffic between them, then it will be a traffic of those data which are sufficient to display changes in UI. You will never find massive transfer of data on the UI level. Always it is necessary to apply two characters, two podsvetochka …
All this lives on the party of studio, on the party of UI. It is not enough data which need to be sent to display UI. To send thousands of objects is instantly. To send changes in the document at Taiping — too instantly. On this idea it is possible to construct so a code that it was synchronized only those data of which it is enough for the UI display.
– As far as by the Visual Studio it is well designed as far as she will allow you to make it?
– It is only a question of our code, that is our integration with studio will not exchange in any way.
– You very beautifully described everything. And in reality it will earn? The Visual Studio will allow you to pull out all work with UI somewhere?
– This question of writing of our UI elements. Let's give an example. Here, for example, "bulbochka" is shown. To show it, PSI, syntax trees, documents, all project model is now used. If we leave what is and we will send these syntax trees entirely – that it, of course, will not fly up anywhere. But in general, to draw "bulbochka", we need an icon, the text and all.
When we clicked Alt + Enter, we gave item in the form of the text and an icon when we clicked "to apply some bulbochka", we on a backend which works with out-of-process sent one command for execution. All changes of data in syntax trees and documents – all of them occurred Out-of-process. Now on a frontend as result it is necessary to return a new cursor position and to change those documents which were open in editors. And all.
– The task is reduced developing the data exchange protocol between Resharper'om and what is seen by the user on UI, and minimum on a traffic.
– We have practices under the protocol. The protocol is very interesting, reactive. We synchronize an identical data structure which will work on both sides. This big change — needs to be changed all source code ReSharper'a.
This change is that ViewModel should be rewritten so that they did not keep in themselves the link to sematichesky models of a code. This huge change therefore it is necessary to do it gradually. We slowly will begin to do so that our product worked and and so. And we will lead architecture to the fact that UI will not depend on semantic model. And it is dependence inversion again.
That as users will feel changes
– As far as for users it will be transparent?
– Eventually, it has to be the same User Experience.
– The user should not feel that a backend another at all this history?
– Of course. At some point we will change old new. And all.
– Usually when do some piece which works with a code, rewrite a frontend of the compiler and are limited to it. Right there it turns out what you build already whole building, not only a frontend?
– Of course. In ReSharper now a code which directly parsit rezolvit something — about 10%.
– As far as it makes sense to be engaged in general in all fuss with the Visual Studio, considering that you have in the company a cool experiment and very successful demand on creation of own IDE?
– The Visual Studio, of course, makes sense, from it we will not get down anywhere. It is the tool which provides development on all platforms which are necessary for Microsoft. It changes time in three months and supports new platforms from Microsoft. To repeat this work — not so our priority.
First of all it is necessary to understand that the Visual Studio solves internal problems of Microsoft. Here, for example, there was Universal Windows Platform, and under it it is necessary all programs to debazhit, start, profile, configure projects which will work under different platforms … We will not repeat it.
It is a little about ReSharper C ++ on which even developers of Microsoft have to sit down
– Whether developers of Microsoft who do all this, ReSharper use?
– We do not disclose this information. It is clear, that someone uses, but we will not say in what volumes.
– Means, developers of Microsoft are interested in that ReSharper worked and developed. Probably, this very big help — if you placed them on your tool.
– And now we want to place them on ReSharper C ++ is our big purpose.
– And tell, please, about this project.
– We began to write ReSharper C ++ about 3-4 years ago. Zarelizili in the spring. We sell it as a separate product, such figurno cut language C ++ without a thing the rest. From those who use ReSharper C ++ — about 2/3 use it without ReSharper, and a third puts to itself ReSharper C ++ as a part of ReSharper Ultimate.
– As far as in general people who write on C ++ under Windows use the Visual Studio?
– I think, many people use the Visual Studio for development on With ++ in absolutely different scenarios.
– It is exactly Managed C ++ or any?
– Managed C ++ is absolutely deadlock branch of development of technologies of Microsoft which was urged to simplify integration of Managed of a code with a не-Managed a code.
– And, - that is it was necessary somehow With ++ that happen some there
– Just it is simpler to make a marshalling, to make interaction. When you have header described for With ++ you can directly use it in Managed C ++ the project — it is convenient. I see that now most of people who need interop is used by either COM, or Implicit PInvoke. Our experience of use of Managed C ++ rather negative — in the compiler bugs and so forth.
Returning to your question, people use the Visual Studio not for Managed C ++, and for native With ++ is a development for different devices, cartographic applications, games, etc. — generally, for everything that on C ++ is written.
– It is possible to tell what for C programming ++ under the Windows Visual Studio is the main building tool?
– Of course. And not only under Windows. People who program under Linux too very often sit in the Visual Studio — and it is normal. Simply it is the good editor.
About development of other products for With ++
– I have a question connected with development of other your products for With ++, in particular CLion — from supports С/C ++ too. And there is still AppCode for Objective-C. How ReSharper lives in parallel with these IDE? Whether there is something the general in these products? Whether you exchange experience with developers of these IDE?
– We are guided by two things. First, on a language standard of C ++, and secondly — on the compiler of Microsoft. CLion and AppCode priorities have some others. Them we exchange experience of c. There are very many design solutions which smoothly flow in CLion from ReSharper. When began to write ReSharper C ++ — there was already an experience of writing of ReSharper C ++ in CLion.
In general, With ++ in AppCode began absolutely fabulous image. There was Objective C, and at some point we understood that there are header-files which are used both for Objective C and for With ++. That is there somewhere under define'ami big constructions on With ++ on which the parser broke, just are written because did not understand them. And then it was necessary to support somehow With ++ to support Objective C. And support With ++ in AppCode began with it.
Razrabochiki CLion and razrabochik of AppCode among themselves communicate, exchange experience?
– They, of course, communicate among themselves.
– At three of your tools much in common a code?
– It is absent at all. ReSharper C ++ was written strongly later, and it was written by the person who did support With ++ in AppCode before. And therefore ReSharper C ++ is initial it dizaynitsya better, that is architecturally it is more correct.
– And it is "more correctly" expressed in what? That less crutches should be inserted in order that everything worked?
– Yes. Eventually, less errors of codes and bugs in support of IDE are simple.
– And as far as actually the compiler of Microsoft supports a language standard of C ++?
– Already best of all and constantly improve.
– Reality such is that implementation not always conforms to the standard.
– From this point of view С# differs in nothing from language which in implementation often does not conform to the standard. Now, with opening of the source code, of course, it became much simpler. When something behaves not as it is written to specifications — we watch a code as it is written in the compiler, and all.
– And for you what it is more important — compliance of the specification or implementation?
– We watch every time at Use Case. In those places where the specification does not correspond to implementation, most likely, if we show an error where it is absent, the user will correct it, will just rewrite a code somehow in a different way, it will be absolutely normal. I.e. it will be valid some difficult case.
– And how in general ReSharper in JetBrains appeared?
– It appeared to me: I to ReSharper only in 2007 came already to the 3rd version or to the 4th. ReSharper appeared when Eclipse appeared. That is, the company needed activity diversification as there was a serious threat to the main product: after all free platforms, free IDE for Java is a strong contender.
– That is, it was a business solution?
– I think that yes.
– And now you with colleagues on JetBrains feel that you won war against Eclipse?
– Yes, we feel.
About importance of intra-branch communication and exchange of experience
– And what about ReSharper? There are different people, including, in Russia which do tools for development on C#: for example, children from DevExpress do CodeRush which works with Roslyn. You with them communicate, exchange experience or not?
– I think that DevExpress somehow podzabit on development of tools, was disappointed. CodeRush is more a side project: already at the end of the 2000th it became already clear that ReSharper dominates.
— The question is in how they at themselves solve specified by you before a problem. You communicate with them? You do not communicate?
— They move to Roslyn and write those features which were not written on Roslyn. Architecturally, it seems to me, it is impossible. It is impossible to write functionality of ReSharper over Roslyn, without changing Roslyn. We have too many compiler inner patterns which are used for implementation of features of the analysis. The feature is not written atop any code of model which is recorded. In the course of work of the programmer in the Visual Studio the model code changes constantly a little, indexes change, what we store as we store changes. Correctly to make refactoring, we use compiler infrastructure which at us is written. We use those checks which we do for compilation error checking then in writing the sentence that, for example, "this type can be replaced with var". And it everywhere.
— And now you have Roslyn. And it seems as you need to live in parallel.
— Yes, we live.
— You are not going it to use at all?
— At this stage you won war. And you dominate. But now with Roslyn output the others have a chance.
— We have no problems with performance. We have no doubts that we will be able to write at the same speed new analyses or even more smart completion'y and even more smart refactoring.
— You have already difficult products, and now they will be even more difficult.
— Complexity of support of languages does not represent serious problems now. Now the biggest complexity in support of the Microsoft'ovskikh platforms. These here stacks, universal applications, a rezolving of links under all platforms. Complexity is rather in how assembly works, than in how the compiler works.
The compiler works simply. And it at us is well written, well supported. Now a problem in platforms. And problems with performance. Them we are going to solve here – to leave by such categorical method process of the Visual Studio.
About development plans for other products of a .NET-stack
— Except ReSharper about which we talked you in a .NET-stack have also other products. What happens to them now and what you are going to do with them?
— History began long ago when we wrote the profiler dotTrace. The profiler dotTrace wrote the first version Mischa Senkov who writes ReSharper C ++ now. At some point we decided to forknut our code base. In ReSharper'e there was a lot of code in which UI, collections, primitives, Application-models, etc. are written. For release of a product of dotTrace we forknut a platform, and from this point we had not synchronized releases based on the same platform of different products: dotTrace and ReSharper.
— That is, in your code base there was an entity which is called "platform", and with it both of these products operated?
— Yes, the repository, is a lot of assemblies there. Each product used a platform. And each product had the release cycle. Overhead costs that to organize all this, to make stabilization there was just a darkness. Respectively, when I came to the manual .NET of department, it began with idea that the platform has to be the general, products have to have the general release cycle and it is desirable uniform Solution in which all these products are developed. And we, respectively, began respectively unification of our code base so that it was possible to build new products of one solution.
If in the previous versions integration of dotTrace consisted of two parts: of a plug-in to ReSharper and separate Extension’a for the Visual Studio because to be integrated with the Visual Studio, it is necessary to integrate menus, to make the manifesto, package – all Visual Studio attributes of an ekstenshen. In the new scheme we made one product which is entirely integrated into the Visual Studio, but gathers in parts. ReSharper — probably, the only Extension which so does in the Visual Studio. Our installer allows to select several products and collects Extension on the fly. That is, all attributes of an ekstenshen at us are generated and compiled. Directly in an installer the code which in Runtime integrates several products into side-by-side studio is written.
We made the buttons allowing to switch on and off each product. If to consider architecture of this solution in principle, then different programs, for example, of ReSharper, Command Line Inspect Code Tool (it is the utility for start of the analysis of a code on the bild-server), dotPeek, dotTrace, dotCover, dotMemory — they are started everything by an identical code in absolutely identical conditions, just with different parameters. That is it is actually one program which is started with different parameters, and these programs can be started on all our assemblies.
Once on DotNext I did the report how the Application-model based on zones which allows to do all this is arranged. Actually, everything became simpler. Releases became simpler. Programs became all integrated now. Users do not ask now: "What dotCover is compatible to this here the ReSharper version?" All this to us allowed to let out ReSharper C ++ as the separate product which can work also together with ReSharper and ReSharper without it can work, and together they can work too.
— As far as your new model already sits in the heads of users?
— In the heads of users I see that many people put — installations of dotTrace in studio grew many times.
— Here good potential for any there cross-sellings.
— Cross-sellings led to the fact that we stopped sales of profayler absolutely, and it is simple not to purchase them as separate products. Because it leads to problems more, than to advantage. The problem is that I have a license for ReSharper, separately on dotTrace, I want to put the new version of a product, and versions are synchronized. And these licenses for separate versions did not work absolutely. They can be incompatible, can differ, can come to an end – one later, another earlier … To get rid of all these problems, having just made more expensive version.
About work with fidbeky users for improvement of a product
— We with you constantly speak about Performance. Specifics of ReSharper'a such is that in the application there is a lot of different functionality, and each user use its own subset. And most of people who write on .NETe they write programs with quite visible code base where there is a fixed workload where on a cycle the same operations where it is really possible to remove some profile are executed and to look at hot methods. You have it somehow absolutely not so. How you with it live? How all of you hold it in the head?
— There are several things. We have such button – Profile Visual Studio. You as the user, you can write a piece of time when ReSharper braked, to send it to us and we, most likely, with it will make something. It is the mechanism which works. With its help we, the version behind the version, fix bugs. And further … it is difficult further.
How the programmer resembles to optimization, it is desirable visible? Find Usage, the analysis of the file, navigation, maybe, in some difficult places. Also looks, what is the time spent for this operation. Find Usage takes 10 seconds us now, and has to occupy seven. But in the course of changes we to affairs caches, change strukturuydanny which are necessary too. Also it is possible to lose easily performance in some other scenario, for example, in the Code Completion code, and it is even worse in some synchronous part of its part which works for you in Foreground and directly influences response time when printing.
Respectively, having made some optimization or having started some activity in a background which produces many objects, or having occupied static memory, you as the ReSharper programmer, you can touch the most sensitive part of which users think most much – typing, switching between editors, the movement of the carriage — what has to work in general without any delays.
— How it in general can be tested?
— It practically does not give in to regression testing. One of the most important criteria of a correctness of any test for performance is recurrence of result. It works if you have a stable virtual computer on the server on which there is no other loading. And when your typing brakes on every 10th character, and nine pass — it is quite heavy to catch it.
— It is unclear, how to formulate a metrics in which it can be seen.
— And not always it fiksitsya just when influence of one code on another happens. And if you are engaged in Code Completion'om, and it brakes because the window a unit testing, for example, now works yunitest which in a background displays the output. Quite real scenario.
— Whether the truth that it is treated by other approaches to the development how approximately Dima Ivanov told? And the second — whether the truth that in this place the only thing that works - it is user fidbek?
— Yes, it works. It works so: each our developer, when at him something brakes, takes the profiler, finds a problem, realizes it and communicates. It is a dogfuding in all its manifestations and careful working off of screenshots which come to us from users. Other languages with which they work, other types of solutions.
— It is a lot of such screenshots?
— A little in day. Often happens that brakes not the ReSharper and some ekstenshn to Resharper'U, ekstenshen to the Visual Studio or itself the Visual Studio. Well or something that does not give in to any analysis at all.
— You in this case goes to Microsoft or to the one who did this ekstenshn for ReSharper?
— In Microsoft it is very heavy to reach, and we do not spend time for it. If you want that something pofiksit Microsoft, you need to be very active. Roughly speaking, to take the computer and to send in Microsoft that they analyzed it. And when to us comes fidbek, with the scenario which we even plainly cannot reproduce, none of Microsoft will watch it. Because they have enough fidbek.
"Without slides" you can find other releases on our Youtube-channel, and interpretations — on Habré, having just looked in our blog or on the corresponding tag.
This article is a translation of the original post at habrahabr.ru/post/274091/
If you have any questions regarding the material covered in the article above, please, contact the original author of the post.
If you have any complaints about this article or you want this article to be deleted, please, drop an email here: firstname.lastname@example.org.
We believe that the knowledge, which is available at the most popular Russian IT blog habrahabr.ru, should be accessed by everyone, even though it is poorly translated.
Shared knowledge makes the world better.