Cobra (язык программирования)

Из Википедии, бесплатной энциклопедии

Cobra
Класс языка мультипарадигмальный:
объектно-ориентированный
Появился в 2006
Автор Чак Эстербрук
Расширение файлов .cobra
Выпуск 0.9.6 (23 декабря 2013)
Система типов статическая, строгая, динамическая, с автовыведением типов
Основные реализации .NET Framework, Mono
Испытал влияние Python, Eiffel, C#, Objective-C, D
Лицензия MIT
Сайт cobra-language.com

Cobra — высокоуровневый объектно-ориентированным язык программирования общего назначения. Разработан Чаком Эстербруком  (англ.) для платформ .NET и Mono. Синтаксис языка основывается на синтаксисе Python, используются отступы для синтаксического выделения блоков кода. Язык поддерживает как статическую типизацию, так и динамическую, обеспечивает поддержку контрактного программирования и встроенное модульное тестирование. Имеет возможность использования лямбда-выражений, замыканий, списочных выражений и генераторов. Cobra обеспечивает быструю разработку и высокую производительность[1].

Реализация языка 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') 

Влияние других языков на Cobra[2][править | править код]

Cobra создавался под влиянием множества языков программирования:

  • Python, Ruby — синтаксис
  • C#, C++ — производительность работы
  • Objective-C, Visual Basic — статические и динамические типы
  • Eiffel, Spec# — метод контрактного программирования
  • Spec#, iihtdioa, C# — слежка за null во время компиляции

IDE[править | править код]

Пример[править | править код]

Пример «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' 

Примечания[править | править код]

  1. Krill, Paul (2008-02-07). "Cobra language slithering to open source". InfoWorld. Архивировано 8 июня 2011. Дата обращения: 31 августа 2010.
  2. Language Presentation at Lang .NET Symposium 2008 (недоступная ссылка) Cobra Programming Language — Chuck Esterbrook

Ссылки[править | править код]