Компилатор на Object Pascal от RemObjects Software, ComputerPress
Платформата Microsoft .NET става все по-популярна сред разработчиците на Windows приложения днес поради своята гъвкавост, сигурност и лекота на използване. Косвено доказателство за ефективността на принципите, залегнали в основата на неговия дизайн, е фактът, че много компании вече са активно ангажирани в проекти за пренасяне на част от тази платформа към операционни системи, различни от Windows, като например проекта Mono, поддържан от редица доставчици на Linux, за пренасяне на Common Language Runtime към операционни системи Linux, Solaris, FreeBSD и Mac OS X (вижте http://www.mono-project.com). Понастоящем все повече и повече поддръжници сред програмистите и ръководителите на проекти намират инструменти за разработка на Microsoft - през последните пет години тяхното качество, използваемост значително се повиши, а текущото оборудване на примерни приложения и код може би надхвърля всичко, което доставчиците на такива инструменти някога са били в състояние да предложат.
Естествено, производителите на компоненти, помощни програми, добавки към среди за разработка, компилатори и програми за отстраняване на грешки също обърнаха поглед към Visual Studio .NET като обещаваща среда за разработка, която обещава печелившо партньорство и стабилен пазар за техните продукти. Към днешна дата допълненията към Visual Studio .NET, представени на пазара на софтуер, покриват много широк спектър от задачи. Вече разгледахме някои интересни разработки в тази област (например Borland Together за Visual Studio .NET) в нашето списание и планираме да продължим тази традиция в бъдеще.
Характеристики на езика за програмиране
Групови типове и методи (генерични)
Типовете групи са проектирани да генерират код, който елиминира грешките, свързани с преобразуванетовидове. Типични примери за използване на такива типове са класове контейнери, колекции от обекти от строго определен тип. Следното е пример за създаване на такъв клас, който имплементира свързан списък:
Списък = публичен клас
конструктор (aData: T; aNext: List);
свойство Следващ: Списък ;
Данни за имота: Т;
метод ToString: низ; отмяна;
„T“ обикновено се нарича групов параметър и трябва да бъде заменен с конкретен тип данни, когато се инстанцира декларираният клас. Обърнете внимание, че можете да наложите ограничения върху параметрите на групата, например:
Списък = публичен клас
където T има конструктор, T е IComparable;
Имайте предвид, че тази функция се поддържа само когато Chrome се използва в комбинация с .NET Framework 2.0 или Mono 2.0.
Класови договори
Chrome включва езикови разширения, които ви позволяват да въвеждате такива ограничения директно в кода по време на етапа на отстраняване на грешки и, ако е необходимо, да ги деактивирате по време на създаването на окончателната версия, предназначена за внедряване. Така че, като използвате блокаrequire, можете да дефинирате изискванията, на които данните трябва да отговарят, преди методът да започне да се изпълнява, например:
метод CalculateSquareRoot(aValue: Double):Double;
// изчисляване на корен квадратен
Ако условието в блокаrequire не е изпълнено, методът просто ще бъде игнориран без хвърляне на изключение.
Освен това можете да дефинирате условията, които трябва да бъдат изпълнени в края на метода:
метод QuadrupleLinkedList.Add(aItem: Object);
// добавяне на елемент към списъка
Брой = стар брой+1;
В този пример блокътensure показва, че когато методът се изпълни, трябва да се гарантира, че списъкът ще стане единелементът е по-голям, отколкото е бил преди изпълнението на метода, и че елементът, който е бил параметър на метода, ще бъде добавен към списъка. Ако условието в този блок не е изпълнено, полученото изключение ще позволи на разработчика да разбере, че с модифицирането на кода на метода е нарушил изискванията за него.
В допълнение към пред- и постусловията за методите е възможно да се създадат ограничения, наложени върху класа като цяло (такива ограничения се наричат инварианти ). Примерно изпълнение на инварианта е дадено по-долу:
LightStatus = (червено, зелено);
TrafficLight = публичен клас
имот Автомобили: LightStatus . ;
свойство Пешеходци: LightStatus . ;
не ((Коли = Зелено) и (Пешеходци = Зелено));
Блокътпублични инварианти определя условие, което винаги трябва да е вярно, без значение какво се случва с този клас и неговите екземпляри. Ако някакъв код в приложението причини това условие да не бъде изпълнено, ще бъде хвърлено изключение, за да покаже, че екземплярът на класа е в невалидно състояние.
Поддръжка на пространство от имена
Пространствата от имена, една от основните концепции на .NET Framework, ви позволяват да групирате класове в йерархична структура според задачите, които са проектирани да изпълняват, и по този начин да ги улесните за намиране. Естествено, Chrome поддържа пространства от имена:
Препратките към пространство от имена могат да бъдат направени по следните начини:
Асинхронни методи и нишки
Много потребители на Delphi многократно са се сблъсквали с писането на многонишкови приложения и вероятно ще се съгласят с мен, че това не е лесна задача. Писането на многонишкови приложения с помощта на C# или Visual Basic .NET също включва, като минимум, създаване на наследници на класовепространствата от имена System.Threading.
Компилаторът на Chrome значително опростява нишките, като ви позволява просто да опишете даден метод като работещ в отделна нишка, използвайки ключовата думаasync, като тази:
MyWinForm = публичен клас
метод Fetch(aURL: низ); асинхронен; празен;
//Асинхронният метод може да бъде извикан във всеки клас
Сред другите средства за опростяване на работата с нишки, ние отбелязваме блокаlocking, който ви позволява да изпълните всеки фрагмент от код като безопасен за нишки, като го заобикаляте с уникален критичен раздел.
самозаключването започва
// изпълни код, който не е безопасен за нишки
Други полезни малки неща
Chrome ви позволява да дефинирате виртуални свойства, без да създавате виртуални методи за тяхното четене и запис:
свойство Width: цяло число четене запис; виртуален; абстрактно;
Когато създавате свойство на производен клас, можете да опишете както самото свойство, така и методи за четенето и записването му. Подобни принципи важат и за интерфейси и събития - последните могат да бъдат виртуални.
Ако е необходимо, когато програмирате с Chrome, можете да дефинирате променливи директно в блок от код:
метод MainForm.OnClick(Подател: Обект; ea: EventArgs);
за i: integer := 0 до 1 do
Създаването и унищожаването на обекти в кодови блокове може да се извърши с помощта на блокаusing :
използване на f := new FileStream(. ) започва
В този пример променлива f се създава вътре в кодовия блок и когато завърши изпълнението, методътDispose на класаFileStream се извиква автоматично.
Също така отбелязваме наличието на някои нововъведения в конструкциятаcase, като например използването на нецелочислени типове (например низове) като параметър:
случайaClassID.ToUpper от
'XYZ': резултат := TMyXYZClass;
'ABC': резултат := TMyOtherClass;
иначе повдигне ново изключение ('Невалиден идентификатор на клас');
или изпълнение на различни части от код в зависимост от типа на обекта, който е параметърът:
случай aClass тип на
else raise Exception.Create('Invalid Class Reference');
Сред другите полезни малки неща отбелязваме поддръжката на частични .NET класове (partial >
Характеристики на компилатора
Поддръжка за създаване на уеб приложения
Компилаторът на Chrome ви позволява да създавате приложения ASP .NET 1.1, ASP .NET 2.0 и Mono XSP, включително използване на кодови фрагменти на Object Pascal директно в уеб страници, като например:
Поддръжка за различни CLR версии
Chrome поддържа различни версии на CLR, включително .NET Framework 1.1 и 2.0, .NET Compact Framework, 64-битова .NET Framework, Mono Framework за Linux. В момента това е единственият комерсиален компилатор на Object Pascal за платформата Mono.
Издания на Chrome
Chrome съществува в няколко издания: безплатен компилатор за команден ред, Chrome за Visual Studio и Chrome за Mono. Обърнете внимание, че Chrome за Visual Studio поддържа създаване на проекти за Mono директно в средата на Visual Studio .NET, което ви позволява да препращате към сглобки Mono във вашия код (Фигура 1).

Ориз. 1. Типове проекти, поддържани от Chrome

Ориз. 2. Инструменти за отстраняване на грешки в проекти на Chrome

Ориз. 3. Инструменти за отстраняване на грешки в проекти на Chrome
Имайте предвид, че цената на Crome за Visual Studio е много демократична - $ 199 за пълен лиценз, $ 149 за лиценз за потребители на Delphi, $ 49 за академичен лиценз за ученици и студенти. При тези цени, придобиванетоТози продукт, от една страна, не крие почти никакъв финансов риск, а от друга, може лесно да се изплати само за няколко дни.
Вместо заключение
И така, днес се запознахме с компилатора на Chrome, който има редица доста интересни и полезни функции, които улесняват писането на код. В какви случаи трябва да се прилага?
Този продукт може да представлява интерес за разработчици на софтуер и отдели за разработка, които се занимават с Object Pascal или Delphi от много години и планират активно да използват Visual Studio за създаване на нови проекти, които не включват наследен VCL код - в този случай Chrome ще ви позволи да приложите съществуващите знания и опит в писането на код на този език и да не инвестирате в преквалификация на бивши потребители на Delphi в други езици за програмиране. Освен това Chrome представлява голям интерес за разработчиците на мултиплатформени приложения, като например приложения, проектирани да работят едновременно на Windows с помощта на .NET Framework и да работят на Linux или Mac OS X с помощта на Mono.