Jump to content

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


Raimonds1
 Share

Recommended Posts

Tā kā šis topiks tāpat ir piespamots - atļaušos pamēģināt uzsākt jaunu diskusiju, nedaudz par citu tēmu:

 

Ļoti interesētu - kādas ir to programmētāju, kuri šeit uzturās, domas par quantum computing - vai tam patiešām ir prognozējams praktisks pielietojums pārskatāmā nākotnē - vai tomēr tā ir tīra teoretizēšana (līdzīgi kā nelaimīgā stīgu teorija) ar "aiz matiem" pievilktu praktisko pusi un kārtējais hype?

Link to comment
Share on other sites

Inspektors Caps

Atbildēšu uz tēmas galveno jautājumu pēc būtības:

  1. Programma tiek kompilēta uz procesora instrukcijām.
  2. Programma veic darbības ar fizisko atmiņu pa tiešo.

Viss, jautājums ir atbildēts! :D Visi pārējie faktori ir sekundāri un netieši atkarīgi no šiem diviem. Un skaidrībai kā šie punkti atšķiras, piemēram, C# un Java gadījumos:

  1. Programma tiek kompilēta uz tā saucamo baitkodu, kas pēc būtības ir instrukcijas virtuālam procesoram.
  2. Programma veic darbības ar menedžētu atmiņu, kurai atmiņas menedžeris translē un pārbauda adreses uz fiziskajām, atbrīvo vairs neizmantotos blokus u.c.

Gan virtuālais procesors, gan atmiņas menedžeris ir programmatūra. Tātad šajos gadījumos starp uzrakstīto aplikāciju un dzelzi ir vēl viens programmatūras slānis, kas emulē noteiktu funkcionalitāti un arī paņem savu daļu resursu. Native aplikācijas, savukārt pa tiešo darbojas ar instrukcijām un atmiņu tajā līmenī, kādu nodrošina pats procesors. Praktiskā veiktspējas atšķirība var būt no nebūtiskas līdz n-tajām reizēm, atkarībā no pielietojuma un izstrādātāja pirkstu taisnuma.

 

Tēmas jautājums pēc būtības nav tikai par C++, bet par C, C++, Rust, Pascal vai jebko, ko izmanto native koda kompilēšanai. Valodas sintakse, ērtums, objektorientētība, atbalstītās platformas, gatavās bibliotēkas, popularitāte utt. nav tieši saistīti ar "tuvumu dzelžiem". Vispār, kad diskusiju augstākais līmenis ir par programmēšanas valodām nevis, piemēram, programmatūras arhitektūras risinājumiem, kā tas tipiski arī notiek, tad ziniet, ka diskutē tādi pusprofesionāļi, kuriem vēl jāaug. Ir ļoti daudz nesalīdzināmi svarīgāku un kompleksāku lietu kā programmēšanas valodas sintakses apguve un ērtums.

 

Lūk, biedriem jauns mentāli sportisks izaicinājums. Kurš var šo iziet? Cik viegli/grūti gāja?

http://deadlockempire.github.io/

 

P.S. @AndrisBB, ja šo godīgi iziesi līdz galam, tad sapratīsi kādēļ STM32 oficiālās HAL bibliotēkas kods ir pilnīgi nelietojams mēsls. :)

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

18 minutes ago, Inspektors Caps said:

Vispār, kad diskusiju augstākais līmenis ir par programmēšanas valodām nevis, piemēram, programmatūras arhitektūras risinājumiem, kā tas tipiski arī notiek, tad ziniet, ka diskutē tādi pusprofesionāļi, kuriem vēl jāaug. Ir ļoti daudz nesalīdzināmi svarīgāku un kompleksāku lietu kā programmēšanas valodas sintakses apguve un ērtums.

 

Es gan domāju, ka ir nozīme, kādu instrumentu kasti (lasi - programmēšanas valodu) izmantot mājas (lasi - programmas) būvniecībai. Ja es pareizi sapratu domu, protams... Bet, nu jā, es tāds amatieris vien esmu

Labots - Jacob
Link to comment
Share on other sites

Inspektors Caps

@Jacob, nozīme ir, bet ņem vērā arī frāzes "augstākais līmenis" un "sekundāri faktori." :) Svarīguma hierarhijā valoda nav pat tuvu augšai... Ja ir sajūta, ka tā nav, tātad līdzšinējie projekti ir relatīvi vienkārši. (Tas gan nekādi nenozīmē, ka tie būtu slikti!) Plus, neaizmirstam, ka valoda nav platforma, ko izskatās, ka daudzi nespēj nodalīt...

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

8 minutes ago, Inspektors Caps said:

@Jacob, nozīme ir, bet ņem vērā arī frāzes "augstākais līmenis" un "sekundāri faktori." :) Svarīguma hierarhijā valoda nav pat tuvu augšai... Ja ir sajūta, ka tā nav, tātad līdzšinējie projekti ir relatīvi vienkārši. (Tas gan nekādi nenozīmē, ka tie būtu slikti!) Plus, neaizmirstam, ka valoda nav platforma, ko izskatās, ka daudzi nespēj nodalīt...

 

Kādā valodā tu raksti?

Link to comment
Share on other sites

Inspektors Caps

Visvairāk C (ne C++), dažreiz nedaudz MATLAB, bet tam nav nozīmes. :) Šī jautājuma uzdošana jau norāda, ka līdz galam nesaprati augstāk rakstīto. Ja tomēr būtu ko jānoskaidro par kādu, tad būtiski jautājumi būtu kādām platformām cilvēks raksta, kādas bibliotēkas izmanto un kādas arhitektūras veido. Kāda jēga zināt, ka rakstu C, ja C var rakstīt priekš Windows, macOS, Linux, mikrokontrolieriem un gandrīz visa, ko vien var iedomāties. Redzi, valoda neko daudz nepasaka, jo tā ir tikai citu reālo prasmju pieraksta veids!

 

Mājas būvēšanas analoģijā darbarīki drīzāk ir kompilators un IDE, bet valoda ir dokumenti un mērvienības. Dokumenti var būt latviski, krieviski, angliski, rasējumu var skatīties PDF vai printēt, metriskā sistēma ir ērtāka par imperiālo, bet tie visi ne tuvu nav svarīgākie faktori tajā procesā.

Link to comment
Share on other sites

3 hours ago, Inspektors Caps said:

 

  1. Programma veic darbības ar fizisko atmiņu pa tiešo.

 

paskaidro lūdzu man kā iesācējam, ko tu ar šo domāji.

 

paldies!

Labots - Jacob
Link to comment
Share on other sites

Lielākajā daļā gadījumu nevis fizisko atmiņu pa tiešo, bet virtuālo adresi uz atmiņu, ko iedevusi OS.

 

Ja vien nedarbojas kerneļa līmenī, tad maz ticams ka sanāks darbodies ar fizisko atmiņu. Var protams kernelim./driverim uzprasīt kautkādos specifiskos gadījumos pieeju fiziskai atmiņai. Piemēram es pārsvarā strādāju ar voideo apsttrādi (gstreamer) izmantojot IMX6 procesorus, tapēc bieži vajag pieeju fiziskai atmiņai, jo piemēram IPU (Image Processing Unit) hardware bloks nevar strādāt ar virtuāli atmiņu, bet vajag nepārtrauktu fizisku atmiņu. Tapēc nākas driverī prasīt CMA (continious memory allocator), lai iedod fizisku neprārtrauktu atmiņu, tad programmā kautko ar viņu darīt softwārtiski, tad padot IPU, GPU vai h264 encodefim kaukādai jau akselerētai apstrādei utt. 

 

Īsumā kautko samurgoju, kas saprot par ko runa, tas sapratīs. 

 

Link to comment
Share on other sites

Raimonds1

Man te tāds jautājums. Iekopēju no iepriekšējā komenta frāzi "programmā kautko" kā attēlu.

 

ssjfsjsjs.png

1297 baiti.

16 burti ar visu atstarpi. 80 baiti uz burtu.

Kā to no attēla dabūt uz teksta failu. Kas gatavs ir C/C++

Labots - Raimonds1
Link to comment
Share on other sites

12 minutes ago, Raimonds1 said:

Man te tāds jautājums. Iekopēju no iepriekšējā komenta frāzi "programmā kautko" kā attēlu.

 

ssjfsjsjs.png

1297 baiti.

16 burti ar visu atstarpi. 80 baiti uz burtu.

Kā to no attēla dabūt uz teksta failu. Kas gatavs ir C/C++

 

Noprecizē, ko no kurienes uz kurieni gribi dabūt? Tekstu no attēla uz teksta failu?

Link to comment
Share on other sites

Raimonds1

1. Jā, no attēla tekstu - tekstu skanēšanai. Cik iespējams tuvu bitu-baitu apstrādes līmenim.

2. Vai nu no attēla vai no teksta tā izkārtojuma pārveidošanai un ērtākai lasīšanai, apskatot interneta tekstus. Te piemēram, bildite ar komentētāja avatāru aizņem 5-to daļu no teksta slejas platuma. Tāpat tā josla zem komenta. 

teksta kompaktākam izvietojumam.

Link to comment
Share on other sites

Droši vien domāts ka viens burts ir 8x10 pixeļi. Katrs pixels vienu baitu liels.


Tu jau vēl neesi atbildējis kā tur zoles problēmu risināsi, tagad jau pārmeties uz tekstu. 

Īsa gan tev tā koncentrēšanās spēja.

Link to comment
Share on other sites

Plus ja tu domā ka tu tagad tur kautkādu jaunu Ameriku atklāsi, glabājot pikseļus bitos melns/balts, tad tā problēma ir jau 100 gadus atpakaļ atrisināta un tiek lietota, it īpaši uz mikrokontrolieriem kur atmiņas ir maz.

Tada sajūta ka tu vienīgais uz planētas esi atklājis baits sastāv no vairākiem bitiem un visi programmētāji pirmstam muļķi bijuši :D

 

 

Link to comment
Share on other sites

Raimonds1

Interesi par zoles projektu pazaudēju brīdī, kad visus kārts parametrus saliku vienā bitu rindiņā. Pārējais ir tehniķu darbs.

Es te brīvi asociēju tehnisko domu.


Tev ir bijis, ka kaut ko izdomā, pēc tam skaties, lasi, jā, man jau tā doma arī bija, tāda pati tam, ko kaut kad kāds jau atrisinājis?

Link to comment
Share on other sites

Pastāsti tad visiem ko tieši un kā tu atrisināji, savādāk izklausās pēc tukšas kakāšanas par lietām no kā neko nejēdz

Link to comment
Share on other sites

Raimonds1

Es pat reizēm speciāli nemeklēju, KĀ TAS JAU IR ATRISINĀTS un atrodu vai man to kāds pasaka pēc tam.

Link to comment
Share on other sites

Inspektors Caps

@Jacob, piemēram .NET viss ir objekts. Pat parasts Int32 nav tikai viens CPU reģistrs vai 4 baiti RAM, bet gan objekts jeb struktūra ar pointeriem uz metožu un citām tabulām. Kad Tu tam pieskaiti 3, tad tā nav tikai viena procesora ADD instrukcija, bet tur tiek darbināts kods, kas sagatavo un pārbauda dažādas lietas un pēc vajadzības attiecīgi rīkojas. Ja tā nebūtu, tad OverflowException un tamlīdzīgas lietas nebūtu iespējamas. Turpretī ar C kodu programmētājs nokomandē procesoru izpildīt ADD instrukciju konkrētā RAM adresē (vai vispār tikai reģistrā). Nekāda cita papildus koda pa vidu nav. Viena instrukcija, nevis desmiti vai simti instrukciju! Ja vajag pārbaudīt vai būs overflow, tad to jāraksta pašam.

https://docs.microsoft.com/en-us/archive/msdn-magazine/2005/may/net-framework-internals-how-the-clr-creates-runtime-objects

 

Pirms 18 minūtēm , AndrisBB teica:

Lielākajā daļā gadījumu nevis fizisko atmiņu pa tiešo, bet virtuālo adresi uz atmiņu, ko iedevusi OS.

Priekš lielākās daļas Tu par dziļu roc un jauc galvu... :D Jā, tā tas lielākās sistēmās ir, bet tas nemaina galveno domu. OS līmeņa (nevis piemēram .NET) virtuālās adreses tāpat translē un pārbauda CPU dzelzis nevis softs. Līdz ar to no "dzelžu tuvuma" skatu punkta tā vienalga ir fiziskā atmiņa.

Link to comment
Share on other sites

Inspektors Caps
Pirms 12 minūtēm , Raimonds1 teica:

Interesi par zoles projektu pazaudēju brīdī, kad visus kārts parametrus saliku vienā bitu rindiņā. Pārējais ir tehniķu darbs.

Kā prāta treniņš OK, bet no praktiskā viedokļa Tu neizdarīji pilnīgi neko. Apaļa uzpūsta nulle.

 

Nu gan būs Raimondam šoks:

https://en.wikipedia.org/wiki/IPv4#Packet_structure

https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure

Iedomājies - Tu visu laiku, lasot šo forumu, jau lieto bitus, kas sapakoti baitos! :D

Link to comment
Share on other sites

Starpcitu, kad pirmoreiz pieķēros mikrokontrolierim, tad kāreiz sāku ar .Net un C#, pirmstam par mikrokontrolieriem neko dzirdējis nebiju (varbūt dzirdējis biju, bet ne taustījis).

Bij tads NetDuino kits, interesanti vai vēl tur kautkāda darbība notiek - .Net uz MCU.

 

Izskatš ka tur jau pat trešā paaudze. Varbūt tā labāka alternatīva par Python uz MCU?

Link to comment
Share on other sites

Raimonds1
Pirms 43 minūtēm , Inspektors Caps teica:

Kā prāta treniņš OK, bet no praktiskā viedokļa Tu neizdarīji pilnīgi neko. Apaļa uzpūsta nulle.

 

Nu gan būs Raimondam šoks:

https://en.wikipedia.org/wiki/IPv4#Packet_structure

https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure

Iedomājies - Tu visu laiku, lasot šo forumu, jau lieto bitus, kas sapakoti baitos! :D

 

Jā, šo man vajadzēja!

Link to comment
Share on other sites

19 hours ago, Inspektors Caps said:

Priekš lielākās daļas Tu par dziļu roc un jauc galvu... :D Jā, tā tas lielākās sistēmās ir, bet tas nemaina galveno domu. OS līmeņa (nevis piemēram .NET) virtuālās adreses tāpat translē un pārbauda CPU dzelzis nevis softs. Līdz ar to no "dzelžu tuvuma" skatu punkta tā vienalga ir fiziskā atmiņa.

 

Piemēram es aptuveni saprotu domu pat virtuālām un fiziskām adresēm. Tāpēc šī Andra info ir noderīga

 

Cik esmu lasījis dažādu informāciju par programmēšanu, tad esmu sapratis to tā, ka valodai, kuru programmētājs izmanto, ir nozīme vairāk nekā vienkārši pieraksta veids. Bet nu iespējams man vēl būs daudz kur savas domas jāmaina

Link to comment
Share on other sites

spitaligais
2020.10.14. , 15:26, Inspektors Caps teica:

Lūk, biedriem jauns mentāli sportisks izaicinājums. Kurš var šo iziet? Cik viegli/grūti gāja?

http://deadlockempire.github.io/

 

Kā programmētājs, esmu prastā aritmētiski vidējā līmenī.

Bez jebkādiem helpiem, mātes googles vai citas palīdzības mierīgi izgāju visus pārbaudījumus līdz pēdējam, 2 stundās, varbūt 3.

Laikam jāiet strādāt par testeri drīzāk.

 

Spoiler

Screenshot_20201017_094448.png

 

Labots - spitaligais
Link to comment
Share on other sites

2020.10.14. , 20:05, Raimonds1 teica:

kad visus kārts parametrus saliku vienā bitu rindiņā.

Bravo!!! 🤣🤣🤣

 

p.s. jeb tas ir kaut kas baigi komplicēts?

Link to comment
Share on other sites

Raimonds1

Nē.

Tāpat nekas komplicēts nebūs, ja mēģinās salikt parametrus tam pieminētajam teksta lasītājam.


14 logi iepriekššējai lapai.


Nelasot var lapu no augšas līdz apakšai pārskrollēt 2 sekundēs.


150 zīmes rindā.

Link to comment
Share on other sites

Raimonds1

80 baiti uz burtu, tas ir ap 12 kilobaiti rindā. 20 rindas logā. Ap 300 rindas lapā. Lai būtu 4 megabaiti jānolasa 2 sekundēs.

1. No attēla.

2. No copy-paste loga.

 

diezgan precīzi uzrakstīti sākuma nosacījumi.

Labots - Raimonds1
Link to comment
Share on other sites

Raimond, pirms izgudro velosipēdu paskaties, ar ko braukā Tavi kaimiņi vai aizej uz veloveikalu.

 

Nevajag nemaz TCP stekus... visparastākajam mikrokontrolierim kaut kādi taimeru u.c. reģistri 1077624241_2020-10-1710_37_58-ATtiny2313A_4313DataSheet-doc8246_pdf.thumb.png.8cbd3df09a9f7274253537c68c111866.png

Link to comment
Share on other sites

pirms 2 stundām , Raimonds1 teica:

80 baiti uz burtu

80 baiti uz burtu? :D pats saproti ko runā?

Droši vien domāji 80 bitus, bet tad tāpatās ASCII iekodē visu latīņu alfabētu un vēl čupu spec simbolus 8 bitos, unicods visus iedomājamos simbolus 32 bitos 🤔 neizklausās diezko labs tev tas algortitms :D

Pa virsu ASCII vēl uzmet kautkādu Huffman encodingu un saspied to pašu info vismaz 6 bitos vienu burtu.  


pirms 2 stundām , Raimonds1 teica:

Lai būtu 4 megabaiti jānolasa 2 sekundēs.

4megabaiti nolasās visdrīzāk 200 milisekundēs, kritēriji ar tev tādi vāji :D

 

Labots - AndrisBB
Link to comment
Share on other sites

Inspektors Caps
pirms 3 stundām , spitaligais teica:

izgāju visus pārbaudījumus līdz pēdējam, 2 stundās, varbūt 3

Forši, vismaz kāds! Man sanāca kaut kur ap stundu, bet tas tādēļ, ka ikdienā rakstu kodu, kur tas ir aktuāli. Varbūt nemaz neesi tik vidējs programmētājs? Vai, ja šobrīd esi, tad ir potenciāls būt nevidējākam un jākāpj uz augšu... :)

 

pirms 3 stundām , Raimonds1 teica:

diezgan precīzi uzrakstīti sākuma nosacījumi.

Laikam esmu stulbs, bet vispār nesaprotu kāds ir uzdevums. Kādēļ tiek rēķināti ļoti mazas PNG kompresētas bildes kaut kādi vidējie baiti uz bildē attēlota teksta burtu? Ko Tu vispār gribi saglabāt - tekstu vai attēlu? Tu vispār saproti, ka tie ir principiāli dažādi dati ar principiāli atšķirīgiem saglabāšanas formātiem? Kādēļ Tu neiepazīsties ar jau esošajiem formātiem? Kāds vispār ir šīs velosipēdu izgudrošanas mērķis?

Link to comment
Share on other sites

Nja, nezinu neko par muteksiem, signāliem u.t.t. (tikai dzirdējis esmu), tīri loģiskā veidā pa 38 min. aizgāju līdz šitam, bet te mana loģika pagaidām apstājās... 😁

1177009923_2020-10-1714_52_41-TheDeadlockEmpire.thumb.png.4d2a881f994e391a3f86ea1396d71385.png

Link to comment
Share on other sites

Vēlāk varbūt būs jāpaskatās, visu nedēļu strādāju pa dārzu, uzlikta jauna sēta, šķūnim jauns jums, nav enerģijas vairs priekš mutexiem :D

 


Raimonds jau drīzāk mēģina tur izgudrot kautko tādu

wonkie-bike-c.jpg

  • Haha 2
Link to comment
Share on other sites

Fūū... tomēr lo1255050706_2020-10-1719_22_50-TheDeadlockEmpire.thumb.png.8579f42c918e9aa64b74cf0019dd1077.pngģika aizgāja. Vēl 52 minūtes.

 

Tagad dzīves plānā ir iemācīties par visiem semaforiem.

Labots - Jurkins
Link to comment
Share on other sites

Tiku līdz The Final Stretch un apnika, pagāja precīzi 30 minūtes.

Atstāšu atvērtu, varbūt kautkad pabeigšu :D

 

Dažus gan izgāju "uz cūceni", tik paspaidiju next/netxt un iziets.

Labots - AndrisBB
Link to comment
Share on other sites

Raimonds pārāk seklu rok, katrs muļķis var nolasīt i2c datus uz Linuksa ar tūli ko kāds cits uztaisijis.

Uztaisi labāk mikrokontroliera projektu ko piespraužot pie VGA viņš uz maza LCD displeya pārādis datus. Varēsi ar bitiem noņemties mazliet lasot visādus i2c interrupts.

Ar to tūli jau neko interesantu neredzēsi, kāds cits jau visu smago darbi i2c draiverī izdarijis.

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