LINUX.ORG.RU

вкусноты много.

Но ведь Гном - говно. Как может быть вкусным пирожок с начинкой из говна?

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

GCC так не может. хотели запилить плагин, но RMS не одобрил.

Lincor
() автор топика

Замечательно. Хоть будет юзабельный IDE под линукс.

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

да плевать. главное, что в репы он попадет вместе с новым гномом.

Lincor
() автор топика

Посмотрел на код. Он оказался на C, и GObject'ах.

Б-же, как они на этом пишут? Я так и не понял, как они объявляют свои классы.

nexfwall ★★★★
()

а для такой ide идея контейнеров от гномо-разрабов не такая уж и плохая, ибо полюбому в зависимостях gtk*-dev все что возможно будет собрано. Интересно, это уже можно как-то организовать? А то у меня слишком старая версия gtk.

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

Б-же, как они на этом пишут?

А мне интересно - зачем?

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

Гноморазработчики - лапшееды, которые раньше писали на чистых иксах, Xt, всяких там Motif и пр; именно поэтому тот функционал, который в нормальных ООП-тулкитах реализуется в сотню строк, у гноморазрабов получается в листинг на несколько тысяч строк со всякими там callback'ами, объявлениями псевдоклассов через макросы, внезапно, нахрен ненужными GOTO'шками

if (gtk_source_search_context_forward (priv->search_context, &select_end,
                                         &match_begin, &match_end))
    GOTO (found_match);

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

Потому нет ничего удивительного в том, что софт переходит с гномолапши на более адекватные тулкиты.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от Lincor

на Vala написана куча софта.

Уменьшая до нуля и так небольшое число желающих пилить гтк-говно.

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

небольшое число желающих пилить гтк-говно

на GTK+ написана большая часть софта под линукс и не только. самый популярный софт под линукс написан на GTK+. как там, в кедерастском манямирке?

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

на GTK+ БЫЛА написана большая часть софта под линукс

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

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

БЫЛА

и есть.

К тому же, полно новостей, когда софт переводят с гтк на куте.

только всякую маргинальщину.

Lincor
() автор топика

Годно, нужно.

Clang

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

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

в нормальных ООП-тулкитах

Вся проблема нормальных ОО-тулкитов — это ООП и как следствие поддержка небольшого количества языков.

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

Ядро из приложений GNOME им уже слишком долго просто взять и перписать на vala. На ней пишутся какие-нибудь новые приложения, типа gnome-contacts, geary, shotwell, calculator.

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

Не, ну правда, слишком много boilerblate кода. А ты представь, разрабы GNOME Builder на Сях всё это пишут. Как они сами то не блюют?

А вот идея Vala (как надстройки над Сями) мне нравится больше. Ппц как нравится. Только вот боюсь если написать нечто системное(просто из-за GObject) на Vala, на тебя будут косо смотреть, как на идиота.

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

На QML модно писать интерфейсы и анимацию. Причём получается не хуже, чем в этом их HTML5. Да и быстрее.

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

Только вот боюсь если написать нечто системное(просто из-за GObject) на Vala, на тебя будут косо смотреть, как на идиота.

Pantheon на Vala целиком, в том числе оконный менеджер и обе панели. и весь софт.

Lincor
() автор топика
Ответ на: комментарий от nexfwall

возьми да посмотри:

[mike@MikePC ~]$ cat > exception.vala
errordomain Foo { ERROR1, ERROR2 }
errordomain Bar { ERROR1, ERROR2 }

void thrower() throws Foo, Bar {
if (true) throw new Foo.ERROR1("ololo");
else if (false) throw new Foo.ERROR2("ololo");
else throw new Bar.ERROR1("lol");
}

void catcher() {
try { thrower(); }
catch (Foo e) { print("foo"); }
catch (Bar eb) { print("bar"); }
catch { print("exception"); }
finally { print("finally"); }
}
[mike@MikePC ~]$ valac -C exception.vala
exception.vala:5.47-5.56: warning: unreachable code detected
if (true) throw new Foo.ERROR1("ololo"); else if (false) throw new Foo.ERROR2("ololo"); else throw new Bar.ERROR1("lol");
                                              ^^^^^^^^^^
exception.vala:8.1-8.12: warning: method `catcher' never used
void catcher() {
^^^^^^^^^^^^
exception.vala:9.93-9.115: warning: unreachable catch clause detected
try { thrower(); } catch (Foo e) { print ("foo"); } catch (Bar eb) { print ("bar"); } catch { print("exception"); } finally { print("finally"); }
                                                                                            ^^^^^^^^^^^^^^^^^^^^^^^

Compilation succeeded - 3 warning(s)
[mike@MikePC ~]$ cat exception.c
/* exception.c generated by valac 0.28.0, the Vala compiler
 * generated from exception.vala, do not modify */


#include <glib.h>
#include <glib-object.h>

#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))

typedef enum  {
	FOO_ERROR1,
	FOO_ERROR2
} Foo;
#define FOO foo_quark ()
typedef enum  {
	BAR_ERROR1,
	BAR_ERROR2
} Bar;
#define BAR bar_quark ()


GQuark foo_quark (void);
GQuark bar_quark (void);
void thrower (GError** error);
void catcher (void);


GQuark foo_quark (void) {
	return g_quark_from_static_string ("foo-quark");
}


GQuark bar_quark (void) {
	return g_quark_from_static_string ("bar-quark");
}


void thrower (GError** error) {
	GError * _inner_error_ = NULL;
	if (TRUE) {
		GError* _tmp0_ = NULL;
		_tmp0_ = g_error_new_literal (FOO, FOO_ERROR1, "ololo");
		_inner_error_ = _tmp0_;
		if ((_inner_error_->domain == FOO) || (_inner_error_->domain == BAR)) {
			g_propagate_error (error, _inner_error_);
			return;
		} else {
			g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
			g_clear_error (&_inner_error_);
			return;
		}
	} else {
		if (FALSE) {
			GError* _tmp1_ = NULL;
			_tmp1_ = g_error_new_literal (FOO, FOO_ERROR2, "ololo");
			_inner_error_ = _tmp1_;
			if ((_inner_error_->domain == FOO) || (_inner_error_->domain == BAR)) {
				g_propagate_error (error, _inner_error_);
				return;
			} else {
				g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
				g_clear_error (&_inner_error_);
				return;
			}
		} else {
			GError* _tmp2_ = NULL;
			_tmp2_ = g_error_new_literal (BAR, BAR_ERROR1, "lol");
			_inner_error_ = _tmp2_;
			if ((_inner_error_->domain == FOO) || (_inner_error_->domain == BAR)) {
				g_propagate_error (error, _inner_error_);
				return;
			} else {
				g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
				g_clear_error (&_inner_error_);
				return;
			}
		}
	}
}


void catcher (void) {
	GError * _inner_error_ = NULL;
	{
		thrower (&_inner_error_);
		if (G_UNLIKELY (_inner_error_ != NULL)) {
			if (_inner_error_->domain == FOO) {
				goto __catch0_foo;
			}
			if (_inner_error_->domain == BAR) {
				goto __catch0_bar;
			}
			goto __catch0_g_error;
		}
	}
	goto __finally0;
	__catch0_foo:
	{
		GError* e = NULL;
		e = _inner_error_;
		_inner_error_ = NULL;
		g_print ("foo");
		_g_error_free0 (e);
	}
	goto __finally0;
	__catch0_bar:
	{
		GError* eb = NULL;
		eb = _inner_error_;
		_inner_error_ = NULL;
		g_print ("bar");
		_g_error_free0 (eb);
	}
	goto __finally0;
	__catch0_g_error:
	{
		g_clear_error (&_inner_error_);
		_inner_error_ = NULL;
		g_print ("exception");
	}
	__finally0:
	{
		g_print ("finally");
	}
	if (G_UNLIKELY (_inner_error_ != NULL)) {
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
		g_clear_error (&_inner_error_);
		return;
	}
}

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

Мда. Я бы такое количество boilerblate заипался писать где-то на середине.

// Оффтоп: Я вижу ты большой поклонник GNOME 3... можно ли как-то обойти этот баг с переключалкой раскладок?

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

можно ли как-то обойти этот баг с переключалкой раскладок?

не знаю.

Lincor
() автор топика

как вообще можно писать объектно-ориентированно на сях? Я от MFC-то плююсь, потому что там макросы надо активно писать, а тут....

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