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

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