Dlaczego moje IDE nie kompiluje / buduje w tle?

13

Dziś rozwijam się na dość złożonym komputerze, ma wiele rdzeni, dyski SSD i co nie. Mimo to przez większość czasu programuję komputer, nic nie robiąc. Kiedy muszę skompilować i uruchomić / wdrożyć nieco skomplikowany projekt, w najlepszym razie zajmuje to kilka sekund. Dlaczego? Teraz, gdy żyjemy coraz bardziej w „erze błyskawicznej”, dlaczego nie mogę nacisnąć F5 w Visual Studio i natychmiast uruchomić / wdrożyć moją aplikację?

Kilka sekund może nie brzmieć tak źle, ale wciąż tarcie poznawcze i czas się sumują, i szczerze mówiąc, sprawia, że ​​programowanie jest mniej zabawne. Jak więc kompilacja może być natychmiastowa?

Cóż, ludzie mają tendencję do edytowania plików w różnych zestawach, co jeśli Visual Studio / IDE stale kompiluje / i buduje wszystko, co zmodyfikowałem w dowolnym momencie, gdy może to być odpowiednie. Heck, gdyby chcieli iść naprawdę zaawansowani, mogliby dokonać kompilacji dla poszczególnych klas. Kompilacja może nie działać, ale może po prostu dyskretnie nic nie robić (oprócz dodawania komunikatów o błędach do okna błędów).

Z pewnością dzisiejszy komputer może poświęcić rdzeń lub dwa na to zadanie, a jeśli ktoś uzna to za irytujące, można je wyłączyć opcjonalnie. Wiem, że prawdopodobnie istnieje tysiąc problemów technicznych i wymyślne kopiowanie w tle, które należałoby rozwiązać, aby było to płynne i praktyczne, ale z pewnością sprawi, że programowanie będzie bardziej płynne.

Czy jest jakiś praktyczny powód, dla którego ten scenariusz nie jest możliwy? Czy zużycie ciągłego pisania plików binarnych byłoby zbyt duże? Czy zespoły nie mogą być przechowywane w pamięci, dopóki nie zostaną wdrożone / uruchomione?

Homde
źródło
Visual Studio robi to dla vb.net i przynajmniej częściowo dla c #. To jest właściwie punkt w wiecznej debacie c # / vb.net: codinghorror.com/blog/2007/06/…
Matthieu
tak, spojrzałem na ten artykuł. Dzieje się tak głównie w kontekście analizowania / kompilowania komunikatów o błędach, a nie w przypadku natychmiastowego wdrażania / uruchamiania aplikacji
Homde
@konrad, czy VB.NET nie oferuje również kompilacji w tle?
Pacerier

Odpowiedzi:

6

Eclipse wykonuje automatyczne kompilowanie i budowanie. Możesz sprawdzić, jak oni to robią. To jest open source. Myślę, że kompiluje się za każdym razem, gdy zapisujesz plik.

Brian
źródło
1
Brawo Eclipse!
MattC
To wspaniale, ktoś go używa? czy to robi różnicę?
Homde
2
To robi wielką różnicę. I jest niezwykle przydatny do szybkiego programowania - może generować deklaracje metod przez telefon, który piszesz w locie. Używałem go od lat od rozwoju aplikacji Java, do aplikacji Web 2.0 opartych na Javie, rozwoju i rozszerzenia ffmpeg (w C oraz C ++), PERL i Python. Mają wtyczki do prawie każdego możliwego języka.
Brian
6

Czy zastanawiałeś się kiedyś nad liczbą naciśnięć klawiszy, zanim plik osiągnie stan, w którym można go skompilować? Poważnie, spójrz, co by się stało, gdybyś spróbował skompilować klasę f, klasę fo, klasę foo itp. Kiedy chcesz, aby IDE powiedział ci, żebyś poprawił literówkę, a nie tylko pozwolił jednemu dokończyć pisanie? Chciałbym zapytać, jak dobrze to przemyślałeś, tworząc coś od zera, ponieważ w tym momencie widziałem, że to naprawdę bardzo bolesne.

JB King
źródło
Nie sugeruję, że to kompiluje plik / klasę, którą aktualnie edytuję. Ale inne zestawy, które edytowałem, powinny być uczciwą grą, a także inne klasy w tym samym zestawie, jeśli można wykonać częściową kompilację (co prawdopodobnie byłoby złożonym zadaniem). Prawdopodobnie wystąpią pewne problemy z rozwiązywaniem zależności, ale nie powinno to być nie do pokonania. Poza tym najgorszym przypadkiem jest to, że kompiluje się jak zwykle, o ile wątek kompilujący nie
zagłębia się zbytnio
2

Program Visual Studio nie udostępnia funkcji automatycznej kompilacji. Ale tak, niektóre środowiska IDE, takie jak Eclipse, wykonują automatyczną kompilację po zapisaniu dowolnego pliku. Mam nadzieję, że w przyszłych wersjach Visual Studio Microsoft doda tę funkcję.

MitAmr
źródło
1

Zgadnij, co ... jeśli używasz nowoczesnego środowiska IDE, które wyświetla ostrzeżenia, kompiluje się w tle. W ten sposób wie, że te elementy nie będą się kompilować w obecnej postaci.

Jesse McCulloch
źródło
7
To robi tła analizowania . To nie to samo, co pełna kompilacja.
Mason Wheeler
tak, oczywiście, ale wydaje się, że zatrzymują się o krok. Jeśli mimo wszystko zostanie wykonana kompilacja / parsowanie, to dlaczego nie przejść całą procedurę i użyć jej w procesie kompilacji / uruchamiania?
Homde
1
@MKO: AFAIK, w wielu IDE drzewo analizy jest używane w procesie kompilacji (zamiast ponownego parsowania dla kompilatora), jeśli źródło nie zmieniło się od czasu wygenerowania.
Anon.
1

Zawsze możesz podzielić projekt na wstępnie skompilowane komponenty. Wolę, aby mój komputer kompilował się na polecenie. Tarcie poznawcze jednego człowieka to czas drugiego człowieka na refleksję i zdobycie kawy.

JeffO
źródło
1

Jeśli korzystasz z programu Visual Studio i tworzysz w języku c # lub VB Reshaper, możesz to zrobić za Ciebie. http://www.jetbrains.com/resharper/ Oszczędzam dużo czasu, znając wszystkie miejsca, w których moje zmiany w interfejsie łamią kod bez konieczności ręcznej ponownej kompilacji.

(Myślę też, że Resharper to gówno z wielu innych powodów.)

Alex
źródło
Zakładam, że masz na myśli, że reSharper poinformuje cię o wszelkich błędach kompilacji. O ile mi wiadomo, nie wygeneruje to pliku binarnego.
thelem
1

Nie wiem, lubię kompilować rzeczy. To trochę tak, jakbym dzierżył mój kod i mówił komputerowi: „ Hah! Zobaczymy, jak to odrzucasz!

Potem pojawia się błąd kompilacji, napraw go, a następnie: „ Hah! A teraz zobaczymy, że odrzucasz TO!

Potem się kompiluje i biorę kawę. Dobrze się czuć. :)


źródło
Czuje się dobrze ... Z wyjątkiem sytuacji, gdy musisz to zrobić 6500 razy w ciągu jednego dnia.
Pacerier
0

Uwaga: Zostało to zaczerpnięte z mojego doświadczenia z Netbeans (Java), więc może to nie dotyczyć Visual Studio

TMK odbywa się to nieco w tle, gdy zaczynasz edytować plik. O ile IDE nie zna każdego pojedynczego błędu kompilacji i sposobu jego wykrycia, zakładam, że kompiluje klasę w tle, a następnie zgłasza wszelkie błędy.

Problem polega na tym, że chcesz zbudować cały projekt. Czasami myślę, że nie wszystkie błędy można uchwycić dzięki tej kompilacji „na żywo”, więc po prostu wszystko odbudowuje. Może się również zdarzyć, że skompilowana na żywo klasa zawiera dodatkowe informacje, których IDE potrzebuje, ale nie powinna być dystrybuowana w postaci binarnej.

TheLQ
źródło