Kamil Izdebski

Kamil Izdebski Administrator sieci

Temat: czy odnajdę w C# to czego poszukuję?

Witam,

chciałbym więcej swej uwagi poświęcić językowi programowania C#.
Mam jednak wobec tego kilka pytań:

1. Czym mógłbym zastąpić w C# biblioteki z C++ takie jak: LST, Boost, Curses?
2. Czy C# pozwala mi na wykonywanie w programie poleceń powłoki (Linux)?

Ponadto:
- chcę głównie programować pod Linuksem (czyli monodevelop)
- aplikacje miałyby być uruchamiane pod Linuksem jak i Windows

Myślicie wobec powyższego, że C# będzie dla mnie odpowiedni?
Michał K.

Michał K. .NET Developer

Temat: czy odnajdę w C# to czego poszukuję?

Może lepiej pomyśleć o Javie?
Kamil Izdebski

Kamil Izdebski Administrator sieci

Temat: czy odnajdę w C# to czego poszukuję?

Szczerze powiedziawszy to nie znam żadnej aplikacji napisanej W Javie, której używam... Poza tym C# wydaje mi się być bardziej innowacyjnym.Kamil Izdebski edytował(a) ten post dnia 19.12.09 o godzinie 11:28

konto usunięte

Temat: czy odnajdę w C# to czego poszukuję?

znaczy się nie znasz Javy :)

czemu upierasz się na pisanie pod linux-a w C#? przecież tak nikt nie robi, każdy dłubie w C++ lub C
Kamil Izdebski

Kamil Izdebski Administrator sieci

Temat: czy odnajdę w C# to czego poszukuję?

Nikt to trochę przesada, ale pewnie mało ludzi (przykład aplikacji: Tomboy). No to może inaczej sprecyzuję pytanie. Czy mogę pisać pod Linuksem w języku C# programy na platformę Windows?

konto usunięte

Temat: czy odnajdę w C# to czego poszukuję?

Tak możesz. Ale oczywiście nie pod każdym względem.

Aplikacje konsolowe, jeśli tylko nie korzystają z mechanizmów Windows, np. domeny aplikacji, WCF, uwierzytelnianie, ActiveDirectory, usługi systemowe, Reporting Services, OLE COM, multimedia - tak.

Aplikacje GUI - tak, w oparciu o dostępne biblioteki, np. GTK#. Z tym, że jednak "naturalną" biblioteką dla GUI pod Windows są WinForms, na których z kolei oparte jest multum dostępnych na rynku, bogatych bibliotek GUI (np. Krypton). GTK# a WinForms to, dwa różne światy, więc jeśli kiedyś przejdziesz spod Mono na .NET Framework, będziesz się uczył od nowa budowania interfejsów graficznych. Musisz zdecydować, czy potrzebujesz przenośności i klasycznego wyglądu GUI (bez większych wodotrysków) - wtedy pracujesz na tym, co dostarcza Mono. Lecz jeśli potrzebujesz wypasionych interfejsów użytkownika - wtedy pozostaje Ci Windows i .NET Framework i oparte na nich komercyjne bibliteki. Również większość świetnych kontrolek na CodeProject (czyli darmowych, są to projekty użytkowników serwisu) opartych jest na WinForms.

O ile aplikacje napisane w WinForms ruszą pod Mono, o tyle po Mono nie masz (AFAIR) możliwości graficznego budowania takiego interfejsu. W każdy razie, gdy ja poznawałem Mono, miałem do wyboru tylko GTK#, może coś się już zmieniło. W dodatku WinForms pod Linuksem wyglądają IMHO... dziwnie.

No i wreszcie środowisko - MonoDevelop jest jeszcze dość daleko za Visual C# czy SharpDevelop'em, które są dla .NETa tym, czym Eclipse dla Javy. Oczywiście, pisać można nawet w notatniku, ale te czasy już minęły :)

Aplikacje ASP.NET - tak, ale zrób research w tym zakresie. Proste aplikacje przykładowe działały mi już 2 lata temu.

Do testów możesz wypróbować jakąś dystrybucję Live z Mono. Dawno temu było to Monopix, ale chyba go zarzucono. Jest też OpenSuse z Mono: http://www.go-mono.com/mono-downloads/download.html

Testowałem niedawno pobieżnie, ale nie wszystko mi działało.Adrian Olszewski edytował(a) ten post dnia 19.12.09 o godzinie 12:02
Kamil Izdebski

Kamil Izdebski Administrator sieci

Temat: czy odnajdę w C# to czego poszukuję?

Adrian Olszewski:
Aplikacje GUI - tak, w oparciu o dostępne biblioteki, np. GTK#.
Rozumiem, że czy będę się uczył GTK z C#, C++, Pythonem czy jeszcze innym językiem to nie ma większego znaczenia?
Adrian Olszewski:
No i wreszcie środowisko - MonoDevelop jest jeszcze dość daleko za Visual C# czy SharpDevelop'em, które są dla .NETa tym, czym Eclipse dla Javy. Oczywiście, pisać można nawet w notatniku, ale te czasy już minęły :)
Idąc za ciosem przeczytałem, że również mogę w monodevelop pisać w C i C++. Jednak niestety przy próbie kompilacji dostaję: Budowanie nieudane. Object reference not set to an instance of an object.

Wersja monodeveleop dokładnie ta co w linku z zależnościami poniżej.
Adrian Olszewski:
Do testów możesz wypróbować jakąś dystrybucję Live z Mono. Dawno temu było to Monopix, ale chyba go zarzucono. Jest też OpenSuse z Mono: http://www.go-mono.com/mono-downloads/download.html
Hmm.. przecież Mono jest w standardowym repozytorium Debiana. Jakiś czas temu wykonałem aptitude install monodevelop no i resztę podejrzewam, że sobie pociągnął - te wymagane paczki. Tutaj: http://packages.debian.org/squeeze/monodevelop można zobaczyć jakie.

W każdym razie przykładowy kod kompiluje mi się bez problemu:
using System;
using Microsoft;

public class Przykladowa
{
public static void Main()
{
Console.WriteLine("tekst ...");
}
}
Stanisław P.

Stanisław P. Software designer

Temat: czy odnajdę w C# to czego poszukuję?

Kamil Izdebski:
1. Czym mógłbym zastąpić w C# biblioteki z C++ takie jak: LST, Boost, Curses?
Boost zawiera teraz wszystko od zarządzania pamięcią przez parser-generator aż po otwieracz do konserw. Powiedz która konkretnie część Boosta Cię interesuje.
Curses - tak: http://curses-sharp.sourceforge.net/
2. Czy C# pozwala mi na wykonywanie w programie poleceń powłoki (Linux)?
Oczywiście - raz przez http://msdn.microsoft.com/en-us/library/system.diagnos... a dwa przez własną implementację czegoś w stylu popen() przez Mono.Posix.dup2() .fork() i innych.
Ponadto:
- chcę głównie programować pod Linuksem (czyli monodevelop)
- aplikacje miałyby być uruchamiane pod Linuksem jak i Windows
Zwykle działa - oczywiście o ile nie używasz rzeczy, które są linux-only.
Myślicie wobec powyższego, że C# będzie dla mnie odpowiedni?
Ja tak zwykle piszę i jestem zadowolony. Może nie do każdej sytuacji to jest odpowiednie, ale zwykle jest ok.

Nie bardzo rozumiem wypowiedź Adriana co do "Aplikacje konsolowe, jeśli tylko nie korzystają z mechanizmów Windows", bo IMHO nic nie stoi na przeszkodzie zrobienia aplikacji konsolowej rozmawiającej z AD, czy używającej app. domen na przykład. Reszta wymienionych technologii używa grafiki bezpośrednio, więc to raczej oczywiste, że nie będą działać.
Remigiusz Towalski

Remigiusz Towalski Manager R&D
Engineering

Temat: czy odnajdę w C# to czego poszukuję?

Nie zgodzę się z tym, że pod Mono nie można używać WinForms.
Znam duży system, który temu przeczy.

Co prawda MonoDevelop jest lata świetlne za VS ale da się z niego korzystać. Nie ma (lub nie miał jak ostatnio zaglądałem) edytora formatek pod WinForms, a edytor do GTK# był średni.

Jednak nic nie stoi na przeszkodzie aby pisać soft pod windą przy użyciu VS Express. Trzeba tylko pamiętać o kilku rzeczach:

1. Czcionki się czasem inaczej renderują na Mono.

2. Przy zaawansowanym rysowaniu kontrolek nie możesz użyć tzw. p/invoke (czyli np. GDI).

3. Punkt drugi dotyczy również kontrolek firm trzecich - nie użyjesz np. DevExpresów czy Infragisticów wswoim GUI, bo nie ruszą na Mono.

4. Przy użyciu bibliotek natywnych musisz zadbać o to aby mieć takie same punkty wejścia w wersji windowsowej i linuxowej, lub zrobić osobne owijki i odpowiednio podmieniać.

5. Im mniej będzie używać mechanizmów specyficznych dla windy czy linuxa, tym lepiej - a nuż ktoś się pokusi o odpalenie tego na Macu. :)
Kamil Izdebski

Kamil Izdebski Administrator sieci

Temat: czy odnajdę w C# to czego poszukuję?

Stanisław Pitucha:

Boost zawiera teraz wszystko od zarządzania pamięcią przez parser-generator aż po otwieracz do konserw. Powiedz która konkretnie część Boosta Cię interesuje.
Curses - tak: http://curses-sharp.sourceforge.net/
Teoretyzowałem tylko..

Podpowie ktoś co jest przyczyną błędu gdy w monodevelop chcę skompilować kod C/C++, komunikat jaki dostaję:
Budowanie nieudane. Object reference not set to an instance of an object.
Kazimierz Kuta

Kazimierz Kuta Microsoft MVP

Temat: czy odnajdę w C# to czego poszukuję?

Gdzieś masz coś takiego:

Foo foo;

A potem używasz foo bez zainicjalizowania go:

foo = new Foo();
Kamil Izdebski

Kamil Izdebski Administrator sieci

Temat: czy odnajdę w C# to czego poszukuję?

Kazimierz Kuta:
Gdzieś masz coś takiego:

Foo foo;

A potem używasz foo bez zainicjalizowania go:

foo = new Foo();
Nie bardzo rozumiem, ponieważ kod kompiluje mi się pod g++ przykładowo w konsoli. A monodevelop też ustawione jest aby kod cpp właśnie g++ kompilował.

Temat: czy odnajdę w C# to czego poszukuję?

Przecież to nie problem kodu, tylko środowiska. Jak kompilator w trakcie kompilowania może wyrzucać tego rodzaju wyjątek w kontekście kodu? Co najwyżej warna, albo gdzieś trzeba by ustawić aby warny traktował jak errory.

Coś jest w Monodevelopie skopane.

Nie pojawia się żaden stacktrace? Może gdzieś w jakichś logach coś się zapisuje?

Następna dyskusja:

WPF - czy już stosujecie?




Wyślij zaproszenie do