Перейти до основного вмісту

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 відсутній, автор запевняє, що компілятор все сам знайде.
  • Wirbel дозволяє писати бібліотеки і підключати їх з C/C++
  • Ну і, звісно, швидкість, як же без цього

Ну, це все можна дізнатись на сайті цього дива. Набагато цікавіше самому встановити і спробувати.

Ось як я його встановлював на Ubuntu 11.10

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

робить все необхідне, щоб я нарешті отримав можливість користуватись компілятором.

І нарешті - перша програма

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

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

Коментарі

  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").

    ВідповістиВидалити

Дописати коментар

Популярні дописи з цього блогу

Регулярні вирази в Python: вивчення та оптимізація

Writing a regular expression is more than a skill -- it's an art. Jeffrey Friedl Що це таке? Рано чи піздно майже кожному програмісту в своєму житті доводиться стикатись з регулярними виразами. Термін "Регулярні вирази" є перекладом з англійської словосполучення "Regular expressions" і не є зовсім точним, а для тих, хто перший раз почув цей термін, мабуть, навіть спантеличуючим (я, наприклад, коли вперше почув, ніяк не міг собі второпати по назві, хоча б приблизно, що це, і для чого використовується). Літературний і більш осмислений переклад звучав би, мабуть, як "шаблонні вирази". Але назва вже прижилась, а скажете "шаблонні вирази" - вас просто не зрозуміють :). Звідси: Регулярний вираз -  це рядок, що задає шаблон пошуку під-рядків в рядку. Регулярні вирази використовуються для аналізу текстів на предмет відповідності текстової інформації деякому шаблону. Наприклад , шаблон, що задає слово, яке містить букву "к". Де застосовують

Python: як програмно перемкнути розкладку клавіатури в Windows

Дослідивши дане питання, я побачив, що Python не має засобів "з коробки" для вирішення цієї задачі. Відвоідно, задача повинна вирішуватись для каждої ОС своїм шляхом. Дане рішення було знайдено мною для ОС Windows XP +. Панацея - Win API Для того, щоб виконати завдання необхідно встановити додатково бібліотеку pywin32 , яка надає доступ до функцій Windows API з Python. З цієї бібліотеки нам знадобиться модуль win32api . >>> import win32api Дослідивши його вміст, можна побачити, що для роботы з розкладкою клавіатури є декілька функцій і одне системне повідомлення Windows - WM_INPUTLANGCHANGE : GetKeyboardLayout GetKeyboardLayoutList LoadKeyboardLayout В даному випадку для нас важлива саме остання функція - LoadKeyboardLayout . Дана функція завантажує нову розкладку (якщо вона ще не завантажена) і виконує після цього ще якісь дії; приймає в якості аргументів два: рядок з ідентифікатором розкладки. дію. Більш детально про їхні можливі значення можна почитати в MSDN . О

Переходимо на Python 3. Де ж ти, reduce?

Це мій другий пост про освоєння Python 3. Почався він з того, що захотілось мені використати всім відому вбудовану функцію reduce, а я замість робочого коду отримав NameError . Виявляється в Python 3 вона вже не вбудована, а знаходится в модулі functools , в який, починаючи з версії Python 2.5, засунули декілька корисних речей для роботи з об'єктами-функціями. Тобто тепер функцію reduce потрібно імпортувати. from functools import reduce Варто зазначити, що специфікація функції не змінилась, працює вона точно так, як і в другому пітоні. Постало питання: "Навіщо?". (Більш детально про reduce читаємо в документації ). З чого все почалось? А почалось все з Гвідо ван Россума, який сказав наступне, коли тільки Python 3k починали розробляти. Ось довільний переклад: Близько 12 років тому в Python з'явились lambda, reduce(), filter() і map(); з'явились вони через (здається) Lisp-хакера, якому не вистачало їх в Python, і який надав працюючі патчі. Але, незважаючи ні на щ