Cobra — высокоуровневыйобъектно-ориентированным язык программирования общего назначения. Разработан Чаком Эстербруком[англ.] для платформ .NET и Mono. Синтаксис языка основывается на синтаксисе Python, используются отступы для синтаксического выделения блоков кода. Язык поддерживает как статическую типизацию, так и динамическую, обеспечивает поддержку контрактного программирования и встроенное модульное тестирование. Имеет возможность использования лямбда-выражений, замыканий, списочных выражений и генераторов. Cobra обеспечивает быструю разработку и высокую производительность[1].
Реализация языка Cobra имеет открытый исходный код, выпущена под лицензией MIT 29 февраля 2008 года, позволяющей беспрепятственное использование и модификацию кода.
Синтаксис и семантика
Строки документации
Cobra предлагает механизм документирования кода DocString.
class Utilsshareddef countChars(sasString,caschar)asint """ Возвращает количество символов c в строке s. """count=0forchinsifch==ccount+=1returncountМодульное тестирование
Позволяет проверить на корректность отдельные класс, свойство или метод исходного кода программы.
class Utilsshareddef countChars(sasString,caschar)asint """ Возвращает количество символов c в строке s """testassertUtils.countChars('',c'x')==0assertUtils.countChars('x',c'x')==1assertUtils.countChars('X',c'x')==0assertUtils.countChars(' ! ! ',c'!')==2bodycount=0forchinsifch==ccount+=1returncountКонтрактное программирование
Обеспечивает корректные входные данные вызываемому компоненту, помогая поймать ошибки раньше, когда они легче диагностируются.
class Customervar_contactsasList<ofContact>getcontactsfrom vardef addContact(contactasContact)requirecontactnotin.contactscontact.namecontact.customerisnilensurecontact.customer==this.contacts.count==old.contacts.count+1bodycontact.customer=this_contacts.add(contact)Слежка за null во время компиляции
Позволяет избежать во многих случаях ошибки нулевого указателя во времени выполнения. В Cobra null может быть передан если разрешен nullable тип: один суффикс знака вопроса (?).
class Foodef bar(sasString?)ifs# same as "if s is not nil"printUtils.countChars(s,c'x')Влияние других языков на Cobra[2]
Cobra создавался под влиянием множества языков программирования:
Пример
Пример «Hello world»:
class Hellodef mainprint'Hello, world!'Пример генератора чисел Фибоначчи:
class Fibdef compute(countasint)asList<ofint>issharedlist=List<ofint>()a,b=0,1foriincountlist.add(b)a,b=b,a+breturnlistclass Programdef maini=1forninFib.compute(10)print'[i]. [n]'i+=1Пример класса:
class Personvar_nameasStringvar_ageasintcueinit(nameasString,ageasint)_name,_age=name,agedef toStringasStringisoverridereturn'My name is [_name] and I am [_age] years old'Примечания
- ↑Krill, Paul (7 февраля 2008). Cobra language slithering to open source. InfoWorld. Архивировано 8 июня 2011. Дата обращения: 31 августа 2010.
- ↑Language Presentation at Lang .NET Symposium 2008 (недоступная ссылка) Cobra Programming Language — Chuck Esterbrook
Ссылки
- Домашняя страница языка CobraАрхивная копия от 11 декабря 2019 на Wayback Machine (англ.)
- Сайт проекта Cobra (англ.)
- News and thoughts about the Cobra programming language for .NET and Mono., Блог Чака Эстербрука (англ.)
- В мир открытых кодов вползает Cobra, Дэррил Тафт, PC Week
- «Кобра», потомок «Питона», Открытые системы