Jump to content

Kā konkrēti izpaužas C++ valodas tuvums "dzelžiem".


Recommended Posts

HIGH-Zen

:grin: tu esi apķērīgs
The code name was VBK – Visual Basic killer.

Par VB runājot

[deleted]
2258d, 15h

Visual Basic 6.0, bitches. Then I'll roll the run-time libs into the installer. While the rest of you are writing reusable, modular objects, I'll be sipping tea. My customers will be wondering how I did it so fast, even though I spent most the month slacking off, and be praising me for the easy to use interface. If they need any serious changes, I'll just rewrite the whole thing and charge em for it.

1

Tā ka plusi ir.

Link to post
Share on other sites
  • Replies 848
  • Created
  • Last Reply

Top Posters In This Topic

  • Raimonds1

    230

  • binary

    90

  • AndrisBB

    89

  • Mezavecis

    66

Top Posters In This Topic

Popular Posts

es, kā sabiedrības pārstāvis, saku - karogs tavās rokās!!!

Viss, kur klāt piesauc kvantus, ir kruta!

Atbildēšu uz tēmas galveno jautājumu pēc būtības: Programma tiek kompilēta uz procesora instrukcijām. Programma veic darbības ar fizisko atmiņu pa tiešo. Viss, jautājums ir atbil

Posted Images

VB ir viens no iemesliem, kādēļ nekļuvu par programmētāju :). Ar baigo entuziasmu pašmācības ceļā bērnībā apguvu VB - un pēc tam praktiski neiespējami likās apgūt ko citu, jēdzīgāku... VB diemžēl pamatīgi sačakarē izpratni par programmēšanu kā tādu.

Link to post
Share on other sites
Mezavecis

Tas laikam individuāli. Pateicoties VB6 tieši kļuvu par programmētāju un kaut kad pienāca brīdis, kad vajadzēja apgreidoties uz kaut ko progresīvāku un neliels kultūršoks bija, ka mainīgie obligāti jādefinē, rindu beigās jāliek semikoli utml.

Bija mēģinājums sākt ar C++ MFC, bet tā bija slikta ideja. Iespējams, ka grāmata (tajos laikos nebija 100+ tutoriāļu un pieejams visiem internets) nebija domāta iesācējiem.  

 

VB ir viens no iemesliem, kādēļ nekļuvu par programmētāju
Link to post
Share on other sites
nevertell

 

 

Pie C nācās atgriezties, sākot niekoties ar Arduino. Tuvums dzelžiem lielisks. Starp citu, tikpat tuvs, kā Paskālā. Pitonā un citās "modernajās" valodās.

Tu saki, ka pitons ir tuvs dzelžiem ? Tikpat tuvs, kā C ?  

Link to post
Share on other sites
Raimonds1

Tagad ir laiki pamainījušies, internetā  pieejams blāķiem materiālu un problēma ir prast izvēlēties no visa, ko piedāvā un neizvēlēties kaut kādus vieglos ceļus. Tam, kam es ticu pēc šeit un citur lasītā ir tiešām tas, ka nepareizi izvēloties to sākumu var izdarīt aplamus secinājumus un vēlāk tas atspēlējas.

 

Tāpēc es esmu izdomājis šādi - ja jau C valodu deklarē kā pamatu un tas stiprās puses ir 

 

 

 

Uz tēmu ideāli atbild raksts "After All These Years, the World is Still Powered by C Programming". Īpaši vēršu uzmanību, ka tur zemāk ir nodaļa "Why is the C Programming Language Still Used?", kur paskaidroti sekojoši punkti:

 

Portability and Efficiency

Memory Manipulation

Deterministic Usage of Resources

Code Size

 

 

Tad nu meklēšu ka nu tēmas, kur tas konkrēti izpaužas, un darbības ar bitiem un baitiem ir viena no tām, vispirms apgūšu teoriju, ko un kāpēc ar to dara (piemēram, da jel kādu datu pierakstu ar burtiem, no kuriem katrs aizņem baitu un šo pašu datu pierakstu ar 1 vai diviem baitiem, varbut astotnieku, varbut 16 nieku sitēmā) JAU PAŠĀ MĀCĪBU SĀKUMĀ. 

 

Tā es esmu iecerējis jau no paša sākuma apgūt to skaistumu un efektivitāti kas tai C un C++ valodai ir. Ja tādu gatavu materiālu nebūs, tad nāksies meklēt tos veidojošās sastāvdaļas un strādāt ar asociācijām vai konsultēties ar zinātajiem.


 

 

centies mācīt citiem to, par ko pašam nav sajēgas. 

 

Ļoti iedvesmojoši. Nevēlos strīdēties un meklēt piemērus. Saproti, kā gribi.

Link to post
Share on other sites
Jurkins

Es, nebūdams programmētājs, iesaku Raimondam Pirmajam apgūt datu pierakstu 21-nieku sistēmā ar burtiem... trim ... X, Y un vēl ar vienu kiriļicā (nu vai kaut utf kodējumā - H, U un J). JAU PAŠĀ MĀCĪBU SĀKUMĀ.

 

p.s. šī tēma ir fantastiska :D:D:D

Edited by Jurkins
Link to post
Share on other sites

 

 

Tu saki, ka pitons ir tuvs dzelžiem ? Tikpat tuvs, kā C ?

 

Vai Tu, luudzu, nevareetu nociteet arii naakamo teikumu par masjiinkoda iesprausjanas iespeejaam? Citaadi stipri izskaties peec bezatbildiiga politikja vai nozombeeta zjurnaljugas, kursj par savu galveno veiksmi un panaakumu uzskata kaut ko izraut no konteksta un tad teelot baiso patiesiibas atklaajeeju.

 

Un jaa. Tas fakenais masjiinkods, cilveeciigi uzrakstiits, saucas Asmeblers, Vai to var saukt par valodu - gruuti teikt.

Link to post
Share on other sites
nevertell

 

 

Vai Tu, luudzu, nevareetu nociteet arii naakamo teikumu par masjiinkoda iesprausjanas iespeejaam? Citaadi stipri izskaties peec bezatbildiiga politikja vai nozombeeta zjurnaljugas, kursj par savu galveno veiksmi un panaakumu uzskata kaut ko izraut no konteksta un tad teelot baiso patiesiibas atklaajeeju.
 

 

Parādi man, kurā pitona dialektā tu vari spraust ASM iekšā ?

Link to post
Share on other sites
Raimonds1

Labāk mēģinam koncentrēties uz to, vai maz ir iespējams cilvēkam no malas, kādam noliktavas operatoram, piemēram, izskaidrot pointera jedzienu vispār un konkrēti šo uzlabojumu.


 

 

daudzas lietas, kas paliek stipri ērtākas un rezultātā ir jāraksta mazāk kods, lai panāktu to pašu rezultātu. Piemēram, ja lietojam objektu, kuram ir nenosākams lifetime, tad varam nevis čekot referenču skaitu ar roku, varam ielikt objektu iekš std::shared_ptr<>, un to visu darīs tavā vietā.

Tādam  kas nekā nezin par programmēšanu, vieglajā valodā - labāks izaicinājums, nekā vienam otru likt pie vietas.

 

 

Es, nebūdams programmētājs, iesaku Raimondam Pirmajam apgūt datu pierakstu 21-nieku sistēmā ar burtiem... trim ... X, Y un vēl ar vienu kiriļicā (nu vai kaut utf kodējumā - H, U un J). JAU PAŠĀ MĀCĪBU SĀKUMĀ.

 

trijnieku sistema ir kīniešu parmaiņu grāmatas idzin pamatā

 

elektornikā arī ir trijnieku sistēa, 0,1 un ne 0, ne 1, kad tranzistora kolektora izvads nav savienots ne ar barošanas plusu, ne zemi. Tur ir šādas tādas papildus iespējas, kas nav binārajai.

________________

 

Vai arī kā augstākminētie, netērēt laiku "jauno" tehnoloģiju (C++17 ar manuāli 1000+ lapas koncentrēta bullšita) apguvei, bet strādāt.

 

2016. gadā jau varēji mācīties valodu, kas nav veca un rezultātā pilna ar tuftu. Ir taču Rust un Go. Un es ceru, ka C++ mācies tikai C++14 un C++17 standartus, nevis kautko aizvēsturisku.
Edited by Raimonds1
Link to post
Share on other sites

Nevertell, vai Tu no mammas gules esi atsleegts, vai?

 

Protams, konstrukcija:

 

10 go to 100

 

100 mov a,b

 

 

pitonaa nav piejama. Bet,cik esmu darbojies ar OpenCV ieksj Pitona, tad pieredze liecina, ka importeejams Pitonaa ir viss. Ja dikti gribas, lieto Pyasm.

Link to post
Share on other sites
Jurkins

Raimond1, es neesmu tolerants un pieklājīgs, tāpēc jautāšu tieši - Tu esi dolbajobs vai izliecies? Kāds kolektora izvads? Z stāvoklis tiek nedaudz citiem mērķiem elektronikā izmantots. Tu savu procesoru arī būvēsi, kurš strādās pēc Taviem "inteliģentajiem" algoritmiem? Ja šo laiku būtu pavadījis paņemot kādu grāmatu par c un ieinstalējot kaut vai to pašu Visual Studio (par brīvu) nevis dzinis tupu filozofiju n-to lappušu garumā, jau sen zinātu, kas ir pointeri. Un nebūtu jāfilozofē par noliktavu operatoriem... kuriem, starp citu, darba specifikas dēļ, pointeru tēma pielektu ļoti ātri.

Link to post
Share on other sites
Raimonds1

Mana klasifikācija forumā nelauj atbildēt ar to pašu. Tādēļ atturēšos no atbildes.

Edited by Raimonds1
  • Patīk 1
Link to post
Share on other sites
Jurkins

Nu skaidrs, ka Tava atbilde būs klaviatūras caureja vēl 448 lappušu un kādu piecu gadu garumā, bet pointeri kur bijuši tur arī paliks.

Link to post
Share on other sites
Raimonds1

Jau kadu piekto reizi - es esmu pieteicies C++ un Pascal kursos un pildu mājasdarbus.

Jautājums bija klasificētam biedram Nevertell - vai viņš var izskaidrot C++ jaunievedumus.

Link to post
Share on other sites
nevertell
pitonaa nav piejama. Bet,cik esmu darbojies ar OpenCV ieksj Pitona, tad pieredze liecina, ka importeejams Pitonaa ir viss. Ja dikti gribas, lieto Pyasm.

NodeJS un Javā ar var rakstīt iekš ASM, vienkārši importē C bibliotēku :> Lispā ar noteikti var.

 

Jaunievedumi pārsvarā ir jauni keyword'i un konstrukcijas sintaksē (lambdas), un jaunas fīčas iekš standarta bibliotēkas. Ir arī jaunas fīčas sakarā ar labās un kreisās puses referenču "notveršanu", kur tu vari piesaistīt kādu vērtību konkrētam mainīgajam konkrētai vērtībai (labās puses vertību) vai piesaistīt referencei (kreisās puses vērtību), tādejādi ja referenci pārraksta, notvertais mainīgais arī rādīs uz 'jauno' vērtību. Pārsvarā tas ir svarīgi tikai rakstot lambdas funkcijas. Par šo visu tu vari uzzināt vairāk palasot dažnedažādus rakstus par C++. 

Edited by nevertell
Link to post
Share on other sites
Raimonds1
Piemēram, ja lietojam objektu, kuram ir nenosākams lifetime, tad varam nevis čekot referenču skaitu ar roku, varam ielikt objektu iekš std::shared_ptr<>, un to visu darīs tavā vietā.

 

Šito nevar kaut kā vieglāk izskaidrot.

Te https://msdn.microsoft.com/en-us/library/bb982026.aspx

Ir šādi jēdzieni - Parameters

 
Ty The type controlled by the shared pointer.
Other The type controlled by the argument pointer.
ptr  The pointer to copy.
The type of the deleter.
The type of the allocator.
dtor  The deleter.
alloc  The allocator.
sp  The smart pointer to copy or move.
wp  The weak pointer to copy or move.
ap  The auto pointer to copy or move.
up The unique pointer to move.
Cik saprotu, stāsts ir par atmiņu, izdalītiem apgabaliem un manipulāciju ar to apgabalu atrašanas/atrašanās vietām. Kaut ka nevis specifiski programmētājiem saprotami, bet ar noliktavas plauktiem vai bibliotekāra pastāstu, kad kur ko nest un kam dot un kā apzīmēt.
 
Kas tie ir par datiem un mainīgajiem, ar ko strādā, kaut kas grāmatvedisks, tehniska failu apstrade, kaut kāda viena veida failu konvertācija par citiem, kaut kāda datu straume, kas ir organizēti pareizi jāpadod.tālāk vai jāglabā. Kas ir rezultāts - kaut kāds teksts izejā vai labi pārskatāmi sakārtoti dati, datu šķirošana, dati, kas ir pieejami pēc pirmā pieprasījuma un ērti organizēti, kas tas viss ir un kur to parasti lieto.
 
Kas bija jādara, pirms tas tika ieviests?
 
Palasīju vēl te https://en.wikipedia.org/wiki/Smart_pointerun tur no katra teikuma seko atsauces uz skaidrojamiem jēdziniem, piemeram, šo  https://en.wikipedia.org/wiki/Abstract_data_type un šo https://en.wikipedia.org/wiki/Data_structure
Tik daudz es uztveru, ka vieni datu tipi attiecas uz un domāti ir domāti lietotājam, otri - izstrādātājam un ieiviesējam, bet skaisti praktiski piemēri to visu lielo kopainu padarītu daudz skaidrāku. Ar praktiski es te saprotu skaidorjumu, tipa - problēma/iuzdevums ir šādi, līdz šim tos risināja tā, tagad ar šo jauninājumu to var atrisinat šādi, izmantot tādiem un šitādiem datiem, lieto tādus mainīgos, stringus, masīvus, utt.
 
 
 
Ja tas skaidrojums izdotos pietiekami vienkāršs, tad būtu labi.
Edited by Raimonds1
Link to post
Share on other sites

 

 

Tāpēc, ka elektroniski padodot divus bitus uz shēmas ieejām, dabū atbildi vienā piegājienā, kas aizņem kaut kādu reālu laiku. Savukārt baitu apstrādei padod jau šos rezultātus, kas secīgi seko pēc zināma laika, kas nav nulle. Bet šis virziens neko daudz nedod.

CPU nestrādā ar bitiem. CPU strādā ar "bitu grupām". Faktiski gadījumā, ja vēlies vienā baitā glabāt vairākas vērtības, katru aprakstot ar atsevišķiem baita bitiem, šīs "vērtības" apstrāde (nolasīšana, ierakstīšana, salīdzināšana utt) prasīs vairāk resursu nekā tad, ja "vērtībai" atvēlētu visu baitu.

Tas gan nenozīmē, ka datorā nekad neizmanto vienu baitu (vai integeri) vairāku vērtību saglabāšanai. Piemēram, ir tāds jēdziens "flag", kas ir viena bita vērtība, un vairākus "flagus" nereti glabā vienā 32bit mainīgajā.

Tāpat reizēm gadās situācijas, kad vajag "ļoti daudz booleanus". Iepriekš aprakstīju piemēru - gadus 15 atpakaļ pārejot no booleanu masīva uz bitiem, samazināju atmiņas patēriņu no 16MB līdz 2MB un algoritma izpildes laiks samazinājās no 800ms līdz 15ms. Toreiz vajadzēja ~16 miljonus "booleanu". Bet tā nekādā gadījumā nav ikdienišķa situācija. Ikdienišķās situācijās tāda "optimizēšana" visu padarīs tikai sliktāku - nelasāmāku, lēnāku, sarežģītāku, kļūdaināku.

 

 

 

Es arī pelnu naudu ar programmēšanu un redzu, kas reāli ikdienā vajadzīgs. Teorētiski taisīt savu ideālo kodu pēc visiem kanoniem un apgūt visu vajadzīgo un nevajadzīgo var tikai diletants vai cilvēks, kam no programmēšanas profesijas ir ļoti tālu. Ne es, ne arī man zināmie programmētāji nevar atļauties tērēt laiku lietām, kas varbūt, kaut kad, kaut kādos noteiktos gadījumos ievajadzēsies.

Tā ir TAVA pieredze, TAVA vide, TAVA ikdiena. Kaut kā tā sanāk, ka parasti cilvēkam apkārt pulcējas viņam līdzīgi cilvēki. Kaut kā no tiem "citādajiem" protam veiksmīgi izvairīties.

Arī es pelnu naudu ar programmēšanu. C, C++ - tās ir reāli ikdienā vajadzīgas lietas. ASM - arī vajadzīga, bet retāk. Un visiem standartiem maksimāli atbilstošs kods - bez tā nu nekādi. Nēnu labi, reizēm nākas atkāpties no standartiem, jo, kad vienu kodu jākompilē ar visdažādākajiem kompilatoriem uz visdažādākajām platformām, pilnīgi noteikti būs jāsaskaras ar kompilatoru gļukiem - tur nu var nākties atkāpties no standartiem. Bet standartu pārzināšana un ievērošana ilgtermiņā ļauj šādas situācijas samazināt līdz minimumam. Un jā, ar to kodu tak jāspēj strādāt nevis atsevišķam diletantam, bet komandām dažādās pasaules malās un reizēm pat dažādos uzņēmumos, kur katrā uzņēmumā ir savas vadlīnijas (šobrīd kā reiz pie tāda projekta strādāju).

 

 

 

Labāk pasaki, kāpēc pēc pamatkursa programmēšanā daži paliek pie C un C++ un pārējie pāriet uz augstāka līmeņa valodām un C un C++ neko tālāk nemācās?

 

 

Un tā mana pieeja ir tāpēc, ka es gribu saprast, kāpec šī lieliskā, portablā, spēcīgā un sskaistā valoda netiek apgūta tik labi, kā vajadzētu.

Ir tāds teiciens, "katram savs".

 

 

 

Nu lūk. Vienīgais piejamais aparāts (neskaitot "garāžā" salodēto, no radiožurnāliem noskatīto kaut kādu mikro 80 ar 2Kb Basic) bija ZX, kura Basic nebija labs. Toties bija tam verķim Pascal ar labu kompilatoru. Kompilators ļāva iekļaut tekstā mašīnkodu. Jau tad. Bija arī kaut kāds C kompilators, bet tik traki jēls, ka negribas pat atcerēties.

ZX tak arī "garāžā" lodēja no radiožurnālos noskatītā :D "Garāža" gan izpaudās kā darba galts, kurš atrodas viesistabā, kura reizē ir arī senču guļamistaba, dzīvojamā istaba un vispār centrālā telpa visā dzīvoklī. Atceros, kaut kas senča salodētajā ZXā nestrādāja kā nākas - nesa uz kaut kādu darbnīcu, bet tur meistari nespēja noteikt, kas par vainu. Nu neko, sencim nekas cits neatlika kā pašam atrast vainu un salabot.


 

 

Šito nevar kaut kā vieglāk izskaidrot.

Pirms sāc pētīt shared un smart pointerus, vispirms nāksies saprast, kas tas pointeris tāds ir.

Link to post
Share on other sites
Raimonds1

Es pašlaik pētu iespēju šos konceptus skaidrot viegli.

 

https://en.wikipedia.org/wiki/Pointer_%28computer_programming%29

As an analogy, a page number in a book's index could be considered a pointer to the corresponding page; dereferencing such a pointer would be done by flipping to the page with the given page number.

 

Šajā līmenī, pagaidām neejot iekšā programmas rakstīšanā - pointeris ir salīdzināms ar lapas norādi satura rādītājā. Pēc loģikas sanāk, ka kādam tas satura rādītājs ir jāuzraksta, jānorāda, kur to atrast, jānorada lappuse un jāātrod dati, kas tur ir, kaut kas ar tiem jāizdara - jākopē, jāparsūta, jāparraksta, jāizdzēš, jāatbrīvo atmiņa utt.


Man loģiskā secība būtu - vispirms šāda veida zināšanas un tikai tad programmas rindas un katras rindas izprašana, ko ta dara.


Pašlaik, tas ko es nesaprotu un gribu uzzināt, ir, kas tie ir par datiem, ko šādi apstrādā - kaut kādi grāmatvedības starprezultāti, failu konvertācijas gaitā iegūtie vaajdzīgie un nevajadzīgie baiti, kilobaiti un megabaiti, kaut kadas pieejas prioritātes programmas vai kas.


 

 

Raimonds1, 22 Apr 2016 - 21:44, teica: Tāpēc, ka elektroniski padodot divus bitus uz shēmas ieejām, dabū atbildi vienā piegājienā, kas aizņem kaut kādu reālu laiku. Savukārt baitu apstrādei padod jau šos rezultātus, kas secīgi seko pēc zināma laika, kas nav nulle. Bet šis virziens neko daudz nedod.

 

CPU nestrādā ar bitiem. CPU strādā ar "bitu grupām". Faktiski gadījumā, ja vēlies vienā baitā glabāt vairākas vērtības, katru aprakstot ar atsevišķiem baita bitiem, šīs "vērtības" apstrāde (nolasīšana, ierakstīšana, salīdzināšana utt) prasīs vairāk resursu nekā tad, ja "vērtībai" atvēlētu visu baitu. Tas gan nenozīmē, ka datorā nekad neizmanto vienu baitu (vai integeri) vairāku vērtību saglabāšanai. Piemēram, ir tāds jēdziens "flag", kas ir viena bita vērtība, un vairākus "flagus" nereti glabā vienā 32bit mainīgajā. Tāpat reizēm gadās situācijas, kad vajag "ļoti daudz booleanus". Iepriekš aprakstīju piemēru - gadus 15 atpakaļ pārejot no booleanu masīva uz bitiem, samazināju atmiņas patēriņu no 16MB līdz 2MB un algoritma izpildes laiks samazinājās no 800ms līdz 15ms. Toreiz vajadzēja ~16 miljonus "booleanu". Bet tā nekādā gadījumā nav ikdienišķa situācija. Ikdienišķās situācijās tāda "optimizēšana" visu padarīs tikai sliktāku - nelasāmāku, lēnāku, sarežģītāku, kļūdaināku.

 

Un ko pamatojas vairākkodolu procesori - tie katrs ņem visu garo blāķi kaut kādā secībā un loģikā vai arī ir paredzēta iespēja strādāt ar īsiem fragmentiem un katrs kodols dabū savu?

Edited by Raimonds1
Link to post
Share on other sites
AndrisBB

 

 

Šajā līmenī, pagaidām neejot iekšā programmas rakstīšanā - pointeris ir salīdzināms ar lapas norādi satura rādītājā. Pēc loģikas sanāk, ka kādam tas satura rādītājs ir jāuzraksta, jānorāda, kur to atrast, jānorada lappuse un jāātrod dati, kas tur ir, kaut kas ar tiem jāizdara - jākopē, jāparsūta, jāparraksta, jāizdzēš, jāatbrīvo atmiņa utt.

Jo abstraktākas analoģijas meklē, jo dziļāk purvā. Pointers ir atmiņas adrese, ko tur nesaprast.  Atver Excel tabulu un apskaties uz viņu, piemēram C13 tev būs addresse, kurā tu kautko vari ierakstīt. Tas kas tani ailē ir ierakstīts ir dati.

 

 

 

Un ko pamatojas vairākkodolu procesori - tie katrs ņem visu garo blāķi kaut kādā secībā un loģikā vai arī ir paredzēta iespēja strādāt ar īsiem fragmentiem un katrs kodols dabū savu?

Nē vairākkodolu procesori neizpilda vienu programmu vienlaicīgi, bet katrs savu. (threadi būs izņēmums). Ja tev ir 4 kodoli, tad uz viena ies Excel, uz nākamā Chrome utt. Ja ir tikai viena programma kuru izpildīt, tad viens kodols strādās, pārējie pīpēs. Ko kuram kodolam darīt nosaka operātājsistēma, jeb precizāk viņas Scheduler, bet tev līdz tam vēl kādi 15 gadi.   

Link to post
Share on other sites

@@AndrisBB, vispirms tu nopel analoģijas, pēc tam pats runā analoģijās :D Tas piemērs ar exceli ir tik pat truls kā piemērs ar grāmatu.

Pointeris nav gluži atmiņas adrese. Pointeris ir datu tips. Pointera vērtība - tā, lūk, ir atmiņas adrese. Un arī pie tā visi prieki ar pointeriem (u.c. datu tipiem) vēl nebeidzas :pooh_honey:(piemēram, kur glabājas adrese uz pointera vērtību?)

Edited by binary
Link to post
Share on other sites

Un ko pamatojas vairākkodolu procesori - tie katrs ņem visu garo blāķi kaut kādā secībā un loģikā vai arī ir paredzēta iespēja strādāt ar īsiem fragmentiem un katrs kodols dabū savu?

kā uztaisi, tā arī ir. Izvēlies, ko vēlies, skaties, ko izvēlējies.

 

vari pat dalīt darbus dažādiem datoriem. JA un tikai JA esi paredzējis, kā tas varētu notikt:

https://estudogeral.sib.uc.pt/bitstream/10316/14345/1/WMPI%20Message%20Passing%20Interface%20for%20Win32%20Clusters.pdf

vai

https://en.wikipedia.org/wiki/Beowulf_cluster#Operating_systems

 

viens dators no 100 neko nezina par pārējiem. Ja ir miljons skaitļu, kam rēķināt kvadrātā kāpināšanas summas - iedali 10'000 skaitļu porciju katram, un kad tas katrs būs porciju pabeidzis UN saskaitījis, atgriezīs "māsteram" kvadrātu summu. Vienkāršs, dalāms algoritms, minimāla sinhronizācija.

Edited by usver
Link to post
Share on other sites
AndrisBB

 

 

@AndrisBB, vispirms tu nopel analoģijas, pēc tam pats runā analoģijās Tas piemērs ar exceli ir tik pat truls kā piemērs ar grāmatu.

Nu labi nav tas labākais piemērs, vienkārši Excels fonā rēgojās

 

 

 

(piemēram, kur glabājas adrese uz pointera vērtību?)

objdump un pēti, kur kas glabājas :scenic:  

Link to post
Share on other sites
Raimonds1

Doma bija par to, ka cietais disks visiem kodoliem ir viens, un, ja kāda info ir nevis 32 vai 64 bitu liela, bet īsāka, piemēram, 8 bitu, vai tiek kodoli var paņemt no tā garā 64 bitu blāķa katrs savu posmu un reizē apstrādāt, bet šitas ir blakusnovirziens.


Kāpec Jums nepatīk analoģijas, ņemam to grāmatas saturu un lappuses ka pamatu par pointeriem un izvēršam jauno C++ papildinājumu skaidrošanai.


 

 

Jo abstraktākas analoģijas meklē, jo dziļāk purvā. Pointers ir atmiņas adrese, ko tur nesaprast.  Atver Excel tabulu un apskaties uz viņu, piemēram C13 tev būs addresse, kurā tu kautko vari ierakstīt. Tas kas tani ailē ir ierakstīts ir dati.

 

Pointeru aprakstam var izvēlēties analoģijas no vecās pieejas, kad tos izdomāja un no jaunas, augstāka līmeņa konstrukciju pieejas un tas ir vēl jautājums, kurš variants ir labāks, lai izmantotu parastos ikdienas sadzīves teikumus, lai vieglāk saprastu. 


Ja iespējams, ar problēmas risinājumu aprakstu - dati nāk blāķiem vien, kaut kur viņi jāliek, jāapstrādā, cik to būs, nav zināms, agrāk ar C darīja tā, bet tagad ar jaunajiem papildinājumiem C++14 un C++17 standartiem dara šitā.

Link to post
Share on other sites

Kāpec Jums nepatīk analoģijas, ņemam to grāmatas saturu un lappuses ka pamatu par pointeriem un izvēršam jauno C++ papildinājumu skaidrošanai.

Kaut vai tāpēc, ka analoģijas kropļo izpratni par pamatlietām un nekādā veidā nepaātrina patiesas izpratnes gūšanu par to, kas ir kas, kas kā strādā, kāpēc tas strādā utt utjp. Turklāt uz analoģijām balstītas zināšanas ir ierobežotas ar izpratni par analoģijām un to iespējām.

Bet nu… Katram savs. Kamēr vieni "divdimensiju masīvus" izprot tikai tad, kad šos masīvus iztēlojas kā daudzstāvu mājas logus, tikmēr citam daudz vienkāršāk ir "2D masīvu" iedomāties kā "1D masīvu, kura indekss tiek aprēķināts, pareizinot vienu indeksu ar konstantu skaitli un pieskaitot otru indeksu"… Vai arī kā "1D masīvu, kura vērtības ir adreses uz citiem 1D masīviem"… Nu jā, te nu atkal rodas tie ierobežojumi - kamēr pirmajiem viss apstājas pie "mājas logiem", tikmēr tie otrie jau kopš sākta gala zina atšķirību starp abām minētajām 2D masīvu reprezentācijām ar 1D masīvu palīdzību…

Link to post
Share on other sites
AndrisBB

 

 

Doma bija par to, ka cietais disks visiem kodoliem ir viens, un, ja kāda info ir nevis 32 vai 64 bitu liela, bet īsāka, piemēram, 8 bitu, vai tiek kodoli var paņemt no tā garā 64 bitu blāķa katrs savu posmu un reizē apstrādāt, bet šitas ir blakusnovirziens.

:suicide2: Apsolos šinī tēmā vairs nerakstīt 

Link to post
Share on other sites
Raimonds1

 

 

Nē, vairākkodolu procesori neizpilda vienu programmu vienlaicīgi

 

Nevis vienu programmu, bet no viena garā 64 bitu blāķa ņemtos datus vienlaicīgi. Katrs savus datus. 

Link to post
Share on other sites

Doma bija par to, ka cietais disks visiem kodoliem ir viens

cpu?

 

ja kāda info ir nevis 32 vai 64 bitu liela, bet īsāka, piemēram, 8 bitu, vai tiek kodoli var paņemt no tā garā 64 bitu blāķa katrs savu posmu un reizē apstrādāt

asm komandas paskaties. tik ļoti platoniski fano par efektivitāti, ka brīnos, ka neesi sācis vispār ar to. 9 mēnešu laikā 1. kursā (un pēc tam vasarā) paspēju apgūt c++ pamatus, uztaisīt aplikācijas (win32 API GUI, WinSock, MFC) - bija pat GUI lokālā tīkla čats + failu pārsūtīšana. Un vasarā vēl paspēju apgūt asm pamatus (tai skaitā - ar win32 api) un programmu krakošanas pamatus, kas gan nav bijuši vajadzīgi daudzus gadus, bet bija ļoti interesanti.

Lūk, tur asm ļoti labi parāda, ka pamatkomandas .386 ir tādas - ņem vienu kaut ko, ņem otru kaut ko, veic darbību, saglabā rezultātu iekš eax - piemēram. Ja vari sakombinēt 2 baitus vienkopus (AH, AL) un veikt, teiksim, XOR ar tādiem pašiem 2 sakombinētiem baitiem (BH, BL), tad nevajadzēs veikt XOR divreiz (katram baitu pārim atsevišķi).

 

32-bit asm ar cpu reģistriem:

http://www.cs.virginia.edu/~evans/cs216/guides/x86.html

 

 

Akurāt reizē diez vai sanāks apstrādāt - jo viss noreducējas uz asm, un tur kodolam "darīt reizē" dažādus nesaistītus darbus nav reāli. Jo dažādiem trediem sinhronizācija un gaidīšana, kad drīkstēs veikt kādu kopīgu kombinētu darbību, no kā visiem būtu labums, aizņemtu vairāk laika, nekā no tās matu skaldīšanas būtu jēga.

aptuveni kā autobusi - teorētiski visi varētu braukt vilcieniņā, samazinot gaisa pretestību un tādējādi ietaupot degvielu, bet tā kā katram ir savs maršruts, tad praksē autobusi brauc katrs kur tam vajag, nevis gaida, kad drīkstēs pabraukt vilcieniņā, samazinot gaisa pretestību.

Edited by usver
Link to post
Share on other sites

@@Raimonds1,

Kas tieši tev nav saprotams par pointeriem (un bitiem)? Paskaidro tā lai visiem būtu saprotams. Piemēram, uzraksti koda fragmentu (no tutoriāļiem, ...), ko tu nesaproti.

 

Pointeru (un bitu) funkcionalitāti un jēgu pilnībā var izskaidrot ar tiem pāris operatoriem un to pielietojuma piemēriem. Ja tev tos neizdodas apgūt, varbūt jāizvēlas cits hobijs, piemēram, tamborēšana.

Edited by camel
Link to post
Share on other sites
Raimonds1
Raimonds1, 25 Apr 2016 - 11:14, teica: Kāpec Jums nepatīk analoģijas, ņemam to grāmatas saturu un lappuses ka pamatu par pointeriem un izvēršam jauno C++ papildinājumu skaidrošanai. Kaut vai tāpēc, ka analoģijas kropļo izpratni par pamatlietām un nekādā veidā nepaātrina patiesas izpratnes gūšanu par to, kas ir kas, kas kā strādā, kāpēc tas strādā utt utjp. Turklāt uz analoģijām balstītas zināšanas ir ierobežotas ar izpratni par analoģijām un to iespējām.

 

Nu to Tu nemaz nevari tik droši apgalvot tā uzreiz.

 

 

 

Kas tieši tev nav saprotams par pointeriem (un bitiem)? Paskaidro tā lai visiem būtu saprotams. Piemēram, uzraksti koda fragmentu (no tutoriāļiem, ...), ko tu nesaproti.

 

 

Šis

Kur tie ir?

Paskat, kāds angliski labs materiāls, šo to pat saprotu EDIT!: (gandrīz visu (verbāli, ne sintaksē) - vecais variants) http://www.cprogramming.com/tutorial/c/lesson6.html

 

Ja var palūgt, pāris piemerus, kā tiek realizēts šajā rindkopā rakstītais - Pointers are aptly name: they "point" to locations in memory.   Kā dabū šito - A pointer in the world of safety deposit box would simply be anything that stored the number of another safety deposit box. 

un šo - but decided to put the real location in another, smaller, safety deposit box that only stored a card with the number of the large box with the real jewelry.

Ko tad, ja ir vairāk ko glabāt - If you happen to have a huge piece of data that you want to pass into a function, it's a lot easier to pass its location to the function than to copy every element of the data!

Un šo rindkopu pilnībā ar piemeru pa rindiņām, ja var - A note about terms: .....

Edited by Raimonds1
Link to post
Share on other sites
Jurkins
Būs labi, es sākšu uzdot aizvien gudrākus jautājumus

 

Šitas ir labais!!! Kamēr būs Raimonds1, jautrība nodrošināta.

Edited by Jurkins
Link to post
Share on other sites

Par ko tad bazars, ja gandrīz visu saproti?

 

Atkārtošos vēlreiz, pointerus, tāpat kā visko citu, var iemācīties pētot pielietojuma piemērus un scenārijus - konkrētus koda fragmentus. Ja tev, kas nav skaidrs, ieraksti te koda fragmentu, ko nesaproti, varbūt kāds tev varēs palīdzēt - bez jebkādas filozofēšanas.

Link to post
Share on other sites

 

 

Atkārtošos vēlreiz, pointerus, tāpat kā visko citu, var iemācīties pētot pielietojuma piemērus un scenārijus - konkrētus koda fragmentus. Ja tev, kas nav skaidrs, ieraksti te koda fragmentu, ko nesaproti, varbūt kāds tev varēs palīdzēt - bez jebkādas filozofēšanas.

 

Žēl, ka tu tā arī neesi pamanījis - topika autors nav 9 mēnešu laikā nav  uzrakstījis un arī negrasās uzrakstīt nevienu rindiņu koda :)  :)  :)  mērķis tak ir pavisam cits - spriedelēt par C++ tuvumu dzelžiem, C++ tutoriāļu trūkumu, izglītības sistēmas un jauniešu motivācijas problēmām.

 

Kā arī - pašlaik zinam galveno problēmu, kurai ceram rast risinājumu jau drīzākajā laikā - procesoru ražotāji diemžēl 32 bitu un pat 64  procesoros iebūvē tikai 1 cieto disku  :mrgreen:

  • Patīk 2
Link to post
Share on other sites
Raimonds1

20 // more pointers

#include <iostream>

using namespace std;

 

int main ()

{

int firstvalue = 5, secondvalue = 15;

int * p1, * p2;

 

p1 = &firstvalue; // p1 = address of firstvalue

p2 = &secondvalue; // p2 = address of secondvalue

*p1 = 10; // value pointed to by p1 = 10

*p2 = *p1; // value pointed to by p2 = value pointed to by p1

p1 = p2; // p1 = p2 (value of pointer is copied)

*p1 = 20; // value pointed to by p1 = 20

 

cout << "firstvalue is " << firstvalue << '\n';

cout << "secondvalue is " << secondvalue << '\n';

return 0;

}

http://www.cplusplus.com/doc/tutorial/pointers/

 
 
Šajā piemērā - šo izteikumu īsti nesaprotu - Notice that there are expressions with pointers p1 and p2, both with and without the dereference operator (*). The meaning of an expression using the dereference operator (*) is very different from one that does not. When this operator precedes the pointer name, the expression refers to the value being pointed, while when a pointer name appears without this operator, it refers to the value of the pointer itself (i.e., the address of what the pointer is pointing to).

 

 

VB ir viens no iemesliem, kādēļ nekļuvu par programmētāju . Ar baigo entuziasmu pašmācības ceļā bērnībā apguvu VB - un pēc tam praktiski neiespējami likās apgūt ko citu, jēdzīgāku... VB diemžēl pamatīgi sačakarē izpratni par programmēšanu kā tādu.

 

Kāpēc nemācījies tālāk?

Edited by Raimonds1
Link to post
Share on other sites
Inspektors Caps

Biedrs usver jau kā tipisks modernais pseidospecs - mācīt citus kā "pareizi" dzīvot jeb laist ļer-ļer-ļer par beztēmu māk, tikai programmēt nemāk. Ja to ļer-ļer-ļer laiku veltītu programmēšanai, tad vismaz zinātu tās pamatus. Lai citiem no malas ir skaidrs tas, ar cik lielu blīkšķi Tu izgāzies, pateikšu analoģijās. Piemēram, cilvēks stāsta, ka ir augstākās matemātikas profesors, bet tad uzraksta tādu lažu, kas atklāj, ka viņš nemaz nesaprot visparastāko reizināšanu. Protams, priekš kritiski domājošiem cilvēkiem viņa kredibilitāte momentā nokrīt atpakaļ pamatskolas līmenī un nevienu normālu matemātiķi vairs neinteresē viņa viedoklis ne par diferenciālvienādojumiem, ne par varbūtību teoriju. Bet atzīt, ka lietu nejēdz, modernie mākslīgi piepumpētā tukšā self-esteem balona "speciālisti" nespēj, tādēļ mēģina visiem iestāstīt, ka reizināšana esot kaut kāda baigā smalkā optimizācija un specializācija. Nē, vecīt, tie ir pamatu pamati, un, ja Tu tos nejēdz, tad Tu esi diletants!

 

Un tad šis bufera padošanas piemērā liek priekšā JNI, kas ir Java datu kopēšana uz C/C++ kompilētu daļu, lai tur apstrādātu, un tad kopēšana atpakaļ. Cik ironiski - Java to "varot"... paprasot to izdarīt C/C++. :D Kārtējo reizi pierādās, ka spēt saprast lietu un sarunas būtību mūsdienu koderim ir kaut kas pilnīgi netverams. Runa taču bija par japeta pausto domu, ka visas tās valodas funkcionāli ir vienādas un atšķiras tikai sintakse. Tādēļ arī jautājuma būtība bija par valodu - kā Java kodā masīvu vai struktūru var padot starp programmas dažādām koda daļām tā, lai tie nav jākopē un var mainīt to saturu? C/C++ to var izdarīt vieglāk par vieglu - padodot pointeri, kas tiešām nenoslogo faktiski necik! Neesmu Java eksperts, bet, cik zinu, tad tas nav iespējams. Pareizi?

 

 

 

Ko tev dod matu skaldīšana un tīksmināšanās ap mikrosekundēm?

Tīksmināšanās tā ir tikai Tev ap tā "kritiku", jo Tu neko tālāk par savu smilšu kasti neredzi. Apsēdies, pirms lasi šo šokējošo ziņu - iedomājies, pasaulē bez grāmatvežu skaitlīšiem un līkām web sistēmām eksistē arī citas lietas, kas ir jāprogrammē! Ir jāizstrādā dažādu ražošanas iekārtu vadības sistēmas, drošības sistēmas, eksperimentālas iekārtas un prototipi, dažādi sensori ar visdažādāko perifēriju, specializētu barošanas bloku vadības, dažādu motoru, gaismu vadības u.c. Tas viss ar visdažādāko ātrdarbību, izmēru, masu, fizisko, mitruma, temperatūras izturību un elektrības patēriņu. Daudzās no tām ir svarīgas ne tikai sekundes, bet arī milisekundes, mikrosekundes un dažās pat nanosekundes. Jā, Tava smilšu kaste nav visa pasaule... kas to būtu domājis, ne?

 

 

 

Es ikdienā darbojos ar dzelžiem, programmēju tiem softu, bet viena maza nianse - n tūkstošu vērtam verķim var atļauties uzlikt miniPC ar linux vai Embeded Windows. Līdz ar to bitos nav jēgas līst, jo PC pilnīgi pavelk visas populārās programmēšanas valodas, kur primārais nosacījums operatīvi pielāgot sistēmu klienta vajadzībām. Specifikācijā ir konkrēti ātrdarbības kritēriji un attiecīgi tajos jāiekļaujas.

Šeit tieši tāda pati aprobežotība. Cilvēks vienkārši nespēj saredzēt pasauli ārpus savas ikdienas vides, jo nespēj iedomāties, ka ne tuvu ne visur var pielikt lielu datoru ar lielu OS. Bez ātrdarbības viņš laikam nespēj iedomāties arī tādus kritērijus kā fiziskie parametri, elektrības patēriņš un uzticamība. Arī cena viņa pasaulē ir tikai tūkstošos, bet reālajā dzīvē daudz iekārtām ir kritiski svarīgi būt ļoti lētām, uz leju līdz pat dažiem eiro. Vajadzības var būt visdažādākās - jāietilpst sērkociņu kastītē, jāspēj mērīt nanosekundes, strādāt gadu no CR2032 "tabletes" baterijas, startēties milisekundēs, strādāt -30..+80 C grādos mitrumā āra apstākļos, spēt strādāt "mūžīgi" (īpaši attiecas uz programmatūru) utt. Mežaveča pasaulē to visu laikam var atrisināt pieliekot "mini" PC ar milzīgu OS, Java programmu un gan jau kaut kādu XML datu formātu...

 

Un tad šādi šauri domājoši tipi man pārmet to, ka es it kā visur bāžot vienu risinājumu. Attopieties - Jūs esat tie, kuri ir ieplijušies tēmā par C un dzelžu programmēšanu, un smirdināt par to, ka "Java arī to var", kaut patiesībā Java tas by design nav iespējams.

  • Patīk 1
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...