Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кроссплатформеность 
:(
    Опции темы
SABROG
Дата 11.1.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: нет
Всего: 91



Цитата(nerezus @ 11.1.2008,  18:51)
Цитата

Я вообще считаю достоточно 2 платформы, чтобы назвать язык кроссплатформенным.
 Это твое мнение. Мое такое: кроссплатформенность - это возможность работы под большинством популярных и распространенных платформ.

Ок, fasm может работать и в Windows и в Linux. Две популярные ОС, по твоей логике получается, что ассемблер - кроссплатформенный.

Кстати возможность asm вставок в код на C++ еще раз делает ассемблер кроссплатформенным, т.к. C++ тянет его за собой.

Цитата

Вдолби себе одно: "Язык != Компилятор" и всё станет ясно.


smile нервный какой


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
AndNot
Дата 28.2.2008, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.2.2008

Репутация: нет
Всего: нет



Гы-гы. Позабавило smile Только почему то никто не уловил суть - кроссплатформенной программу делает не язык, а используемые ей либы. И никто не мешает использовать их и на асме. Если я уже давно для операций с памятью/файлами/вводом/выводом использую сишные либы, то почему моя прога не будет кроссплатформенной? Достаточно только, при перекомпиляции, подставить соответствующие либы и все, даже не нужно изменять сорсы. Проверено ;) 
Цитата(W4FhLF @  11.1.2008,  16:49 Найти цитируемый пост)
Я прошу самый простейший пример. Напиши исходник на ассемблере, который выводит в консоль строку "Hello World", чтобы я взял этот исходник, спокойно скомпилил его и там, и там, запустил и поверил. Не можешь написать? Почему? Мешают конструктивные особенности ОС?
Мешают только плохому танцору, да и то сами знаете что smile Нормальным асмовцав ничто не мешает ;) Даже писать не буду, выложу лишь пример к кроссплатформенной либе, для компиляторов MASM и FASM. Имеет менеджер памяти, потоки ввода/вывода (stream stdin/stdout), файловые операции, т.е. практически все ОС-зависимые операции. Расчитана на Win32 и Linux. Перекомпиляция под любую платформу не требует изменения сорсов ;) 
Код
; example of FASMLIB usage in MASM

; compile with:
;       ml /c /coff dec2hex.asm
; link with:
;       link /subsystem:console dec2hex.obj fasmlib.obj kernel32.lib

; "fasmlib.obj" is copy of "bin/mscoff_win32.obj" in FASMLIB directory


; #########################################################################

      .586
      .model flat, stdcall
      option casemap:none    ; case sensitive

; #########################################################################

      include fasmlib.inc

; #########################################################################

    .code

start:
        ;initialize modules
        call    mem_init
        jc      error
        call    stream_init
        jc      error

        ;write prompt
        push    offset _example
        push    offset stream_stdout
        call    text_write
        jc      error

        ;EBX = read decimal number
        push    offset stream_stdin
        call    text_read_dec2d
        jc      error
        mov     ebx, eax

        ;write notice
        push    offset _hex
        push    offset stream_stdout
        call    text_write
        jc      error

        ;write EBX as hex number
        push    ebx
        push    offset stream_stdout
        call    text_write_d2hex
        jc      error

        ;uninitialize modules
        call    stream_uninit
        jc      error
        call    mem_uninit
        jc      error

        ;end program with exit code 0
        push    0
        call    process_exit



        ;on error, EAX contains error code
error:
        ;EBX = error message associated with error code in EAX
        push    eax
        call    err_text
        mov     ebx, eax

        ;write "error"
        push    offset _error
        push    offset stream_stderr
        call    text_write

        ;write EBX error message
        push    ebx
        push    offset stream_stderr
        call    text_write

        ;unintialize modules
        call    stream_uninit
        call    mem_uninit

        ;end program with exit code 1
        push    1
        call    process_exit


; #########################################################################
.data
        ;your data here
        _example        db "Example of FASMLIB usage in MASM ", 10
                        db "Please type decimal dword value: ",0

        _hex            db "It's 0x",0

        _error          db 10, "Error: ",0

end start

И это не прикол smile 

PM MAIL   Вверх
MAKCim
Дата 28.2.2008, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



Цитата(AndNot @  28.2.2008,  02:43 Найти цитируемый пост)
Перекомпиляция под любую платформу не требует изменения сорсов ;) 

ну давай перекомпилируй для PowerPC
или для MIPS
или для ARM
 smile 



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
AndNot
Дата 28.2.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.2.2008

Репутация: нет
Всего: нет



MAKCim, аппетит приходит во время еды? Сначала речь была о никсах и винде, что я и сделал ;) 
Но если уж говорить об аппаратной кроссплатформенности, то и здесь асм иногда рулил. Или ты никогда не слышал о препроцессорах? Я сталкивался только два раза. Первый раз, когда переводил код с Z80 на x86. Препроцессор справился на пять, оставалось только подправить работу с железом, впрочем и с сишными сорсами были те же самые траблы. Второй раз столкнулся, когда понадобилось научить тасм командам MMX и SSE, благо был уже готовый код из какой то книжки. Не сомневаюсь, что можно написать препроцессор для компиляции x86 под тот же PowerPC. Только зачем это надо? Аппаратные различия платформ настолько велики, что от кроссплатформенных приложений нет никакого толка, они обречены на отставание от специализированных. Пример? Недавно был холивар с плюсовиками. Пока они отставали, по скорости, совсем немного(порядка 10-30%, на задачках в сотню-другую тактов), то напирали на то, что мол это ерунда, зато кроссплатформенно. Предложил реальную задачу, где крайне важна скорость (простое альфа-наложение). Их отставание стало в несколько раз! После чего один профи(в самом лучшем понимании этого слова) выдал блестящий сишный код:
Код
template <int count>
void AlphaFunc(RGBQUAD*& p1, const RGBQUAD*& p2, const Iu16vec4& alpha);

template <>
__forceinline void AlphaFunc<2>(RGBQUAD*& p1, const RGBQUAD*& p2, const Iu16vec4& alpha)
{
    Iu8vec8 m1(*reinterpret_cast<__m64*>(p1));
    Iu8vec8 m2(*reinterpret_cast<const __m64*>(p2));
    
    MLong<Iu16vec4> lm1 = MLong<Iu16vec4>::Unpack(m1, Iu8vec8(0));
    MLong<Iu16vec4> lm2 = MLong<Iu16vec4>::Unpack(m2, Iu8vec8(0));
    MLong<Iu16vec4> lma(alpha, alpha);
    MLong<Iu16vec4> lm1x256 = MLong<Iu16vec4>::Unpack(Iu8vec8(0), m1);

    (((lm2 - lm1) * lma + lm1x256) >> 8).PackUSat(m1);

    *reinterpret_cast<__m64*>(p1) = m1;
    p1 += 2; p2 += 2;
}

template <>
__forceinline void AlphaFunc<1>(RGBQUAD*& p1, const RGBQUAD*& p2, const Iu16vec4& alpha)
{
    Iu8vec8 m1(*reinterpret_cast<int*>(p1));
    Iu8vec8 m2(*reinterpret_cast<const int*>(p2));

    Iu16vec4 lm1 = unpack_low(m1, Iu8vec8(0));
    Iu16vec4 lm2 = unpack_low(m2, Iu8vec8(0));
    Iu16vec4 m1x256 = unpack_low(Iu8vec8(0), m1);

    Iu32vec2 res = packu_sat(Is16vec4(((lm2 - lm1) * alpha + m1x256) >> 8), Is16vec4(0));

    *reinterpret_cast<int*>(p1) = res[0];
    ++p1; ++p2;

}

void Alpha(Bitmap& srcBitmap, Bitmap& imgBitmap, int x0, int y0, int alpha)
{
    int width1 = srcBitmap.Width();
    int width2 = imgBitmap.Width();
    int height1 = srcBitmap.Height();
    int height2 = imgBitmap.Height();
    int xOver = width2 + x0 - width1;
    if (xOver > 0)
        x0 -= xOver;
    int yOver = height2 + y0 - height1;
    if (yOver > 0)
        y0 -= yOver;
    if (alpha < 0)
        alpha = 0;
    if (alpha > 256)
        alpha = 256;

    RGBQUAD* pix1 = srcBitmap.GetPixelPtr(x0, y0);
    const RGBQUAD* pix2 = imgBitmap.GetPixelPtr(0, 0);
    Iu16vec4 mAlpha(alpha, alpha, alpha, alpha);
    bool firstOdd = x0 % 2 == 1;
    bool lastHalf = (width2 - x0 % 2) % 2 == 1;
    int cntPairs = (width2 - x0 % 2) / 2;
    for (int i = 0; i < height2; ++i)
    {
        if (firstOdd)
            AlphaFunc<1>(pix1, pix2, mAlpha);
        for (int j = 0; j < cntPairs; ++j)
        {
            AlphaFunc<2>(pix1, pix2, mAlpha);
        }
        if (lastHalf)
            AlphaFunc<1>(pix1, pix2, mAlpha);
        pix1 += width1 - width2;
    }
}
Он отстал от моего всего на 30-50% (зависит от машины). Это я к чему? MAKCim, а тебе не кажется, что теперь и я могу заявить о том, что Плюсы не кроссплатформенны? Что, я не прав? Ну тогда компильни мне этот пример под ARM, MIPS, PowerPC, а еще лучше под Z80(он до сих пор производится и успешно применяется) ;) Только не надо говорить о том, что это редкость, подобных "кроссплатформенных" сорсов пруд пруди, особенно когда дело доходит до кодинга железа.
Так что не надо передергивать, полностью кроссплатформенных языков не может быть в принципе, у каждого свои ограничения. Впрочем можно назвать жабу, но это и не язык, а так, не пойми что (чисто имхо) smile 

PM MAIL   Вверх
MAKCim
Дата 28.2.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



AndNot, 
я не спорю, что и на ЯВУ можно писать программы, которые не будут кроссплатформенны
однако только лишь по семантике, а не по исходному коду (к примеру, различия между big и little-endian в тех случаях, где это важно)
здесь ЯВУ просто заменяет ассемблер и выступает в качестве инструмента, с помощью которого можно сделать те же вещи, только быстрее + его использование дает возможность избавится от большОго числа абсолютно не нужных зависимостей от архитектуры CPU и формата его инструкций
в остальном код на ЯВУ переносим, лишь бы был компилятор на целевой платформе
а вот насчет препроцессоров сильно сомневаюсь
ЯВУ определяет общие операции, отображение которых в инструкции возможно для всех (или для большинства точно) архитектур
ассемблер же расширяет круг используемых инструкций, некоторые из которых просто не могут быть преобразованы препроцессором в аналогичные инструкции другой архитектуры
возьмем, к примеру, те же CLFLUSH, WBINVLD, MWAIT, PAUSE и пр.
по поводу примера, может я туплю, но я не вижу в чем проблема
поясни
потенциальный затык может быть в месте сдвига на 8
Цитата(AndNot @  28.2.2008,  12:45 Найти цитируемый пост)
полностью кроссплатформенных языков не может быть в принципе, у каждого свои ограничения

еще раз говорю
есть задачи, которые по своей природе не могут быть кроссплатформенными
однако все ЯВУ кроссплатформенны 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
AndNot
Дата 28.2.2008, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.2.2008

Репутация: нет
Всего: нет



Цитата(MAKCim @  28.2.2008,  15:04 Найти цитируемый пост)
а вот насчет препроцессоров сильно сомневаюсь
Правильно делаешь, иначе они бы давно стали пользоваться спросом smile Это просто был пример, из личной жизни.
Цитата(MAKCim @  28.2.2008,  15:04 Найти цитируемый пост)
по поводу примера, может я туплю, но я не вижу в чем проблема 
поясни
Проблема одна - код жестко привязан к x86. Если присмотришся, то увидишь такие команды: unpack_low, packu_sat и прочие. Это костыли от Интела, которые переводятся непосредственно в MMX-инструкции, своеобразная замена встроенному асму. Были выпущены лишь из-за того, что они так и не научили свой компилятор самостоятельно их использовать. Используя эту возможность Сишник сознательно отказывается от аппаратной кроссплатформенности, в пользу производительности (а выигрыш не малый).
Цитата(MAKCim @  28.2.2008,  15:04 Найти цитируемый пост)
есть задачи, которые по своей природе не могут быть кроссплатформенными однако все ЯВУ кроссплатформенны  
Верно, только замечу, что это для программ не сложнее Hello World!. Или приходится капитально ограничивать функционал программы. Например, возьмем сокеты. Не секрет, что можно написать программу, которая будет работать как под никсами, так и под виндой. И все бы хорошо, если бы не тот факт, что под виндой это будет работать, мягко говоря, отвратительно. У нее слишком другая архитектура, под которую мягкотелые разработали значительно более мощные методы работы с сокетами. Причем разница по производительности, между никсовским и виндозным методами, будет в десятки раз! Уже один этот факт заставляет писать сервера в двух вариантах smile 
Или возьми те проблемы, что возникли у Сишников, при переносе своих программ под 64-х битную архитектуру. Проблемы то возникли на ровном месте - неверная типизация данных. И это показало все "кроссплатформенность" во всей ее красе smile 
В этом и есть ответ, почему HLA не пользуется популярностью - ассемблерщикам не нужна полная кроссплатформенность, у них другие задачи. Если кто-то нанял асмовщика, то понятно, что под определенную архитектуру. Ну может еще условие поставят - под никсы и винды, что вполне реально, тем более либ пруд пруди.
Собственно я только и хотел упомянуть, что асм может быть отчасти кроссплатформенным, пускай и с ограничениями по аппаратной части, но в остальном вполне реально. Но кому это нужно?
PM MAIL   Вверх
MAKCim
Дата 28.2.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



Цитата(AndNot @  28.2.2008,  17:15 Найти цитируемый пост)
Используя эту возможность Сишник сознательно отказывается от аппаратной кроссплатформенности, в пользу производительности (а выигрыш не малый).

из-за этого С не перестал быть кроссплатформенным  smile 
Цитата(AndNot @  28.2.2008,  17:15 Найти цитируемый пост)
И все бы хорошо, если бы не тот факт, что под виндой это будет работать, мягко говоря, отвратительно. У нее слишком другая архитектура, под которую мягкотелые разработали значительно более мощные методы работы с сокетами

поэтому и надо использовать кроссплатформенные библиотеки, оптимизированные для каждой ОС  smile 
Цитата(AndNot @  28.2.2008,  17:15 Найти цитируемый пост)
Или возьми те проблемы, что возникли у Сишников, при переносе своих программ под 64-х битную архитектуру. Проблемы то возникли на ровном месте - неверная типизация данных. И это показало все "кроссплатформенность" во всей ее красе 

причем здесь кроссплатформенность?
это руки
при правильном подходе проблем с переходом от 32 к 64 нет
пример - кроссплатформенная сишная часть кода ядра Linux
работает без изменения кода на всех поддерживаемых архитектурах


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
AndNot
Дата 28.2.2008, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.2.2008

Репутация: нет
Всего: нет



Цитата(MAKCim @  28.2.2008,  18:09 Найти цитируемый пост)
причем здесь кроссплатформенность?
это руки
при правильном подходе проблем с переходом от 32 к 64 нет
Да как тебе сказать то. Раз язык поддерживает некоторые типы данных, то почему программист не должен их использовать (а иначе зачем тогда они вообще существуют)? А раз их использование создает определенные трудности с переносом на другую платформу, то извини, но это не кроссплатформенный язык. ИМХО это скорее язык с возможностью написания таких приложений. Но это немножко разные вещи. 
Цитата(MAKCim @  28.2.2008,  18:09 Найти цитируемый пост)
поэтому и надо использовать кроссплатформенные библиотеки, оптимизированные для каждой ОС  smile 
А кто мешает использовать их ассемблерщику? Но ты же сам подразумевал, что это еще не кроссплатформенность ;) Вообще не мешало бы поточнее определиться, что понимать под термином "кроссплатформенность". 

PM MAIL   Вверх
MAKCim
Дата 28.2.2008, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 1
Всего: 207



Цитата(AndNot @  28.2.2008,  20:52 Найти цитируемый пост)
Раз язык поддерживает некоторые типы данных, то почему программист не должен их использовать

а что за данные?
Цитата(AndNot @  28.2.2008,  20:52 Найти цитируемый пост)
Вообще не мешало бы поточнее определиться, что понимать под термином "кроссплатформенность". 

да запросто
есть некоторый код на некотором ЯП
код является кроссплатформенным, если он без изменения может быть скомпилирован (естественно, при наличии компилятора) и запущен на более чем одной платформе
платформа представляет собой совокупность аппаратных (архитектура CPU) и програмных (ОС) компонентов
например PowerPC + Linux, IA-64 + Linux, AMD64 + Windows и т. д

Это сообщение отредактировал(а) MAKCim - 28.2.2008, 22:18


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
dumb
Дата 29.2.2008, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 4
Всего: 158



Цитата(AndNot @  28.2.2008,  20:52 Найти цитируемый пост)
Вообще не мешало бы поточнее определиться, что понимать под термином "кроссплатформенность".
вернулись. см. 4-ый пост smile
PM MAIL   Вверх
AndNot
Дата 1.3.2008, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.2.2008

Репутация: нет
Всего: нет



Цитата(MAKCim @  28.2.2008,  22:17 Найти цитируемый пост)
платформа представляет собой совокупность аппаратных (архитектура CPU) и програмных (ОС) компонентов
например PowerPC + Linux, IA-64 + Linux, AMD64 + Windows и т. д
Ну так я же представил код под две платформы: x86+Windows и x86+Linux ;) Могу представить образец программы, под x86 (16-ть бит) и Z80 (8-бит). А это уже разные аппаратные платформы ;) Так на каком основании ты утверждаешь, что асм не может быть кроссплатформенным, поскольку я выполнил условие: 
Цитата(MAKCim @  28.2.2008,  22:17 Найти цитируемый пост)
если он без изменения может быть скомпилирован (естественно, при наличии компилятора) и запущен на более чем одной платформе

Так в чем вопрос то? Я и не утверждал, что можно на всех, но под две-три вполне реально, было бы желание.
Цитата(dumb @  29.2.2008,  09:25 Найти цитируемый пост)
вернулись. см. 4-ый пост 
Да ничего удивительного ;) Ведь это понятие довольно расплывчатое, каждый понимает его по своему.

PM MAIL   Вверх
overmet
Дата 27.10.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 15.8.2009
Где: Gomel

Репутация: нет
Всего: -2




Модератор: Сообщение скрыто.

PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0681 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.