23.01.10 12:24 guineapig

CodingО языке Vala

Данный блог я завожу для того чтобы заинтересованные люди в языке программирования Vala (Его опишу чуть ниже) могли учиться на моём, пусть даже не обширном пока что, опыте.
О языке Vala я узнал случайно, натолкнувшись на ссылку: http://live.gnome.org/Vala. В чём же заключается на мой взгляд "прелесть" данного языке?!
Этот язык привлёк меня сразу несколькими особенностями:
1) Это язык программирования для Линукса - разработанный специально для Линукса (Ну это не исключает возможность его использования на других платформах)
2) Этот язык можно отнести к разряду "Высочайшие" языки программирования, как я их иногда называю. Под "Высочайшими языками программирования" я подразумеваю языки который обладают всем потенциалом ООП. То есть Java, C# и т.д.
3) Синтаксис этого языка практически полностью идентичен синтаксису C#.
4) Программа написанная на этом языке не компилируется в промежуточный код, который требует своей собственной виртуальной машины, код написанный на этом языке транслируется в C++ и тут же собирается в Исполняемый код.
5) Язык ориентирован на работу с GTK+, GDK и т.д. библиотеками.

Имеется пару минусов конечно. Например нет пока ещё продуманной удобной IDE, хотя она уже разрабатывается, и находится на стадии "текстовый редактор с кнопочками компилировать/выполнить". Когда имеется какая-то ошибка - отладка идёт чуть более сложным образом, потому как если вы допустили совсем глупую ошибку, он может начать лезть в C-шный код, и выдавать вам ошибки сборки C-шного кода. Это чуточку неудобно.
Однако, благодаря этому языку, строить теперь - простые, быстрые, удобные программы с графикой стало неимоверно просто. Правда нужно понимать что если ты проектируешь на java используя классы которые идут в комплекте с JDK, то в Vala при установке этого языка ставятся только основные классы работы с графикой, и скорее всего для работы с какими-то специфическими библиотеками типа Alsa, libnotify и т.д. вам будет необходимо поставить их исходные коды (Но всё это не создаёт сложностей, ибо все они имеются в стандартных репозиториях).

Теперь о IDE
На данный момент я знаю о нескольких видах IDE для Vala.
1) Val(a)IDE (valide). - Этим пользуюсь Я.
2) Дополнение к Eclipse.
3) Дополнение для Gedit.
4) Дополнение для Anjuta.
5) И привязка Vala к MonoDevelop.

Я пользуюсь Valide, потому что он выглядит симпатично + ничего лишнего, удобные кнопки Compile и Выполнить.
Но у него есть неприятная вещь, нету автоподстановки, то есть когда я хочу посмотреть какие методы и свойства имеются у того или иного объекта, мне приходится лезть на, кстати весьма полезный, ресурс http://www.valadoc.org/.

Полезные ссылки
Официальная страничка разработчиков: http://live.gnome.org/Vala
Примеры: http://live.gnome.org/Vala/GTKSample
Очень полезная документация: http://www.valadoc.org/
Кому это нужно, разработка на Vala под Windows: http://live.gnome.org/Vala/ValaOnWindows
Крупное описание для профессионалов: http://rodney.id.au/dev/vala/hackers.html

И под конец этого сообщения хотел бы сказать что помимо того что можно разрабатывать под Linux Desktop, с помощью Vala можно разрабатывать и для Linux Mobile (Maemo). Специально для этого там имеются необходимые библиотеки (например Hildon).



commonD 23.01.10 13:48 # +0
6) emacs http://live.gnome.org/Vala/Emacs
7) vim http://live.gnome.org/Vala/Vim.
guineapig 23.01.10 15:03 # +0
Да, верно, спасибо.
divius 23.01.10 16:49 # +0
А ещё его, вроде, Geany переваривает
digiwhite 23.01.10 13:58 # +1
Не поленился сходить на официяльный сайт гнома. Итак:
Программа написанная на этом языке не компилируется в промежуточный код, который требует своей собственной виртуальной машины, код написанный на этом языке транслируется в C++ и тут же собирается в Исполняемый код.

Транслируется он все же в язык C.
http://live.gnome.org/Vala#Why_Vala.3F
valac produces C source and header files from Vala source files as if you've written your library or application directly in C.

valac (Компилятор, а скорее транслятор языка Vala) создает исходные и заголовочные файлы на языке C из исходных файлов на языке Vala так, как-будто вы пишите вашу библиотеку или приложение сразу на языке C.

Т.е. я хочу сказать, что про язык C++ здесь речи не идет вообще.
cyrus 23.01.10 14:29 # +0
вообще непонятно. Как они код, использующий классы и все плюшки ОО, переписывают в С. Тогда надо уточнить либу, которая всё это организовывает - я так понимаю это GObject какой-то.
guineapig 23.01.10 15:05 # +0
Основным прородителем всего в Vala является по моему как раз именно GObject.
guineapig 23.01.10 14:42 # +-2
Ну, если тут все умнее меня, то я могу забить на описание написания программ с помощью Vala.
А теперь я вас просвещу по поводу языка "C" !
Язык "C++" - является языком "C", дополненным структурами и Объектами!

И иногда вместо того чтобы говорить C++ говорят либо C, либо C/C++.
Я надеюсь я доступно разъяснил что ошибки по данному вопросу у меня в статье нет!
digiwhite 23.01.10 15:06 # +6
Ой :) Что же вы так реагируете то. Я указал вам на явные расхождения с оригиналом и даже привел цитату, где об этом написано.

А теперь я вас просвещу по поводу языка "C" !
Язык "C++" - является языком "C", дополненным структурами и Объектами!

Спасибо, но я на языке С пишу достаточно давно, так что ко что все же знаю.
Язык С++ хоть и является подмножеством языка С, тем не менее, он другой и требует абсолютного другого подхода (отличия синтаксические, что не так важно, но отличия в подходе к самой разработке ПО на данном языке, что гораздо важнее). Что касается структур - структуры есть и в C.


И иногда вместо того чтобы говорить C++ говорят либо C, либо C/C++.

А вы ведь думаете своей головой, а не за вас думают другие?
lockie 23.01.10 19:03 # +0
> Язык С++ хоть и является подмножеством языка С
Вообще, если подумать, наоборот. Сишный код плюсовый компилятор поймёт, а сишный компилятор плюсовый код - почти никогда.
digiwhite 23.01.10 19:31 # +0
Никаких наоборот. В принципе Совместимость C++ с C это только задумка Страуструпа, чтобы перетащить разработчиков с С в тот момент. А то, что там понимает компилятор - это совсем другая тема, т.к. это инструмент. А при желании компилятор можно написать какой угодно.
cyrus 23.01.10 19:49 # +1
"Язык программирования С++"(специальное издание) Бьерн Страуструп, 2007 г. страница 43
С++ создан на основе языка программирования С, и, за небольшим исключением, С остаётся подмножеством С++

ЧЯДНТ?
digiwhite 23.01.10 19:53 # +2
Да я ошибся. Конечно же надмножеством.
booley 24.01.10 23:45 # +0
Надмозгом?
digiwhite 24.01.10 23:55 # +0
Надмозгом?

Толсто.
digiwhite 23.01.10 15:07 # +3
Ну, если тут все умнее меня, то я могу забить на описание написания программ с помощью Vala.

Ни в коем случае, хотелось чтобы вы как раз продолжили. Лично мне интересно. Просто воспринимайте критику более адекватно.
roolebo 23.01.10 14:09 # +0
Так вот же она - замена Mono :-)

А сложно ли сделать биндинги к другим библиотекам?
digiwhite 23.01.10 14:19 # +0
Не совсем конечно. Моно (а вернее .NET) - это скорее мощный набор готовых классов, упрощающих, ускоряющих и т.п. разработку. Тут этого вроде как не особо. Хотя можно использовать готовые либы на C.
digiwhite 23.01.10 14:21 # +0
Этот язык можно отнести к разряду "Высочайшие" языки программирования, как я их иногда называю. Под "Высочайшими языками программирования" я подразумеваю языки который обладают всем потенциалом ООП. То есть Java, C# и т.д.


Я бы туда скорее отнес какой-нибудь Ruby (Ruby on Rails-узко-заточен, но ИМХО настолько высок, что мозг себе сломаешь, если до этого n лет писал только на C или C++) или Python. Ну а вообще смысл в том, что все зависит от задачи ;).
cyrus 23.01.10 14:28 # +0
они в том числе и скриптовые и вообще много чего поддерживают. Просто канонически, именно главными представителями ООП считаются Java и C#
digiwhite 23.01.10 14:23 # +0
Вы могли бы рассказать дополнительно о специфике языка? Какие-то его фишки. Да например хотя бы о том, есть ли у него сборка мусора автоматическая? (Т.е. я понимаю что в низу все равно будет C, но наверняка там генерится куча "вспомогательного" кода - типа как Q_OBJECT в Qt со всеми вытекающими).
guineapig 23.01.10 15:02 # +0
Про сборку мусора - пока сказать не могу, я недавно начал его изучать.
Думаю там нет автоматической сборки мусора.
Хотя, я посмотрел на получаемый сишный код, и мне показалось что всётаки сборка мусора происходит!
digiwhite 23.01.10 15:09 # +0
Воот :) Раз изучаете, то уточните и этот вопрос. Буду благодарен за это :). Но гадание - это не лучший метод познания.
m0nhawk 23.01.10 14:29 # +0
Я так понял тут
транслируется в C++ и

имеется ввиду всё-таки Си?
digiwhite 23.01.10 14:30 # +-1
Да. Нету никакого С++. Отсюда в конце все собирает gcc :).
guineapig 23.01.10 14:44 # +-1
У вас у всех плохое представление о C языке! ПМСМ
chemikadze 23.01.10 14:57 # +3
Всетаки не стоит смешивать C и C++. Выхлопом valac является программа на _чистом_ Си. Да, языки имеют много общего, но развивались разными путями что привело к расхождениям в тонкостях.
Чуть конкрутнее тут.
digiwhite 23.01.10 15:08 # +0
Лично у меня о нем хорошее представление. Так же как и о С++.
guineapig 23.01.10 14:55 # +-1
Так же вполне очевидно что код:
static void value_main_init (GValue* value) {
value->data[0].v_pointer = NULL;
}

Присущ именно C++
Потому как в нём используется Объектная модель.
chemikadze 23.01.10 15:07 # +3
Какие в GValue объекты?
1
2
typedef struct {
} GValue;
Все костыли GLib типа GObject - попытка притянуть за уши ООП в Си через структуры и прочие танцы с бубном. Поддержкой основных парадигм ООП средствами языка там и не пахнет.
digiwhite 23.01.10 15:10 # +1
GValue - обычная структура, к объектам не имеющая никакого отношения.

Хотя конечно если говорить в контексте С++, то да. Это объект, все члены которого видимы для всех.
guineapig 23.01.10 14:59 # +0
# man gcc

"gcc - GNU project C and C++ compiler"

Вполне очевидно что C++ так же с помощью GCC собирается!

roolebo 23.01.10 15:20 # +0
C++ собирается с помощью g++
cyrus 23.01.10 19:32 # +1
хватит минусовать его. Эксперты.
Вот почитайте лучше - http://linuxforum.ru/index.php?showtopic=62619&st=60 .
commonD 23.01.10 15:33 # +0
1
2
3
4
5
6
7
8
9
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
  cout << "HELLO" << endl;
  return 0;
}


$ gcc test.cpp
/tmp/ccOV90RM.o: In function `main':
test.cpp:(.text+0x1a): undefined reference to `std::cout'
test.cpp:(.text+0x1f): undefined reference to `std::basic_ostream >& std::operator<< >(std::basic_ostream >&, char const*)'
test.cpp:(.text+0x2a): undefined reference to `std::basic_ostream >& std::endl >(std::basic_ostream >&)'
test.cpp:(.text+0x30): undefined reference to `std::basic_ostream >::operator<<(std::basic_ostream >& (*)(std::basic_ostream >&))'
/tmp/ccOV90RM.o: In function `__static_initialization_and_destruction_0(int, int)':
test.cpp:(.text+0x62): undefined reference to `std::ios_base::Init::Init()'
test.cpp:(.text+0x6a): undefined reference to `std::ios_base::Init::~Init()'
/tmp/ccOV90RM.o:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
collect2: выполнение ld завершилось с кодом возврата 1
$ g++ test.cpp
$ ./a.out
HELLO
cyrus 23.01.10 19:33 # +2
"Если я чего-то не знаю, то это ещё не значит, что этого не существует". Откройте для себя ключи компиляции и посмотрите ссылку чуть выше.
commonD 23.01.10 22:51 # +0
Уважаемый, про ключи компиляции я в курсе. Лучше покажите мне хотя бы 1 проект (или даж кусочек кода) C++ который компилится с помощью gcc + ключи компиляции для совместимости с C++. Да кстати, в мане к gcc сказано, However, the use of gcc does not add the C++ library, то есть объектники получить мы сможет, а вот собрать все уже не получится.

PS: а ну и да предоставь строчку которая скомпилит этот C++ код, разумеется используя gcc.
PSS: я не минусовал, во первых не вижу за что, а во вторых кармы нету.
cyrus 23.01.10 23:36 # +1
1
2
$ vim test.cpp
$ cat test.cpp

1
2
3
4
5
6
7
8
9
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
     cout << "HELLO" << endl;
     return 0;
}

1
2
3
4
$ gcc test.cpp -o cpp -lstdc++
$ ./cpp
HELLO
 
commonD 24.01.10 00:08 # +0
ок, согласен, тут я не прав.

Но все таки gcc предназначен для С кода, g++ для С++ кода.
booley 25.01.10 00:00 # +0
Плюсовать/минусовать карма не нужна. Мы не хабра, по крайней мере, в этом аспекте.
m039 23.01.10 15:07 # +0
Крайне интересно, что оно выдаст на выход, т.е. что будет в конечных С исходниках. Если в них можно будет спокойно разбираться, то получится что-то интересное.
digiwhite 23.01.10 15:11 # +0
А это имеет смысл? :) Если и имеет, то наверное в таких дремучих случаях, о которых лучше даже не думать :).
m039 23.01.10 15:23 # +0
Прочитав Why Vala подумал, что его создали потому что надоело писать на простом С, следовательно если всё таки какие-то наработки по С были, которые удачно получаются в виде выходного листинга, то почему бы и нет. Но все таки очень сильно сомневаюсь что на выходе будет не дремучий лес, который тяжело отлаживать.
А вдруг нет?:)
digiwhite 23.01.10 15:27 # +0
Я надеюсь, что автор не ушел совсем :) И все же будет выкладывать свои результаты здесь. Тогда можно будет посмотреть :). Хотя наверное вы правы. Если предположить что на выходе С, то и отладка отчасти будет и через gdb. Так что наверняка позаботились :).
divius 23.01.10 16:54 # +0
Получится обыкновенный код на Gtk/Gdk, коего полно в гноме. В том, собственно, и задумка.
guineapig 23.01.10 15:09 # +1
ХХМММ, ну значит вы правы, а я значит ни хрена не разбираюсь в C и C++.
Прошу прощения, за свои ошибочные высказывания.
Учитывая новые данные, ни хрена писать мне уже не хочется!
Пойду подрасту чуток!
digiwhite 23.01.10 15:13 # +3
Чего-то не знать - это нормально. Ошибаться может каждый - это тоже нормально. Так что давайте ка лучше писать и совершенствоваться :). А мы вместе с вами :).
chemikadze 23.01.10 15:14 # +0
Да ладно тебе, не уходи, мы добрые =)
По крайней мере ты первый кто здесь заинтересовался этой странной штуковиной и привнес чуток нового в наше покрывшееся пылью сообщество.
digiwhite 23.01.10 15:16 # +0
Почти согласен. Было бы хуже, если бы топик проигнорировали и было 0 комментариев :). А так - резонанс, значит интересно.
cyrus 23.01.10 19:35 # +0
Не слушай никого. А то тут что-то наехали.. можно было и по-корректнее на ошибки указать. Но мы ж не фанатично-настроенные =)
Расскажи лучше о преимуществах языка.
digiwhite 23.01.10 19:39 # +0
Никто ни на кого не наехал. Были неточности, на них указали.
chemikadze 23.01.10 15:16 # +0
Странно, что ни в статье, ни в обсуждении ни разу не прозвучало слово метапрограммирование.
digiwhite 23.01.10 15:19 # +0
Я как-то не задумывался об этом :). Насколько оно мета, надо глянуть на то, насколько "просто" пишутся программы на Vala :).
chemikadze 23.01.10 15:28 # +0
Но под определение тем не менее подпадает.
<offtopic class="вброс">
Вопрос к GTK-кунам: в чем прелесть писать на чистом Си GUI-приложения? Судя по тенденциям Gnome разработчики отказываются от него в сторону более высокоуровневых языков. Что это: движение связанное с логикой или деградация сообщества?
</offtopic>
digiwhite 23.01.10 15:36 # +0
Вероятно все же сложность сопровождения программ на языке С.
divius 23.01.10 16:53 # +0
Тупо C быстрее (говорю как прогер на Qt=)). А эта штука вроде и C, а вроде и высокоуровневая
chemikadze 23.01.10 17:00 # +0
Как прогер на Qt почти соглашусь, но что-то не замечал большой разницы в скорости гномоприложений и родного KDE (о перегруженных свистелками-перделками и прочей плазме речь не идет).
divius 24.01.10 00:16 # +0
Это, полагаю, потому, что гномовские либы не через то место писаны. А вы посмотрите, например, на pcmanfm.
chemikadze 24.01.10 00:24 # +0
Ну, сравнивать сверхлегкие FM с жирными DE библиотеками немного некорректно. Да, helloworld на GTK запускается быстрее, чем helloworld на Qt, но когда очередь доходит до чего-то достаточно жирного, скорость либ играет меньшую роль.
divius 24.01.10 00:30 # +1
Я это к тому, что Gtk _позволяет_ писать легче. И да, если либы плохо написаны, их скорость может играть роль. Кроме того, у Qt есть тенденция иметь очень глубокие уровни вложенности кода. Например, грохнулся у меня недавно KDevelop, показал stack dump, так там было пунктов 60. За мощность приходится расплачиваться, да...

Но мы изначально говорили о скорости чистого C. Тут, я так думаю, фокус в том, что прогер на C контролирует _все_ аспекты кода, прогер на C++ пользуется готовой ООП-моделью. Эту разницу можно использовать во благо, можно во вред.
digiwhite 23.01.10 17:18 # +0
Если тупо, то да. А дальше зависит от того как писать.
divius 24.01.10 00:17 # +0
Ну да, см. ответ выше.
digiwhite 23.01.10 15:24 # +0
Кстати, возможно ИМХО, если только начинаете осваивать, то стоит использовать не IDE, а скажем vim+запуск руками "калькулятора" ну или makefil`ы на простом уровне.
digiwhite 23.01.10 15:36 # +0
Бля, я сошел с умаКонечно же запуск компилятора :).
booley 25.01.10 00:02 # +0
makefil

Делай любовь, спаси мир!

Или вы про Makefile? :)
digiwhite 25.01.10 05:55 # +0
Про makefile.
Посты Комментарии
Последние посты
Посты Комментарии
Последние комментарии
Посты Комментарии
Изменения
Посты Комментарии Изменения Черновики Избранное
Черновики (все)
Посты Комментарии Изменения Черновики Избранное
Избранное (всё)
Посты Комментарии Изменения Черновики Избранное
Лучшие блоги (все 127)
Элита (все 2421 из 196 городов)
welinux.ru