The OpenNET Project / Index page

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



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

Оглавление

Дрю ДеВолт представил язык системного программирования Hare, opennews (?), 25-Апр-22, (0) [смотреть все]

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


88. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аноним (-), 25-Апр-22, 18:37 
> Можно, но только как указатели на функции (как и в си). Свою
> vtable тоже неси.

А эффективно вернуть из функции несколько параметров оно могет?

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

255. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аниме (?), 27-Апр-22, 05:03 
Да, tuples есть
Ответить | Правка | Наверх | Cообщить модератору

280. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аноним (-), 27-Апр-22, 17:09 
> Да, tuples есть

Так то вернуть struct я и из сей могу, но вот элегантно вернуть парочку независимых int'ов или там чего еще? Или даже небольшой массив? Ну то-есть симметрирование входа и выхода функций, чтобы более-менее равноправно было. Типа return (u32) nread, (u16) errcode, extra[10]? В допушении что прототип заявлен на возврат вот этого. Некоторые что-то сравнимое вроде могут. На сях это при желании struct делается, но не очнь удобно.

Просто сишники имеют обыкновение использовать пойнтеры на ВХОД функции для возврата сложных конструкций. Это криво хотя-бы потому что из этой декларации не очевидно реальное намерение программера - использование входа для декларации выхода все же криво.

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

305. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аниме (?), 28-Апр-22, 11:57 
Элегантнее тюплов пока ничего еще не придумали
Ответить | Правка | Наверх | Cообщить модератору

316. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аноним (-), 29-Апр-22, 06:36 
> Элегантнее тюплов пока ничего еще не придумали

Я вот не понимаю, какие принципиальные проблемы сделать список аргументов, как на вход, симметрично? Даже пусть они все и mandatory будут. И так же возвращать в регистрах/стэке/памяти/кому там что больше нравится, как входные аргументы.

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

323. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аниме (?), 29-Апр-22, 16:03 
Потому что неэлегантно
Ответить | Правка | Наверх | Cообщить модератору

333. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аноним (-), 30-Апр-22, 02:13 
> Потому что неэлегантно

Неэлегантно это когда вход и выход функции несимметричные имхо.

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

283. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аноним84701 (ok), 27-Апр-22, 18:27 
> Да, tuples есть

Но QBE, насколько я понял, умеет возвращать только int или указатель.

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

304. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Anime (?), 28-Апр-22, 11:55 
use fmt;

export fn main() void = {
        const t = ret();
        fmt::printfln("({}, {})", t.0, t.1)!;  // prints (1, 2)
};

fn ret() (u8, i32) = {
        return (1, 2);
};

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

307. "Дрю ДеВолт представил язык системного программирования Hare"  +1 +/
Сообщение от Аноним84701 (ok), 28-Апр-22, 13:17 
> use fmt;
> export fn main() void = {
>         const t = ret();
>         fmt::printfln("({}, {})", t.0, t.1)!;
>  // prints (1, 2)
> };
> fn ret() (u8, i32) = {
>         return (1, 2);
> };


00000000080000d8 <main>:
80000d8:       55                      push   %rbp
80000d9:       48 89 e5                mov    %rsp,%rbp
80000dc:       48 81 ec 10 01 00 00    sub    $0x110,%rsp
80000e3:       e8 ae 01 00 00          callq  8000296 <ret>
80000e8:       48 89 85 f8 fe ff ff    mov    %rax,-0x108(%rbp)
80000ef:       8b 8d f8 fe ff ff       mov    -0x108(%rbp),%ecx
80000f5:       89 8d 00 ff ff ff       mov    %ecx,-0x100(%rbp)
...
<ret>:
8000296:       55                      push   %rbp
8000297:       48 89 e5                mov    %rsp,%rbp
800029a:       48 83 ec 10             sub    $0x10,%rsp
800029e:       c6 45 f8 01             movb   $0x1,-0x8(%rbp)
80002a2:       c7 45 fa 02 00 00 00    movl   $0x2,-0x6(%rbp)
80002a9:       48 8b 45 f8             mov    -0x8(%rbp),%rax
80002ad:       c9                      leaveq
80002ae:       c3                      retq  

> эффективно

*кхе*

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

309. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аниме (?), 28-Апр-22, 17:08 
А че, LLVM может эффективнее генерить?
Ответить | Правка | Наверх | Cообщить модератору

310. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аноним84701 (ok), 28-Апр-22, 17:42 
> А че, LLVM может эффективнее генерить?


#include <stdio.h>
#include <stdint.h>
struct tuple {
  uint8_t val1;
  int32_t val2;
};

struct tuple ret(void) {
    struct tuple vals = {1,2};
    return vals;
}
int main(void) {
  const struct tuple t = ret();
  printf("%d %d", t.val1, t.val2);
  return 0;
}

% clang -O2 -S ret.c && more ret.s

ret:                                    # @ret
        .cfi_startproc
# %bb.0:
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset %rbp, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register %rbp
        movabsq $8589934593, %rax       # imm = 0x200000001
        popq    %rbp
        .cfi_def_cfa %rsp, 8
        retq

...
main:                                   # @main
        .cfi_startproc
# %bb.0:
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset %rbp, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register %rbp
        movl    $.L.str, %edi
        movl    $1, %esi
        movl    $2, %edx
        xorl    %eax, %eax
        callq   printf


gcc -O2:

ret:
.LFB1:
        .cfi_startproc
        movabsq $8589934593, %rax
        ret
        .cfi_endproc

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

311. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аниме (?), 28-Апр-22, 18:45 
Ладно, зато QBE компилится за секунду. А вообще он обещает ~70%  оптимизаций от GCC/LLVM, с чем я готов мириться за минимализм.
Ответить | Правка | Наверх | Cообщить модератору

317. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аноним (-), 29-Апр-22, 06:44 
> Ладно, зато QBE компилится за секунду. А вообще он обещает ~70%  
> оптимизаций от GCC/LLVM, с чем я готов мириться за минимализм.

Хм... вообще штуки типа LTO могут выпилить добрую треть бинаря без каких либо потерь в скорости или функциональности. Оно делает глобальный анализ по всему коду вообще и дальше выносит повторные прогрузки регистров, доказуемо не вызываемые блоки кода, реюзает все что реюзается - и в итоге довольно нехило убавляет размер кода. Что как бы здорово. Особенно в системщине.

Так что на самом деле реализация на основе llvm или gcc - была бы очень интересной идеей. А это... оно бутстрапать себя умеет? Или как его собрать то?

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

324. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аниме (?), 29-Апр-22, 16:10 
Вообще было бы интересно собрать прототипчик на libgccjit, но мне лень с ним разбираться. Если до финализации спеки никто не сделает и они запилят borrow checker, то можно потыкать.

> оно бутстрапать себя умеет? Или как его собрать то?

Там нечего бутстрапить, на с89 написан.

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

327. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аноним (-), 29-Апр-22, 18:31 
> Вообще было бы интересно собрать прототипчик на libgccjit, но мне лень с
> ним разбираться. Если до финализации спеки никто не сделает и они
> запилят borrow checker, то можно потыкать.

На мой вкус лучше б в gcc полноценно заинтегрили что-то такое, вот так было бы очень инетерсно потыкать. Может даже накодив пару фирмварей "на поблевать", посмотреть сколько грабель я в процессе соберу.

> Там нечего бутстрапить, на с89 написан.

Что-то эти .ha из https://git.sr.ht/~sircmpwn/hare/tree на C89 не очень похожи...  впрочем я уже нашел https://git.sr.ht/~sircmpwn/harec который таки на си, но таки C11...

Остался только 1 вопрос: а на C89 кто все-таки был? :)

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

336. "Дрю ДеВолт представил язык системного программирования Hare"  +/
Сообщение от Аниме (?), 30-Апр-22, 04:08 
QBE, я думал мы про бекенды разговариваем
Ответить | Правка | К родителю #327 | Наверх | Cообщить модератору

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

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




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

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