Jaki jezyk desktopowy na poczatek?

0

Witam
Mam za soba kilkanascie miesiecy nauki php, jestem na etapie frameworkow, napisalem tez kilka projektow w phpie, w tym cms.

Zastanawiam sie nad wyborem kolejnego jezyka do nauki, ale stricte do tworzenia aplikacji deskotopowych nie webowych. Ruby odpada bo ile sie orientuje to jezyk skrytowy, ktory nie jest dedykowany do aplikacji desktop(RoR), czyli bez sensu bo powielalbym funkcjonalnosci php-a.

Mile widziany jezyk latwy w opanowaniu ze wzgledu na nauke, pozniej zawsze mozna przesiasc sie na cos bardziej wymagajacego. Myslalem o pythonie, klilka bibliotek do tworzenia 'desktopow' w tym qt.

Co polecacie?

1

Lepiej na odwrót - zacząć od czegoś bardziej wymagającego, czyli C++. Potem łatwiej zrozumieć Javę i/lub C# co bym polecił w dalszej kolejności. IMO zostaw języki skryptowe.

0

Ruby odpada bo ile sie orientuje to jezyk skrytowy, ktory nie jest dedykowany do aplikacji desktop(RoR), czyli bez sensu bo powielalbym funkcjonalnosci php-a.
Źle się orientujesz, http://en.wikipedia.org/wiki/QtRuby.

1

Myślę, że pierwszorzędnym celem programisty powinna być nauka tworzenia dobrych aplikacji, a nie skupianie się na ogarnianiu trudnych języków. Python czy Ruby to potężne języki i z pewnością zasługują na uwagę początkującej osoby.

0

C++ - potem nie bedziesz miec problemu z PHP, Java, C#. Jedynie bedzie ciezko z pythonem i ruby gdyz skladnia sie duzo rozni.

1

C++ - potem nie bedziesz miec problemu z PHP, Java, C#.
To było by zbyt piękne :) Najczęściej bywa tak, że osoby chwalą się "znajomością" tych języków, a w praktyce nie potrafią w żadnym porządnie programować. Osobiście stronię od takich osób.

3

c# do desktopów w zupełności wystarczy a i środowisko w wersji podstawowej za free a do nauki aż nadto, jak nie masz podstaw to nie ma się co pchać w c++

2

Po co uczyć się C++, jeśli chce się jedynie zrobić desktopowe GUI?
Co w takiej sytuacji da C++, czego nie da Java, Python albo C#?

1
somekind napisał(a):

Co w takiej sytuacji da C++, czego nie da Java, Python albo C#?

Na pewno troche siwych wlosow :)

0

to zescie mi podpowiedzieli - praktycznie kazdy ma inne zdanie, szczegolnie pierwsze kilka postow;)

mam ciagoty w kierunku czystego C bo ma skladnie prawie identyczna z php, automatycznie nauka bylaby latwiejsza(przy okazji php jest napisane w czystym C, od tej strony tez bylby to plus), ale...kto dzis uzywa 'zwyklego' C?

glowna wada brak obiektowosci, do tego nikt z Was go nie polecil.....

co do c++, na tym forum w podobnych tematach wiele osob uczciwie przyznalo ze ten jezyk nie jest latwy, jest bardzo pogmatwany, i zrozumienie go to nielada wyczyn, z tego wzgledu nie jest polecany jako jezyk na poczatek, podobnie jak napisal abrakadaber

@Sarrus: pytanie po co ladowac sie w c++ na poczatku jezeli sa latwiejsze opcje?

à propos pythona, na wiki [link: en.wikipedia.org/wiki/Python_(programming_language)] jest wzmianka ze jest jezykiem ogolnego przeznaczenia:

'Python is a general-purpose, interpreted high-level programming language[11] whose design philosophy emphasizes code readability'
, poza tym
'Python is often used as a scripting language, but is also used in a wide range of non-scripting contexts.'
i '
The main Python implementation, named CPython,(...) It compiles Python programs into intermediate bytecode, which is executed by the virtual machine.'
czyli identycznie jak java i C# stosuje vm

gdzies tez wyczytalem ze jest czesto wrzucany do jednego wora z jezykami skryptowymi, ponoc nieslusznie, bo (ponoc) nie jest typowym jezykiem skryptowym (co poniekad potwierdzaja powyzsze cytaty)

dlaczego nie polecacie pythona (w sumie w wiekszosci piszecie o innych jezykach)? chodzi o stopien trudnosci, wydajnosc czy jeszcze cos innego?

@abrakadaber: o C# wiem niewiele, co C# odroznia od c++ ze jest latwiejszy w nauce?....z tego co wiem C# stosuje sie do aplikacji webowych w asp.net, poza tym tworzy sie w nim aplikacje tylko pod winde(chyba ze sie myle), co jezeli bede chcial stworzyc cos przenosnego - na inne systemy?

ps java to kobyla, wiec z tym juz Od razu daje spokoj..

2

przenośne na dzień dzisiejszy to jedynie właśnie java. C# jest przenośny o tyle o ile masz wsparcie w mono na linuxie (a jak się ma mono do np. net 4 i wcf i innych takich to pojęcia nie mam). Niby c++ skompilujesz i na MS i na linuxa ale czy da się wziąć jakąś aplikację i skompilować bez przeróbek tu i tu to pojęcia nie mam - nigdy nie próbowałem. Masz jeszcze systemy mobilne - wymierający WinCE i Win Mobile, gdzie jednak najwygodniej jest w c# cf, cały ekosystem i, gdzie jest objective c, niepodobny nijak do c++ oraz androida, gdzie jest java. Należało by jeszcze wspomnieć o freepascalu, który teoretycznie kompiluje się na wszystkie powyższe platformy.
Generalnie uważam, że przenośność "jest fajna" ale na samej przenośności nie da się zarobić. Musisz zastanowić się nad docelowym targetem dla Ciebie a dopiero potem dobierać język do środowiska. Inna sprawa, że jak masz wyrobione abstrakcyjne myślenie to język to tylko narzędzie.

A co do różnic c++ a c# to są duże, c# bliżej do javy i delphi niż do c++ (jakby nie było w powstaniu c# miał udział gość od delphi). Całe winformsy są niemal kopią (nie przeczę, że ulepszoną) VCLa. Cały c# to obiekt, wskaźniki tylko jak bardzo trzeba i przede wszystkim wiesz co robisz. Jest to przynajmniej jeden poziom abstrakcji wyżej niż c++ (który jest określany jako język pośredni między assemblerem a językami wysokiego poziomu)

0

docelowym targetem mialby byc win i linux(desktop, chociaz win8 chodzi ponoc na wszystkim), bez macos, systemow mobile i calej reszty. Java na poczatek odpada. Jezeli wybor ograniczylby sie wylacznie do c# to trudno, zawsze jest cos za cos.

à propos freepascal-a napisales 'teoretycznie' czyli tez do konca tego nie sprawdziles i sytuacja wygladalaby podobnie jak z c++. Oba teoretycznie powinny sie kompilowac pod wiekszoscia platform(tak mi sie przynajmniej wydaje, chyba ze c++ jest stricte ms-dedicated). tylko ktora firma uzywa freepascal-a do komercyjnych zastosowan(?)

napisales:

Niby c++ skompilujesz i na MS i na linuxa ale czy da się wziąć jakąś aplikację i skompilować bez przeróbek tu i tu to pojęcia nie mam - nigdy nie próbowałem

wiec tak z ciekawosci: to jak to wyglada w np mozilla foundation, tworza nowa wersje przegladarki i robia to w javie zeby bylo przenosne?? watpie, zaloze sie ze tworza w c++ albo obj-c, inaczej firefox mulilyby na maxa

poza tym w trakcie procesu, kompiluja ja na rozne systemy i na kazdym dodaja jakies zmiany ze wgledu na system(zamiast wylacznie skompilowac pod roznymi systemami ten sam kod)?

co do c#, ok, czaje roznice, ale nie napisales nic o pythonie...jakie jest tw zdanie?

szczegolnie odnosnie tego co napisalem o 'skryptowosci' tego jezyka, odnosnie przenosnosci korzysta z vm jak java wiec to powinno mu zapewniac przenosnosc na najpopularniejsze systemy, pod spodem kilka cytatow z wiki, python jest dostepny m.in. na androidzie i na ios:

CPython is distributed with a large standard library written in a mixture of C and Python. It is available in versions for many platforms, including Microsoft Windows and most modern Unix-like systems. CPython was intended from almost its very conception to be cross-platform.

Python is available on Android as an option as part of the Android Scripting Environment or via the Python-for-android project, which produce native apk for android.

Python is available on iOS through the Kivy-ios project, allowing to build cross-platform OpenGL ES 2.0 Python applications.

no i à propos czystego c, moze warto od niego zaczac?

0

Może ja też dodam coś od siebie. Ja zacząłem naukę od C++, dobra gruba książka i czytanie dopóki czegoś się nie zrozumiało. Fakt język troszkę pogmatwany (jak się czasami widzi wskaźnik do tablicy wskaźników wskazujących na wskaźniki struktur to można się zgubić), ale ucząc się go oprócz nauki programowania, zdobędziesz taką wiedzę ogólną, w końcu będziesz musiał wiedzieć jak komputer przelicza miejsce w pamięci danego elementu w tablicy wielowymiarowej, co to sterta/stos, itp. Masz ładną i potężną przenośną bibliotekę Qt, w której piszę się na prawdę przyjemnie. Dodam, że nie żałuję, że rozpocząłem naukę właśnie od C++, teraz przenosząc się np na C# jest mi o wiele łatwiej, wiem jak to działa. Natomiast wydaje mi się że gdybym miał się przenosić z C# na C++ to pewnie zniechęciłbym się po pierwszej nocy :D

1

Jak masz kilkanascie miesiecy stazu w pisaniu czegokolwiek, to mozesz sie brac za tego C++, tylko on Cie nie bedzie za raczke prowadzil co sprawia pewne trudnosci przy nauce. Co do przenosnosci jak bedziesz sie stosowac do standardu + cross-platform liby to i bedzie przenosne, jak napiszesz dobrze kod to nawet zmian nie bedzie za wiele(jesli beda wcale). Z drugiej strony piszesz, ze jezyk ma byc latwy w opanowaniu co skresla C++ calkowicie. Python jest na tyle dobrym jezykiem, ze mozna w nim wiele zdzialac, naprawde wiele. Jesli chcesz sie go uczyc to zadnego problemu nie ma, sam czesto go polecam.

1

gdzies tez wyczytalem ze jest czesto wrzucany do jednego wora z jezykami skryptowymi, ponoc nieslusznie, bo (ponoc) nie jest typowym jezykiem skryptowym (co poniekad potwierdzaja powyzsze cytaty)

Jest wrzucany do tego worka jak najbardziej słusznie, ponieważ jest językiem skryptowym. Mógłby być też wrzucony do worka "języki obiektowe", jak również do worka "języki strukturalne" oraz do worka "języki proceduralne".
Ale co to zmienia dla ciebie, że język jest skryptowy? Czy to ci robi jakąkolwiek różnicę, czy kod będzie kompilowany czy interpretowany?
Python jest fajny, prosty w nauce, a daje duże możliwości.

0

wychodziloby na to ze wiekszosc z was doradzila na poczatek c(c++ lub c#) - w sumie polecilo go ok5-6 osob, python'a polecily 3 osoby

wiec wybor pozostaje miedzy c++, c# i python

co do c++ mimo ze ma swoich zatwardzialych zwolennikow na tym forum, pojawily sie argumenty ze moze byc za trudny na poczatek(abrakadaber, somekind, n0name_l), wiec ze wzgledu na moj warunek ze jezyk ma byc latwy w nauce c++ odpada

na polu bitwy;) pozostaje c# i python:

  • i jeden i drugi korzysta z VM/kodu posredniego
  • z tego co napisaliscie i z tego co jest na wiki wynika ze zdecydowanie bardziej przenosny jest python, co na pewno jest duzym plusem
  • oba maja szersze zastosowanie niz c++, tzn pozwalaja na tworzenie tez aplikacji webowych(obok desktopowych)
  • c# jest czescia .NET(technologii konkurencyjnej do PHP) na ktora jest coraz wieksze zapotrzebowanie(patrz oferty pracy), co na pewno tez jest niemalym plusem
  • o ile dobrze zrozumialem c# ma skladnie podobna do c i php bardziej niz python , a python wprowadza w tej kwestii duze roznice, co moze byc utrudnieniem
  1. wybor nielatwy, ktory wg was lepszy na poczatek i bardziej przyszlosciowy: c# czy python( mile widziane argumenty czemu akurat ten)?

  2. z drugiej strony na kiego grzyba mi c# skoro bede mogl tworzyc tylko pod systemy ms, gra warta swieczki?

  3. skoro juz mowimy o roznicach c++ i c#(mimo ze c++ juz odrzucilem wczesniej) - jezeli potraficie to ocenic, ile czasu osobie srednio zdolnej zajelaby nauka c++ a ile c#? czy roznica bylaby duza?

à propos jezykow skryptowych:
@aurel: o ile dobrze zrozumialem,

nieslusznie
w tym sensie ze jest jezykiem ogolnego przeznaczenia
Python is a general-purpose, interpreted high-level programming language
w przeciwienstwie do php, ruby, javascript( i innych jezykow) ktore tez sa jezykami skryptowymi ale przeznaczonymi konkretnie do tworzenia aplikacji webowych(jezeli nawet nie do konca w teorii to zdecydowanie w praktyce, liczba zastosowan), stad nieslusznie bo utarlo sie ze jezyk skryptowy jest kojarzony glownie z web, podobnie jak php, jezyk skryptowy = jezyk webowy, a jak widac ponizej Python ma o wiele wiecej zastosowan
tak to przynajmniej rozumiem

na wiki mamy:

Python is often used as a scripting language, but is also used in a wide range of non-scripting contexts.

co do 'workow';) masz racje à propos innych workow - obiektowego czy strukturalnego - Python'a moznaby tez tam wrzucic, ale rownie dobrze php'a tez mozna by wrzucic do worka 'obiektowe' czy 'strukturalne'( bo jest pelnoprawnym jezykiem obiektowym od wersji 5, zachowal tez cechy jezyka strukturalnego), ale juz do 'jezyk ogolnego przeznaczenia' czy 'jezyk aplikacji desktopowych' nie bardzo wg mnie, tak jak np c++ jest zdecydowanie 'jezykiem aplikacji desktopowych'

à propos jezyk interpretowany vs jezyk kompilowany, jaka roznica?
oprocz najwazniejszych czyli ze jedno trzeba kompilowac a drugie nie(bo jest to robione w locie), sam jestem ciekaw innych roznic, wiec moglbym zadac to samo pytanie..(dla mnie mniej zabawy jest z interpreterem)

zawsze mi sie wydawalo ze kod kompilowany(a nie interpretowany) jest szybszy, i stad jedna z roznic to wydajnosc, (interpreter kompiluje kod za kazdym razem gdy wywolywany jest program), idac tym tokiem roznica(i przewaga, szczegolnie dla uzytkownika) moglaby byc taka ze c++ pozwala na tworzenie wydajniejszych aplikacji i tym goruje nad jezykami skryptowymi( przyklad mechanizmu hiphop - cos ala VM dla PHP - ktory zmniejszyl czas wykonywania kodu php o 50%, konwertujac go do c++ w locie czy jakos tak)

tu pytanie do was: jezeli dobrze rozumuje, to w c++ tworzy sie wydajniejsze aplikacje niz w c#?

0
pankracy inc. napisał(a):

w przeciwienstwie do php, ruby, javascript( i innych jezykow) ktore tez sa jezykami skryptowymi ale przeznaczonymi konkretnie do tworzenia aplikacji webowych

Stwierdzę tak, są 3 rodzaje prawdy: prawda, święta prawda i g...o prawda. To jest ta trzecia z prawd. ECMAScript powstał jako język do pisania skryptów do innych aplikacji (np. rozszerzeń, patrz GNOME Shell), a Ruby jako język ogólnego użytku łączący programowanie obiektowe z funkcyjnym w ładny sposób, a głównie miał być ładniejszym i prostszym Perlem, to że RoR stał się popularny, to nie znaczy, że to język webowy. Jeśli by tak było to językami "konkretnie" webowymi były by też: C#, Java, Scala, Perl, Python, Groovy a nawet C, C++, Delphi, etc. (poprzez skrypty CGI).

0

gowno, powiadasz ..... zebys mnie dobrze zrozumial - chcac nie chcac utarlo sie ze poszczegolne jezyki zostaly uznane za webowe mimo pierwotnych zalozen:

-ecmascript(jego wersja javascript) jest najbardziej popularny ze wzgledu na jego zastosowania client-side, dhtml czyli webowe(jquery, extjs itd)
-ruby jest najbardziej popularny z powodu istnienia RoR
-Perl, w wiekszosci przypadkow wzmianki jakie o nim widzialem(slyszalem) to byl kontekst web(pozniej jak sie gdzies zaglebilem to dowiedzialem sie ze ma tez inne zastosowania)
-Python, niekoniecznie tylko web o czym pisalem(ale kto wie co autor mial na mysli...)
-C#, Java na pewno nie wylacznie webowe, jak juz to web + desktop co potwierdzily osoby z tego forum, c# polecili mi jako jezyk desktopowy
-c, c++ jak najbardziej desktop co potwierdzily osoby z tego forum polecajac mi jako pierwszy jezyk desktopowy (to ze maja biblioteki do polaczen z siecia i z bazami danych nie swiadczy ze to jezyk dedykowany dla web)

Wiec moze fakt pierwotne przeznaczenie i aktualne spopularyzowane sie rozni, ale to popularne wyznacza glowne kierunki zastosowan.

*jeszcze nie slyszalem zeby ktos robil jakas aplikacje desktop w ruby i sie tym chwalil jak to fajnie, szybko i skladnie jest robic cos takiego wlasnie w ruby, a co do RoR, wrecz przeciwnie(poza tym odnosnie c++/c# kilka osob sie wypowiedzialo w tym watku ze jak destop to wlasnie w c, a nie w ruby)
*jezeli wiekszosc zastosowan javascript w swiatowym oprogramowaniu to uzycie go do pisania rozszerzen a nie web to bylby to dla mnie zonk
*co do php juz nie byles taki pewny, a przy bibliotece qt albo gtk mozna by sie upierac:P

Tyle moge ze przyznac ze sprawa jest dosyc dyskusyjna bo z jezykow desktopowych moznaby na sile zrobic webowe z tego wzgledu ze dzis wszystko dziala w sieci(jak ktos wspomnial na devpytania.pl) ale chyba nie o to tu chodzi.

0

ECMAScript powstał jako język do pisania skryptów do innych aplikacji (np. rozszerzeń, patrz GNOME Shell)

ECMAScript jako standaryzacja Javascript powstał dla klienckiego www w 1996/1997 roku. Do rzeczy niezwiązanych z www zaczął zostać szeroko wykorzystywany dopiero niedawno.

1
pankracy inc. napisał(a):
  • c# jest czescia .NET(technologii konkurencyjnej do PHP)

Kto Ci tak powiedział?
.NET oferuje dwa frameworki webowe, kilka desktopowych, tworzenie aplikacji w chmurze, kilka platform mobilnych, tworzenie gier na Windows i Xboxa oraz paręnaście innych rzeczy. PHP jest konkurencją co najwyżej dla jednej małej części .NET.

tu pytanie do was: jezeli dobrze rozumuje, to w c++ tworzy sie wydajniejsze aplikacje niz w c#?

Teoretycznie tak, za to nie tworzy się ich wydajniej.

3

Skoro już wszyscy polecili C#, C++ i Pythona, to ja polecę Javę 8, która ma wyjść w tym roku :] Obecnie możesz pouczyć się Javy 6 i 7, a jak wyjdzie Java 8 to od razu na nią przeskoczyć. W Javie 8 mają być lambdy (oparte o SAM - Single Abstract Method, a więc będzie to wstecznie kompatybilne), Method Handles (taka powiedzmy, naginając nieco, statycznie typowana refleksja), Defender Methods (czy jak to się tam teraz zwie - chodzi o domyślne metody w interfejsach, co umożliwiło między innymi stworzenie interfejsu a'la LINQ, tyle, że LINQ używa statycznych metod, a Defender Methods są wirtualne, dzięki czemu można stworzyć osobne metody rozszerzające dla każdego interfejsu), itd

Java jest używana w bardzo wielu urządzeniach, począwszy od odtwarzaczy Blu-Ray, poprzez aplety (które miały początkowo być siłą Javy, a okazały się klapą, gdyż Flash jest dużo bardziej kompaktowy), aplikacje desktopowe, gry, Android, aplikacje webowe, krowiaste systemy biznesowe, backend do serwisów typu Facebook czy serwisy Google, itp itd

Wydajność Javy stoi na dobrym poziomie:

Python jest generalnie wolny, o rząd lub kilka rzędów wielkości od programów napisanych w C++ czy Javie. Podobnie PHP czy Ruby są wolne (gwoli ścisłości - mówię o efektywności binarek i VMek). Java, C# i C++ to generalnie podobna liga wydajnościowa. JavaScript potrafi być szybki dzięki Google V8, czyli mocno zoptymalizowanej VMce do Javascriptu od Google'a. Z tym, że w JavaScripcie się raczej aplikacji typowo desktopowych nie robi, no chyba, że liczymy aplikacje przeglądarkowe jako desktopowe. Ciekawostka: w Javascripcie można zaklepać serwerową część aplikacji webowej, vide framework node.js (nodejs.org) oparty właśnie o Google V8.

0

A ja z troszkę innej strony polecę język oparty na syntax'ie C/C++, czyli np. C/C++/C#/Java - jest to z punktu widzenia składni chyba najlepszy wybór. Najtrudniej jest poznać pierwszy taki język - późniejsza przesiadka nie jest jakoś taka ciężka. Przynajmniej w moim przypadku z C++ na inny język nie jest aż tak dużym problemem. Większym wyzwaniem według mnie jest zapoznanie się z nowymi środowiskami, bibliotekami, framework'ami etc.
A inną sprawą jest jaki język łatwiej przyswoić...

1

Dużo zależy od zależy.... Najwygodniejsze wydają się java, c#, python. Dlaczego? Ponieważ masz do nich chyba największe zasoby wszelkiej maści tutoriali, artykułów, pomocy, kursów i książek. Jednocześnie języki te mają w miarę prostą koncepcję i są łatwe w przyswojeniu.

Generalnie jeżeli wybierasz jakąś technologię to warto w pierwszej kolejności sprawdzić jak wygląda wsparcie ze strony społeczności (rozumianej jako źródło pomocy). Dzięki temu będziesz mniej się irytował trafiając na problemy, bo szybciej będziesz w stanie znaleźć rozwiązanie/pomoc.

0
pankracy inc. napisał(a):

*jeszcze nie slyszalem zeby ktos robil jakas aplikacje desktop w ruby i sie tym chwalil jak to fajnie, szybko i skladnie jest robic cos takiego wlasnie w ruby, a co do RoR, wrecz przeciwnie(poza tym odnosnie c++/c# kilka osob sie wypowiedzialo w tym watku ze jak destop to wlasnie w c, a nie w ruby)

To widzę, że nigdy nie interesowałeś się DSL'ami, które się stosuje np.:

  • Chef - http://www.opscode.com/chef/
  • Rake
  • RSpec - wbrew pozorom, można to stosować również przy projektach nie Railsowych, nawet nie w projektach Rubiego, ostatnio pracuję nad napisaniem testów do Fish właśnie w RSpec
  • Cucumber - jedno z najlepszych narzędzie do BDD z jakim się spotkałem
  • Capistrano
  • Vagrant
  • Heroku Toolbelt
  • Hub
  • o Metasploicie nie wspominając

Więc jak widać tak mało tego nie jest, a żadne z tych narzędzi nie jest stricte związane z web developingiem (no może poza Heroku Toolbelt).

EDIT: Był bym zapomniał o Guard i Whenever. Pierwszy to obserwator plików, a drugie to coś a la Cron.

1

W czasach gdy komputery mają po kilka rdzeni sam język nie wystarczy - program trzeba tak napisać żeby korzystał ze wszystkich rdzeni w komputerze. Czyli do ANSI C trzeba znać OpenMPI, OpenMP ....do C# Task Parallel Library:
http://msdn.microsoft.com/pl-pl/library/dd460693.aspx

Programowanie dla wielu rdzeni to nie to samo co wielowątkowość!.

1

Jak napiszesz program w standardowy sposób bez dyrektyw "#pragma parallel ...." to on będzie korzystał tylko z jednego rdzenia w komputerze.
Tak wygląda poprawnie napisany program działający na wielu rdzeniach:

 
/* 
   OpenMP example program which computes the dot product of two arrays a and b
   (that is sum(a[i]*b[i]) ) using a sum reduction.
   Compile with gcc -O3 -fopenmp omp_reduction.c -o omp_reduction
*/

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

#define N 1000

int main (int argc, char *argv[]) {
  
  double a[N];
  double sum = 0.0;
  int i, n, tid;
  
  /* Start a number of threads */
#pragma omp parallel shared(a) private(i) 
  {
    tid = omp_get_thread_num();

    /* Only one of the threads do this */
#pragma omp single
    {
      n = omp_get_num_threads();
      printf("Number of threads = %d\n", n);
    }
    
    /* Initialize a */
#pragma omp for 
    for (i=0; i < N; i++) {
      a[i] = 1.0;
    }

    /* Parallel for loop computing the sum of a[i] */
#pragma omp for reduction(+:sum)
    for (i=0; i < N; i++) {
      sum = sum + (a[i]);
    }
    
  } /* End of parallel region */
  
  printf("   Sum = %2.1f\n",sum);
  exit(0);
}
0
tylkopamietaj napisał(a):

Jak napiszesz program w standardowy sposób bez dyrektyw "#pragma parallel ...." to on będzie korzystał tylko z jednego rdzenia w komputerze.

Nigdy nie masz pewności, że twój program zostanie uruchomiony na większej ilości procesorów, bo o tym nie ty decydujesz. Możesz jedynie przekazać komputerowi informację, że ten kod może być uruchomiony równolegle, jednak czy tak będzie, to się nie dowiesz (od strony swojego programu). Przecież nie trudno wyobrazić sobie sytuację gdy odpalasz program działający równolegle, ale masz do dyspozycji tylko 1 procesor, bo reszta już coś przetwarza. I co? Poczekasz aż będzie wolna moc, ubijesz pozostałe procesy, czy pokornie zajmiesz miejsce, które masz i poczekasz, aż zwolni się więcej mocy?

1

Ale chyba najpierw trzeba poznać dobrze bibliotekę standardową danego języka. Reszta przyjdzie potem, kiedy będzie potrzebna.

0

Paczaj:

import javax.swing.*;

public class Ramka extends JFrame {
 public Ramka() {
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setSize(800, 600);
  this.add(new JButton("Przycisk"));
 }
 public static void main(String[] args) {
  Ramka r = new Ramka();
  r.setVisible(true);
 }
}

Taki prosty i łatwy do zrozumienia (a wręcz możliwy do przeczytania) kod napisany w Javie tworzy ramkę o wymiarach 800x600 z dodanym przyciskiem, który to ma etykietkę "Przycisk". Zrób podobną ramkę (nie okno dialogowe) w C++ korzystając z WinAPI. Porównamy prostotę działania.

0
import javax.swing.*;
 
public class Ramka extends JFrame {
 public Ramka() {
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setSize(800, 600);
  this.add(new JButton("Przycisk"));
 }
 public static void main(String[] args) {
  Ramka r = new Ramka();
  r.setVisible(true);
 }
}

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