The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Опубликованы тесты простейших приложений на различных языках..., opennews (??), 08-Дек-19, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


196. "Опубликованы тесты простейших приложений на различных языках..."  –2 +/
Сообщение от Моржовый (?), 08-Дек-19, 19:58 
Вот аналог программы на ассемблере, написанный на C:
/*
*!gcc -e_Main -nostdlib -o "%<" % -lmsvcrt -lkernel32 && "%<"
*/
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
void Main()
{
    char s[] = "hello\n";
    const unsigned sSize = sizeof(s)/sizeof(s[0]) - 1;
    /*fwrite(s, sSize, 1, stdout);*/
    DWORD outCnt;
    WriteConsole(
        GetStdHandle(STD_OUTPUT_HANDLE),     //handle to a console screen buffer
        s,     //pointer to buffer to write from
        sSize,     //number of characters to write
        &outCnt,     //pointer to number of characters written
        NULL     //reserved
   );
    /*WriteFile(
        GetStdHandle(STD_OUTPUT_HANDLE),    // handle to file to write to
        s,    // pointer to data to write to file
        sSize,    // number of bytes to write
        &outCnt,    // pointer to number of bytes written
        NULL     // pointer to structure needed for overlapped I/O
   );*/
}
И, внезапно, окажется что это то же самое что и асм, только приятней и проще.
Ответить | Правка | Наверх | Cообщить модератору

211. "Опубликованы тесты простейших приложений на различных языках..."  +8 +/
Сообщение от Аноним (211), 08-Дек-19, 21:01 
Mscvrt, windows.h? Это ты так пошутил? Плохое место ты для этого выбрал.
Ответить | Правка | Наверх | Cообщить модератору

219. "Опубликованы тесты простейших приложений на различных языках..."  +/
Сообщение от erthink (ok), 08-Дек-19, 21:30 
На Windows для всех языков не будет такой большой разницы, т.е. все сильно сместится в сторону Java. Это просто последствия намеренного дизайна Windows, и уже без возможности что-либо существенно изменить.

Но если же предложенное проделать в нормальных ОС, то действительно, для C, C++ и Rust с ассемблером существенных различий не будет. Точнее говоря, разница будет определяться только объемом оставленного "сервиса" (stdio, std::iostream, etc).

Ответить | Правка | К родителю #196 | Наверх | Cообщить модератору

282. "Опубликованы тесты простейших приложений на различных языках..."  +/
Сообщение от Аноним (166), 09-Дек-19, 07:48 
>[оверквотинг удален]
>  /*WriteFile(
>   GetStdHandle(STD_OUTPUT_HANDLE), // handle to file to write to
>   s, // pointer to data to write to file
>   sSize, // number of bytes to write
>   &outCnt, // pointer to number of bytes written
>   NULL  // pointer to structure needed for overlapped I/O
>    );*/
> }
> И, внезапно, окажется что это то же самое что и асм, только
> приятней и проще.

Оказывается, ты не понимаешь, что этот "аналог" использует kernel32.dll и ntdll,dll, а вариант для Linux вызывает непосредственно ядро.

Ответить | Правка | К родителю #196 | Наверх | Cообщить модератору

328. "Опубликованы тесты простейших приложений на различных языках..."  +/
Сообщение от Аноним (327), 09-Дек-19, 14:32 
Все правильно, использует API ос.
Ответить | Правка | Наверх | Cообщить модератору

338. "Опубликованы тесты простейших приложений на различных языках..."  +/
Сообщение от Аноним (166), 09-Дек-19, 19:24 
Не угадал. Вызывает kernel32.dll, то есть API подсистемы Win32. API операционной системы Windows NT является Native API. Впрочем, это не имеет отношения к тому, что подобное сравнение некорректно. В Windows NT так же возможно вызывать ядро, но номера системных вызовов различаются от версии к версии.
Ответить | Правка | Наверх | Cообщить модератору

358. "Опубликованы тесты простейших приложений на различных языках..."  +/
Сообщение от Аноним (327), 10-Дек-19, 04:41 
Нет, это не другое. Подсистема входит в ос, апи публичный, практически все приложения используют его. WriteFile и GetStdHandle от write и open принципиально не отличаются.
Ответить | Правка | Наверх | Cообщить модератору

361. "Опубликованы тесты простейших приложений на различных языках..."  +/
Сообщение от Аноним (166), 10-Дек-19, 10:23 
> Нет, это не другое.

Вызов ядра непосредственно через шлюз идентичен динамическому связыванию?))

> Подсистема входит в ос, апи публичный, практически все
> приложения используют его.

Аналогично можно сказать про libc.so

> WriteFile и GetStdHandle от write и open принципиально
> не отличаются.

Вот оно что.))) Пример на асме вызывает не write и open из библиотеки пространства пользователя. Функции определены как sys_write и sys_open макросами, подобными нижеприведённому:


#define SYSCALL_DEFINE0(sname)                    \
    SYSCALL_METADATA(_##sname, 0);                \
    asmlinkage long sys_##sname(void);            \
    ALLOW_ERROR_INJECTION(sys_##sname, ERRNO);        \
    asmlinkage long sys_##sname(void)

https://github.com/torvalds/linux/blob/v5.4/include/linux/sy...
Ответить | Правка | Наверх | Cообщить модератору

291. "Опубликованы тесты простейших приложений на различных языках..."  +/
Сообщение от Anonymoustus (ok), 09-Дек-19, 10:39 
На будущее, анон, пиши код в тегах:


[CODE]

твой говнокод

[/CODE]

На опеннете негодный парсер, так что запоминай, ибо повторять напряжно.

Ответить | Правка | К родителю #196 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру