LINUX.ORG.RU

Релиз Vala 0.9.1

 , , ,


0

0

Вышла новая версия Vala - компилятора, развиваемого в рамках проекта GNOME. В новой версии:

  • Поддержка констант в enum
  • Синтаксис +=/-= для подключения/отключение сигналов объявлен устаревшим
  • Добавлена эксперементальная поддержка профиля Dova (лекговесная замена glib)
  • Обновлён парсер Genie
  • Добавлены новые биндинги: clutter-gst-1.0, gdu, gdu-gtk, libesmtp, mx-1.0, orc-0.4, rest-extras-0.6
  • Множество исправленных ошибок

Vala это инструмент, задача которого предоставить возможности современных языков программирования для разработчиков GNOME без наложения дополнительных требований к среде выполнения и без использования различных ABI по отношению к приложениям и библиотекам, написанным на C. Язык ориентирован в первую очередь на использование совместно с GObject, хотя может быть использован и без него.

Vala включает в себя 2 языка программирования, развиваемых параллельно - Vala, схожий по синтаксису с C#, и Genie, схожий по синтаксису с Python. Исходный код на этих языках Vala транслирует в исходный код на C, который не зависит от каких-либо дополнительных runtime библиотек.

>>> Подробности

★★★★★

Проверено: maxcom ()
Последнее исправление: snizovtsev (всего исправлений: 2)
Ответ на: комментарий от KRoN73

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

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

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

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

Компиляция - это трансляция исходного кода в исполнимый (сразу отмечу, что исполнимый код - далеко не обязательно «нативный») целиком и затем исполнение сразу оттранслированного варианта, без обращения к исходнику. В случе цикла трансляция тела произойдёт один раз и в цикле будет крутиться уже однажды оттранслированный вариант.

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

> - Ocaml не является самостоятельным компилятором, он лишь переводит в Си

А что, кто-то Ocaml компилятором считает?

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

>0.05% - это блестящие перспективы. ObjC уже дрожит от страха.

Ша, ви ту сметану пробовали? (c) :) Отличный язык! На месте ObjC я бы уже начинал дрожать от страха.

Кстати, как и Vala, ObjC долгое время существовал в виде транслятора в C.

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

>пока из того что у меня есть он нужен был для AWN (0.4+) и shotwell

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

Сейчас неспешно щупаю хаскель. Походу, это то, что нужно...

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

>А на сайте написано что он может выдавать исходники на C.

Он их может не удалять. Для него это темповые файлы.

Только эти файлики интересны только с целью дебага несобираемости программы, типа поправить работу valac. Там внутри машинообразный исходник.

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

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

Так, ну хорошо. Вот допустим компилятор C# - компилятор ?
Там происходит сначала компиляция C#->CIL (промежуточный язык), а тот уже во время выполнения компилируется JIT компилятором в нативный код.

Как я понимаю, в данном случае наиболее подходящим названием было бы http://en.wikipedia.org/wiki/Source-to-source_compiler

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

В смысле какой из 2 компиляторов - компилятор, а какой нет ? :)

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

> Там происходит сначала компиляция C#->CIL (промежуточный язык), а тот уже во время выполнения компилируется JIT компилятором в нативный код.

C# компилирует в CIL. CIL интерпретируется в .NET/Mono. Вроде так.

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

> Походу, это то, что нужно...

Кстати да. Выхлопы в C есть. Кроме того, сейчас хакают LLVM.

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

>CIL интерпретируется в .NET/Mono

Там JIT, он по определению компилятор.
Я к чему клоню: существуют, например, лисп-машины.
Если создать Си-машину или CIL-машину, их, по словам KRoN73, не-компиляторы сразу станут компиляторами ?

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

> Ша, ви ту сметану пробовали? (c) :) Отличный язык! На месте ObjC я бы уже начинал дрожать от страха.

А я что, спорю, что отличный?

Просто любой пук Стива Джобса весит больше, чем все ваши линуксы-гномы вместе взятые. Как тут верно замечают, даже у Qt рыночные позиции гораздо крепче гткшных.

Если вала не вылезет за пределы своего микрокосма - её никто и не заметит, будь она сто раз хорошая.

yk4ever
()

Для Vala уже есть source level debugger? Или IDE уровня MSVS+Resharper, если оно планирует C# потеснить?

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

Ну не на быдлоплюсах же кодить, в самом деле

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

Юниттесты есть => дебагер не нужен. Если совсем припрёт — не сносим *.с, gdb в зубы и вперёд.

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

Нихрена в гноме нет никакого стоящего IDE. Самый большой пробел всего гномо десктопа. К моему большому сожалению могут vala забросить насовсем. В будущем на гноме могут быть (python/javascript/C/C++)+Gtk+Clutter.

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

> Для Vala уже есть source level debugger?
GDB

Или IDE уровня MSVS+Resharper, если оно планирует C# потеснить?

Vim, Emacs по вкусу.

А быдлокодеры курят в сторонке и платят Microsoft-у. Иногда они вылезают и начинают писать аналоги, но пока пишут перестают быть быдлокодерами, осиливают инструменты указанные выше и потребность продолжать разработку IDE отпадает.

snizovtsev ★★★★★
() автор топика

Зачем нужна сама Vala, я понимаю. Идея хороша. А вот зачем нужно Genie, я не понял. Зачем сочинять Питон ещё раз?

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

>А что, кто-то Ocaml компилятором считает?

Ocaml - язык :)

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

>Так, ну хорошо. Вот допустим компилятор C# - компилятор ?

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

Там происходит сначала компиляция C#->CIL (промежуточный язык), а тот уже во время выполнения компилируется JIT компилятором в нативный код.


Всё глубже.
C# компилируется в IL
IL может компилироваться в машинные коды
машинные коды интерпретируются во внутренние коды x86 или amd64 процессора :)

Как я понимаю, в данном случае наиболее подходящим названием было бы http://en.wikipedia.org/wiki/Source-to-source_compiler


Нет. IL - это полноценный выполнимый код, а не «source». Можно придумать процессор, который будет выполнять этот код нативно. Как, скажем, может выполняться байткод JVM на Java-процессорах.

В смысле какой из 2 компиляторов - компилятор, а какой нет ? :)


И C# -> IL, и IL /JIT/ -> native - оба компиляторы.

Вот в Java было хитрее. В первых версиях было:
- Компиляция Java -> байткод JVM
- Интерпретация байткода JVM.

Потом придумали JIT.

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

> Если вала не вылезет за пределы своего микрокосма - её никто и не заметит, будь она сто раз хорошая.

От этого плохой то она не станет, верно? Будет на Linux использоваться.

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

>Я к чему клоню: существуют, например, лисп-машины.

Боюсь, что Лисп-машина - это система, оптимизированная под выполнение какого-то внутреннего кода, но не Лисп-программы с листа :) Так что всё равно происходит компиляция Lisp-программы во что-то внутреннее и уже исполнение этого внутреннего в том или ином виде.

Если создать Си-машину


Так, чтобы она исполняла Си-код с листа команда за командой? Структура языка это не позволит сделать :)

или CIL-машину, их, по словам KRoN73, не-компиляторы сразу станут компиляторами ?


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

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

>Зачем нужна сама Vala, я понимаю. Идея хороша. А вот зачем нужно Genie, я не понял. Зачем сочинять Питон ещё раз?

Затем, что есть вполне себе удачный для быдлоООП язычка синтаксис питона. Есть люди, которые не знают C#, но знают питон.

А вале пофиг на синтаксис, это ее преимущество.

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

>А vala на vala уже есть?

и сам valac и valaide написаны на vala.

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

AVL2 ★★★★★
()

Ахтунг! Гному нужен свой канпелятор!

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

>ObjC совсем другого поля ягода

А вот с этого места, пожалуйста, поподробнее...

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

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

Я извиняюсь за оффтопик, но в таком контексте PHP — это компилятор или интерпретатор?

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

> Один и тот же язык может быть и интерпретатором, и компилятором.

Язык? Интерпретатором? Или в смысле интерпретируемым и компилируемым?

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

> К моему большому сожалению могут vala забросить насовсем. В смысле забросить ? Саму разработку валы что ли ? А так любой прогер пишущий на ней будет выдавать в сырцах токо си и потом кругом пиз... что он пишет на си. Типа опенсурца ;)

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

>Я извиняюсь за оффтопик, но в таком контексте PHP — это компилятор или интерпретатор?

Опять, двадцать пять. PHP - это язык. В варианте с php.net - это компилятор языка в байткод виртуальной машины PHP. В варианте Quercus - это компилятор языка в байткод JVM.

Если под PHP понимать также среду испольнения, то на php.net - это интерпретатор байткода. В варианте JVM байткод компилируется в нативный при JIT.

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

>Язык? Интерпретатором? Или в смысле интерпретируемым и компилируемым?

Да, конечно второе.

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

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

тогда и gcc не может называться нормальным компилятором, потому что ему нужен ещё gas. А вот clang — может.

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

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

то есть, это compiler driver. Как gcc — драйвер для запуска нужного компилятора в ассемблер, valac, argile, d2c (gwydion-dylan), nimrod — драйвер для запуска компилятора в Си. А вот factor, sbcl, tcc, llc — самостоятельные компиляторы, сразу в нативный код.

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

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

то есть, это compiler driver.

Это компилятор с Vala в Си, неужели и правда непонятно?

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

> теперь расскажи, чем компилятор отличается от транслятора

высокоуровневыми оптимизациями? Например, если Си используется как промежуточный язык для трансляции, возможности оптимизации сгенерированного си кода ограничены из-за aliasing problem, отсутствия замыканий и gc, lto и т.п. — если что-то трудно соптимизировать в си, это должно быть либо эффективно реализовано примитивом в рантайме языка, либо оно так и останется трудно соптимизированным в результирующем бинарнике?

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

>Компиляция или интерпретация подразумевает исполнение результата, немедленное или отложенное.

Исполнить же сишный код непосредственно нельзя. Нужно ещё раз интерпретировать или компилировать его.


вот это и есть «отложенное исполнение», или multi-staged компилятор

«виртуальная машина», исполняющая си код есть — это си компилятор (или интерпретатор)

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

>А вот объектный код уже способен выполняться непосредственно.

если он не сильно переколбашен

Линковка - это уже техническое мероприятие, обеспечивающее подготовку к запуску.


в том числе, выполняется расколбашивание переколбашенного кода ( подготовка перемещаемого PIC кода в ELF, коррекция релокаций в PE, и т.п.). + обработка нужных version scripts и выбор нужной версии API (для динамических библиотек).

Поэтому объектный код нельзя непосредственно выполнять в общем случае (если PIC + динамические библиотеки). С учётом многих оговорок, если линкер выполнил свою работу, или ему нечего править — можно выполнять, но зависит от самого кода.

Можно грузить и PE в ELF бинарник, только обрабатывать это всё нужно будет руками, то есть повторить руками работу линкера.

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

> Тогда, что же такое компилятор?

транслятор, который переводит всю программу целиком в другой язык (ассемблер, или си — не важно)

а интерпретатор — это транслятор, который переводит построчно и исполняет

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

> Классический пример - цикл. Он будет транслироваться на каждом проходе снова и снова.

а если у меня функция с memoizing-ом? или вот например в смоллтоке, Polymorphic Inline Cache вызова методов. И при втором вызове будет использоваться результат из кеша, а не транслироваться заново?
Или, если накодогогенерировали (интерпретатором) развёрнутый цикл? Что, интерпретатор сразу становится компилятором? :-))

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

что, скажешь что в компиляторе нет виртуальной машины? Есть она там, для оптимизации промежуточного представления. Ну, можно взять и обычный си интерпретатор, Ch: http://www.softintegration.com/ http://en.wikipedia.org/wiki/Ch_interpreter

А вообще, чем #!/usr/local/bin/tcc не интерпретатор? Однако он компилирует всё целиком, а потом уже выполняет откомпилированное

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

> что, скажешь что в компиляторе нет виртуальной машины?

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

Есть она там, для оптимизации промежуточного представления.

Скажи мне, где именно в gcc живет виртуальная Си-машина?

Ну, можно взять и обычный си интерпретатор

Ты сказал, что компилятор - это виртуальная машина, исполняющая Си-код. Это глупость. А спорить о том, что именно является интерпретатором, можно долго.

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