Top Lista programskih jezika?

A kako se to mapira na CPU registre?
U C++ imas bitset, ali sam skupovni tip pod uslovom da mislimo na set klasicni je binarno stablo u C++, moze biti i hash tabela.
У паскаличним програмским језицима може се дефинисати тип сет или декларисати варијабла типа сет. То је нешто много једноставноје од појма сет које си навео.

На пример, за случај програмирања микроконтролера, имаш варијабли са стањима машине:

stanje : set of (MotorStop,MotorNapred,MotorNazad,LED1On,LED2On,Tast1,Tast2);

палиш обе диоде са:

Stanje := Stanje+[LED1On,LED2On];

Заустављаш мотор са:

Stanje := Stanje -[MotorNapred,MotorNazad]+[MotorStop];

Провераваш да ли је протиснут тастер Таст1:

if Tast1 in Stanje then
 
Poslednja izmena:
У паскаличним програмским језицима може се дефинисати тип сет или декларисати варијабла типа сет. То је нешто много једноставноје од појма сет које си навео.

На пример, за случај програмирања микроконтролера, имаш варијабли са стањима машине:

stanje : set of (MotorStop,MotorNapred,MotorNazad,LED1On,LED2On,Tast1,Tast2);

палиш обе диоде са:

Stanje := Stanje+[LED1On,LED2On];

Заустављаш мотор са:

Stanje := Stanje -[MotorNapred,MotorNazad]+[MotorStop];

Провераваш да ли је протиснут тастер Таст1:

if Tast1 in Stanje then
Čini mi se da je na mnogim programskim jezicima danas teško ili nemoguće izvesti takve jednostavne operacije kao paljenje/gašenje pojedinu UI pinova? probaj recimo na Win10 iz bilo kojeg programa postaviti LPT-port Data0 u jedinicu ili nulu? A nekada je to bilo sa npr. OUT (256), 0/1....
 
Kako palis diode? Kako se (to je u stvari enum koji ima i C) to mapira na registre?
У примеру је скуп изграђен од набеојивог типа (енум), али може и од подинтервала:

RadniDani : set of Ponedeljak..Petak;

RadniDani није набројив тип, већ скуп од наведених елемената, без обзира да ли су елементи набројивог или подинтервалног типа.

Оператор + сабира све типове сем набројивих, јер нема смисла (као оно сабирање баба и жаба). Не сабира низове и записе (поља записа да) али сабира и карактере и стрингове.

Када су у питању скупови сабирањем се добија унија оба скупа, множењем се добија пресек тих скупова, а одузимањем се добија скуп елемената левог скупа који не постоје у десном скупу (леви и десни у односу на знак -). Релациони оператор in проверава да ли у скупу постоји неки елемент и даје вредност типа boolean.

У примеру из претходног поста, лако се проверава да ли је притиснут неки од тастера са:

if Stanje * [Tast1,Tast2] <> [] then // неки тастер је притиснут

Релациони оператор <> је различито, а [] је празан скуп. Видим да доста програмираш, па ти није потребно објашњење претходног исказа.
 
Čini mi se da je na mnogim programskim jezicima danas teško ili nemoguće izvesti takve jednostavne operacije kao paljenje/gašenje pojedinu UI pinova? probaj recimo na Win10 iz bilo kojeg programa postaviti LPT-port Data0 u jedinicu ili nulu? A nekada je to bilo sa npr. OUT (256), 0/1....

У ПАСКАЛУ би било:

OUT : set of 0..7 absolute AdresaLPT;

Палиш, рецимо 2 и 5

OUT := OUT+[2,5];

Или гасиш 3 и 7

OUT := OUT-[3,7];

Чекаш да се постави бит 4:

while not (4 in OUT) do
 
i @zofr Ja sam svojevremeno sipao kilobajte mašinskih instrukcija iz rukava, a sada nemam pojma o čemu vi to lupetate? :zcepanje:

Исто као и ја, радозналости ради сабрао сам број линија кода за један пројекат, са свим модулима које сам написао, било је преко 100 хиљада линија.

Али сада пишем на Ц-у, и то је само начин да смандрљам пројекат.

Иначе причамо о скуповима које ПАСКАЛ има као преддефинисан тип а нема га Ц нити већина програмских језика. У Ц++ су уведени доста рогобатно са коришћењем неких нових операторских знакова што чини изворни текст нечитким, чак изгледа као да је шифрован.

Основна ствар је у томе да је ПАСКАЛ написан на бази науке о програмским језицима, немајући у виду неку циљну апликацију, док је Ц нус производ писања ОС ЈУНИКС. Зато је мало бесмислено упоређивати Ц-ичне језике са паскаличним језицима.
 
У ПАСКАЛУ би било:

OUT : set of 0..7 absolute AdresaLPT;

Палиш, рецимо 2 и 5

OUT := OUT+[2,5];

Или гасиш 3 и 7

OUT := OUT-[3,7];

Чекаш да се постави бит 4:

while not (4 in OUT) do
A sta ako imas in/out instrukcije umesto memory mapped registra? Ili na pr sta je AdresaLPT?
Cak i u C-u, to nije portabilno i cisto... Pogotovo sto moras da kastujes u tip koji ti treba neki
broj. Mislim da to Pascal ni pod razno ne moze. A mapiranje seta na adresu bez kasta je 10 puta
gore nego kako se radi u C-u.
 
A sta ako imas in/out instrukcije umesto memory mapped registra? Ili na pr sta je AdresaLPT?
Cak i u C-u, to nije portabilno i cisto... Pogotovo sto moras da kastujes u tip koji ti treba neki
broj. Mislim da to Pascal ni pod razno ne moze. A mapiranje seta na adresu bez kasta je 10 puta
gore nego kako se radi u C-u.
?? Ti si prespavao časove informatike? :super: Adresa LPT-porta? U moje vreme je I/O instrukcija na adresne linije PROCESORA bacala adresu toga porta, a na DATA linije postavljalo ili čitalo podatke. Samo za TEBE sam izvukao svoju XP-makinu da vidiš koje su IO adrese bile za LPT-port. Sve do W98 i Visual Basic 5.0 si mogao bez problema da postavljaš ili čitaš pojedine BITOVE na data linijama:
lpt-adresa.PNG
 
?? Ti si prespavao časove informatike? :super: Adresa LPT-porta? U moje vreme je I/O instrukcija na adresne linije PROCESORA bacala adresu toga porta, a na DATA linije postavljalo ili čitalo podatke. Samo za TEBE sam izvukao svoju XP-makinu da vidiš koje su IO adrese bile za LPT-port. Sve do W98 i Visual Basic 5.0 si mogao bez problema da postavljaš ili čitaš pojedine BITOVE na data linijama:
Pogledajte prilog 708317
Iz koje si ti price ispao. Bas na PC portovi nisu mapirani na adrese memorije vec se koriste iskljucivo i jedino preko in/out instrukcija,
koje ni pod razno ne mozes da mapiras preko seta. Ajmo i na drugi nacin. set mora tacno da se specificira kako se mapira u memoriji
da bi mogao da mapiras registre sto samim tim pravi set beskorisnu konstrukciju. Pascal je oduvek bio neupotrebljiv za bilo sta low level,
sve dok Borland nije uradio svoje ekstenzije. No ovde govorimo o cistoci koda. Da u low level programiranju nema cistog koda,
i to raditi u Pacal-u je kontra produktivno.
 
Iz koje si ti price ispao. Bas na PC portovi nisu mapirani na adrese memorije vec se koriste iskljucivo i jedino preko in/out instrukcija,
koje ni pod razno ne mozes da mapiras preko seta. Ajmo i na drugi nacin. set mora tacno da se specificira kako se mapira u memoriji
da bi mogao da mapiras registre sto samim tim pravi set beskorisnu konstrukciju. Pascal je oduvek bio neupotrebljiv za bilo sta low level,
sve dok Borland nije uradio svoje ekstenzije. No ovde govorimo o cistoci koda. Da u low level programiranju nema cistog koda,
i to raditi u Pacal-u je kontra produktivno.
Izvini, ja sam stara škola, pojam set je za mene špansko selo.....Šta ti znači 'čistoća koda'? Ako si na mikrokontrolerima imao problem nestašice memorijskog prostora, neke stvari si odradio u mašincu, a ne kompilovanjem nekog višeg jezika....
 
A sta ako imas in/out instrukcije umesto memory mapped registra? Ili na pr sta je AdresaLPT?
Cak i u C-u, to nije portabilno i cisto... Pogotovo sto moras da kastujes u tip koji ti treba neki
broj. Mislim da to Pascal ni pod razno ne moze. A mapiranje seta na adresu bez kasta je 10 puta
gore nego kako se radi u C-u.
I/O адресни простор је издвојен из меморијске мапе података и кода програма. У праву си да то ствара проблем који се може превазићи само писањем функције на асемблеру, за дати процесор, која ће адресу варијабле тумачити као адресу у I/O простору. Та функција ће занемарљиво смањити ефикасност програма.

Што мислиш да кастовање или ти експлицитна промена типа није могућа у паскалу, чак напротив врло је могућа.

Не видим шта то може бити 10х горе??
 
Iz koje si ti price ispao. Bas na PC portovi nisu mapirani na adrese memorije vec se koriste iskljucivo i jedino preko in/out instrukcija,
koje ni pod razno ne mozes da mapiras preko seta. Ajmo i na drugi nacin. set mora tacno da se specificira kako se mapira u memoriji
da bi mogao da mapiras registre sto samim tim pravi set beskorisnu konstrukciju. Pascal je oduvek bio neupotrebljiv za bilo sta low level,
sve dok Borland nije uradio svoje ekstenzije. No ovde govorimo o cistoci koda. Da u low level programiranju nema cistog koda,
i to raditi u Pacal-u je kontra produktivno.

Мало ме ниси схватио, приликом декларације сваке варијабле се може додати absolute , а не само иза скуповних варијабли.

Овде се не ради о проблему везаном за скуповне варијабле, већ о постављању варијабле на апсолутну адресу, и то само ако је она у I/O адресном простору.

Сада си ме заинтригирао, добро се сећам да сам радио са ЛПТ портовима користеће њихове адресе и то је све радило исправно. Могуће је да ОС не преклапа I/O адресе са осталим, тако да компајлер успешно прави тачан код. Ако ме не мрзи проверићу.

Напиши пар исказа које мислиш да не може паскал да уради, па да видимо.
 
?? Ti si prespavao časove informatike? :super: Adresa LPT-porta? U moje vreme je I/O instrukcija na adresne linije PROCESORA bacala adresu toga porta, a na DATA linije postavljalo ili čitalo podatke. Samo za TEBE sam izvukao svoju XP-makinu da vidiš koje su IO adrese bile za LPT-port. Sve do W98 i Visual Basic 5.0 si mogao bez problema da postavljaš ili čitaš pojedine BITOVE na data linijama:
Pogledajte prilog 708317
Васо, добро те служи памћење. Изгледа да ОС даје предност улазно/излазним адресама и тај простор не користи за ништа друго, те тако нема преклапања. Када сам гледао где смешта варијабле, увек су биле далеко изнад улазно/излазних адреса, али то мора да проверим.
 
Васо, добро те служи памћење. Изгледа да ОС даје предност улазно/излазним адресама и тај простор не користи за ништа друго, те тако нема преклапања. Када сам гледао где смешта варијабле, увек су биле далеко изнад улазно/излазних адреса, али то мора да проверим.
O kakvom to preklapanju on tupi? Npr. Instrukcijom 'OUT (port), A' si sadržaj akumulatora postavio na Data linije. Uz to je išao i signal na neki I/O pin procesora, a to je onda periferija shvatila, dekodirala adresu i pokupila podatak. Već u sledećoj instrukciji sve to NESTAJE sa adresnih i data linija. I obrnuto kod IN komande: Sa određene periferije si pokupio neki podatak, spremio ga negde i gotovo, nema toga više na AD-linijama itd....
 
O kakvom to preklapanju on tupi? Npr. Instrukcijom 'OUT (port), A' si sadržaj akumulatora postavio na Data linije. Uz to je išao i signal na neki I/O pin procesora, a to je onda periferija shvatila, dekodirala adresu i pokupila podatak. Već u sledećoj instrukciji sve to NESTAJE sa adresnih i data linija. I obrnuto kod IN komande: Sa određene periferije si pokupio neki podatak, spremio ga negde i gotovo, nema toga više na AD-linijama itd....
У праву си, али програмски језик барата са адресама и незна дали је то адреса РАМ-а или периферије.
Тако да постоји адреса ЛПТ1, али и иста адреса у РАМ простору. Када пишеш у машинцу нема проблема, али у вишим програмским језицима то јесте проблем

Али, погледах на брзину и видех да је за приступ периферијама резервисан улазно/излазни простор у оквиру BIOS Data Area, што се не преклапа са простором за податке.
 
У праву си, али програмски језик барата са адресама и незна дали је то адреса РАМ-а или периферије.
Тако да постоји адреса ЛПТ1, али и иста адреса у РАМ простору. Када пишеш у машинцу нема проблема, али у вишим програмским језицима то јесте проблем

Али, погледах на брзину и видех да је за приступ периферијама резервисан улазно/излазни простор у оквиру BIOS Data Area, што се не преклапа са простором за податке.
kakvi su to programski jezici koji to ne znaju? Ti softveraši su potpuno odlepili! :rotf: :rotf: Pa 8085 je imao IN i OUT instrukcije za periferiju, a hrpu drugih za registre i memoriju! https://www.tutorialspoint.com/in-and-out-instructions-in-8085-microprocessor
 
У праву си, али програмски језик барата са адресама и незна дали је то адреса РАМ-а или периферије.
Da, barata, ali nemas u Pascalu nikakvu informaciju o tome, tj ono sto se moze u C-u ne moze se u standardnom Pascalu.
No malo mislim da smo se sad pogubili zato sto neki jezik koji ima set i string i nimalo nije namenjen low level
programiranju poredis sa C-om koji je u startu za to namenjen.
 
O kakvom to preklapanju on tupi? Npr. Instrukcijom 'OUT (port), A' si sadržaj akumulatora postavio na Data linije. Uz to je išao i signal na neki I/O pin procesora, a to je onda periferija shvatila, dekodirala adresu i pokupila podatak. Već u sledećoj instrukciji sve to NESTAJE sa adresnih i data linija. I obrnuto kod IN komande: Sa određene periferije si pokupio neki podatak, spremio ga negde i gotovo, nema toga više na AD-linijama itd....
O cemu ti pricas? Ja uporno kazem da Pascal ne moze da se koristi za low level programiranje, jer je "cist", i da ga Borland ekstenzije
cine prljavijim i nesigurnijim od C-a za tu namenu, a ti uleces sa komentarima koji nemaju nikakve veze sa diskusijom.
 
kakvi su to programski jezici koji to ne znaju? Ti softveraši su potpuno odlepili! :rotf: :rotf: Pa 8085 je imao IN i OUT instrukcije za periferiju, a hrpu drugih za registre i memoriju! https://www.tutorialspoint.com/in-and-out-instructions-in-8085-microprocessor
Ја избегавам, кад могу, процесоре и микроконтролере који немају јединствени меморијски оростор. Јединствени мем. простор значи да на сваку локацију могу да применим све асемблерске инструкције. За локације у И/О простору само ИН и ОУТ и то ме иритира.

Још ме више нервира Харвард архитектура где имаш посебне наредбе за приступ таблицама у програмској меморији.

Срећа је што више прог. језици дозвољавају и асемблерско програмирање па се може превазићи овај проблем, али програмер онда мора да познаје структуру и асемблерске наредбе процесора, а они би само да гледају у монитор и да куцкају по тастатури.
 
U standardnom Pascalu ne mozes da inicijalizujes pointer sa adresom, a kamoli da
mapiras neku varijablu na neku adresu. To su verovatno Bolrand ekstenzije.
Нису екстензије које је измислио Борланд, већ је Вирт написао прог. језик Модула 2 који је проширени паскал са модулима и неким могућностима нижих прог. језика. Нешто од тога је Борланд унео у стандардни паскал и назвао га турбо паскал.

Зато користим израз паскалични језици.
 
Da, barata, ali nemas u Pascalu nikakvu informaciju o tome, tj ono sto se moze u C-u ne moze se u standardnom Pascalu.
No malo mislim da smo se sad pogubili zato sto neki jezik koji ima set i string i nimalo nije namenjen low level
programiranju poredis sa C-om koji je u startu za to namenjen.
Што се тиче усвојеног стандарда за Виртов паскал ту си у праву, то је језик високог нивоа, а они несмеју да имају икакве везе са структуром рачунара.

Али постоје стандарди за паскаличне језике који могу да управљају хардвером рачунара и само они се и користе на ПЦ рачунарима из практичних разлога.

Ја користим Delphi XE5 који има проширења узета из Модуле 2, па хајде напиши пар линија на Ц-у које раде са хардвером (са коментаром ако ти није тешко) па да видимо, и буди убеђен да и са таквим проширењима нема смањења поузданости.
 
O cemu ti pricas? Ja uporno kazem da Pascal ne moze da se koristi za low level programiranje, jer je "cist", i da ga Borland ekstenzije
cine prljavijim i nesigurnijim od C-a za tu namenu, a ti uleces sa komentarima koji nemaju nikakve veze sa diskusijom.
Може и то помоћу варијантног слога. Једно поље декларишеш као поинтер и као ворд или лонг ворд, па упишеш у то поње адресу, а прочиташ као поинтер. То је међутим трик програмирање које не волим, али срећом да је Борланд проширио паскал са неким стварима из модуле 2.
 

Back
Top