Size: a a a

2020 October 09

l

longboi in Ada
я орирую еси чо
источник

AV

Alexey Veselovsky in Ada
источник

AV

Alexey Veselovsky in Ada
longboi
я орирую еси чо
яфкурси
источник

W

Wild_Wind in Ada
pragma Ada_2020;
with System, Interfaces.C;

package ada_lib with Export, Convention => CPP is
   package C renames Interfaces.C;
   procedure bla(count: C.size_t; string: C.char_array(count));
   pragma export (cpp, bla, "bla", "_bla");
end ada_lib;

— Во чего наговнокодил.
— А как передать не костантного размера указатель на char?
— Ибо если через char_array, то размер массива должен зашит быть в размер char_array.
— Иначе во шо пишет:

ada_lib.ads:6:56: constraint not allowed here
источник

VM

Victor Miasnikov in Ada
Приятный сюрприз
источник

VM

Victor Miasnikov in Ada
Идея:

Библиотеки и Modula-3:
есть специальная "софтина".

Называется SWIG.

К Питону и ко многому другому из .h файлов "headers" Си формирует нужное для целевого ЯП.

Есть и для M3.
Им подключали ( раза 3-4) LLVM .dll
для компилятора.

И для Ada есть
источник

AV

Alexey Veselovsky in Ada
источник

FO

FORTRAN ONE LOVE in Ada
Alexey Veselovsky
одно вот это является страхом и ужасом:
void method1 (void);
Почему?
источник

AV

Alexey Veselovsky in Ada
FORTRAN ONE LOVE
Почему?
потому, что foo(void) не имеет смысла в с++
источник

FO

FORTRAN ONE LOVE in Ada
Alexey Veselovsky
потому, что foo(void) не имеет смысла в с++
Т.е. так нельзя глобальный стейт обновить?
источник

AV

Alexey Veselovsky in Ada
FORTRAN ONE LOVE
Т.е. так нельзя глобальный стейт обновить?
можно. функция без аргументов в с++ записывается так: foo(), а не foo(void)
источник

МР

Максим Резник... in Ada
Wild_Wind
В доке написано, что может. И что даже эксепшены прокидывать может. Значит я таки запилию это!
Боюсь, это дохлая затея. Вадим когда писал биндинг к Qt обарачивал каждый С++ метод в С враппер, а потом на Аде уже биндил его. Ну не руками, конечно...
источник

W

Wild_Wind in Ada
Максим Резник
Боюсь, это дохлая затея. Вадим когда писал биндинг к Qt обарачивал каждый С++ метод в С враппер, а потом на Аде уже биндил его. Ну не руками, конечно...
Блин, похоже придется через шину биндить.
Поднимать демона и через него через в сокет читать/писать :(
источник

МР

Максим Резник... in Ada
> А как передать не костантного размера указатель на char

Через Interfaces.C.Strings.chars_ptr
источник

AV

Alexey Veselovsky in Ada
а почему дохлый? вроде ада позволяет даже плюсовые классы наследовать
источник

AV

Alexey Veselovsky in Ada
а потом возвращать и плюсы от них чтобы уже наследовались
источник

W

Wild_Wind in Ada
Максим Резник
> А как передать не костантного размера указатель на char

Через Interfaces.C.Strings.chars_ptr
pragma Ada_2020;
with System, Interfaces.C;

package ada_lib with Export, Convention => CPP is
   package C renames Interfaces.C;
   procedure bla(str: Interfaces.C.Strings);
end ada_lib;

ada_lib.ads:6:36: "Strings" not declared in "C"
gprbuild: *** compilation phase failed
источник

МР

Максим Резник... in Ada
with Interfaces.C.Strings;
Это отдельный пакет
источник

W

Wild_Wind in Ada
Максим Резник
with Interfaces.C.Strings;
Это отдельный пакет
Я думал, что раз я подключил весь Interfaces.C, то Interfaces.C.Strings - тоже подключится, как часть пакета.
источник

МР

Максим Резник... in Ada
Alexey Veselovsky
а почему дохлый? вроде ада позволяет даже плюсовые классы наследовать
Ну наследовать ты можешь, а чтобы вызвать метод С++ класса его же нужно в Аде объявить. А объявить, как я понимаю, надо в той последовательности в которой они в виртуальной таблице лежат. А сделать это руками для нетривиального класса будет проблематично.
источник