суббота, 2 июля 2011 г.

Wirbel - компилируемый Python. Немножко о языке и установке.

Немножко о языке
Ну, не совсем Python, точнее совсем не Python, но синтаксически идентичен, за исключением некоторых ограничений, которые накладывает собой компилируемость в бинарник, а также нескольких новых возможностей. Автором языка и компилятора является немецкий разрбаботчик по имени Матиас Кеттнер, что нетрудно догадаться по картинке.  Вот короткий список характеристик, а заодно и отличий от Python 2.х:
  • print - функция. Поэтому print("Hello, world!")
  • Бинарный код, не требующий рантайма и совместимый с C++
  • Списки типизированы, так что [1, 2, 3, "string"] создать не получится
  • Есть сигнатуры функций, а поэтому def x(a), и def x(a, b) - две разные функции
  • Кортежи изменяемы и могут включать разные типы данных, в отличие от списков: (1, true, "Hi")
  • Строка и символ - разные типы данных. Символ - один байт
  • true, false - зарезервированные слова (в нижнем регистре)
  • import отсутсвует, автор уверяет, что компилятор все сам найдет.
  • Вирбель позволяет писать библиотечки и подключать их из C/C++
  • Ну и, естественно, скорость, как же без этого

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

Вот как я его устанавливал на Ubuntu 11.10

Качаем со странички загрузки исходник. К слову, сам компилятор Вирбеля написан на С++ (вспоминаем, что СPython написан на С). Компиляция и сборка из исходников процесс не новый, а всем хорошо известный.
./configure
После этого он матюкается, что ему каких-то пакетов не хватает - доставляем.
./make
Тут он минуты две думал, плевался в консоль текстом и, в результате,
извините, мол, две ошибки... Ну что же, пишем автору (какой он нехороший человек, что его компилятор не компилируется на моей Ubuntu 11.10 Alpha 1) об ошибке. Но ждать надоело уже через минут пять, поэтому я полез таки в исходники и пофиксил две мелкие ошибки: в файлах Type.cc и Location.cc не хватало #include <cstdio>, а в baustones/httpd/HTTPRequest.h - строчки #include <stdint.h>, чтобы подключить определения целочисленных типов данных.
sudo make install

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

И наконец - первая программа

Не буду сильно оригинальничать - сделает обычный "Привет, мир!". Для этого создадим уютную папочку, зходим в нее, создаем текстовый файлик с расширением *.wfor (в моем случае wtest.wfor) и наполняем его единственной строчкой:
print("Hello, world!")
После сохранения файла выполняем компиляцию:
wic wtest.wfor -o wtest
Пара секунд размышлений и мы получаем исполняемый файл. Пока есть небольшой минус - такая мелкая программа занимает 93кБ, но, думаю, это некритично.

Надеюсь на to be continued...

10 комментариев:

  1. > import отсутсвует, автор уверяет, что компилятор все сам найдет.

    больше всего смущает, особенно если вспомить проблемы с крос импортами

    ОтветитьУдалить
  2. в списке есть насколько сомнительной пользы отступлений от стандарта языка, которые приветут к отсутствию обратной совместимости с интерпретатором, это очень большой минус

    ОтветитьУдалить
  3. >>> больше всего смущает, особенно если вспомить проблемы с крос импортами

    Не забываем, что от питона тут только синтаксис. Кто писал на C/C++, тот знаком с make и всем прочим, я еще не разбирался, как тут работает сборка, но думаю не сильно отличается.

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

    Wirbel не реализует стандарт языка, и даже не намеревается. Это попытка создать компилируемый язык, на котором было бы приятно писать =)

    ОтветитьУдалить
  4. Мне понравилась идея. Жду продолжения.
    Особенно интересует подключение С/С++ либ типа QT... :-)

    ОтветитьУдалить
  5. Ну, QT он как бы не совсем C++ lib, а еще много всякой гадости, да и версия языка еще с соской во рту =) Но я щас при наличии свободной минутки ковыряюсь и буду постить, если мне удастся сделать что-нибудь интересненькое, или не удастся (негативный результат - тоже результат)

    ОтветитьУдалить
  6. если он начал копировать спецификацию языка, то буть добр копируй досконально, иначе это китайский клон и паразитирование, не просто так сейчас питон такой какой он есть, и если немец думает что он умнее питон сообщества, мне смешно.

    те же импорты, их не просто так придумали и не только для включения одних файлов в другие, не забываем про from a import b as c

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

    ОтветитьУдалить
  7. alex, я не понимаю вашей позиции. Человек делает свой язык и ему нравится синтаксис Python. Он ничего не заявлял, что это компилируемый Python. Если вас сбило с толку название моей статьи - извините, могу переназвать. Но данный язык НЕ ИМЕЕТ никакого отношения к Python сообществу. Если вы не согласны с позицией автора насчет языка или хотите приобщится к разработке, - напишите автору, я думаю, он вас выслушает.

    ОтветитьУдалить
  8. :) моя позиция такова что человек копирует чужой язык произвольно его модифицируя, он не делает свой язык, он пользуется наработками python сообщества, как же он НЕ ИМЕЕТ если он сам пишет что это компилируемые python, и вы тоже так пишите в заголовке. так что все он имеет :)

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

    ОтветитьУдалить
  9. alex, все что автор сам пишет о связи c Python:

    "It has a syntax and semantics similar to Python - a very popular language invented by Guido van Rossum."

    К тому же CPython и сам Python имеют сверх лояльную лицензию, и человек может хоть взять CPython и продавать его, назвав MyMegaSuperPython :)

    О копировании вообще не следует говорить :) Посмотрите исходники CPython и Wirbel, ничего общего нет.

    С таким же успехом можно говорить, что 90% языков наследуют синтаксис С. Но нельзя же говорить, что авторы и сообщества чем-то обязаны Кернигану по этому поводу =)

    ОтветитьУдалить
  10. Блин, alex, это действительно другой язык. Очень непросто взять и начать писать компилятор питона, вот и приходится приводить его в более подходящий для этих целей вид.
    Пока что единственное, что меня ввело в ступор, это true/false, но, если вдуматься, в питоне это единственное исключение: начинающиеся с прописной буквы зарезервированные слова (мы же не пишем "For el In lst").

    ОтветитьУдалить

В этом гаджете обнаружена ошибка