Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Ощущения от знакомства с Ultimate

Anna | 24.06.2014 | нет комментариев

Если вы фрилансер и любите экспериментировать с экзотическими средами под С , то стоит обратить внимание на экосистему Ultimate , о которой я узнал вовсе незадолго вследствие циклу статей Семена Есилевского (ч.1ч.2ч.3ч.4 — все есть на вики) с таким финальным напутствием:

«Перевешивают ли выгоды U его незаурядность и высокий «барьер вступления»? На мой взор, да. U – красивый выбор для кроссплатформенных планов, которые разрабатываются «с нуля», исключительно если предполагается насыщенное применение баз данных.»

Под катом те нюансы U , которые удалось раскопать на форуме и в мануалах за месяц ежедневной работы над редактируемым справочником документов, хранящихся в базе. Сразу подмечу, что сопоставления с «восхитительной троицей» не будет, так как прежде для простейшего gui применял WTL и с верой глядел на библиотеку eGUI , которую, к сожалению, автор забросил, а подхватить некому.

Раньше каждого, Ultimate это ультиматум: либо собственная среда TheIDE, либо, к примеру, такой комплект под Windows, как Visual Studio STL POCO WTL. Как следствие, доводится позабыть об исключениях, правда в остальном ядро порядочное, что иллюстрируют фрагменты написанного мной кода асинхронной заказчик-серверной передачи файлов.

Ядро

  • Делегаты (основное средство для привязки событий в GUI; лично меня они зацепили огромнее каждого)
    //ограничения: 
    //функция не должна возвращать значений, а также иметь огромнее 4х входных параметров
    void Func() {};
    
    void Func4(int, double, String, Value) {}
    
    //делегаты для функций
    GUI_APP_MAIN
    {	
    	Callback cb = callback(Func);
    	cb();
    
    	//stateful
    	Callback cb4 = callback4(Func4, 1, 2, AsString(3), 4);
    	cb4();
    
    	//stateless
    	Callback4<int double string value> cb1 = callback(Func4);
    	cb1(1, 2, AsString(3), 4);
    }
    
    //делегаты в классе
    class AppMain {
    public:
    	//для THISBACK
    	typedef AppMain CLASSNAME;
    
    	Callback cb;
    	Callback cb4;
    
    	AppMain() {
    		cb = THISBACK(Func);
    		cb4 = THISBACK4(Func4, 1, 2, AsString(3), 4);
    	}
    
    	void Func() {};
    
    	void Func4(int, double, String, Value) {}	
    };
    
    //делегаты для объектов
    GUI_APP_MAIN
    {	
    	AppMain m;
    	m.cb = callback(&m, &AppMain::Func);
    	m.cb4 = callback4(&m, &AppMain::Func4, 1, 2, AsString(3), 4);
    }
    </int>
  • Синглтон
    //класс SomeClass должен иметь конструктор по-умолчанию
    Single<someclass>().SomeMethod();
    
  • Логирование (имейте ввиду, что для вещественных чисел взамен %lf применяется %f)
    //вывод на экран и в файл
    StdLogSetup(LOG_COUT|LOG_FILE);
    ...
    LOG(Format("Total %d files have sendedn", n));
    LOG("Total " << n << " files have sended");
    
  • INI-файлы
    VectorMap<string string> config = LoadIniFile(GetExeDirFile("config.ini"));
    String host = config.Get("HOST");
    int port = ScanInt(config.Get("PORT"));
    
    for (int i = 0; i < config.GetCount(); i  ) {
    	if ("FILE" == config.GetKey(i)) {
    		Cout() << config[i] << "n";
    	}
    }
    
  • Многопоточность
    //без ожидания заключения
    Thread::Start(callback(Func));
    
    //c ожиданием заключения
    Thread th;	
    th.Run(callback(Func));
    th.Wait();
    
    Thread::ShutdownThreads();	
    

    Насколько я осознал, OpenMP не поддерживается, взамен этого предалагается CoWork, работающий с делегатами, что для распараллеливания циклов вовсе не комфортно.

  • Текстовый JSON (биrqvmk!SetLanguage(SetLNGCharset(GetSystemLNG(), CHARSET_UTF8)); 
    image
  • Если посмотреть примеры реальных приложений, то дозволено подметить, что там нет скриншотов с иконками и текстом в меню, потому что это сделать невозможно — иконки с текстом могут иметь только вложенные разделы меню, а основное меню неизменно текстовое.
  • У кнопок нет свойств по-умолчанию для метаморфозы размера.
  • Не поддерживается комфортное блочное смещение строк через Alt Shift стелочки tab, что позже Visual Studio и Notepad напрягает.
  • Самая огромная задача редактором касается не неизменно правильной отмены последней операции. Проявляется в 2-х ипостасях: при ручной отмене (либо Ctrl Z) соседние и не только строки могут начать перемешиваться (за день один- два раза ловится); при запуска через F5 либо Ctrl F5 отменяется, вновь же изредка, последнее редактирование (случается Почаще).
  • Есть задачи с Intellisense, тот, что охотнее отображает доступные сигнатуры теснее присутствующей в коде переменной, чем у только что написанной. Также хотелось бы распознавания обстановок, когда при вызове процедуры у объекта из списка код obj.f() не трансформировался бы в obj.f() ()

Резюме

Вливайтесь! Многие моменты, которые я не выписал, требуют энергичного совершенствования. 32 мб с небольшим дистрибутива этого заслуживают.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB