Cobra — высокоуровневый объектно-ориентированным язык программирования общего назначения. Разработан для платформ .NET и Mono. Синтаксис языка основывается на синтаксисе Python, используются отступы для синтаксического выделения блоков кода. Язык поддерживает как статическую типизацию, так и динамическую, обеспечивает поддержку контрактного программирования и встроенное модульное тестирование. Имеет возможность использования лямбда-выражений, замыканий, списочных выражений и генераторов. Cobra обеспечивает быструю разработку и высокую производительность.
Реализация языка Cobra имеет открытый исходный код, выпущена под лицензией MIT 29 февраля 2008 года, позволяющей беспрепятственное использование и модификацию кода.
Синтаксис и семантика
Строки документации Cobra предлагает механизм документирования кода DocString. class Utils shared def countChars(s as String, c as char) as int """ Возвращает количество символов c в строке s. """ count = 0 for ch in s if ch == c count += 1 return count
Модульное тестирование Позволяет проверить на корректность отдельные класс, свойство или метод исходного кода программы. class Utils shared def countChars(s as String, c as char) as int """ Возвращает количество символов c в строке s """ test assert Utils.countChars('', c'x') == 0 assert Utils.countChars('x', c'x') == 1 assert Utils.countChars('X', c'x') == 0 assert Utils.countChars(' ! ! ', c'!') == 2 body count = 0 for ch in s if ch == c count += 1 return count
Контрактное программирование Обеспечивает корректные входные данные вызываемому компоненту, помогая поймать ошибки раньше, когда они легче диагностируются. class Customer var _contacts as List<of Contact> get contacts from var def addContact(contact as Contact) require contact not in .contacts contact.name contact.customer is nil ensure contact.customer == this .contacts.count == old .contacts.count + 1 body contact.customer = this _contacts.add(contact)
Слежка за null во время компиляции Позволяет избежать во многих случаях ошибки нулевого указателя во времени выполнения. В Cobra null может быть передан если разрешен nullable тип: один суффикс знака вопроса (?). class Foo def bar(s as String?) if s # same as "if s is not nil" print Utils.countChars(s, c'x')
Влияние других языков на CobraLanguage Presentation at Lang .NET Symposium 2008 Cobra Programming Language — Chuck Esterbrook Cobra создавался под влиянием множества языков программирования: Python, Ruby — синтаксис C#, C++ — производительность работы Objective-C, Visual Basic — статические и динамические типы Eiffel, Spec# — метод контрактного программирования Spec#, iihtdioa, C# — слежка за null во время компиляции
IDE Visual Studio MonoDevelop
Пример Пример «Hello world»: class Hello def main print 'Hello, world!'
Пример генератора чисел Фибоначчи: class Fib def compute(count as int) as List<of int> is shared list = List<of int>() a, b = 0, 1 for i in count list.add(b) a, b = b, a + b return list
class Program def main i = 1 for n in Fib.compute(10) print '[i]. [n]' i += 1
Пример класса: class Person
var _name as String var _age as int
cue init(name as String, age as int) _name, _age = name, age
def toString as String is override return 'My name is [_name] and I am [_age] years old'
Примечания
Ссылки
Домашняя страница языка Cobra Сайт проекта Cobra News and thoughts about the Cobra programming language for .NET and Mono., Блог Чака Эстербрука В мир открытых кодов вползает Cobra, Дэррил Тафт, PC Week «Кобра», потомок «Питона», Открытые системы
Категория:Объектно-ориентированные языки программирования Категория:Языки программирования платформы .NET Категория:Свободные компиляторы и интерпретаторы