Zaloguj się, aby obserwować  
Bartuc

Język C / C++ / C# / Java - pytania, problemy...

1979 postów w tym temacie

Dnia 17.10.2012 o 06:35, Sigu napisał:

Nic szczególnego. Przeglądam kody źródłowe prostych programów i odnoszę właśnie takie wrażenie.

Niestety wiele programów przykładowych w Javie jest pisanych przez kompletnych amatorów i byłyby źle napisane w dowolnym języku. Jako takie przykłady znajdują się wyłącznie w tutorialu do Javy na stronie Oracle oraz w podręcznikach programowania (i to nie wszystkich).
Poza tym jest jeszcze druga sprawa - pewne możliwości Javy są takie, że w 30 linijkach można zawszeć zarówno fatalny kod, którego skrócenie sprowadza się do kilku "ifów" jak i... wielowątkową (choć prostą) grę.

Dnia 17.10.2012 o 06:35, Sigu napisał:

Może właśnie tutaj tkwi błąd, że są proste. Ogólnie rzecz biorąc też obsługa
Eclipse i NetBeans to bardziej skomplikowana sprawa niż zabawa z DevC++.

Nie jest bardzo skomplikowana. Na przykładzie NB:
1. Ściągasz JDK (Java Development Kit), instalujesz (najlepiej pod jakąś krótką ścieżką np. C:\PRG\JDK)
2. Ściągasz sobie np. Netbeans zawierający wyłącznie obsługę samej Javy (czyli IDE + minimalny zestaw pluginów), instalujesz
3. Ściągasz dokumentację offline do najnowszej wersji (Java SE 7 Documentation, http://www.oracle.com/technetwork/java/javase/documentation/java-se-7-doc-download-435117.html), wszystkie pliki ściągasz i wrzucasz do katalogu najlepiej tam gdzie zainstalowałeś JDK.
4. Odpalasz Netbeans, zgadzasz się na ewentualne aktualizacje pluginów, a po zakończeniu ich instalacji wchodzisz do Tools/Java Platforms, tam wybierasz JDK 1.7 (powinna być tylko jedna wersja), a z boku zakładkę sources, gdzie jeżeli jest lista pusta dajesz Add Jar/Folder i szukasz katalogu JDK, gdzie zaznaczasz src.zip i dodajesz do listy. Następnie wchodzisz do zakładki Javadoc i tak samo wybierasz z katalogu JDK plik jdk-7u6-apidocs.zip, w którym jest dokumentacja. Dopiero te dwie rzeczy dają Ci całe IDE z dokumentacją i źródłami.
Od tego momentu można ściągnąć z tej samej strony sample i załadować ich projekty do domyślnego katalogu (jest tam zresztą instrukcja dla NB).

Ta podzielona instalacja wynika z tego, że darmowe IDE (open source) mają inną licencję niż nie do końca darmowe JDK oraz jeszcze inną niż dokumentacja. Można też ściągnąć wersje połączone np. NB + JDK, albo Eclipse + JDK. Jest wtedy o jeden krok instalacji mniej, ale później trudniej się to aktualizuje.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

No i właśnie tego rozbicia nie rozumiem. Powinien ktoś stworzyć program pozwalający zebrać wszystko w jednym miejscu.

Dzisiaj podczas jazdy tramwajem kolega dodatkowo zainteresował mnie C#. Jakieś opinie?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam problem. Znalazłem w końcu czas w przerwie między pracą a pracą na kontynuację bojów z C++ i w końcu zaczepiłem się o klasy. Myślałem, że rozumiem temat do momentu, gdy przepisując do klas mnożenie macierzy pisane bez klas natknąłem się na problem z przekazaniem danych poza funkcję 'pomnoz'. Projekt (devcpp) w lince
http://www.hans_olo.user.icpnet.pl/projekt/macierze_1.2.rar
Wiem, że problem tkwi w
macierzC.macierz[150][150]=macierzC.pomnoz(wiersze_A.rows, kolumny_A.columns, wiersze_B.rows, kolumny_B.columns, macierzA.macierz, macierzB.macierz);
lub w samej funkcji mnożącej (obstawiam na return, ale nie wiem jak inaczej go zrobić)
ponieważ dane do funkcji wchodzą prawidłowo (sprawdzałem przez wydruk danych krok po kroku), ale do macierzC.macierz[150][150] przekazywana jest macierz zerowa. Myślałem, że może jakieś wskaźniki, czy coś, ale jako że jeszcze nie za bardzo ogarniam wskaźniki to postanowiłem niczego nie psuć bardziej, ale jeśli to będzie konieczne, to proszę o radę.
Myślę, że projekt jest opisany dość szczegółowo.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ma ktoś do odsprzedania książkę ''Systemy zwarte NS przykłady i zadania''. Nigdzie tego nie ma, normalnie książka Yeti, wszyscy słyszeli, nikt nie widział. A mój kochany Pan dr. z tego kazał się uczyć... inaczej- mamy ją mieć.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 19.10.2012 o 09:54, Dregorio napisał:

Ma ktoś do odsprzedania książkę ''Systemy zwarte NS przykłady i zadania''. Nigdzie tego
nie ma, normalnie książka Yeti, wszyscy słyszeli, nikt nie widział. A mój kochany Pan
dr. z tego kazał się uczyć... inaczej- mamy ją mieć.

Schematy, nie systemy i wszystko stanie się prostsze, ale czy będzie dostępne to nadal nie mogę zagwarantować. Często tak bywa, że wymaga się wiedzy z podręcznika dostępnego jedynie w bibliotece. Ja tak miałem z 40 letnim podręcznikiem do elektrotechniki, którego było ze 30 sztuk na 120 studentów. Zdało około 30 osób ;].

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 19.10.2012 o 09:59, hans_olo napisał:

> Ma ktoś do odsprzedania książkę ''Systemy zwarte NS przykłady i zadania''. Nigdzie
tego
> nie ma, normalnie książka Yeti, wszyscy słyszeli, nikt nie widział. A mój kochany
Pan
> dr. z tego kazał się uczyć... inaczej- mamy ją mieć.
Schematy, nie systemy i wszystko stanie się prostsze, ale czy będzie dostępne to nadal
nie mogę zagwarantować. Często tak bywa, że wymaga się wiedzy z podręcznika dostępnego
jedynie w bibliotece. Ja tak miałem z 40 letnim podręcznikiem do elektrotechniki, którego
było ze 30 sztuk na 120 studentów. Zdało około 30 osób ;].

Tak, tak, pisałem z głowy tytuł. Chodziło o Schematy :D Nie ma nigdzie. W księgarniach internetowych pusto. W księgarniach akademickich pusto, w antykwariatach nic i w bibliotece też nic. Nawet gdybym chciał ''pożyczyć'' z internetu, to nie mogę, bo nie ma...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wprowadziłem wskaźniki, wcześniej próbowałem wskaźników z jedną gwiazdką, ale miałem overflow w momencie, gdy program przeszedł do przekazywania po obliczeniu. Wyczytałem na internetach, że tak jest z dwuwymiarowymi macierzami i ogólnie jest z tym beka. Zabrałem się więc za podwójne wskaźniki, ale tak jak analizuję "symfonię C++", tak nie było o nich mowy (przynajmniej do tego momentu) i ogólnie nie wiem jak je zastosować, choć myślę że teraz już jestem blisko celu.
http://www.hans_olo.user.icpnet.pl/projekt/macierze_1.3.rar

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 19.10.2012 o 01:30, Sigu napisał:

No i właśnie tego rozbicia nie rozumiem. Powinien ktoś stworzyć program pozwalający zebrać wszystko w jednym miejscu.

To rozbicie jest spowodowane przez to, że IDE takie jak Netbeans czy Eclipse są własnością "społeczności" podczas gdy JRE, JDK czy dokumentacja do nich jest własnością Oracle (wcześniej Suna). Poza tym dla każdego języka, każdej biblioteki zewnętrznej i każdej wersji platformy JRE/JDK sytuacja wygląda tak samo - dołączasz bibliotekę (np. w NB jest to Ant Libraries zamiast Java Platforms, a potem w zakładkach dodajesz lokalizację źródeł oraz dokumentacji). Jak załapie się ogólną ideę, to obsługa takiego IDE staje prosta. Komplikacja wynika z tego, że są to programy bardzo uniwersalne, a więc próbujące połączyć groch z kapustą.
Zyskiem jest to, że można zrobić projekt składający się ze źródeł w wielu językach, z różnymi bibliotekami z wielu języków, kupą zasobów z innej bajki jak np. bazami danych, w środowisku gdzie do tego samego projektu kod pisze wielu programistów na wielu maszynach - i to wszystko razem będzie działać.

Dnia 19.10.2012 o 01:30, Sigu napisał:

Dzisiaj podczas jazdy tramwajem kolega dodatkowo zainteresował mnie C#. Jakieś opinie?

C#, to klon Javy powstały z wojny między Microsoftem a Sunem o to, że ten pierwszy wprowadzał w kompilatorze Javy (na który miał licencję od Suna) nowe rozszerzenia języka, które poniekąd "psuły" język Java (np. rozwiązania wirusopodobne).
Kiedy Microsoft przegrał w sądzie walkę o umieszczanie Javy niezgodnej ze standardem nazwał tę swoją zmodyfikowaną Javę nazwą C#. Nie było tak, że całkowicie wszystkie te rozszerzenia były do kitu - niektóre ułatwiały pisanie lub utrzymanie kodu (np. adnotacje). Poza tym w międzyczasie i trochę pod wpływem C# Java też zaczęła się mocno ulepszać - szczególnie wersja 1.5 powstała pod sporym wpływem C#, gdzie wiele korzystnych rozwiązań z tego języka zaadaptowano do Javy Suna (czyli od wyroku sądowego w sprawie Javy), oczywiście oprócz zupełnie nowych elementów wprowadzonych do tego języka. Później w kilku wypadkach sytuacja się odwróciła i to niektóre wersje C# znowu zaczęły naśladować kolejne nowe rozwiązania Javy.
Generalnie są to dwa bardzo podobne języki, które silnie konkurują ze sobą (nawet na poziomie patentowania nowych rozwiązań). Obecnie na poziomie składniowym są tak blisko, że nie jest wielkim problemem przenoszenie kodu między nimi. Oba za podstawę mają wczesną wersję Javy.
Różnią się pewnymi szczegółami takimi jak wyrażenia lambda (które w C# są obecne, a w Javie projektanci zastanawiają się czy wniosą one do języka coś pozytywnego - oraz jak bo lambda czasem mocno zaciemnia kod).
Pewna różnica jest w środowisku - Java wymaga do pracy środowiska Java Runtime Environment (JRE), które obecnie zajmuje jakieś 90 MB i uruchamia skompilowany "kod bajtowy". Natomiast C# pracuje wyłącznie na środowisku .NET i uruchamia funkcjonalnie bardzo podobny skompilowany kod CLR. Środowisko to jednak nawet w pierwszych wersjach przekraczało znacząco 200 MB, a obecnie po czterech dużych wersjach (i niezliczonych service packach), które są przyrostowe (kolejna nie eliminuje poprzedniej) mogą zajmować łącznie ponad 2 GB (z tego jakieś 800 MB, to tylko ostatnia wersja). Normalnie takie rozmiary do ściągnięcia zabiłyby każdy taki język (dla porównania flash ma swój runtime na poziomie 20 MB) gdyby nie to, że właścicielem .NET oraz Windows jest Microsoft, więc kolejne wersje .NET są wbudowywane w Windows (to jedna z przyczyn puchnięcia tego systemu i szybkiego wydawania kolejnych wersji Windows). Dlatego poprawki do tego środowiska są mniej więcej wielkości całego JRE, więc czas ściągania jest podobny. Różnica jest psychologiczna - poprawki do .NET są nazywane poprawkami krytycznymi w Windows, a JRE jest w ogóle osobnym softem, którego nikt nawet nie nazwie "poprawką zalecaną".
Druga różnica jest taka, że .NET był od razu zaprojektowany dla obsługi kilku języków - kilka kompilatorów różnych języków produkowało kod CLR (oczywiście wszystkie Microsoftu), w tym Visual Basic i C++ (przy pewnych ograniczeniach). Natomiast JRE pierwotnie pracował tylko z Javą, ale to już historia bo od kilku lat kilka zupełnie nowych języków dynamicznych pracuje z kodem bajtowym, a więc i z JRE (np. Scala, Ruby, Groovy).
Na koniec wydajność i przenośność - na początku wydajność C# w porównaniu do Javy była tragiczna. JRE miała dynamicznie kompilowany kod, do czego Microsoft dochodził dość długo, poza tym w .NET obsługa innych systemów niż Windows była głównie na papierze (choć oficjalnie jest to rozszerzenie wieloplatformowe - to wielkość potrzebnego kodu do zassania praktycznie eliminuje .NET z innych systemów). Obecnie wydajność C# poprawia się, choć wciąż jest to robione takim sposobem, że .NET korzysta z nowych nieudokumentowanych funkcji API systemu Windows, które są wydajniejsze (było już o to kilka spraw sądowych i niektóre są wciąż w toku), a JRE (jak wszystkie inne programy dla Windows) musi oczywiście korzystać z tych oficjalnych.

Gdyby korzystać tylko ze wspólnych elementów obu języków i wyłącznie z własnego pośredniego api (żadnych bibliotek wbudowanych), to ten sam kod będzie kompilowany zarówno kompilatorem C# jak i Javy bez żadnych zmian w nim.

Ostatnio konkurencja między oboma językami wkroczyła na nowy poziom ponieważ wszystkie prawa do Javy kupiło Oracle, które zjadło zęby na robieniu systemów bazodanowych oraz serwerów (właśnie w Javie) oraz ma taką pozycję w bazach danych i internecie jak Microsoft w desktopach. W każdym razie jest to konkurent z którym MS musi się liczyć. Samo Oracle ponieważ swój sukces zawdzięcza głównie Javie postanowiło wreszcie, że przestanie stukać do Suna w kwestiach, których Sun wciąż nie umiał lub nie miał możliwości rozwiązać (poprawki, kierunek rozwoju języka, porządna obsługa aktualizacji itd.).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 19.10.2012 o 11:46, hans_olo napisał:

Wprowadziłem wskaźniki, wcześniej próbowałem wskaźników z jedną gwiazdką, ale miałem
overflow w momencie, gdy program przeszedł do przekazywania po obliczeniu. Wyczytałem
na internetach, że tak jest z dwuwymiarowymi macierzami i ogólnie jest z tym beka.

Nikt Ci nie powiedział, że w C++ nie ma tablic wielowymiarowych?
Generalnie nie ma co się zabierać za takie tablice nie rozumiejąc wskaźników ponieważ takie tablice, to nic innego jak udawana obsługa wskaźników. Warto zapamiętać: t[5] == *(t+5) == *(5+t) == 5[t].
To co zapisuje się jako int x = t[5][10], to nic innego jak x = *( t + 5 * (sizeof(int[10]) / sizeof(int)) + 10). Ta konstrukcja sizeof(int[10]) / sizeof(int), to nic innego jak ilość elementów podtablicy (w C/C++ jest tylko sizeof, które mówi o zajętości pamięci, a nie ilości elementów).
Z powodu z syfiastej obsługą klasycznych tablic w C++ wszyscy uciekają z obliczeniami numerycznymi do obiektowych vectorów z C++ (mają zdefiniowany operator [] oraz ilość elementów) lub po prostu do innych języków - C# i Javy.

Dnia 19.10.2012 o 11:46, hans_olo napisał:

Zabrałem się więc za podwójne wskaźniki, ale tak jak analizuję "symfonię C++", tak nie było o
nich mowy (przynajmniej do tego momentu) i ogólnie nie wiem jak je zastosować, choć myślę
że teraz już jestem blisko celu.

Wystarczy pamiętać, że nazwa tablicy, to wskaźnik do jej pierwszego elementu. Z tego właśnie powodu tablica jest tylko miejscem w pamięci i nie ma rozmiaru - trzeba go pamiętać osobno - albo jako stałą przy tworzeniu tablicy, albo w osobnej zmiennej.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W sumie to ja z tym C++ to bardzo powoli, bo praca mi nie pozwala i nawet jak ktoś mi coś mówił / gdzieś czytałem, to się nie utrwaliło widocznie, choć w sumie od początku miałem wątpliwości, czy to dobry pomysł z tymi tablicami 2D. Jutro zabieram się za przepisanie tego na jednowymiarowych tablicach z offsetem i to chyba rzeczywiście będzie najbezpieczniejsze podejście. A na C#/Javę pewnie się z czasem przerzucę, chcę jednak zapoznać się z C++ jako takim językiem "wyrocznią" w dzisiejszych czasach.
Pamiętam, że jakiś czas temu, jak przerabiałem wskaźniki, to wszystko rozumiałem, ale nie było czasu na przemaglowanie i trwałe opanowanie :(. Trzeba to przerobić temat ponownie.
BTW w przyszłości chcę zrobić program kalkulujący przewidywaną ścieżkę manipulatora z punktu do punktu, stąd taki dziwny pomysł na klasę mnożącą macierze :).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.10.2012 o 14:15, hans_olo napisał:

BTW w przyszłości chcę zrobić program kalkulujący przewidywaną ścieżkę manipulatora z
punktu do punktu, stąd taki dziwny pomysł na klasę mnożącą macierze :).

IMO jest to trochę odkrywanie koła. Metody numeryczne i potrzebne do tego klasy są obstukane na wiele sposobów w mnóstwie bibliotek do C++, a w C#/Javie są nawet w bibliotekach standardowych. Przewagą bibliotek jest to, że są o wiele szybciej i bardziej fachowo poprawiane i ulepszane niż będziesz w stanie to ogarnąć (np. większość programistów nie ma pojęcia o niuansach matematyki, które są w nich uwzględniane).
Generalnie zawsze warto poszukać czy coś już nie zostało wymyślone bo czas szukania nie jest duży, a czas robienia na nowo tego samego tylko gorzej (i poprawiania) jest wielki.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 20.10.2012 o 16:09, Olamagato napisał:

> BTW w przyszłości chcę zrobić program kalkulujący przewidywaną ścieżkę manipulatora
z
> punktu do punktu, stąd taki dziwny pomysł na klasę mnożącą macierze :).
IMO jest to trochę odkrywanie koła. Metody numeryczne i potrzebne do tego klasy są obstukane
na wiele sposobów w mnóstwie bibliotek do C++, a w C#/Javie są nawet w bibliotekach standardowych.
Przewagą bibliotek jest to, że są o wiele szybciej i bardziej fachowo poprawiane i ulepszane
niż będziesz w stanie to ogarnąć (np. większość programistów nie ma pojęcia o niuansach
matematyki, które są w nich uwzględniane).
Generalnie zawsze warto poszukać czy coś już nie zostało wymyślone bo czas szukania nie
jest duży, a czas robienia na nowo tego samego tylko gorzej (i poprawiania) jest wielki.

Zapewne zostało wymyślone, ja to traktuję jako ćwiczenie umysłu, a nie jak by z tego miał być jakiś komercyjny sukces. Choć i takie plany mam, ale w nieco innym kierunku.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Java

Mam dwie spore liczby zmiennoprzecinkowe typu BigDecimal i chcę wyznaczyć ich iloraz. Niestety, wyświetla mi się błąd. Nie operowałem nigdy na takich kolosach, więc nie mam pojęcia, co powinienem w takiej sytuacji zrobić. Próbowałem przybliżyć drugą liczbę, ale nie przyniosło to zamierzonego efektu.
Dokładne wartości podaję tutaj:

a = 2242379580467606400000000000.00000
b = 371.892990662364169505569996800000

Co mam zrobić?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mam problem z funkcją isdigit(), chce jej użyć do obsługi błędów w programie ale nie wiedzieć czemu funkcja mi nie działa.
Mam taki prosty program:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>


int main ()
{
int znak=0;

printf("Podaj liczbe od 0 do 10");
scanf("%d",znak);

if(isdigit(znak))
{
printf("Dobrze!");
}
else printf("Zle!");
return 0;
}

Kompiluje się bez żadnych błędów ale jak go uruchomię i wpiszę cokolwiek to wyskakuje windowsowe okienko, że program przestał działać a sam program kończy działanie. Dodam, że próbowałem zamiast "int znak" dać "char znak" oraz "unsigned int znak" ale efekt był ten sam.
Działam na Visual Studio 2010 na Windows 7 jeśli to ma jakieś znaczenie.
Wie ktoś z czym jest tu problem ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

/.../

W dzisiejszym odcinku, uczymy się korzystać z debuggera ;)
a) Jeśli ustawisz jakikolwiek punkt przerwania to okaże się że program zawiesza się od razu po scanf. Prawdę mówiąc to jeśli int znak zamienisz na char znak=''3'' (na przykład) i całkowicie wywalisz w powietrze scanfa to całość działa poprawnie. W przeciwnym razie dostajemy piękny błąd segmentacji.


To po pierwsze. Po drugie, przeczytaj CZYM jest isdigit. Albo raczej, jakie parametry przyjmuje. Ogólnie kazanie tej funkcji żeby sprawdziła ci int który zawsze jest liczbą niezależnie co tam wsadzisz jest dziwne.
Po trzecie zaś... nie scanf("%d", znak); a scanf("%d", &znak); Jeden mały znaczek a tyle zmienia ;)

A tutaj cały kod żeby to działało jak jeszcze masz problem:

int main ()
{
char znak;

printf("Podaj liczbe od 0 do 10\n");
scanf("%c",&znak); //%c bo w końcu chcesz sprawdzić znak a nie cyfrę.

if(isdigit(znak)!=0)
{
printf("Dobrze!");
}
else printf("Zle!");
return 0;
}

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ech, nasz kochany dr. powiedział, ze nauczy nas programować od algorytmów. Może ktoś podać strony z ćwiczeniami, ale tak by były tez tam i odpowiedzi? Będę wdzięczny.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

heej mam pytanie/problem bo w innym internecie wywiązała się pewna dyskusja na temat pisania multiplatformowo pod linuchy i teraz czy to co za chwilę zacytuję jest prawdą czy nie? :
"
Nie opłaca to się pisać nieprzenośnie. Gdy piszesz przenośnie, to masz wszystko gdzieś - supportujesz te systemy, które Cię w danej chwili interesują, a jak trend się zmienia to zmieniasz systemy które supportujesz - a na koszt składa się jedynie kompilacja, poprawienie jakichś drobnych bugów i ewentualnie integracja ze środowiskiem, czyli niewiele.

> pisz pod Ubuntu
Jeżeli piszesz tylko pod konkretną dystrybucję, to robisz to źle. (jak tylko na konkretny system to najczęściej też, ale to inna sprawa). Ograniczać się w dystrybucjach można najwyżej w supporcie ;P
"
"
Jeżeli coś jest napisane porządnie, to zadziała wszędzie. Nawet, jeśli targetem jest tylko jeden system, pilnowanie się by pisać przenośnie po prostu zwiększa jakość kodu.
"

"Źle zakładasz. Nie wiem, co według Ciebie "inaczej działa" pod Ubuntu, pod Debianem czy pod Fedorą, ale jeżeli chcesz porównywać, to ściągnij oficjalną, najnowszą wersję stabilną, skompiluj i porównuj. Wersje w repozytoriach są często bardzo różne świeżością i patchami nałożonymi przez maintainerów paczek. Zgaduję, że Debian będzie miał starszą wersję, Ubuntu jakąś eksperymentalną, a Fedora będzie gdzieś po środku :P

Dane kompilacje mogą różnić się między sobą wydajnością ze względu na użyte opcje kompilatora. Z tego co się orientuję Debian na architekturze x86 używa kompilacji pod i486, Ubuntu zaś i686. Różnią się też pewnie jakimiś flagami optymalizacyjnymi i innymi takimi - ale to nie są rzeczy, które obchodzą programistę. Kod się nie zmienia - zmienia się tylko sposób wywołania kompilatora, którym się interesujesz najwyżej tylko wtedy, jeżeli chcesz mieć swój program dołączony do oficjalnych repozytoriów. No i tylko wtedy, kiedy sam sobie go paczkujesz - zwykle robi to ktoś inny ;]
"

Brzmi to mądrze, ale chciałbym się upewnić :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Dnia 23.11.2012 o 11:11, kindziukxxx napisał:

heej mam pytanie/problem bo w innym internecie wywiązała się pewna dyskusja na temat
pisania multiplatformowo pod linuchy i teraz czy to co za chwilę zacytuję jest prawdą
czy nie?

Generalnie tak. Chociaż jak wiesz jest prawda i g.. prawda. :) Program napisany przenośnie zadziała nawet w zupełnie innym środowisku - wypisze szczegółową informację o powodzie odmowy działania i prawidłowo się wyłączy. :)

Dnia 23.11.2012 o 11:11, kindziukxxx napisał:

"Źle zakładasz. Nie wiem, co według Ciebie "inaczej działa" pod Ubuntu, pod Debianem
czy pod Fedorą, ale jeżeli chcesz porównywać, to ściągnij oficjalną, najnowszą wersję
stabilną, skompiluj i porównuj. Wersje w repozytoriach są często bardzo różne świeżością
i patchami nałożonymi przez maintainerów paczek. Zgaduję, że Debian będzie miał starszą
wersję, Ubuntu jakąś eksperymentalną, a Fedora będzie gdzieś po środku :P

Tutaj ktoś nie zakłada istnienia regresów. Te niestety zdarzają się wszystkim. Czasem jedno drobne "oczywiste ulepszenie" gdzieś głęboko w kodzie jest w stanie rozwalić prawie całą funkcjonalność systemu. Na system w konkretnej wersji składa się cały zbiór progresów i regresów - kluczem jest trzymanie się dokumentacji. Aplikacja napisana zgodnie z dokumentacją pod tymczasowo mocno zabugowany system nie zadziała prawidłowo, ale kiedy tylko bug zostanie w systemie poprawiony, powinna zacząć działać. Jeżeli zrobi się aplikację, która taki bug uwzględni i ominie, to poprawka systemu może spowodować, że aplikacja przestanie działać.

Dnia 23.11.2012 o 11:11, kindziukxxx napisał:

Kod się nie zmienia - zmienia się tylko sposób wywołania kompilatora, którym się interesujesz
najwyżej tylko wtedy, jeżeli chcesz mieć swój program dołączony do oficjalnych repozytoriów.

Tu chodzi nie tyle o kod ile o logikę kodu (lub kod źródłowy). Opcje kompilatora mogą zmienić kod wykonywalny i to zasadniczo. Jednak jego działanie powinno być równoważne (jeżeli nie jest, to jest bug w kompilatorze lub CPU).

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Zależy co rozumiesz przez wieloplatformowość. Generalnie Linuksy nie różnią się jakoś nadzwyczajnie, więc pisanie elastycznego i konfigurowalnego kodu zwykle w zupełności wystarcza. Resztę załatwia otwartość kodu i feedback - nawet jeśli twoja aplikacja nie będzie działała pod daną dystrybucją, to jeśli program jest dobry a dystrybucja w miarę popularna, ktoś zgłosi ci że aplikacja nie działa, często podając czemu (np inna wersja bibliotek, inne położenia jakichś plików), a w porywach nawet napisze łatkę, która ten problem rozwiązuje.
Poza tym rozwarstwienie dystrybucji Linuksa sprawia, że utrzymując się przy jednej z nich traci się bardzo dużo rynku i zwykle się to nie opłaca.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Który kompilator, a raczej środowisko polecacie? Na linuksie pracuję na vi, tylko c i proste programy wiec daje rade. :D dev c++ nie odpowiada mi. Jaki możecie polecić? Mogę liczyć na pomoc?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Utwórz konto lub zaloguj się, aby skomentować

Musisz być użytkownikiem, aby dodać komentarz

Utwórz konto

Zarejestruj nowe konto na forum. To jest łatwe!


Zarejestruj nowe konto

Zaloguj się

Masz już konto? Zaloguj się.


Zaloguj się
Zaloguj się, aby obserwować