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

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Cobra
Класс языка:

мультипарадигмальный:
объектно-ориентированный

Появился в:

2006

Автор(ы):

Чак Эстербрук

Расширение файлов:

.cobra

Релиз:

0.9.4 (24 мая 2013)

Система типов:

статическая, строгая, динамическая, с автовыведением типов

Основные реализации:

.NET Framework, Mono

Испытал влияние:

Python, Eiffel, C#, Objective-C, D

Лицензия

MIT

Сайт:

http://cobra-language.com/

Cobra — высокоуровневый объектно-ориентированным язык программирования общего назначения. Разработан Чаком Эстербруком (англ. Charles Esterbrook) для платформ .NET и Mono. Синтаксис языка основывается на синтаксисе Python, используются отступы для синтаксического выделения блоков кода. Язык поддерживает как статическую типизацию, так и динамическую, обеспечивает поддержку контрактного программирования и встроенное модульное тестирование. Имеет возможность использования лямбда-выражений, замыканий, списочных выражений и генераторов (англ. generators). 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)

Слежка за nil во время компиляции[править | править вики-текст]

Позволяет избежать во многих случаях ошибки нулевого указателя во времени выполнения. В Cobra nil может быть передан если разрешен nilable тип: один суффикс знака вопроса (?).

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# — слежка за nil во время компиляции

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. Cobra language slithering to open source, InfoWorld (Feb 7, 2008). Проверено 31 августа 2010.
  2. Language Presentation at Lang .NET Symposium 2008 Cobra Programming Language — Chuck Esterbrook

Ссылки[править | править вики-текст]

Логотип Викисловаря
В Викисловаре есть статья «cobra»