guineapig 23.01.2010 12:24
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).
Не поленился сходить на официяльный сайт гнома. Итак:
Транслируется он все же в язык C.
http://live.gnome.org/Vala#Why_Vala.3F
valac (Компилятор, а скорее транслятор языка Vala) создает исходные и заголовочные файлы на языке C из исходных файлов на языке Vala так, как-будто вы пишите вашу библиотеку или приложение сразу на языке C.
Т.е. я хочу сказать, что про язык C++ здесь речи не идет вообще.
Программа написанная на этом языке не компилируется в промежуточный код, который требует своей собственной виртуальной машины, код написанный на этом языке транслируется в 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++ здесь речи не идет вообще.
вообще непонятно. Как они код, использующий классы и все плюшки ОО, переписывают в С. Тогда надо уточнить либу, которая всё это организовывает - я так понимаю это GObject какой-то.
Основным прородителем всего в Vala является по моему как раз именно GObject.
Ну, если тут все умнее меня, то я могу забить на описание написания программ с помощью Vala.
А теперь я вас просвещу по поводу языка "C" !
Язык "C++" - является языком "C", дополненным структурами и Объектами!
И иногда вместо того чтобы говорить C++ говорят либо C, либо C/C++.
Я надеюсь я доступно разъяснил что ошибки по данному вопросу у меня в статье нет!
А теперь я вас просвещу по поводу языка "C" !
Язык "C++" - является языком "C", дополненным структурами и Объектами!
И иногда вместо того чтобы говорить C++ говорят либо C, либо C/C++.
Я надеюсь я доступно разъяснил что ошибки по данному вопросу у меня в статье нет!
Ой :) Что же вы так реагируете то. Я указал вам на явные расхождения с оригиналом и даже привел цитату, где об этом написано.
Спасибо, но я на языке С пишу достаточно давно, так что ко что все же знаю.
Язык С++ хоть и является подмножеством языка С, тем не менее, он другой и требует абсолютного другого подхода (отличия синтаксические, что не так важно, но отличия в подходе к самой разработке ПО на данном языке, что гораздо важнее). Что касается структур - структуры есть и в C.
И иногда вместо того чтобы говорить C++ говорят либо C, либо C/C++.
А вы ведь думаете своей головой, а не за вас думают другие?
А теперь я вас просвещу по поводу языка "C" !
Язык "C++" - является языком "C", дополненным структурами и Объектами!
Язык "C++" - является языком "C", дополненным структурами и Объектами!
Спасибо, но я на языке С пишу достаточно давно, так что ко что все же знаю.
Язык С++ хоть и является подмножеством языка С, тем не менее, он другой и требует абсолютного другого подхода (отличия синтаксические, что не так важно, но отличия в подходе к самой разработке ПО на данном языке, что гораздо важнее). Что касается структур - структуры есть и в C.
И иногда вместо того чтобы говорить C++ говорят либо C, либо C/C++.
А вы ведь думаете своей головой, а не за вас думают другие?
> Язык С++ хоть и является подмножеством языка С
Вообще, если подумать, наоборот. Сишный код плюсовый компилятор поймёт, а сишный компилятор плюсовый код - почти никогда.
Вообще, если подумать, наоборот. Сишный код плюсовый компилятор поймёт, а сишный компилятор плюсовый код - почти никогда.
Никаких наоборот. В принципе Совместимость C++ с C это только задумка Страуструпа, чтобы перетащить разработчиков с С в тот момент. А то, что там понимает компилятор - это совсем другая тема, т.к. это инструмент. А при желании компилятор можно написать какой угодно.
"Язык программирования С++"(специальное издание) Бьерн Страуструп, 2007 г. страница 43
ЧЯДНТ?
С++ создан на основе языка программирования С, и, за небольшим исключением, С остаётся подмножеством С++
ЧЯДНТ?
Ну, если тут все умнее меня, то я могу забить на описание написания программ с помощью Vala.
Ни в коем случае, хотелось чтобы вы как раз продолжили. Лично мне интересно. Просто воспринимайте критику более адекватно.
Так вот же она - замена Mono :-)
А сложно ли сделать биндинги к другим библиотекам?
А сложно ли сделать биндинги к другим библиотекам?
Не совсем конечно. Моно (а вернее .NET) - это скорее мощный набор готовых классов, упрощающих, ускоряющих и т.п. разработку. Тут этого вроде как не особо. Хотя можно использовать готовые либы на C.
Этот язык можно отнести к разряду "Высочайшие" языки программирования, как я их иногда называю. Под "Высочайшими языками программирования" я подразумеваю языки который обладают всем потенциалом ООП. То есть Java, C# и т.д.
Я бы туда скорее отнес какой-нибудь Ruby (Ruby on Rails-узко-заточен, но ИМХО настолько высок, что мозг себе сломаешь, если до этого n лет писал только на C или C++) или Python. Ну а вообще смысл в том, что все зависит от задачи ;).
они в том числе и скриптовые и вообще много чего поддерживают. Просто канонически, именно главными представителями ООП считаются Java и C#
Вы могли бы рассказать дополнительно о специфике языка? Какие-то его фишки. Да например хотя бы о том, есть ли у него сборка мусора автоматическая? (Т.е. я понимаю что в низу все равно будет C, но наверняка там генерится куча "вспомогательного" кода - типа как Q_OBJECT в Qt со всеми вытекающими).
Про сборку мусора - пока сказать не могу, я недавно начал его изучать.
Думаю там нет автоматической сборки мусора.
Хотя, я посмотрел на получаемый сишный код, и мне показалось что всётаки сборка мусора происходит!
Думаю там нет автоматической сборки мусора.
Хотя, я посмотрел на получаемый сишный код, и мне показалось что всётаки сборка мусора происходит!
Воот :) Раз изучаете, то уточните и этот вопрос. Буду благодарен за это :). Но гадание - это не лучший метод познания.
Всетаки не стоит смешивать C и C++. Выхлопом valac является программа на _чистом_ Си. Да, языки имеют много общего, но развивались разными путями что привело к расхождениям в тонкостях.
Чуть конкрутнее тут.
Чуть конкрутнее тут.
Так же вполне очевидно что код:
static void value_main_init (GValue* value) {
value->data<0>.v_pointer = NULL;
}
Присущ именно C++
Потому как в нём используется Объектная модель.
static void value_main_init (GValue* value) {
value->data<0>.v_pointer = NULL;
}
Присущ именно C++
Потому как в нём используется Объектная модель.
Какие в GValue объекты?
typedef struct {
} GValue;
Все костыли GLib типа GObject - попытка притянуть за уши ООП в Си через структуры и прочие танцы с бубном. Поддержкой основных парадигм ООП средствами языка там и не пахнет.
GValue - обычная структура, к объектам не имеющая никакого отношения.
Хотя конечно если говорить в контексте С++, то да. Это объект, все члены которого видимы для всех.
Хотя конечно если говорить в контексте С++, то да. Это объект, все члены которого видимы для всех.
# man gcc
"gcc - GNU project C and C++ compiler"
Вполне очевидно что C++ так же с помощью GCC собирается!
"gcc - GNU project C and C++ compiler"
Вполне очевидно что C++ так же с помощью GCC собирается!
хватит минусовать его. Эксперты.
Вот почитайте лучше - http://linuxforum.ru/index.php?showtopic=62619&st=60 .
Вот почитайте лучше - http://linuxforum.ru/index.php?showtopic=62619&st=60 .
#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
"Если я чего-то не знаю, то это ещё не значит, что этого не существует". Откройте для себя ключи компиляции и посмотрите ссылку чуть выше.
Уважаемый, про ключи компиляции я в курсе. Лучше покажите мне хотя бы 1 проект (или даж кусочек кода) C++ который компилится с помощью gcc + ключи компиляции для совместимости с C++. Да кстати, в мане к gcc сказано, However, the use of gcc does not add the C++ library, то есть объектники получить мы сможет, а вот собрать все уже не получится.
PS: а ну и да предоставь строчку которая скомпилит этот C++ код, разумеется используя gcc.
PSS: я не минусовал, во первых не вижу за что, а во вторых кармы нету.
PS: а ну и да предоставь строчку которая скомпилит этот C++ код, разумеется используя gcc.
PSS: я не минусовал, во первых не вижу за что, а во вторых кармы нету.
$ vim test.cpp
$ cat test.cpp
#include <iostream>
using namespace std;
int main(int argc, char *argv<>)
{
cout << "HELLO" << endl;
return 0;
}
$ gcc test.cpp -o cpp -lstdc++
$ ./cpp
HELLO
ок, согласен, тут я не прав.
Но все таки gcc предназначен для С кода, g++ для С++ кода.
Но все таки gcc предназначен для С кода, g++ для С++ кода.
Плюсовать/минусовать карма не нужна. Мы не хабра, по крайней мере, в этом аспекте.
Крайне интересно, что оно выдаст на выход, т.е. что будет в конечных С исходниках. Если в них можно будет спокойно разбираться, то получится что-то интересное.
А это имеет смысл? :) Если и имеет, то наверное в таких дремучих случаях, о которых лучше даже не думать :).
Прочитав Why Vala подумал, что его создали потому что надоело писать на простом С, следовательно если всё таки какие-то наработки по С были, которые удачно получаются в виде выходного листинга, то почему бы и нет. Но все таки очень сильно сомневаюсь что на выходе будет не дремучий лес, который тяжело отлаживать.
А вдруг нет?:)
А вдруг нет?:)
Я надеюсь, что автор не ушел совсем :) И все же будет выкладывать свои результаты здесь. Тогда можно будет посмотреть :). Хотя наверное вы правы. Если предположить что на выходе С, то и отладка отчасти будет и через gdb. Так что наверняка позаботились :).
Получится обыкновенный код на Gtk/Gdk, коего полно в гноме. В том, собственно, и задумка.
ХХМММ, ну значит вы правы, а я значит ни хрена не разбираюсь в C и C++.
Прошу прощения, за свои ошибочные высказывания.
Учитывая новые данные, ни хрена писать мне уже не хочется!
Пойду подрасту чуток!
Прошу прощения, за свои ошибочные высказывания.
Учитывая новые данные, ни хрена писать мне уже не хочется!
Пойду подрасту чуток!
Чего-то не знать - это нормально. Ошибаться может каждый - это тоже нормально. Так что давайте ка лучше писать и совершенствоваться :). А мы вместе с вами :).
Да ладно тебе, не уходи, мы добрые =)
По крайней мере ты первый кто здесь заинтересовался этой странной штуковиной и привнес чуток нового в наше покрывшееся пылью сообщество.
По крайней мере ты первый кто здесь заинтересовался этой странной штуковиной и привнес чуток нового в наше покрывшееся пылью сообщество.
Почти согласен. Было бы хуже, если бы топик проигнорировали и было 0 комментариев :). А так - резонанс, значит интересно.
Не слушай никого. А то тут что-то наехали.. можно было и по-корректнее на ошибки указать. Но мы ж не фанатично-настроенные =)
Расскажи лучше о преимуществах языка.
Расскажи лучше о преимуществах языка.
Странно, что ни в статье, ни в обсуждении ни разу не прозвучало слово метапрограммирование.
Я как-то не задумывался об этом :). Насколько оно мета, надо глянуть на то, насколько "просто" пишутся программы на Vala :).
Но под определение тем не менее подпадает.
<offtopic class="вброс">
Вопрос к GTK-кунам: в чем прелесть писать на чистом Си GUI-приложения? Судя по тенденциям Gnome разработчики отказываются от него в сторону более высокоуровневых языков. Что это: движение связанное с логикой или деградация сообщества?
</offtopic>
<offtopic class="вброс">
Вопрос к GTK-кунам: в чем прелесть писать на чистом Си GUI-приложения? Судя по тенденциям Gnome разработчики отказываются от него в сторону более высокоуровневых языков. Что это: движение связанное с логикой или деградация сообщества?
</offtopic>
Тупо C быстрее (говорю как прогер на Qt=)). А эта штука вроде и C, а вроде и высокоуровневая
Как прогер на Qt почти соглашусь, но что-то не замечал большой разницы в скорости гномоприложений и родного KDE (о перегруженных свистелками-перделками и прочей плазме речь не идет).
Это, полагаю, потому, что гномовские либы не через то место писаны. А вы посмотрите, например, на pcmanfm.
Ну, сравнивать сверхлегкие FM с жирными DE библиотеками немного некорректно. Да, helloworld на GTK запускается быстрее, чем helloworld на Qt, но когда очередь доходит до чего-то достаточно жирного, скорость либ играет меньшую роль.
Я это к тому, что Gtk _позволяет_ писать легче. И да, если либы плохо написаны, их скорость может играть роль. Кроме того, у Qt есть тенденция иметь очень глубокие уровни вложенности кода. Например, грохнулся у меня недавно KDevelop, показал stack dump, так там было пунктов 60. За мощность приходится расплачиваться, да...
Но мы изначально говорили о скорости чистого C. Тут, я так думаю, фокус в том, что прогер на C контролирует _все_ аспекты кода, прогер на C++ пользуется готовой ООП-моделью. Эту разницу можно использовать во благо, можно во вред.
Но мы изначально говорили о скорости чистого C. Тут, я так думаю, фокус в том, что прогер на C контролирует _все_ аспекты кода, прогер на C++ пользуется готовой ООП-моделью. Эту разницу можно использовать во благо, можно во вред.
Кстати, возможно ИМХО, если только начинаете осваивать, то стоит использовать не IDE, а скажем vim+запуск руками "калькулятора" ну или makefil`ы на простом уровне.
7) vim http://live.gnome.org/Vala/Vim.