ես ասում եմ, որ օբերոնով գրուած ծրագիրը (եթէ SYSTEM օգտագործուած չի) ունի միայն երեք պայթելու ձեւ։

  • dereference of nil pointer
  • զանգուածի սահմաններից դուրս գալը — օբերոնի ռանթայմը ինքն ա սպանում այդ երկու դէպքում։
  • stack overflow — ցանկացած ծրագիր դրանից կը մեռնի։

երէկ rust֊ի մասին էի նիւթեր կարդում։ մի ձեւ ասին ծրագիր սպանելու, որ սի֊ում աշխատում ա, ռաստ֊ում չի աշխատի։ դա սթեքի մէջ օբյեկտ ստեղծելն ա, ու յետոյ դրա փոյնթերը վերադարձնելն ա որպէս ֆունկցիայի արդիւնք։ բնական ա, որ սթեքը կը մաքրուի, ու այն ցոյց ա տալու ոչ էն բանի վրայ, ինչի վրայ նախատեսուած ա։

ու ապա մտածեցի՝ իսկ օբերոնում ո՞նց կը լինի։ սկսեցի գրել, ու մտքովս անցաւ՝ բայց չէ՞ որ օբերոնում հէնց NEW անեմ՝ հիփ֊ում ա օբյեկտ ստեղծուելու։ ու ապա էլ էդ խնդիրը չի լինի։ յետոյ մտքովս անցաւ, որ ախր՝ կարող եմ չէ՞ սթեքին ցոյց տուող փոյնթեր սարքել այսպէս՝

MODULE test;
IMPORT Out;
TYPE
arr    = ARRAY 16 OF CHAR;
string = POINTER TO arr;

PROCEDURE str(): string;
VAR
a: arr;
s: string;
BEGIN
a := "aaa";
s^ := a;
RETURN s;
END str;

PROCEDURE main;
VAR st: string;
BEGIN
st := str();
Out.String(st^); Out.Ln;
END main;

BEGIN
main;

END test.

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

#ծրագրաւորում #օբերոն #rust #տեքնոլոգիա #դիզայն #նախագծում #լեզու

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