вторник, 19 февраля 2013 г.

[prog] Увидел анонс Tizen 2.0. Поржал.

Вчера попался на глаза анонс второй версии платформы Tizen (очередная многострадальная попытка затащить Linux на мобилки после LiMo, MeeGo и др.). Похоже, там есть всего два "родных" подхода к разработке мобильных приложений: HTML5 и C++ (т.н. Native SDK).

Вот как раз с C++ной составляющей поржал. В анонсе говорится (выделение жирным мое):

Tizen is an open source, standards-based software platform supported by leading mobile operators, device manufacturers, and chip suppliers for multiple device categories, including smartphones, tablets, netbooks, in-vehicle infotainment devices, and smart TVs.

Т.е. базирующееся на стандартах. Интересно, на каких, если Native SDK содержит, к примеру, собственный вариант HashMap. Причем какой! Любо-дорого посмотреть на пример его использования:


#include <FBase.h>

using namespace Tizen::Base;
using namespace Tizen::Base::Collection;

void
MyClass::HashMapSample(void)
{
    HashMap map(SingleObjectDeleter);

    // Constructs a %HashMap instance with default capacity, load factor, hash code provider, and comparer
    map.Construct();

    map.Add(new String(L"Zero"), new Integer(0));       // map.GetCount() : 1, map : (Zero -> 0)
    map.Add(new String(L"One"), new Integer(1));        // map.GetCount() : 2, map : (Zero -> 0), (one -> 1)
    map.Add(new String(L"Two"), new Integer(2));        // map.GetCount() : 3, map : (Zero -> 0), (one -> 1), (Two -> 2)

    // Gets a value with the specified key
    Integer*    pValue = static_cast< Integer* > (map.GetValue(String(L"Zero")));       // pValue : 0

    // Removes the value with the specified key
    map.Remove(String(L"Zero"));                                            // map.GetCount() : 2, map : (one -> 1), (Two -> 2)

    // Uses an enumerator to access elements in the list
    IMapEnumerator* pMapEnum = map.GetMapEnumeratorN();
    String* pKey = null;
    while (pMapEnum->MoveNext() == E_SUCCESS)
    {
        pKey = static_cast< String* > (pMapEnum->GetKey());
        pValue = static_cast< Integer* > (pMapEnum->GetValue());
    }

    delete pMapEnum;

    // Deallocates all objects
    // Because the destructor calls RemoveAll() internally, you don't need to call RemoveAll() to destroy all elements at the end.
    map.RemoveAll();

}

По мне так просто тихий ужас и кошмар. Яркий пример того, как не нужно программировать на C++, по крайней мере со времен C++98. Не говоря уже про C++11.

6 комментариев:

TheIvan комментирует...

Java? OMG. Samsung любить Java. Видимо перепрофилировали ребят с Android-команды.

eao197 комментирует...

Походу, они туда перенесли свои разработки из Bada.

jazzer комментирует...

Так Tizen- это LiMo и есть, если верить википедии

eao197 комментирует...

@jazzer:

Если честно, то я уже запутался в родовых связях между LiMo, Maemo, MeeGo и пр.

Google, помнится, ни в каких громких альянсах не участвовал, а Android на базе Linux-ового ядра запустил. Ubuntu сейчас разродилась версией для телефонов и планшетов...

имя комментирует...

это называется "даункасты при использовании коллекций" и 99% это конечно говно

причем, в данном случае, в отличие от явы -- это еще и опасные даункасты

eao197 комментирует...

@имя:

Да тут говна и без даункастов хватает. Это и хранение экзепляров в map-е через указатели, а не по значению. И ручное удаление динамически созданных объектов. А если копнуть глубже, то еще какой-нибудь ерунды в том же духе найдется прилично.