հաւէս յօդուած ա սա շատ՝ https://www.joelonsoftware.com/2001/12/11/back-to-basics/

իսկ օբերոնում վիրտը որոշել ա հրաժարուել պասկալական տողերից, ու կիրառել զրօյով աւարտուող տողեր։

սակայն, էդ տողերով կարիք չկայ միշտ վազել չափն իմանալու համար։ առանձին դաշտ էլ պէտք չի օգտագործել ու յիշողութեան մէջ մի տեղ պահել չափսը՝ քոմփայլերը գիտի տողի երկարութիւնը։

ու քոմփայլ թայմ թեստ կարող ա անել։ դիցուք վերցնենք էս ելատեքստը՝

MODULE tst;
IMPORT Out;

VAR i: SHORTINT;
str: ARRAY 1024 OF CHAR;

BEGIN

FOR i := 0 TO LEN(str) DO
Out.Int(i, 0); Out.Ln
END;

END tst.

այն քոմփայլ չի լինի՝

[2020-09-02 16:00:20] $ voc -m tst.Mod 
tst.Mod  Compiling tst.

9:   FOR i := 0 TO LEN(str) DO
^
pos   102  err 113  incompatible assignment

Module compilation failed.
[2020-09-02 16:00:21] $

voc֊ը որ դէպի C ա թարգմանում սորսը, շատ լաւ ա պատկերելու համար։ եթէ մենք ունենք՝

str: ARRAY 16 OF CHAR;

ապա ելքային C կոդը կը լինի՝

static CHAR tst_str[16];

միայն դա։

իսկ

FOR i := 0 TO LEN(str) DO

կը թարգմանուի որպէս՝

tst_i = 0;
while (tst_i <= 16) {

Երբ մենք գրում ենք տողի հետ աշխատող ֆունկցիա, մենք կարող ենք չիմանալ փոխանցուող տողի երկարութիւնը՝

MODULE tst2;

PROCEDURE addStrs(VAR a, b: ARRAY OF CHAR);
BEGIN
(* do smth useful here *)
END addStrs;

PROCEDURE test*;
VAR
s0: ARRAY 32 OF CHAR;
s1: ARRAY 64 OF CHAR;
BEGIN
addStrs(s0, s1);
END test;

END tst2.

եւ ապա սի կոդը կը լինի՝

static void tst2_addStrs (CHAR *a, ADDRESS a__len, CHAR *b, ADDRESS b__len)
{
/* here we think we can do smth useful */
}

void tst2_test (void)
{
CHAR s0[32];
CHAR s1[64];
tst2_addStrs((void*)s0, 32, (void*)s1, 64);
}

այսինքն՝ ֆունկցիան ստանում ա նաեւ տողի երկարութիւնը։ ու եթէ անել LEN(a) անմիջապէս՝ առանց ոչ մի հաշուարկ՝ ստանում ես տողի երկարութիւնը։

ապա ինչպէ՞ս են աշխատում դինամիկ տողերը։

MODULE tst3;

PROCEDURE addStrs(VAR a, b: ARRAY OF CHAR);
BEGIN
(* do smth useful here *)
END addStrs;

PROCEDURE test*(i: INTEGER);
VAR
s: ARRAY 32 OF CHAR;
ps: POINTER TO ARRAY OF CHAR;
BEGIN
NEW(ps, i);
addStrs(s, ps^);
END test;

END tst3.

ունենք մի հատ ստատիկ տող՝ s ու մի հատ դինամիկ տողի ցուցիչ՝ ps։ ps֊ի չափսը կը ստանանք որպէս ֆունկցիայի արգումենտ՝ էս պահին մեզ անյայտ ա։

առաջին ֆունկցիան մնում ա անփոփոխ, երկրորդը թարգմանւում ա սէնց՝

static void tst3_addStrs (CHAR *a, ADDRESS a__len, CHAR *b, ADDRESS b__len)
{
/* do smth useful here */
}

void tst3_test (INT16 i)
{
CHAR s[32];
struct {
ADDRESS len[1];
CHAR data[1];
} *ps = NIL;
ps = __NEWARR(NIL, 1, 1, 1, 1, ((ADDRESS)(i)));
tst3_addStrs((void*)s, 32, (void*)ps->data, ps->len[0]);
}

_NEWARR֊ն արդէն մի քիչ բարդ ֆունկցիա ա, որը ռանթայմի մաս ա։ բայց ընդհանուր առմամբ պարզ ա ինչ ա անում՝ հիփ֊ի մէջ ալոքէյթ ա անելու տող, եւ մեր ստացած ցուցիչն արդէն struct֊ի ա, որն ունի data դաշտ եւ len դաշտ։

սա ռանթայմ տեղեկատւութիւն ա, ու այս դէպքում արդէն մեզ պէտք ա պահել առանձին դաշտ տողի երկարութեան համար։

ու տէնց։

#օբերոն #ծրագրաւորում #տող #տողեր #պասկալ #սի #վիշապ #իրականացում #կազմարկում #կոմպիլյատոր #կոմպիլեատոր #կազմարկիչ

բնօրինակ սփիւռքում(եւ մեկնաբանութիւննե՞ր)

երէկ տառապել եմ դեբիանի փաքաջինգի հետ։ եւ ջենքինս բիլդերի։

ուզում էի photolightmeter֊ը աւելացնել maemo-leste֊ի ռեպօներ։ ահաւոր երկար տեւեց։

ամենաբարդ խնդիրն էր, որի վրայ լռուել էի՝ բիլդ լինում էր ինձ մօտ, բիլդ լինում էր իրենց վմ֊ի մէջ, բայց չէր լինում նման վմ֊ի մէջ ջենքինսում։ որն արդէն երեք պլատֆորմի համար շինում ա՝ amd64, armhf, arm64։ ծրագիրս գրուած ա պասկալով, օգտագործում էի lazbuild այն կազմարկելու համար։

ուրեմն, սէնց փախած սխալ էր տալիս՝

Fatal: (10022) Can’t find unit FastHTMLParser used by Clipbrd

ուրեմն էս lazbuild֊ը չգիտեմ ինչի չէր հաւանում եղած քոմփայլ արած .o ու .ppu նիշքերը որ գալիս են իր հետ՝ LCL գրադարանի մաս են, կամ նրանք, որ ստանդարտ ֆրիպասկալի մաս են, ու ուզում էր կրկին կազմարկել ելատեքստից։

իսկ դէ փաթեր չէր գտնում։

տեղակայեցի fpc-source-3.0.4 ու դրա մէջ գտայ այդ fasthtmlparser.pas֊ը։ արդէն շինում էի ոչ թէ lazbuild֊ով այլ հէնց fpc֊ն կանչելով ու երկար երկար փաթեր տալով ամէն մի գրադարանի։

տուեցի՝ սա՝ -Fu/usr/share/fpcsrc/3.0.4/packages/chm/src/ — ոնց որ պէտք ա հէնց առանց բացատ աւելացնել -Fu արգումենտին

էլի չի գտնում։ վերջը դրա վերեւի դիրեկտորիայում գտայ ինչ֊որ fpmake.pp

root@devuan:/usr/lib/x86_64-linux-gnu/fpc/3.0.4# ls /usr/share/fpcsrc/3.0.4/packages/chm/
Makefile.fpc  fpmake.pp  src
root@devuan:/usr/lib/x86_64-linux-gnu/fpc/3.0.4#

ու յիշեցի որ ինչ֊որ fpmake կայ, որը փաքաջներ ա սարքում, ու այդ ուղին տուեցի նաեւ քոմփայլերին։ եւ այո, ստացուեց։ կազմարկուեց։

ապա միակ խնդիրը որ մնացել էր՝ ռեսուրս կոմպայլերը՝ fpres֊ը չէր գտնում։ որովհետեւ ես fpc֊ն կանչել եմ լրիւ ուղղով՝ /usr/bin/fpc, իսկ այ որտեղ ա fpres֊ը չէր գտնում։ չգիտեմ, գուցէ makefile֊իս մէջ պէտք ա ինչ֊որ աւելի յստակ PATH֊ը export անէի, բայց fpc֊ն յատուկ արգումենտ ունէր իր ուզած բինարնիկները գտնելու համար՝ -FD, այսպիսով աւելացրի՝ -FD/usr/bin ու յէյյյ, եղաւ քոմփայլը։

էդ ամենակարեւորն էր։

յետոյ պարզուեց որ armhf մեքենայի վրայ մէկ ա կազմարկումը չի անցնում։ ու չգիտես ինչի էնտեղ fpc֊ն աւելի շատ բան ա ուզում կազմարկի ու չի գտնում։ երեւի դեբիանի armhf սբորկան մի քիչ այլ ձեւ էր, չնայած նոյն վերսիաներն էին ծրագրերի, ու նա ուզում էր աւելի շատ լիբ ինքը շինել, քան արդէն ստացել էր։ ու օկ, էդ արդէն բարդ չէր՝ պոչը բռնել էի։ ինչը ասում էր որ չի գտնում, գտնում էի lcl֊ի կամ fpc֊ի ելատեքստերի մէջ՝ տալիս էի իրան։ armhf բիլդն էլ եղաւ։

էդ պահերին մտածել էի որ arm64 բիլդը իզուր տապալուում ա ու պէտք ա ինչ֊որ ձեւ նշել որ չշինի դրա համար, զի fpc-3.0.2֊ը չունի դեռ arm64֊ի սափորտ։ fpc-3.2֊ն ունի, բայց էդ debian beowulf֊ի մէջ այն չկայ։ ու մտածել էի՝ դէ մինչեւ դեբիանը չթարմանայ ու մաեմոն չօգտագործի նոր դեբիան՝ դէ չի լինի։

բայց ինչ֊որ ձեւ սխալ էի սահմանափակում որ պլատֆորմների համար շինի, ու վերջը թողեցի՝ any, ու չեմ հասկանում ոնց՝ arm64֊ի համար էլ բիլդը լրիւ նորմալ անցնում ա։

հա, էս բիլդերի հետ մի խնդիր էլ կար։ fpc֊ի համար գրադարանների ուղիներում կայ x86_64-linux ու կայ arm-linux որը armhf֊ի վրայ ա։ ու ես makefile֊ի մէջ ջոկում էի որն ա ճարտարապետութիւնը՝

ARCH = $(shell arch)

arch քոմանդլայն հրամանը կանչելով։ ու արդէն այդ ստացած $ARCH֊ը տեղադրում էի fpc֊ի ուղիների մէջ։ վերջում ստացած ուղին սէնց սարսափելի տեսք ունէր՝

PARAMS = -MObjFPC -Scgi -Cg -O1 -g -Xg -XX -l -vewnhibq -FD/usr/bin -Fi/usr/lib/lazarus/2.0.0/lcl/nonwin32 -Fu/usr/lib/lazarus/2.0.0/lcl/nonwin32 -Fi/usr/lib/lazarus/2.0.0/lcl/forms -Fu/usr/lib/lazarus/2.0.0/lcl/forms -Fi/usr/lib/lazarus/2.0.0/lcl/interfaces/gtk2 -Fu/usr/lib/lazarus/2.0.0/lcl/interfaces/gtk2 -Fi/usr/lib/lazarus/2.0.0/lcl/widgetset -Fu/usr/lib/lazarus/2.0.0/lcl/widgetset -Fi/usr/lib/lazarus/2.0.0/lcl -Fu/usr/lib/lazarus/2.0.0/lcl -Fi/usr/lib/lazarus/2.0.0 -Fu/usr/lib/lazarus/2.0.0 -Fi/usr/lib/lazarus/2.0.0/lcl/include -Fu/usr/lib/lazarus/2.0.0/lcl/include -Fi/usr/share/fpcsrc/3.0.4/packages/chm -Fu/usr/share/fpcsrc/3.0.4/packages/chm -Fi/usr/share/fpcsrc/3.0.4/packages/chm/src -Fu/usr/share/fpcsrc/3.0.4/packages/chm/src -Filib/$(ARCH)-linux -Fu/usr/lib/lazarus/2.0.0/lcl/units/$(ARCH)-linux/gtk2 -Fu/usr/lib/lazarus/2.0.0/lcl/units/$(ARCH)-linux -Fu/usr/lib/lazarus/2.0.0/components/lazutils/lib/$(ARCH)-linux -Fu/usr/lib/lazarus/2.0.0/packager/units/$(ARCH)-linux -Fu. -Fulib/x86_64-linux/ -FE. -o./project1 -dLCL -dLCLgtk

սա արդէն armhf֊ի աւելացումներով։ x86_64֊ի վրայ դեբիանի կազմարկիչն աւելի քիչ բան էր ուզում գտնել։

հա, ու arch հրամանը որ ինթելի վրայ տալիս էր՝ x86_64, armhf համակարգում վերադարձնում էր՝ armv71։ ապա ստիպուած եղայ կեղտոտ հաք անել՝

ARCH = $(shell arch)
ifeq ($(ARCH),armv7l)
ARCH = arm
endif

օկ, սէնց կազմարկուեց։ ու օհ անակնկալ, նաեւ կազմարկուեց arm64 համակարգում։ գտաւ որ կարծես aarch64 ա ճարտարապետութիւնը ու fpc֊ի ուղիներում էլ ամէնը գտաւ ու կազմարկեց։

էսպէս։

բայց կարեւոր ասածս այլ ա։ սէնց բաներ չեն պահանջում լինել յանճար։ ու լիքը բան չի պահանջում։ ես սրա վրայ նստած էի մօտ 12 ժամ։ ու ամէն անգամ, ամէն պահի վարկած ունէի՝ թէ էլ ո՞նց փորձել։ օրինակ նախորդ գրառման խնդրի հետ՝ թեմայի մէջ չէի ու վարկած չունէի։ իսկ սա՝ ամէն անգամ մի նոր բան էի փորձում։ ու մենք ունենք գործ տարբեր մարդկանց սարքած տարբեր ծրագրակազմերի հետ, տուեալ դէպքում՝ fpc, lazarus, jenkins, debian, ու պէտք ա մօտաւորապէս պատկերացնելով որն ա սխալ գնում բզբզալ մինչեւ ստացուի։ սա հէնց էն not science, trying ձեւն ա։ ու պարզապէս պէտք ա փորձել ու փորձելը երկար ա։ ու խելքը կապ չունի շատ։ համբերատարութիւն ա պէտք։

#տեքնոլոգիաներ #մաեմո #մաեմօ #համբերատարութիւն #փորձ #դեբիան #լինուքս #կազմարկում #ծրագրակազմ

բնօրինակ սփիւռքում(եւ մեկնաբանութիւննե՞ր)

աշխարհը գժուել ա՝ ամն֊ում թրամփ ա, ռդ֊ում պուտին, իսկ մատրիքսը հտտպ֊ով ա աշխատում։

#աստուատ #էկրանահան #ծրագրաւորում #տեքնոլոգիա #մատրիքս #խի #փաստօրէն #կազմարկում

բնօրինակ սփիւռքում(եւ մեկնաբանութիւննե՞ր)

էսօր ահաւոր ուզեցի այբուք ջի չորսիս վրայ ջենթու նստեցնել։

մեքենան շատ դանդաղ ա, կարծես երբ վերջին անգամ թարմացնում էի, հա անջատւում էր տաքանալուց։ ու որոշեցի դեբեան գցել, պրծնել։ բայց դէ դեբեանին էլ չեմ դիմանում, ու արդիւնքում առհասարակ չէի օգտագործում։

նէնց չի որ սովորաբար օգտագործում եմ, բայց այնուամենայնիւ։

հիմա եմ օգտագործում՝ ջենթու տեղակայելիս։ ֆանթու աւաղ չկայ փաւերփիսի֊ի համար։

սէնց, ես չգիտեմ, արդեօք հարդի հետ մի բան էն չի, վերջին անգամ երբ քանդել ենք, տէնց վատ չէր։ քանդել էինք՝ վինչ փոխելու համար՝ մեծ վինչ էի ուզում դնել։ ու մինչեւ հետ հաւաքեցինք, հոգիներս դուրս եկաւ։ շատ բարդ էր։

ու դէ հիմա չեմ քանդի։ բայց երբ տեղակայում էի ջենթու՝ կազմարկում էի ինչ֊որ բան երկու թրեդով՝ անջատուեց։

մտածեցի՝ ի՞նչ անեմ, որ դանդաղ լինի, բայց շատ չտաքանայ։

ու ահա։

նախ make.conf՝

այստեղ MAKEOPTS֊ի մէջ ոչ միայն -j1 ա, այլեւ --load-average=0.5 — պէտք ա էն թօփի աւերիջը էդքանից չբարձրանայ։ չգիտէի նաեւ EMERGE_DEFAULT_OPTS ու PORTAGE_NICENESS֊ի մասին։ վերջինը փաստօրէն 10֊ով բարձրացնում ա առաջնահերթութեան թիւը՝ այսինքն առաջնահերթութիւնը պակասեցնում։

բայց առաջինն ինչ արեցի, տեղակայեցի cpulimit, այն մի քիչ կեղտոտ ծրագիր ա, /proc֊ով ման ա գալիս, ու պրոցեսների միջեւ բարեկամական կապեր փնտրում։

ամէն դէպքում, աշխատեցրել եմ՝

cpulimit -e cc1plus  -l 4&
cpulimit -e cc1  -l 4&
cpulimit -e perl  -l 4&

ու այն տեսէք, իր մէսիջն ա, որ բռնում ա պրոցեսներ, յետոյ կորցնում, յետոյ նոր պրոցեսներ բռնում։

եւ վերջապէս, մի բան էլ արի՝ էմերջը աշխատեցրի ionice֊ով։

ionice -c3 emerge gentoo-sources linux-firmware yaboot

զի դէ ամենաառաջինը սիրում եմ իմանալ, որ համակարգը բեռնւում ա, յետոյ արդէն մնացածը։

այստեղ -c3֊ը նշանակում ա idle դաս, երբ պրոցեսը կը ստանայ գրել կարդալու հնարաւորութիւն միայն եթէ ոչ ոք չի գրում կամ կարդում։ #ջենթու #լինուքս #կազմարկում #էկրանահան #գործիքակազմ

բնօրինակ սփիւռքում(եւ մեկնաբանութիւննե՞ր)