LINUX.ORG.RU

Вышел язык програмирования Cobra 0.7.4

 cobra, ,


0

0

Описание языка:

  • OOP: классы, интерфейсы, структуры, методы, свойства, индексаторы, генерики, аттрибуты
  • Контроль качества: контракты, ассерты, unit-тесты на уровне языка, документирующие строки, слежка за nil во время компиляции
  • Выразительность: статическое и динамическое связывание, списки и словари, оператор in, оператор for, slicing, параметризованные строки, вывод типов
  • Продуктивность: поддержка исключений, стектрейсы, сборка мусора
  • Поддержка скриптования
  • Компилируемый язык

Целевая платформа .NET/Mono. Лицензия - MIT. Вдохновлен python, ruby, eiffel и Objective-С.

>>> Cobra Language

★★★★★

Проверено: Shaman007 ()
Ответ на: комментарий от itanko

> GOTO нет? Следующий. :)

Ну может прикручивается снаружи. Как в питоне - прикрутили же. В языках с подобной гибкостью goto не обязательно существовать в изначальном синтаксисе, чтобы работать.

anonymous
()

Вишь ты, какая приблудина.. Надо бы и поближе рассмотреть.. ;-)

MiracleMan ★★★★★
()
Ответ на: комментарий от sv75

а питон, компилируемый язык под платформу питон? А перл, динамически компилируемый язык под платформу перл?

AVL2 ★★★★★
()
Ответ на: комментарий от anonymous

> Какие люди, уточни?

Давайлучше начнем со списка хотящих. Не "хотящих жабу потому что за нее много платят" или "хотящих жабу потому что на ней подпечные кодят простой и тупой код", а просто "хотящих жабу, потому что им нравится язык жаба". Есть кандидаты?

sv75 ★★★★★
()
Ответ на: комментарий от AVL2

> а питон, компилируемый язык под платформу питон? А перл, динамически компилируемый язык под платформу перл?

У меня есть смутное ощущение, что то ли вы не слышали слова JIT, то ли не воспринимаете процесс C#-(csc)->CIL-(jit)->native code как компиляцию. В каком месте я угадал?

sv75 ★★★★★
()
Ответ на: комментарий от AVL2

> Это как? или цшарп тоже теперь компилируемый язык, под целевую платформу .NET/Mono?

Фи. Четыре звезды, а что такое компиляция не знает. Позор!

anonymous
()
Ответ на: комментарий от anonymous

>Фи. Четыре звезды, а что такое компиляция не знает. Позор!

Я встречал нескольких неадекватов, которые абсолютно честно, активно и довольно слюнеобильно утверждали, что если нечто не генерирует нативный код или содержит некую динамику, то это - интерпретатор, а не компилятор.

anonymous
()
Ответ на: комментарий от smartly

>почему-то анонимные эксперты не вспомнили язык boo

вспомнили, но побоялись озвучить. тут и без boo флейма много будет :-)

anonymous
()
Ответ на: комментарий от itanko

Оператор гоуту не испортит красоту?

h8 ★★★
()
Ответ на: комментарий от sv75

>В каком месте я угадал?

В последнем.

Jit нельзя назвать компиляцией. Иначе любой интерпретатор и, тем более, питон с его байт-кодом можно будет назвать этаким неоптимизированным jit...

AVL2 ★★★★★
()
Ответ на: комментарий от anonymous

Я знаю куда большее число скорбных, которые почему то полагая, что компиляция лучше, чем интерпретация, готовы любую обработку исходника ( даже если это удаление пустых строк) своего любимого языка назвать компиляцией...

AVL2 ★★★★★
()
Ответ на: комментарий от anonymous

С++ тоже очень долго существовал в виде препроцессора в С.

что дальше? к С# появился препроцессор в любой компилируемый язык?

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

>Jit нельзя назвать компиляцией.

Компиляцией можно назвать процесс трансформирующий исходные коды в байткод (в данном случае IL assembler). Или по вашему всем процессе существет принципиальная разница между компиляцией в целевой ассемблер процессора или целевой ассемблер виртуальной стековой машины?

r ★★★★★
() автор топика
Ответ на: комментарий от AVL2

>Jit нельзя назвать компиляцией.

Почему?

>Иначе любой интерпретатор и, тем более, питон с его байт-кодом можно будет назвать этаким неоптимизированным jit...

Во время исполнения программы на сишарпе выполняется нативный код самой программы. Во время исполнения программы на питоне выполняется нативный код интерпретатора. Разница не очевидна?

YogSagot ★★☆
()
Ответ на: комментарий от AVL2

>С++ тоже очень долго существовал в виде препроцессора в С

И что? Да. Это и был препроцессор в C. Пока не создали полноценный C++ компилятор.

anonymous
()
Ответ на: комментарий от r

>>Jit нельзя назвать компиляцией.

>Компиляцией можно назвать процесс трансформирующий исходные коды в байткод (в данном случае IL assembler). Или по вашему всем процессе существет принципиальная разница между компиляцией в целевой ассемблер процессора или целевой ассемблер виртуальной стековой машины?

*Принципиальной* разницы между тем что делает gcc и удалением пустых строк тоже нет, поэтому ваш вопрос некорректен.

То что происходит при трансформации в байткод -- это неполноценная компиляция, она идет строго по правилам, и я бы ее компиляцией не называл.

А вот JIT это действительно компилятор.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от anonymous

>И что? Да. Это и был препроцессор в C. Пока не создали полноценный C++ компилятор.

Да ничего. Просто С++ с самого начала был компилируемым языком.

Можно компилить и не имея компилятора...

AVL2 ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

> А вот JIT это действительно компилятор.

Поскольку основное в компиляторе -- это оптимизация, для нее lex & bison не написаны и не будут наверно :-)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от r

Ну если провести границу вокруг виртуальной машины, то да, питон, C#, ява и игры к scumvm - компилируемые языки программирования, к которым просто еще не сделали железо, вот они и работают в эмуляторах...

То есть, компилируемые языки к несуществующему железу (и то вопрос в случае явы).

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

> Jit нельзя назвать компиляцией.

LMD!

Что делает JIT в .NET/Mono (самый минимум, там реально побольше всякого):

1) Восстанавливает из стекового представления трёхадресный код

2) Dead code elimination

3) Делает register scheduling/variable spilling

4) Peephole optimisations

Если это не компиляция, то я и не знаю тогда, что есть компиляция.

anonymous
()
Ответ на: комментарий от AVL2

А я знаю странных недоучек, которые ни хрена не зная про computer science, имеют наглость иметь мнение.

anonymous
()
Ответ на: комментарий от www_linux_org_ru

> То что происходит при трансформации в байткод -- это неполноценная компиляция

Что же тут неполноценного? Ты хотя бы примерно представляешь себе, как это работает?

> и я бы ее компиляцией не называл

Как хорошо, что как раз тебя то никто и не спрашивает

anonymous
()
Ответ на: комментарий от AVL2

Повторяю ЕЩЕ раз! Во время исполнения программы на шарпе, нативный код НЕ ЭМУЛИРУЕТСЯ! JIT выполняет совершенно то-же самое, что и ваш .configure/make/make install, то есть компилирует в нативный код конкретного процессора на конкретной системе. Просто делает это не "один раз и забыл" как gcc, а КАЖДЫЙ раз во время исполнения программы.

Я фигею просто с твердолобости некоторых участников.

YogSagot ★★☆
()
Ответ на: комментарий от www_linux_org_ru

компилятор может быть и не оптимизированным да и программы могут получаться ой какими тормозными.

главное, что программа, будучи скомпилировной, не требует дополнительной обвязки и может быть запущена прямо на процессоре. Таким образом, на любом компилируемом языке можно в итоге написать 100% всего кода, который выполняется на данном компьютере, всю прошивку.

а вот для всего остального, интерпретирующего, байт-компилируещего, фигушки. Хоть что-то, а напишите на С/ассемблере/паскале/бейсике etc...

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

То есть компиляцию в два прохода (JIT в .NET не является полноценным JIT, интерпретации байткодов там нет вообще) ты компиляцией не считаешь? Тогда и GCC неполноценный, там есть промежуточное структурное абстрактное представление, по сути мало отличающееся от IL.

anonymous
()
Ответ на: комментарий от AVL2

> главное, что программа, будучи скомпилировной, не требует дополнительной обвязки и может быть запущена прямо на процессоре

Это твоё личное определение и твои глюки. Никто кроме тебя подобных взглядов не разделяет.

anonymous
()
Ответ на: комментарий от YogSagot

> Просто делает это не "один раз и забыл" как gcc, а КАЖДЫЙ раз во время исполнения программы.

mono --aot или ngen - и будет "один раз и забыл".

anonymous
()
Ответ на: комментарий от AVL2

>Да ничего. Просто С++ с самого начала был компилируемым языком.

И что? Java, например, тоже может быть компилируемым в нативный код. N-ое кол-во компиляторов тому в пример. И от этого он "более компилятором" по сравнению с JIT не станет. Так как и так - компилируемый. А Си может быть компилируем в байт-код. И такие системы есть. Но от этого он не станет более интерпретируемым.

anonymous
()
Ответ на: комментарий от YogSagot

>Просто делает это не "один раз и забыл" как gcc, а КАЖДЫЙ раз во время исполнения программы.

gcc сам себя собирает в три прохода. Попробуй, собери jit средствами jit...

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

>главное, что программа, будучи скомпилировной, не требует дополнительной обвязки и может быть запущена прямо на процессоре.

В случае дотнэта именно это и происходит. Сурпрайз?

YogSagot ★★☆
()
Ответ на: комментарий от www_linux_org_ru

>Принципиальной* разницы между тем что делает gcc и удалением пустых строк тоже нет, поэтому ваш вопрос некорректен.

Есть. Компиляция (трансляция) это процесспреобразования программы на алфавите А в программу на алфавите Б. Удаление пустых строк алфавита не меняет.

>То что происходит при трансформации в байткод -- это неполноценная компиляция, она идет строго по правилам.

А компиляция в объектный код идет чиста бес правил как бои?

r ★★★★★
() автор топика
Ответ на: комментарий от AVL2

> Попробуй, собери jit средствами jit...

L.M.D.!

Не стыдно позориться? Если jit запишет свой результат работы (как с mono --aot), то ничто не мешает запустить скомпилированный код для компиляции новой версии jit-компилятора. Ровно тот же вид бутстрапа что и у gcc.

anonymous
()
Ответ на: комментарий от anonymous

>Никто кроме тебя подобных взглядов не разделяет.

Я ж говорю. Таких неучей - полно. Уверен, с утра еще больше "JIT - интерпретатор" набежит.

anonymous
()
Ответ на: комментарий от AVL2

>к которым просто еще не сделали железо, вот они и работают в эмуляторах...

Железо тут индифиррентно. Запуск нативной программы в эмуляторе делает эту нативную программу нескомпилированной или что?

r ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>Java, например, тоже может быть компилируемым в нативный код.

И там оно будет компилируемым. Но это все 0.00000001% от общего использования явы

>А Си может быть компилируем в байт-код. И такие системы есть. Но от этого он не станет более интерпретируемым.

В такой системе, С будет интерпретируемым. в 0.00000001% от общего использования С.

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

>Ну если провести границу вокруг виртуальной машины, то да, питон, C#, ява и игры к scumvm - компилируемые языки программирования, к которым просто еще не сделали железо, вот они и работают в эмуляторах...

>То есть, компилируемые языки к несуществующему железу (и то вопрос в случае явы).

Давай я напишу программу, которая из питона пустые строки удаляет, и скажу, что это тоже компилятор питона на несуществующее железо...

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от AVL2

>главное, что программа, будучи скомпилировной, не требует дополнительной обвязки и может быть запущена прямо на процессоре.

Никому об этом больше не говори.

r ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>mono --aot или ngen - и будет "один раз и забыл".

Я в курсе. Равно как и о том, что и под венду компиляторы IL прямо в нативный код существовали чуть-ли не с самого начала. Просто ими нечасто пользуются.

YogSagot ★★☆
()
Ответ на: комментарий от YogSagot

>В случае дотнэта именно это и происходит. Сурпрайз?

а процесс моно просто так висит? для красоты?

AVL2 ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>Давай я напишу программу, которая из питона пустые строки удаляет, и скажу, что это тоже компилятор питона на несуществующее железо...

А зачем? В предельном случае воообще ничего писать не надо. Просто объявить, что в будущем будет создан аппарат, выполняющий программу на питоне, как уже есть ява-процессоры. А пока пользуйтесь эмулятором - cpython... И в этой постановке питон будет не просто компилируемым языком - он будет маш. кодом... ;)

AVL2 ★★★★★
()
Ответ на: комментарий от r

>Никому об этом больше не говори.

Ну вот перепиши в сингулярити всего 4% оставшегося кода хошь на С#, хошь на A#, хошь на питоне и я съем шляпу... ;)

AVL2 ★★★★★
()
Ответ на: комментарий от r

>> Принципиальной* разницы между тем что делает gcc и удалением пустых строк тоже нет, поэтому ваш вопрос некорректен.

> Есть. Компиляция (трансляция) это процесспреобразования программы на алфавите А в программу на алфавите Б. Удаление пустых строк алфавита не меняет.

Ну хорошо, давай я прогу буду из koi-8 переводить utf16. Устроит?

>> То что происходит при трансформации в байткод -- это неполноценная компиляция, она идет строго по правилам.

>А компиляция в объектный код идет чиста бес правил как бои?

При желании ты бы понял о чем я. Процесс оптимизации идет без правил, ограничения налагаются только на результат оптимизации.

А вот из ява-байткода можно вполне вытащить AST.

Пример оптимизации: прога вычисляет a*(a+1) по модулю 2

1. Компилятор вполне может заменить это выражение на 0 2. В байткоде ты не имеешь права это делать.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от AVL2

>Просто объявить, что в будущем будет создан аппарат, выполняющий программу на питоне, как уже есть ява-процессоры.

Это не сделает его компилируемым. Хоть прямо в мозг подключай. Потому что отсутсвует преобразование алфавитов.

r ★★★★★
() автор топика
Ответ на: комментарий от r

>Железо тут индифиррентно. Запуск нативной программы в эмуляторе делает эту нативную программу нескомпилированной или что?

Для той платформы, на которой выполняется эмулятор - да.

Что толку, что ты собрал С-программу для альфы, если ты запускаешь ее исключительно на x-86 в эмуляторе? Если это конечное состояние, то ты получил обычный байт-код, который играет в виртуальной машине "альфа".

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

>В такой системе, С будет интерпретируемым. в 0.00000001% от общего использования С.

Вы - безграмотны. Компилятор не обязан превращать исходник в нативный код. Он обязан превращать его в машинный код. Но не обязательно нативный. Интерпретатор выполняет исходник без промежуточной кодогенерации. То, что python делает pyc, еще ни о чем не говорит. pyc - это просто короткое представление исходника. Для того, что бы снизить нагрузку на интерпретатор. В большинстве случаев, python исполняет программу налету, без всякого pyc.

anonymous
()
Ответ на: комментарий от AVL2

>Ну вот перепиши в сингулярити всего 4% оставшегося кода хошь на С#, хошь на A#, хошь на питоне и я съем шляпу... ;)

Можешь есть ее сейчас. Компиляция как процесс к машинному представлению программы имеет отношение никакое. Просто типичный распространенный компилятор - это ЯВУ -> assembler. Из этого не проистекает что компилятор только это.

r ★★★★★
() автор топика
Ответ на: комментарий от YogSagot

Вообще-то почти всегда при инсталляции MSI гоняется ngen для всех бинарников.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.