Jump to content

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


Raimonds1
 Share

Recommended Posts

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 comment
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 comment
Share on other sites

 

 

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 comment
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 comment
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.

Labots - usver
Link to comment
Share on other sites

Raimonds1

 

 

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

 

Būs labi, es sākšu uzdot aizvien gudrākus jautājumus :) 

Link to comment
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.

Labots - camel
Link to comment
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: .....

Labots - Raimonds1
Link to comment
Share on other sites

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.

Labots - Jurkins
Link to comment
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 comment
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 comment
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?

Labots - Raimonds1
Link to comment
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 comment
Share on other sites

Raimonds1

 

 

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

 

Tas galīgi nebij tas ko es tur jautaju.

 

Tas, ko es jautāju bija - ja reiz procesors vienkodola variantā, kā man teica zinošākais biedris, strāda ar visu garo datu blāķi un nekādus 2 bitus nesalīdzina, tad , mans jautājums bija, kā tas ir, ja ir vairākkodolu procesors - vai tad arī katrs no tā kodoliem strādā ar visu garo datu blāķi, jeb ir paredzēta iespēja katram kodolam strādāt ar gabalu no tā garā 32 vai 64 blāķa. 

 

Iespējamās atbildes - jā ir tādas iespējas, nē, nav tādu iespēju, es nezinu, vai kaut ko tādu dara un vēl kaut kāda atbilde.

Link to comment
Share on other sites

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ē!

gudrākie no viņiem saprot, ka nav viena universāla rīka visām vajadzībām

uztaisi, lūdzu, iekš C snapdragon iekārtas + kameras vadību ar skārienjutīgo ekrānu un smukām animācijām + video strīmošanu + object tracking + klienta aplikācijas 2 populārākajām mobilajām platformām (drīksti 3, ja vēlies) + klientu portālu datu glabāšanai, sinhronizācijai un loginam ar uzņēmuma SSO. Kad aptirsīsies, tad varbūt sapratīsi, ka katrai valodai sava vieta. Vai arī sāksies atrunas "to es nevaru iekš C uztaisīt, tātad tas sūkā pēc definīcijas".

 

edit: pie prasībām, lūdzu, arī GUI video redaktoru (ar pilnu tačskrīna funkcionalitāti, protams, overlejiem), galeriju ar animācijām un visādi citādi izvirtīgu GUI, šārēšanu uz jūtūbi, feisbuku, instagramu ar lietotāja kontu u.c ērtības. Es tā saprotu, ka 4+ platformām visu iekš C nav problēmu uzmaukt, ne? Vai arī vienā kaut ko taisi, un ar to tava pasaulīte aprobežojas?

Labots - usver
Link to comment
Share on other sites

 

 

Šajā piemērā - šo izteikumu īsti nesaprotu

 

Tad tu nevis "gandrīz visu saproti", bet gandrīz neko nesaproti.

 

Pārraksti to piemēru, lai pēc katras rindas izvadās visu mainīgo vērtības, ieskaitot p un *p, un skaities, kas notiekas. Ja tas nepalīdz, tad neviens tev palīdzēt rī nevarēs.

Link to comment
Share on other sites

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? ...Neesmu Java eksperts, bet, cik zinu, tad tas nav iespējams. Pareizi?

 

 

Javā visi masīvi un objekti tiek padoti ar pointeri.  Tie nav jākopē un var mainīt saturu.    Cita lieta, ka tā darīt nav labais stils.

 

Es tāpēc vairs javu nelietoju    :)  var taču programmēt kādā  augstāka  līmeņa valodā,  kur neko tādu darīt nevar    :)

 

Šajā piemērā - šo izteikumu īsti nesaprotu

 

Tas ir vienkārši :   ja p ir pointers (adrese)   tad   *p  ir  tas uz ko pointers norāda,  

Labots - MarisO
Link to comment
Share on other sites

Raimonds1

 Abi pointeri p1 and p2 tiek lietoti ar un bez dereferences operatora (*).

 

Programmas rinda ar tā lietošanu ir ļoti atšķiriga no programmas rindas bez tā lietošanas.

 

Ja šis operators ir pirms pointera vārda, tad programmas rinda attiecas uz vērtību (ko glabā kaut kādā adresē, uz ko norāda pointeris)

Ja šī operatora programmas rindā nav, tad tā attiecas uz pašu pointeri kā tādu (tātad adresi, uz ko norāda pointeris)

 

Pareizi?

MarisO pasteidzās.

Labots - Raimonds1
Link to comment
Share on other sites

Raimonds1

  • & is the address-of operator, and can be read simply as "address of"
  • * is the dereference operator, and can be read as "value pointed to by"

& kopā ar firstvalue ir operatora adrese?

& kopā ar firstvalue ir firstvalue, kuru tikai vēl ievadīs, adrese, jeb pointeris p1?

Tas ir tā vieta, kur būs nonākt tam ciparam, ko ievadīs?

Labots - Raimonds1
Link to comment
Share on other sites

& kopā ar firstvalue ir operatora adrese?

Tev patīk analoģijas? Nu labi - faktiski tavs jautājums ir "vai zieda smarža ir smaržas smarža?"

"&" ir operators, tāpat kā vēl vesela čupa nesaprotamu simbolu - "()", "[]", "->", ".", "!", "~", "++", "--", "+", "-", "*", "/", "%", "<<", ">>", "<", "<=", ">", "<=", "==", "!=", "^", "|", "&&", "||", "?:", "=", "+=", "-=", "*=", "/=", "%=", "&=", "^=", "|=", "<<=", ">>=". Kāda vēl operatoram adrese?

Link to comment
Share on other sites

es reiz strādāju projektā,  kur bija uzprogrammēta tāda "konstante" Money.ZERO       :)

un tad viens uzrakstīja kodu,  kas tai izmainīja vērtību, tā "salaužot" visu kodu,  kur tā tika lietota

Link to comment
Share on other sites

Raimonds1

Kompilators, pēc 1 rindas nomešanas un neatkarīgi no - ir tur beigās return 0 vai nav, pateica šitā

 

firstvalue is10

secondvalue is20

""""""""""""""""""""""

Process excited with return value 0

Press any key to continue...._


 

 

Kāda vēl operatoram adrese?

 

 

 

address-of operator

 

adress-of operator iztulkoju kā adress of operator 


Varēja pacensties uzrakstīt citādi.


 

 

vienkārši autors visus ir eleganti satrollējis
 

 

Bez manas līdzdalības Jūs esat starā viens par otru un nekādu domstarpību nav.

Link to comment
Share on other sites

 

 

Varēja pacensties uzrakstīt citādi.

Varēja arī nepacensties. Tur viss ir normāli uzrakstīts. Lai arī kā uzrakstītu, vienmēr atradīsies kāds, kurš nespēj saprast. IMHO nav nepieciešams sarežģīt pārējiem dzīvi dēļ tādiem, kuri nespēj saprast.

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

nevertell
Būs labi, es sākšu uzdot aizvien gudrākus jautājumus  

 

Iepriekšējā pieredze rāda, ka jautājumi paliek arvien stulbāki.

 

 

 

Kāda vēl operatoram adrese?
 

 

Acīmredzami, ka autors runā par funkciju pointeri uz atbilstošo operātora implementāciju. Lai varētu palaistuves-laika optimizācijas mašīnkodā, lai spētu effektīvāk izdalīt 64 bitu datu kopu pa 4 kodoliem.

Labots - nevertell
  • Patīk 1
Link to comment
Share on other sites

Inspektors Caps

Protams, usver vecā plate bezcerīgi lec uz riņķi un tēmai pieslēgties nespēj. Par to piemēru.. Neviens nezin kas tā tāda "Snapdragon iekārta" tāpat kā arī "Pentium iekārta" vai "ARM iekārta" ir gandrīz neko neizsakošas frāzes. Ja vajag ātri uzcept skaistu GUI ar animācijām un visu ko citu, tad var ņemt talkā, piemēram, Qt bibliotēkas, kas ir priekš gandrīz visām platformām. Tas tā, smilšu kastes profesoram zināšanai. Bet vispār man Tev uz to pat nav jāatbild, jo tēma nav par to vai C var vai nevar paveikt Tavus high-level uzdevumus, bet gan par to vai Java var vai nevar paveikt šajā tēmā aktuālos low-level, kur Tu visu laiku izvairies no atbildes.

 

Bet galvenā debilitāte ir tā, ka šis te tips man piedēvē to, ko pats ir vienkārši safantazējis -  ka es it kā visur bāžot C. Vai mēs esam Android aplikāciju tēmā un es saku, ka tās vajag rakstīt C? Vai tomēr mēs esam C un dzelžu tēmā, kur japeti, usveri un mežaveči, kuri dzelžus nemaz nav kodējuši, mēģina iebāzt savas Javas un citus šiem mērķiem pilnīgi nederīgus un pat neiespējamus murgus? Nevis es, bet Jūs šeit esat tie, kuri beztēmā smirdina par Java un citiem saviem "universālajiem rīkiem visām vajadzībām"!

 

Un, jā, Mežaveci, sūtīt pa COM portu komandas vai komandēt iekārtu caur gatavu bibliotēku nav dzelžu programmēšana, bet gan koda bibliotēku izmantošana.

 

Pascal nodi*sējiem.. Tas tikai norāda uz Jūsu neobjektivitāti. Pascal kā valoda funkcionāli ir apmēram tik pat spējīga kā C. Sintakse tai ir vairāk verbāla, līdzīgi kā Visual Basic, kas nedaudz kaitina lietpratējus dēļ vairāk teksta, bet toties lieliski palīdz iesācējiem, jo tie teksti palīdz izprast. Plus, piemēram Pascal ir pilnībā nodalīta mainīgo definēšana no izpildāmā koda, kas gan disciplinē, gan arī piespiež saprast, ka dati un algoritms ir divas pilnīgi dažādas lietas - atkal vismaz priekš iesācējiem tas ir tikai pluss.

 

Embarcadero tagad Delphi un C++ Builder vides ļoti labi attīsta - ir ieviests Unicode, 64-bit kompilators, GUI komponentes izmanto vektorus un GPU akselerāciju. Tās ir arī cross-platform un šobrīd jau var kompilēt programmas priekš Windows, Mac OS X, iOS un Android. Arī vienu un to pašu programmu visām platformām! Plus tas viss tiek kompilēts uz native izpildāmo kodu, atšķirībā no .NET CLI un Java brīnumiem.

Labots - Inspektors Caps
Link to comment
Share on other sites

Teicu ka nekomentēšu, bet jautājums @@Inspektors Caps, ko tu domā par Rust valodu? Ir doma mazliet pamācīties un paskaties cik "patīkama" tā valoda ir, kas labāks, kas sliktāks par C. Domā ir vērts sākt?

Sāku vienu nelielu projektu, kurš izmanto LPC1768 un FreeRTOS, kurā pāris tāskus varētu uzrakstīt Rust

Labots - AndrisBB
Link to comment
Share on other sites

Raimonds1

 

 

Sintakse tai ir vairāk verbāla, līdzīgi kā Visual Basic, kas nedaudz kaitina lietpratējus dēļ vairāk teksta, bet toties lieliski palīdz iesācējiem, jo tie teksti palīdz izprast. Plus, piemēram Pascal ir pilnībā nodalīta mainīgo definēšana no izpildāmā koda, kas gan disciplinē, gan arī piespiež saprast, ka dati un algoritms ir divas pilnīgi dažādas lietas - atkal vismaz priekš iesācējiem tas ir tikai pluss.

 

Man jau nu pilnīgi noteikti. 


Uz gatavu produktu orientētiem - produkts ir arī diskusija kā tāda un labāki skaidrojumi par līdz šim pieejamiem. Mēs te varam šos skadrojumus producēt steriem vai arī to nedarīt un kasīties.

Kur tad ir tās daudzas kvaliitatīvās diskusijas par C un C++ valodām? Pointeri latviešu guglē ir adreses par suņiem.

http://www.latviangundogs.org/new/lv/musu-suni/anglu-pointeri

stringi C valodā


Kas tas ir, ka kompileris tos vecos piemērus, kas rakstīti kā paraugi, met atpakaļ?


 

 

Teicu ka nekomentēšu,

 

Man Tavi komenti netraucē.

Link to comment
Share on other sites

nevertell

 

 

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?
 

Nepareizi, Javā viss ir pass-by-reference, neskaitot primitīvus. Primitīvus vajag 'aptīt' ar objektu, lai tos varētu padot kā referenci.

@@AndrisBB, ja nopietni pieķersies Rūsai, tad brīdinu, ka no sākuma kompilatora īdēšana var baigi izbesīt. Bet nepais daudz laika, kad kompilātors būs kļuvis par tavu labāko draugu. Un par embedētajām sistēmām - skaties uzmanīgi, jo Rūsa ģenerē LLVM bitkodu, tā kā tehniski kods strādās uz visa, ko atbalsta LLVM, taču standarta bibliotēka gluži visam nav vēl sarakstīta. 

Es rūsā tik vienu nopietnu projektu esmu uzrakstījis, nopietnu nevis funkcionalitātes dziļumā, bet ātrdarbības ziņā. C/C++ tagad vairs gribās aiztikt tikai tur, kur nekas cits vienkārši nav iespējams, i.e. linux kernelis un citas vietas. 

Link to comment
Share on other sites

 

 

taču standarta bibliotēka gluži visam nav vēl sarakstīta.
 

A kā ir ja izmanto parastās C redlib vai newlib?, Jo tikuntā nāksies portēt visādus 'read', 'write', 'malloc' utt, neesu pētijis kā portēšana darbojas Rust, bet vismaz ar newlib tas ir vienkārši. Bet atkal jauzmanto C bibliotēkas, tad zūd jēga visam Rust. Kaugan varbūt var pņemt kautko no Rust un kas nedarbojas to no C?  

Iespējams sarakstiju kautkādu murgu, jo ar Rust vēl neesu pat rindiņu uzrakstijis, varbūt jāsāk uz desktopa

 

Kautkas izskatās tiek darīts lietas labā šinī projektā https://zinc.rs/

Link to comment
Share on other sites

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.

Jau iepriekš rakstīju, ka mana implementācija izpildās korekti (kas ir galvenais), uzlabot varu, bet man nav laika regulāri nakts vidū sēdēt un muldēt, cik visi stulbi vai netraucēti nodarboties ar vaļaspriekiem.

kāds tests feiloja? piemēri atgrieza korektas vērtības. neskatoties uz to, ka c++ es padsmit gadus arī neesmu programmējis.

uzrakstīju fiksi algoritmu. darba dienas vidū. vidē, ko nelietoju. uzlabot varu, operācijas samazināt varu, mainīgos noīsināt arī. arī inlainā var pierakstīt klāt "optimālāk". bet priekš tā laiks vajadzīgs.

Tev, acīmredzot, nepieleca. Joprojām - visi apkārt stulbi, nekā nejēdz, odna ja umnaja, visi lo.hi. Kas rada motivāciju kopš septembra (!!!) nākt un pašrealizēties lamājoties, jo pasaulē taisnības neesot.

Tev ir "projekti, algas", bet sajēgas nav

 

Lūk - pirms dažām dienām Raimondam ieminējos par multitredotu aplikāciju (ne)ieguvumiem no reģistru operācijām. Tu atkal sāki nekonstruktīvi psihot, laikam sakarā ar to, ka esmu atļāvies tādas lietas komentēt. Paskatījos bildīti un atcerējos jaunību:

x86-registers.png

Vakar bija laiks pēc darba - bērni veseli, darbā mazliet atelpa. Vakarā aizgāju uz kafejnīcu (mājas programmēties nav iespējams), sporta pēc uzrakstīju kodu, kas bīda bitus. Referencei atstāju tavējo - ar bitwise AND un OR. Asmā tas viss noreducējas uz šiftu caur Carry flag, nekādi AND un OR tur nav patiesībā vajadzīgi.

#include <bitset>
#include <iostream>

using namespace std;

unsigned short int rev_opt(unsigned short int given) {
    unsigned short int returnValue = 0;
    for (int i=0; i<16; i++) {
        returnValue <<= 1;
        returnValue |= given & 1;
        given >>= 1;
    }
    return returnValue;
}

unsigned short int rev_opt2(unsigned short int given) {
	unsigned short int result;

	asm {
		// better save the register state - just in case
		push eax		;
		push ebx		;
		push ecx;		;

		// start the thing - initialize variables
		mov ax, given	; load the number into ax [16 bits == 2 bytes]
		mov cx, 0		; initially 0
		mov bx, 0		; same thing
		
		cont:
			add cx, 0x01	;
			shr ax,  0x01	; rotate left by X places
			rcl bx			;
			cmp cx, 0x10	; reached end?
			je exits 		; yes
			jmp cont 		; no
		exits:
			mov result, bx	; save the result in variable			
			// better restore the state
			pop ecx			; restore state
			pop ebx;
			pop eax;
	}
	return result;
}

void reverseAndDisplay(unsigned short numba) {
	bitset<16> output = numba; // for output
	cout << output << " <-- binary [" << output.to_ulong() << "]" << endl;
	// reverse
	output = rev_opt2(numba);
	cout << output << " <-- reversed [" << output.to_ulong() <<"]" << endl;
	return;
}

int main() {
	reverseAndDisplay(123);
	reverseAndDisplay(456);
}

kompilējas un izpildās šādi:

g++ -Wall -m32 -fasm-blocks convert.cpp -o one.o && ./one.o
0000000001111011 <-- binary [123]
1101111000000000 <-- reversed [56832]
0000000111001000 <-- binary [456]
0001001110000000 <-- reversed [4992]

visa algoritma būtība - 2 rindiņas, viss pārējais ir tikai boilerplate code.

shr ax, 0x01

rcl bx

Labots - usver
Link to comment
Share on other sites

Es gan teiktu, ka visa algoritma būtība šajā gadījumā ir loops :whistle2:

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...