Oxygene (язык программирования) | это... Что такое Oxygene (язык программирования)? (original) (raw)
У этого термина существуют и другие значения, см. Oxygene.
Oxygene
![]() |
|
---|---|
Релиз: | 4.0.25 (20 августа 2010) |
Испытал влияние: | Object Pascal, C# |
Лицензия | Commercial |
Сайт: | Oxygene Homepage |
Oxygene («Кислород») (ранее известный как Chrome («Хром»)) — язык программирования, разработанный компанией RemObjects Software для стандарта Common Language Infrastructure. Язык Oxygene был создан на основе языка Object Pascal.
Первоначально привязанный к Delphi.NET, после приобретения прав компанией Embarcadero, Oxygene не обладает полной обратной совместимостью. Так, например, в его состав не входят библиотеки классов, совместимые с VCL, что практически исключает перенос на платформу .NET унаследованных приложений, созданных с помощью Delphi или Kylix и использовавших библиотеку классов VCL.
Компания «RemObjects Software» предлагает полную интеграцию с Visual Studio 2003/2005/2008, а с июня 2010 года - интеграцию с MonoDevelop и Visual Studio 2010. Отдельного IDE для Oxygene на данный момент не существует.
Содержание
Особенности
- интеграция с CLI.
- Основан на Object Pascal с добавлением множества новых возможностей.
- Поддержка механизма «контракты для классов» («class contracts») — механизм ограничения на данные, схожий с контрактным программированием.
- Определение переменных непосредственно внутри блока кода.
- Анонимные типы.
- Анонимные методы и делегаты.
- Асинхронные методы и работа с потоками.
- Лямбда-исчисление.
- Поддержка .NET 2.0.
- Обобщённые типы и методы. (только для .NET 2.0)
- Обнуляемые типы (Nullable types). (только для .NET 2.0)
- Итераторы.
- Частичные классы (для .NET 1.1 и 2.0)
- Методы-расширения (Extension methods).
- Поддержка LINQ.
- Вывод типов.
- Виртуальные свойства и события.
- Улучшенная поддержка событий с несколькими обработчиками (multicast events).
- Инициализаторы переменных внутри кода.
- Улучшенная поддержка циклов for.
- Знак двоеточия для безопасной работы с типами.
- Поддержка WPF.
- Полная поддержка альтернативных фреймворков, созданных для Visual Studio (смотри Portable.NET и Mono (среда разработки))
Примеры кода
Hello World
namespace HelloWorld;
interface
type HelloClass = class public class method Main; end;
implementation
class method HelloClass.Main; begin System.Console.WriteLine('Hello World!'); end;
end.
Обобщённый контейнер
namespace GenericContainer;
interface
type TestApp = class public class method Main; end;
Person = class
public
property FirstName: String;
property LastName: String;
end;
implementation
uses System.Collections.Generic;
class method TestApp.Main;
begin
var myList := new List; //вывод типов
myList.Add(new Person(FirstName := 'Иван', LastName := 'Петров'));
myList.Add(new Person(FirstName := 'Маша', LastName := 'Петрова'));
myList.Add(new Person(FirstName := 'Сергей', LastName := 'Петров'));
Console.WriteLine(myList[1].FirstName); //Проверка не требуется
Console.ReadLine;
end;
end.
Обобщённый класс
namespace GenericMethodTest;
interface
type GenericMethodTest = static class public class method Main; private class method Swap(var left, right : T); class method DoSwap(left, right : T); end;
implementation
class method GenericMethodTest.DoSwap(left, right : T); begin var a := left; var b := right; Console.WriteLine('Type: {0}', typeof(T)); Console.WriteLine('-> a = {0}, b = {1}', a , b); Swap(var a, var b); Console.WriteLine('-> a = {0}, b = {1}', a , b); end;
class method GenericMethodTest.Main; begin var a := 23;// вывод типа var b := 15; DoSwap(a, b); // никаких приведений базового типа к дочернему (downcasting) для Object в этом классе.
var aa := 'abc';// вывод типа var bb := 'def'; DoSwap(aa, bb); // никаких приведений базового типа к дочернему (downcasting) для Object в этом классе.
DoSwap(1.1, 1.2); // вывод типа для обобщённых параметров Console.ReadLine(); end;
class method GenericMethodTest.Swap(var left, right : T); begin var temp := left; left:= right; right := temp; end;
end.
Программа должна вывести:
Type: System.Int32 -> a = 23, b = 15 -> a = 15, b = 23 Type: System.String -> a = abc, b = def -> a = def, b = abc Type: System.Double -> a = 1,1, b = 1,2 -> a = 1,2, b = 1,1
Улучшенная обработка операторов выбора
case aClassID.ToUpper of 'XYZ': result := TMyXYZClass; 'ABC': result := TMyOtherClass; else raise new Exception('Неправильный ID класса'); end;
case aClass type of TMyXYZClass: TMyXYZClass(aClass).DoSomething; TMyOtherClass: TMyOtherClass(aClass).DoSomethingElse; else raise new Exception('Неправильная ссылка на класс'); end;
См. также
- C# (язык программирования)
- Object Pascal
- Free Pascal
- Эйфель (язык программирования)
- Программа Hello, world!
- Java (язык программирования)
Дополнительные источники
- Oxygene Chrome Wiki
- Домашняя страница Oxygene
- Oxygene / Форум, посвященный Chrome, на сайте C-Sharp-Forum.de (на немецком языке)
- Компилятор Object Pascal компании RemObjects Software (Обзорная статья на сайте «Компьютер-пресс»)
![]() |
|
---|---|
Диалекты | Clascal • Concurrent Pascal • Delphi • Pascal • Object Pascal • Oxygene • SuperPascal |
Компиляторы | Коммерческие C/AL • Delphi • Delphi Prism (Oxygene) • FrameworkPascal • HP Pascal • IP Pascal • PocketStudio • Prospero Pascal Бесплатные ACK • Free Pascal • GNU Pascal • MIDletPascal • Pic Micro Pascal • Turbo51 • Vector Pascal[1] Неподдерживаемые JRT • Microsoft Pascal • Object Pascal (Apple) • Pascal/MT+ • THINK Pascal • Turbo Pascal • UCSD Pascal • Virtual Pascal |
IDE | Delphi • Lazarus • MSEide+MSEgui • PascalABC.NET |
Персоны | Никлаус Вирт • Ларри Теслер (англ.) • Андерс Хейлсберг |