Cobra (язык программирования) | это... Что такое Cobra (язык программирования)? (original) (raw)

У этого термина существуют и другие значения, см. Cobra (значения).

Cobra

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

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

Cлежка за 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 создавался под влиянием множества языков программирования:

IDE

Пример

Пример «Hello world»:

class Hello def main print 'Hello, world!'

Пример генератора чисел Фибоначчи:

class Fib def compute(count as int) as List is shared list = List() 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

Ссылки

Просмотр этого шаблона Основные языки программирования (сравнениеIDEисторияхронология)
Используемыев разработке АдаAPLЯзык ассемблераActionScriptABAP/4AutoItAWKБейсикСиКоболC++C#ClarionClojureColdFusionCommon LispDdBaseDelphiEiffelErlangEuphoriaF#ФортФортранGambasGoGroovy • HAL/S • HaskellIconJavaJavaScriptLimboLuaМодула-3Object PascalObjective-COCamlOzParserПаскальКомпонентный ПаскальPerlPHPPowerBASICPythonПЛ/1ПрологRubyScalaSchemeSmalltalkSQLPL/SQLTclValaVisual Basic (.NET)
Академические AgdaCleanCurryЛогоMLРЕФАЛСимулаОберон
IEC 61131-3 Instruction ListSTFBDLadder Diagram (LD) • SFC
Прочие АлголАлгол 68Модула-2МирандаHope
Эзотерические HQ9+/HQ9++ • INTERCALBrainfuck • Brainfork • BefungeMalbolgePietSpoonUnlambdaWhitespaceFALSELOLCODE
Визуальные G (LabVIEW) • Microsoft VPLSikuliVisSimАлисаДРАКОНСкретч
Просмотр этого шаблона .NET Framework
Архитектура Base Class LibraryCommon Language Infrastructure.NET assemblyметаданныеCOM Interop
Инфраструктура Common Language RuntimeCommon Type SystemCommon Intermediate Language • Virtual Execution System • Dynamic Language Runtime
Языки Microsoft C#Visual Basic .NETC++/CLI (Managed) • Visual J#JScript .NETWindows PowerShellIronPythonIronRubyF#Spec#Sing#
Другие языки A#Boo • IronLisp • L# • NemerleP#PascalABC.NETPHPScalaCobra • Delphi Prism
Windows Foundations PresentationCommunicationWorkflow
Компоненты ADO.NET (Entity Framework · Data Services) · ASP.NET (AJAX · MVC · Dynamic Data) · .NET Remoting · Language Integrated Query · Windows CardSpace · Windows Forms · XAML · ClickOnce · Dynamic Language Runtime · Parallel FX Library (PLINQ · TPL)
Реализации DotGNUMono.NET Compact Framework (Xbox 360) • .NET Micro FrameworkPortable.NETXNA FrameworkSilverlight • Shared Source Common Language Infrastructure
Сравнения C# и Java • C# и Visual Basic .NET
Будущие технологии Acropolis • Jasper