1 (изменено: Freeman, 05.12.2020 в 18:00)

Тема: PikaOS и Miraculix

Есть такая всеми позабытая PikaOShttps://web.archive.org/web/20161027043 … /index.php

И хотя сайт существовал вплоть до 2016 года, вы больше не найдете о ней информации в Интернете и уж тем более не скачаете эту ОС. Я связался с автором и он любезно выслал мне [s]крайнюю[/s] последнюю версию бинартиков и исходников.

https://drive.google.com/file/d/1dYaca3 … -1Z_P/view
Пароль сеанса VBox: piko399

Написана она на TinyC и NASM'e.
Из самого интересного, лично для меня, - это браузер, который вначале был написан на TinyC и затем переписан на NASM. В архиве есть обе версии исходников. Браузер умеет WEB 1.0: таблицы и формы. Я был впечатлен как он отображает http://fdd5-25.net и http://old-dos.ru/
Также из хорошего: в ядре есть поддержка ACHI на асме. Хотет.

Забавно что функции работы со строками носят Паскалевские названия вроде intotostr.

2

Re: PikaOS и Miraculix

Leency, ну судя по скриншотам и API это интересный проект smile

Leency пишет:

функции работы со строками носят Паскалевские названия вроде intotostr

Очень хорошо, что они носят такие понятные названия — понятность и читаемость кода это важно.
По-твоему лучше в сишном стиле?
strpbrk, strcspn, strxfrm smile

А я тут вспомнил про Miraculix
Кстати, очередная версия была выпущена 29 Августа 2019.
Да, её исходники на данный момент закрыты.
Но я решил связаться с её автором.
Он сказал, что открывает их желающим помочь проекту.
Проект пока он забросил из-за того, что не видит практического применения.
Там проблема с поддержкой сети. Драйвера нужны под каждую сетевую карту.
Это бы всё изменило.

А вспомнил я потому, что в ней, как и в PikaOS, ещё давным-давно догадались дать осмысленные имена системным функциям.
Кстати, в Miraculix используется формат PE и для приложений(.EXE), и для библиотек(.DLL), и для драйверов(.DRV).
Вот API Miraculix http://miraculix.ru/docs/mx_api.html
То есть, вместо того, чтобы запоминать в каких регистрах должен находится тот или иной номер, выдумывать какой-то mcall, несовместимый ни с чем, они сделали простые и понятные названия!
И это замечательно!
Это как раз то, чем я и занимаюсь в рамках SDK и KolibriOS.Lib.

В принципе и сишники могли бы сделать для С заголовочные файлы.
Начало я показал на форуме
И ещё тут на SVN
Это вместо того, чтобы продолжать изобретать каждый раз свои велосипедики.
Можно сделать один большой, качественный, протестированный и для всех.
К примеру, в WinAPI функции одни и те же для всех языков программирования.
Поэтому даже программирующие на разных языках легко поймут суть исходного кода.

3 (изменено: Leency, 05.12.2020 в 14:52)

Re: PikaOS и Miraculix

Программирование в Колибри я начинал именно с Паскаля, т.к. до этого плотно сидел на Delphi7 http://kolibri-n.org/inf/eolite/eolite_p1
И как сейчас помню, изначальная функция перевода числа в строку в С-- была именно inttostr(), уже потом я поменял ее на itoa() и мне было дико непривычно что "куда" это первый аргумент.

В Си-подобных языках мне нравится {} и я понимаю что begin/end поставлено на хоткеи, но все же. В остальном мне сложно судить что лучше учитывая что я уже лет 10 на Паскале не писал.

mcall как я понимаю более экономный в плане размера программы чем названия функций. Минус читабельность - да.

Прикольно что Miraculix жив smile
Правда его автор работает в чем-то вроде киберполиции и это зашквар.

4

Re: PikaOS и Miraculix

Leency пишет:

mcall как я понимаю более экономный в плане размера программы чем названия функций. Минус читабельность - да.

"Экономный в плане размера" — только в том случае, если функция используется единожды, так как код тела функции вставляется столько раз, сколько эта функция используется.

Что касается скорости выполнения, то узкое место — системный вызов сам по себе, а "положить на стек параметры и сделать call" — выполняется на порядок быстрее.
Если интересно, то вот статья на Хабре: Стоимость операций в тактах ЦП

"Минус читабельность" — да, и здесь тоже минус.

Вот я и говорю, что выдумали mcall, от которого никаких плюсов нет, но есть минусы.
И снова могу привести пример, который уже приводил:

mcall:

mcall SF_SYSTEM, SSF_MOUSE_SETTINGS, SSSF_GET_DOUBLE_CLICK_DELAY

вызов функции из KolibriOS.Lib:

Invoke GetDoubleClickTime

Так что, как не пытайтесь сделать mcall удобным — это не получится.
Просто вызывайте функции с понятными для человека названиями — и всего-то!

Добавлено 2020-12-24 в 16:00

Leency пишет:

В Си-подобных языках мне нравится {} и я понимаю что begin/end поставлено на хоткеи, но все же. В остальном мне сложно судить что лучше

Ну всё же семантика в языках программирования важнее, чем синтаксис.

Да, ты можешь, конечно, в Си задефайнить что угодно, но от этого он не превратится в другой язык программирования.

Приведу кусочек кода из одного проекта на Си
/* 
VALX linker
Copyright 1997-2011 David Lindauer.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

Original 16-bit linker written by:
David Troendle

You may contact the author of this derivative at:
    mailto::camille@bluegrass.net
 */
/*                                 LANGEXT.H                               */

/* Fixup some C syntax I really don't like
   De gustibus non est desputandum
   (Concerning taste there is not argument -- or
    Only fools argue where taste is concerned) */


/* Block basic C commands */
#pragma pack(1)

#define If                   if (
#define Then                 ) {
#define Else                 } else {
#define ElseIf               } else if (
#define EndIf                }

#define Using                switch (
#define BeginCase            ) {
#define When                 case
#define Otherwise            default
#define EndCase              }

#define Loop                 while(1)
#define BeginLoop            {
#define EndLoop              }
#define ExitLoop             break
#define ContinueLoop         continue
#define ExitIf(cond)         if (cond) break
#define LoopIf(cond)         if (cond) continue

#define While                while (
#define BeginWhile           ) {
#define EndWhile             }

#define Repeat               do
#define BeginRepeat          {
#define RepeatIf             } while ((
#define Until                } while (!(
#define EndRepeat            ))

#define For                  for (
#define BeginFor             ) {
#define EndFor               }

#define ReturnIf(cond)         if (cond) return
#define Return               return

#define BeginDeclarations    {
#define EndDeclarations
#define BeginCode
#define EndCode              }

#define Type                 typedef

#define Structure           struct
#define BeginStructure      {
#define EndStructure        }

#define Union               union
#define BeginUnion          {
#define EndUnion            }

#define Enumeration         enum
#define BeginEnumeration    {
#define EndEnumeration      }

Отличия Си и Pascal далеко не только в фигурных скобках.
Например, сравнительная таблица есть вот тут
Также есть статья на wiki(конечно, статья общая, не для всех диалектов языка)

5

Re: PikaOS и Miraculix

0CodErr пишет:

Кстати, в Miraculix используется формат PE и для приложений(.EXE), и для библиотек(.DLL), и для драйверов(.DRV).

Скачал я как-то эту вашу Miraculix... Вот по кому PE Tool плачет! В моих правилах — не ругать любительские проекты, но впендюрить манифест в exe-шник под Miraculix — за гранью добра и зла. Креотону единица за аккуратность. Или кто у них собирает?