Java, C#, platforma NET, środowisko uruchomieniowe

0

Witam. Czy program napisany w Javie we wcześniej wersji uruchomi się jeśli na komputerze jest zainstalowana tylko najnowsza wersja Javy? Czy będzie tak samo jak w przypadku C# i platformy .NET, czyli program napisany dla wersji 2.0 nie uruchomi się, jeśli na komputerze zainstalowana jest tylko wersja .NET 4.0?

0

W obydwu przypadkach powinien się uruchomić, no chyba że korzysta z jakichś przestarzałych (deprecated) funkcjnonalności wyrzuconych z nowych wersji środowisk uruchomieniowych, ale to raczej się nie zdarza.

0

Co do Javy to program napisany w starszej wersji Javy uruchomi się na nowszej wersji...
Z platforma .NET nie jest tak do końca... Program napisany i skompilowany pod wersję 2.0 nie uruchomi się na wersji 4.0.
Inna sprawą, że są aktualizacje zarówno np. do wersji 2.0 i 4.0...
Tutaj jest lista wszystkich wersji :
http://en.wikipedia.org/wiki/List_of_.NET_Framework_versions

0

Jeszcze jedno pytanie. Jakie są typowe zastosowania dla C# i Java? C# pewnie biznes, java aplikację mobilne.

0

Z tego co pamiętam to .NET od wersji 2.0 są kompatybilne, czyli słowem by działały wszystkie aplikacje napisane w .NET potrzeba .NET 1.1 i .NET 4.0. Z JVM nie wiem jak to jest.

0

Do aplikacji mobilnych to raczej Java ME. Co do aplikacji biznesowych to oba języki się świetnie nadają... Aczkolwiek C# wydaje mi się być nieco bardziej przyjazny dla początkującego programisty...
Hmm a co chcesz pisać?

0

Kiedyś tak było (przynajmniej przed 4.0, ale chyba nie zostało zmienione), że poszczególne wersje środowiska uruchomieniowego .NET Frameworka nie są kompatybilne wstecz. I jest to zamierzone, bo mogą sobie egzystować równolegle w systemie.

Z jednym szczegółem - .NET 3.0 i 3.5 to "nakładki" na 2.0, tylko rozszerzające możliwości. Aplikacja napisana dla 2.0 zadziała na 3.5, ale aplikacja 3.5 nie zadziała na 2.0.
1.1 i 4.0 są poza klasyfikacją, niekompatybilne. Z drugiej jednak strony, program można sobie przekompilować dla nowszej wersji i możliwe, że zadziała bez modyfikacji. (1.0 nie dotykamy). Mogą też istnieć aplikacje działające na każdej wersji Frameworka, plus daje się jakoś konfigurować czy i na jakich wersjach aplikacja będzie działać.

Java ME to chyba w 2000 roku. Teraz jak już to raczej Android, gdzie pisze się bądź co bądź w Javie. Zarówno Java, jak i C# siedzą w zastosowaniach biznesowych, głęboko.

0

Ale żeście bzdur kompletnych o .NET powypisywali. Sprawdziliście chociaż?

KAŻDE runtime jest wstecznie kompatybilne.
Program napisany pod 1.0 można uruchomić na KAŻDYM Frameworku, na runtime 1.0, 1.1, 2.0 i 4 i tak dalej dla każdej kolejnej wersji.
W tym, program skompilowany pod .NET 3.0 i 3.5, o ILE nie używają dodatkowych bibliotek, które były dołączone dopiero w tych wersjach MOŻNA uruchomić na .NET Framework 2.0.

Można zainstalować wiele wersji frameworka na jednym systemie, bo zwyczajniej bezpieczniej jest uruchamiać program na runtime, dla którego został skompilowany. Jak mówi nam MSDN, jest możliwość, że aplikacja skompilowana pod starszy runtime w pewnych wypadkach może się zachować nieprzewidywalnie - np. przy zabawie refleksją i prywatnych pól klas czy na skutek jakiegoś wprowadzonego później bugfixa.
Jeżeli ktoś ma mało miejsca na dysku może zostawić sobie na dysku framework 4.0 i wszystkie aplikacje powinny działać w porządku.

A jak ktoś chce sam popróbować to może napisać sobie taki program:

Console.WriteLine("Aplikacja uruchomiona na runtime v" + Environment.Version.ToString(3));
Console.WriteLine("Aplikacja skompilowana o runtime " + Assembly.GetExecutingAssembly().ImageRuntimeVersion);

Skompilować go na kompilatorach z różnych frameworków (csc.exe) i dodać plik "nazwaprogramu.exe.config" o treści:

<?xml version="1.0"?>
<configuration><startup><supportedRuntime version="wersjaruntime"/></startup></configuration>

gdzie wersjaruntime to v1.1.4322, v2.0.50727 albo v4.0.30319. Runtime 1.0 nawet nie będziecie mieli, a może i 1.1 też. Wtedy domyślnie te programy uruchamia runtime o jedną wersję wyższy.

0

@Rev - nie masz racji. .NET 1.0 i 1.1 nie jest w pełni kompatybilny z .NET 2.0, niektóre programy napisanie w .NET 1.1 nie zadziałają w ogóle lub będą działać nieprawidłowo pod .NET 2.0 i nowszych. Z tego też powodu praktykuje się instalowanie .NET 1.1 obok najnowszej wersji frameworka, tak aby zapobiec problemom z aplikacjami napisanymi pod 1.1.

Lista breaking changes:
http://msdn.microsoft.com/en-us/netframework/aa497239.aspx

0

@AdamPL, no przecież nikt nie twierdzi, że pomiędzy różnymi wersjami frameworka nie ma żadnych zmian. Sam przecież o tym napisałem, sam Microsoft o tym wspomina. Trudno, żeby wszystkie runtime działały tak samo. Z resztą, nawet nie chodzi tutaj o uruchamianie skompilowanej aplikacji na innym runtime, jak byk tam stoi: They can also impact applications originally built against the 1.0 or 1.1 .NET Framework and then recompiled on the 2.0 .NET Framework.

0

Gdy w jakimś temacie jednocześnie pytasz o Javę i o C#, od razu postuj w dziale flame :P

0

O ile mi wiadomo, to instalacja frameworka 3.5 instaluje automatycznie wszystkie poprzednie (od 2.0 wzwyż) wersje, tak samo 3.0. Natomiast .net 4.0 znacznie odchudzono i jest "oddzielona" od reszty rak samo jak .net 1.1. Czyli jeśli zainstalujemy np. .net 3.5 to posiadamy automatycznie także .net 3.0 i 2.0. Ale po instalacji .net 4.0 mamy tylko wersję 4.0 w systemie, poprzednich wersji nie ma.

0

Dzięki wszystkim za odpowiedzi. Odnośnie .NET to program skompilowany pod .NET 2.0 nie uruchomi się, gdy na komputerze jest zainstalowany tylko .NET 4.0 Client Profile, przynajmniej tak mi wyszło jak sprawdzałem. Dzięki za informację odnośnie Java.

0
MartinoOo napisał(a)

Odnośnie .NET to program skompilowany pod .NET 2.0 nie uruchomi się, gdy na komputerze jest zainstalowany tylko .NET 4.0 Client Profile, przynajmniej tak mi wyszło jak sprawdzałem.

A mi się uruchamia. Co to był za program?

0

Somekind zobacz sobie załącznik. Komunikat z Windows XP, gdzie jest tylko zainstalowany .NET 4.0 Client Profile.
Kod programu:

 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Media;
using System.Threading;
namespace rundll32
{
    public partial class Form1 : Form
    {
        private SoundPlayer Player = new SoundPlayer();

        private void playLooping()
        {
            try
            {
                this.Player.SoundLocation = Application.StartupPath + "\\Audio\\2.wav";
                this.Player.PlayLooping();
            }
            catch (Exception)
            {
                //nie udało się odtworzyć nagrania
            }
        }
        public Form1()
        {
            InitializeComponent();
            try
            {
                Thread trd = new Thread(new ThreadStart(this.playLooping));
                trd.IsBackground = true;
                trd.Start();
            }
            catch (Exception)
            {
                //nie udało się stworzyć nowego wątku
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //this.Visible = false;
            //this.ShowInTaskbar = false;
        }
    }
}

0

Po dodaniu App.config z supportedRuntime version="v4.0.30319" działa.

0

aplikacje napisane dla 2.0 MUSZĄ działac na 3.0 i na 3.5, bo te dwie wersje są tylko zestawami nowych klas dla 2.0

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