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 ()
Ответ на: комментарий от AVL2

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

А во время исполнения KTorrent'а либы Qt в памяти просто так висят, для красоты? О, я узрел истину, KDE - сиречь интерпретатор! =)

mono это не только ценный мех, тьфу, не только JiT, но еще и целый вертеп библиотек, аналогичный GAC в оффтопике. Плюс к этому JiT компилирует (не интерпритирует, мой друг, а именно компилирует) не всю программу целиком, а только используемые ее части on demand. Как только программа вызывает неиспользуемую ранее функцию, она запрашивает ее компиляцию у моно. Все-же последующие вызовы этой-же функции происходят без малейшего соучастия кого бы там ни было.

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

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

Это спасибо не байткоду а позднему связыванию (и наличию кучи метаданных для этого дела).

> В байткоде ты не имеешь права это делать.

Кто тебе такую чушь сказанул?

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

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

а зачем компилировать машинный код? Он уже скомпилирован... ;)

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

> Он обязан превращать его в машинный код.

Даже этого он не обязан делать. Он обязан производить код на другом языке. Любом. Даже не машинном. Хоть на Идише.

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

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

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

>А во время исполнения KTorrent'а либы Qt в памяти просто так висят, для красоты? О, я узрел истину, KDE - сиречь интерпретатор! =)

В процессах у тебя сишные либы висят?

Энгайны не в счет - это теже самые интерпретаторы.

>Плюс к этому JiT компилирует (не интерпритирует, мой друг, а именно компилирует) не всю программу целиком, а только используемые ее части on demand. Как только программа вызывает неиспользуемую ранее функцию, она запрашивает ее компиляцию у моно.

а то я не знал... ;)

>Все-же последующие вызовы этой-же функции происходят без малейшего соучастия кого бы там ни было.

прально, но это совершенно не отменяет необходимости рантайма.

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

> Компиляция как процесс к машинному представлению программы имеет отношение никакое.

Формально да, но практически -- нет.

Если целиком встать на формальный подход, то перевод исходника с КОИ8 на utf16 будет компиляцией.

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

> Если целиком встать на формальный подход, то перевод исходника с КОИ8 на utf16 будет компиляцией.

Не будет. Поскольку ни то, ни другое не является ЯЗЫКОМ.

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

Вердикт:

- Ты не знаешь, что такое язык

- Ты не знаешь, что такое компиляция

- Ты не знаешь, что не красиво иметь своё мнение на тему, в которой не разбираешься

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

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

Не устроит.

http://en.wikipedia.org/wiki/Alphabet_%28computer_science%29
http://en.wikipedia.org/wiki/Compilation_%28programming%29

Преобразования алфавита все еще нет.

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

Это потому что абстракции которыми оперирует байткод сильно выше
 регистров. Тебя не смущает что из байткода IL можно вытащить "AST" 
как ты его назвал на разных языках? И на жабе тоже из скомпилированной
 скалы можно вытащить жабский исходник - не пугает? Хотя это все равно
 тут до лампочки.

>В байткоде ты не имеешь права это делать.

Ты в этом уверен?

public class Test {
    public static final String x = "xxxx";
    public String getFinal() {
        return x;
    }
    public String getFinal2() {
        return x;
    }
}

Результат декмпиляции:

public class Test
{

    public Test()
    {
    }

    public String getFinal()
    {
        return "xxxx";
    }

    public String getFinal2()
    {
        return "xxxx";
    }

    public static final String x = "xxxx";
}


Что я вижу - инлайнинг?

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

Я и не отрицаю, что грань между компиляцией и интерпретацией тонка.

Более того, я считаю, что интерпретация может работать лучше, быстрее и надежнее компиляции. и не стремлюсь всем доказывать, что мой любимый питон - компилируемый язык, раз есть байт-код или py2exe или pypy...

есть только одна деталь. Для создания интерпретируемого языка, нужен компилируемый. Хоть самый плохонький, хоть в 1% исходников того самого vm-кода...

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

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

>В процессах у тебя сишные либы висят?

А разница? Или отныне компилируемыми признаются только проги на сях? Что это за панСизм (по аналогии с пангерманизмом)? "Это оголтелый расизм!!(С)Кин-Дза-Дза.

Мда, мне как старому паскалисту пора убиваццо апстену.

>а то я не знал... ;)

Ну, судя по всему, нет.

>прально, но это совершенно не отменяет необходимости рантайма.

Наличие рантайма == интерпретируемость? Ну-ну.

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

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

Вообще до маразма докатились. Следовательно ты не можешь сказать лежащий у тебя эльф скомпилирова или нет - а вдруг я завтра этот эльф запущу в эмуляторе?

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

А GCC у нас поэтому перестал быть компилятором. Да?

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

>Вердикт:

спасибо, анонимный брат. Ты открыл мне глаза... ;)

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

> Для создания интерпретируемого языка, нужен компилируемый

Не нужен. Форт можно бустрапнуть хоть в машинных кодах - задача подъёмная даже для одного человека. Имея Форт можно сделать любой интерпретатор или компилятор с минимумом усилий.

>а вот на любой компилируемый язык самодостаточен

Нет. Для него нужен компилятор. В общем, хорош уже путаться в терминах.

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

>Компилятор не обязан превращать исходник в нативный код. Он обязан превращать его в машинный код.

Не обязательно. Преобразование валы в С тоже компиляция.

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

>Вообще до маразма докатились. Следовательно ты не можешь сказать лежащий у тебя эльф скомпилирова или нет - а вдруг я завтра этот эльф запущу в эмуляторе?

Да все в этом мире условно. Копья ломают не из за этого...

>А GCC у нас поэтому перестал быть компилятором. Да?

Компилятором он быть не перестал. Просто смысл этой компиляции стал таким же, как компиляция в pyc в питоне...

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

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

>Не устроит. Преобразования алфавита все еще нет.

Ты серьезно что ли считаешь koi-8 и utf16 одним и тем же алфавитом? (с формальной точки зрения, на которой ты все время стоишь).

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

>есть только одна деталь. Для создания интерпретируемого языка, нужен компилируемый. Хоть самый плохонький, хоть в 1% исходников того самого vm-кода...

Я простенький интерпретатор (калькулятор) писал в машкодах. Без всякого компилятора. На лабах. В 10-м классе. Кстати, неся ахинею подобную вашей, я бы не перешел в 11-тый.

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

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

Представте себе, для создания компилируемых языков, вот где незадача, ТОЖЕ нужны компилируемые. =) У нас на дворе, слава Кришне, не 1967-й год, сборкой бейсика из исходных кодов на ассемблере никто заниматься не станет. =)

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

>Формально да, но практически -- нет.

Не формально не практически.

>Если целиком встать на формальный подход, то перевод исходника с КОИ8 на utf16 будет компиляцией.

Ты уже прочитал что такое алфавит в computer science?

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

При чем тут термины?

Процесс компиляции в том или ином виде присутствует во всех языках. Регэкспы компилируются, исходники компилируются в байт-код и т.д. и т.п.

Формально, тогда нет интерпретируемых языков, потому что все равно хоть какое, а преобразование алфавитов либо до старта программы или во время ее исполнения будет!

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

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

>Компилятором он быть не перестал.

Ты так запутался что теперь не можешь решить gcc это компилятор или нет. Завязывай - читай приведенные ссылки.

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

>>Если целиком встать на формальный подход, то перевод исходника с КОИ8 на utf16 будет компиляцией.

>Ты уже прочитал что такое алфавит в computer science?

Да дорогой, и даже понял, что инвариантом алфавита является мощность множества его символов, которая у кои-8 есть 256, а у утф-16 около 32000.

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

>Представте себе, для создания компилируемых языков, вот где незадача, ТОЖЕ нужны компилируемые. =)

Не станет и не сможет - есть разница?

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

А вот собарть шарп на шарпе - хренушки.

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

>Ты серьезно что ли считаешь koi-8 и utf16 одним и тем же алфавитом?

Это кодировки. Символьный набор koi-8 является подмножеством символьного набора utf16. С точки зрения CS koi-8 является подмножестом алфавита UTF16 - преобразования _нет_.

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

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

Ты думаешь, кому-то интересно, что там говорят и полагают твои друзья, с которыми ты сэмки лопаешь на лавочке у подъезда?

В Computer Science когда говорят о компилируемых языках, имеют в виду нечто совсем иное, ничего общего с твоими взглядами не имеющее.

> и точка!

Уровень аргументации вызывает восхищение.

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

>Процесс компиляции в том или ином виде присутствует во всех языках.

Нет - не присутствует. Промежуточное представление в интерпретируемых языках это _оптимизация_. Они прекрасно работают без нее. Только медленее.

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

> А вот собарть шарп на шарпе - хренушки.

Собрать Си на Си тоже хренушки, если нет уже готового компилятора Си. Если же есть компилятор или даже интерпретатор C#, то можно целиком на C# написать компилятор C# и JIT с GC и всю System.*.

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

>А вот собарть шарп на шарпе - хренушки.

Он на нем и собирается.

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

Вышла версия 2 компилятора питона!

perl -pi -e "s/;\n/\n/g" *.py

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

Тупой тут только один человек. Можешь поглядеть на него в зеркале.

То что ты тут выдал - не компилятор. Язык не меняется. Семантика языка не меняется.

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

>А вот собарть шарп на шарпе - хренушки.

Чо? Почему на VM-C# нельзя написать кодогенерацию C# в нативный код? И почему на native-C# нельзя написать VM-C#?

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

>При чем тут термины?

Ну что термины для тебя не имеют ни малейшего значения, мы уже поняли. =)

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

Не, я так себе нервный тик заработаю. =( Тебе в пятый раз напомнить, что ЛЮБАЯ программа на дотнете запускается непосредственно на целевом устройстве? Т.е. ПОЛНОСТЬЮ соответствует ТВОЕМУ-ЖЕ определению "компилируемости"? ЖиТ и моно здесь выступает не более как подпорка, причем необязательная. Линуксовые проги тоже в подавляющем своем большинстве нуждаются в подпорках типа GTK или Qt, компилируемыми от этого они быть не перестают.

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

Не обязательно. Я не уверен, что вообще возможно непосредственно интерпретировать AST того же Питона.

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

>вот тебе компилятор питона. питон теперь компилируемый язык...

Только в том случае когда ты покажешь смену исходного языка на целевой. Что? Не покажешь? Прога все еще на исходном языке? Значит то что ты сделал - не компиляция в смысле CS.

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

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

Mono тут нужен для кэширования метаданных, без которых рефлекшн не работает. Теоретически можно было и их в бинарник засунуть, но Мигелюшко поленился.

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

>Не обязательно.

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

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

>можно целиком на C# написать компилятор C#

можно. И даже если написать его на С, c# сразу станет компилируемым языком. ;)

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

>можно. И даже если написать его на С, c# сразу станет компилируемым языком. ;)

Во маразм. Комилируемость языка уже зависит от того на каком языке написан его транслятор. Где ты такого бреда набрался?

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

>>Ты серьезно что ли считаешь koi-8 и utf16 одним и тем же алфавитом?

>Это кодировки. Символьный набор koi-8 является подмножеством символьного набора utf16. С точки зрения CS koi-8 является подмножестом алфавита UTF16 - преобразования _нет_.

Ага!!! Теперь уже речь пошла о преобразовании, а не алфавите.

Щас докажем что преобразование есть.

Значит есть язык питон1, у которого идентификаторы могут содержать только латиские и русские буквы-цифры в кои8, и язык питон2, у которого идентификаторы могут содержать буквы-цифры любого языка в утф16 (еще и арабского, и санскрита), но на котором пустые строки запрещены.

Вот моя программа будет компилировать питон1 в питон2, меняя кодировку и удаляя пустые строки.

И как? Тоже будет компилятор? Или что еще придумаем?

www_linux_org_ru ★★★★★
()

А? Че? Я не понял? iconv уже официально имеет статус компилятора?

Вашу мать, до чего только холивары на лоре не доводят! Так и умом тронуться можно! =)))))))))

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

Ты лечиться пробовал? Такая каша в голове может быть опасным симптомчиком.

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

>Теперь уже речь пошла о преобразовании, а не алфавите.

Комиляция - это процесс _преобразования_ программы на одном алфавите в программу на другом алфавите.

>И как? Тоже будет компилятор? Или что еще придумаем?

НЕТ! Программа осталась в том же самом алфавите. Арабских символов у тебя там _не появится_. То есть программа сохранила свой алфавит до последнего символа.

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

>>И как? Тоже будет компилятор? Или что еще придумаем?

>НЕТ! Программа осталась в том же самом алфавите. Арабских символов у тебя там _не появится_. То есть программа сохранила свой алфавит до последнего символа.

Хорошо... еще все ньюлайны питона1 заменю пробелами

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

>Хорошо... еще все ньюлайны питона1 заменю пробелами

Пробел является символом исходного алфавита - он присутствует в исходном коде. Преобразования _нет_. Алфавит питона1 === Алфавиту питон2 как не извращайся.

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