.NET - kilka pytań

0
  1. Używam Visual Studio 2005. Zapoznałem się z programem .NET Reflector.
    Wiadomo, że w pliku EXE, w odróżnieniu od EXEków wygenerowanych w innych kompilatorach, nie ma kodu maszynowego (bezpośrednie przetłumaczenie kodu ASM na ciąg bitów), natomiast jest kod pośredni, który kompiluje się do kodu maszynowego dopiero w momencie każdorazowego uruchamiania programu. Ponadto podobno (proszę poprawić, jak się mylę) przy uruchamianiu EXE stworzonego pod .NET nie kompiluje się cały od razu, tylko kompiluje się fragmentami w momencie np. pierwszego wywoływania określonej procedury w programie (kompilacja "just in time").

Fakt, że w pliku EXE jest kod pośredni powoduje, że w programie .NET Reflector można odtworzyć wszystkie metody i wyglądają one prawie tak, jak jak napisałem w kodzie źródłowym.

Czy na podstawie pliku EXE dla .NET można odtworzyć projekt odczytywalny w Visual Studio? Oczywiście wiadomo, że przy kompilacji pewne elementy kodu mogą być utracone przy kompilacji w ramach optymalizacji kodu, ale .NET Reflector pokazał, że można niemalże odtworzyć pierwotną postać metod. Do tego musiałoby być odtwarzanie innych elementów, jak formularze, zasoby. Czy istnieje program, który na to pozwala?

  1. Wspomniany fakt, że kompilacja następuje w trakcie pracy programu, obniża wydajność programu. A skoro następuje kompilacja w locie, to czy istnieje możliwość, żeby na podstawie pliku EXE wygenerowanego z Ms Visual Studio (lub innego kompilatora obsługującego .NET) wygenerować "zwyczajny" plik EXE z kodem maszynowym dla Windows. Wtedy (przynajmniej teoretycznie) wydajność pracy programu (szczególnie takiego, który wykonuje duże ilości obliczeń) powinna wzrosnąć. Na jednych zajęciach badałem wydajność Javy i .NET przez pomiar czasu wielokrotnego wykonywania algorytmu identycznego w obu przypadkach (algorytmy takie jak sortowanie, obliczanie ciągu Fibonacciego), test wykazał, że ten sam algorytm w Javie może wykonywać się prawie 2 razy szybciej.

  2. Wiem, że .NET jest opisany w Wikipedii, ale tam potrafią być błędy merytoryczne, więc zapytam.
    Nie słyszałem, żeby opracowano .NET na inne systemy niż Microsoft Windows. Bo w przypadku Javy cel jest jeden: Umożliwienie uruchamiania skompilowanego programu na różnych platformach. Gdyby .NET był opracowywany również dla Linux, MacOs i innych, to powód też byłby znany i ten sam, co Java.
    Jeżeli nie wieloplatformowość, to jaki był cel stworzenia i korzystania z .NET?

  3. Wiem, że w odpowiedzi na brak .NET dla innych systemów niż Windows powstał projekt Mono. Teoretycznie Mono ma być kompatybilny z .NET 2.0 (ponoć w praktyce z tym bywa różnie). Czy żaby uruchomić program dla .NET w Linuxie z zainstalowanym MONO, to czy trzeba dysponować plikiem binarnym, czy kodem źródłowym danego programu dla .NET?

0
  1. .NET to powstal zeby ulatwic ludziom programowanie. Nie ma chyba srodowiska w ktorym by sie tak łatwo - szybko programowało.

  2. .NET to prawie nieskonczone mozliwosci :) Od tworzenia rozbudowanych portali jak MySpace , przez bardzo skomplikowane aplikacje i gry po programowanie Robotów nawet.

  3. Ile % ludzi korzysta z linuxa ? Owszem to najwieksza wada .NET ale cala reszta ja rekompensuje ,a jesli dodamy fakt ze >90% osob korzysta z Windows ,to mozna smialo wybrac ta technologie.

  4. Java nie jest szybsza

0

^^^ Go to hell!

  1. W pewnym zakresie jest to możliwe. Z drugiej strony nie słyszałem nigdy o takim programie. Istnieją jednak odpowiednie programy zabezpieczające, które odtworzenie takiego projektu uniemożliwią bądź praca z takim projektem będzie uciążliwa.

  2. Tak, jest to możliwe dokładnie tak jak to opisałeś. Poczytaj o ngen.exe. Często taka procedura ma miejsce od razu podczas instalacji programu. Przyspieszy to głównie pierwsze uruchomienie programu.

  3. Tutaj musisz zapytać twórców .NETa ;). Być może chodziło tylko o posiadanie konkurencyjnego produktu dla Javy i nieźle na tym zarobić, być może nie.

  4. Rozwój Mono jest ostatnio bardziej intensywny od wydawania kolejnych nowych wersji .NET Frameworka i można spokojnie powiedzieć, że Mono jest zdolne do normalnego uruchamiania programów.
    Pod Mono uruchomić można zarówno program skompilowany pod oryginalnym .NET Frameworkiem jak i binarkę przygotowaną przez kompilator Mono. Istnieją programy, które posiadają jeden plik wykonywalny zdolny do uruchomienia pod Windowsem, Linuksem i Mac OS X, a co ciekawsze, pod każdą platformę mające Native Look (np. iFolder).

0
  1. Nie spotkałem się z takim programem. Ale może da radę znaleźć w necie jakieś IL to C# convertery ;)

andrzejlisek napisał(a)

Na jednych zajęciach badałem wydajność Javy i .NET przez pomiar czasu wielokrotnego wykonywania algorytmu identycznego w obu przypadkach (algorytmy takie jak sortowanie, obliczanie ciągu Fibonacciego), test wykazał, że ten sam algorytm w Javie może wykonywać się prawie 2 razy szybciej.

Założę się, że jestem w stanie udowodnić coś zupełnie odwrotnego :)
Gdybyś napisał, że porównywałeś renderowanie grafiki 3D w C# i C++, to jeszcze byłbym skłonny uwierzyć.
Jeśli nie zoptymalizuje się kodu, nie zna się dobrze technologii i tego jak z niej korzystać - to nic dziwnego, że napisze się coś beznadziejnego. Tak jak ten gość w newbie, z nic nierobiącą pętlą while(true){}; :D

andrzejlisek napisał(a)

Jeżeli nie wieloplatformowość, to jaki był cel stworzenia i korzystania z .NET?

  1. Zamiast filozofii "wiele platform - jeden język", jak w przypadku Javy, tutaj jest "wiele języków - jedna platforma". Można pisać elementy w C#, C++, VB, J# i jeszcze innych w ramach jednego projektu, ergo ułatwienie dla programistów, którzy nie muszą się uczyć nowego języka, żeby tworzyć w nowej technologii.
  2. Ułatwienie tworzenia oprogramowania dla, bądź co bądź, najpopularniejszych systemów operacyjnych.
  3. Do tego tworzenie aplikacji na urządzenia mobilne z systemami M$.
  4. A także łatwego tworzenia aplikacji webowych, które są w zasadzie niezależne od platformy użytkownika.
    Mało?
0
  1. aby latwiej wymusic na programistach przyzwyczajenie sie i korzystanie z kodu zarzadzanego oraz korzystanie/tworzenie ze specjalnego zestawu struktur/instrukcji, ograniczonego wzgledem mozliwosci native'a
  2. co z kolei pozwoli rozwinac i wdrozyc narzedzia automatycznej weryfikacji wytworzonego kodu, patrz np. MS SqlServer i pluginy/rozszerzenia do niego -- aby je przyjal, musza byc napisane w 100% pure .net code (czyli np. zero mieszania managed/native C++/CLI) i musza przejsc weryfikacje bezpieczenstwa
  3. dostarczenie kolejnej warstwy abstrakcji opakowujacej rozne dotychczasowe (pod)systemy. np. watpie zeby dla przecietnego programisty .net slowa "obiekt COM" czy "kontrolka ActiveX" znaczylo cos wiecej nad "prawoklik na projekt, Add Reference.. i trzeba szukac pod zakladka COM"
0

Tak, tak, i opanować świat.

0
  1. ... która to warstwa może też zapewnić większe możliwości izolacji/zabezpieczania/optymalizacji - w runtimie
0
  1. -- laczy sie z 6)
Rev.pl napisał(a)

Tak, tak, i opanować świat.

sie smiej.. :) przeciez nawet nasze forum jest 4programmers.net!

0

Czy na podstawie pliku EXE dla .NET można odtworzyć projekt odczytywalny w Visual Studio?

Ano można, jeżeli program nie był potraktowany żadnym obfuscatorem - i są do tego programy, jak działają nie wiem bo nie testowałem.

Przykład pierwszy z brzegu: http://netdecompiler.com/

Dis# generates project file for different languages, which is ready to load in Visual Studio.

  • Source files
    Source files are distributed in folders corresponding to their namespaces.
  • AssemblyInfo file
    Dis# creates AssemblyInfo file with all necessary assembly attributes.
  • Resources
    Dis# appends to Visual Studio project all assembly resources.
  • Resx files
    Dis# creates .resx files from resources for .NET forms.
  • Application icon
    Dis# extracts application icon from .exe file.
0

Ten program budżet domowy, jest bardzo fajny i dobrze zrobiony (a przynajmniej tak wygląda na screenach), ale wątpię kto zapłaci za niego 4 dychy. Trochę dużo :/

//q: widac malo znasz ludzi..

0

Ludzie placa nawet 100 zł za jakis głupi program na zaliczenie przedmiotu to i tacy co 40 zł na takie cos wydadza na pewno.

0

@othello Popraw sobie bo tutaj masz cenę 39zł a tutaj masz 49zł :)

0

@up
Zapomnialem hasla do stronki :P A na wielkie przychody i tak nie licze, nie chce mi sie tez tego projektu ciagnac dalej :P

0

Hm...a kupił ten program już ktoś?

1 użytkowników online, w tym zalogowanych: 0, gości: 1