LINUX.ORG.RU

Модули... модули? Какие модули?!

 ,


0

5

Привет, ЛОР!

Решил я тут взять C++ для одного своего маленького проекта. Давно ничего сложнее багфиксов в старый код не писал на этом языке по причине его особой не нужности, но тут подумал: «Почему бы и нет?» Естественно, хочу C++ со всеми последними вкусностями, в частности нормальными модулями.

Скажи, ЛОР, как эти модули вообще использовать? Если в рамках моего проекта всё примерно понятно, то использование модулей из сторонних библиотек вызывает много вопросов. Стандартная библиотека, как я понимаю, в модули до сих пор не обёрнута?

Компиляция вот этого примера падает с кучей странных ошибок:

import <iostream>;
import <string>;

std::string s = "Hello World";

int main(void)
{
  std::cout << s << std::endl;
}
$ g++ -std=c++2b -fmodules-ts mod.cc -o mod
In module imported at mod.cc:1:1:
/nix/store/z9jxhrbxm5lxrjpia9xcqjgk990ffr2j-gcc-11.1.0/include/c++/11.1.0/iostream: error: failed to read compiled module: No such file or directory
/nix/store/z9jxhrbxm5lxrjpia9xcqjgk990ffr2j-gcc-11.1.0/include/c++/11.1.0/iostream: note: compiled module file is ‘gcm.cache/./nix/store/z9jxhrbxm5lxrjpia9xcqjgk990ffr2j-gcc-11.1.0/include/c++/11.1.0/iostream.gcm’
/nix/store/z9jxhrbxm5lxrjpia9xcqjgk990ffr2j-gcc-11.1.0/include/c++/11.1.0/iostream: note: imports must be built before being imported
/nix/store/z9jxhrbxm5lxrjpia9xcqjgk990ffr2j-gcc-11.1.0/include/c++/11.1.0/iostream: fatal error: returning to the gate for a mechanical issue
compilation terminated.
$ 
$ clang++ -std=c++2b -fmodules-ts mod.cc -o mod
mod.cc:1:8: error: header file <iostream> (aka '/nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/iostream') cannot be imported because it is not known to be a header unit
import <iostream>;
       ^
mod.cc:2:8: error: header file <string> (aka '/nix/store/dlni53myj53kx20pi4yhm7p68lw17b07-gcc-10.3.0/include/c++/10.3.0/string') cannot be imported because it is not known to be a header unit
import <string>;
       ^
mod.cc:4:1: error: use of undeclared identifier 'std'
std::string s = "Hello World";
^
mod.cc:8:3: error: use of undeclared identifier 'std'
  std::cout << s << std::endl;
  ^
mod.cc:8:21: error: use of undeclared identifier 'std'
  std::cout << s << std::endl;
                    ^
5 errors generated.

GCC и Clang почти последние: 11.1 и 12.0.1. Выходит, модули не работают? Что делать, ЛОР? Отложить C++ до лучших времён?

★★★★★

Последнее исправление: hateyoufeel (всего исправлений: 2)
Ответ на: комментарий от peregrine

Ну это проблемы магазина, телефонов на 11-м полно уже понаделали.

slapin ★★★★★
()
Ответ на: комментарий от anonymous

Влияние одного заголовочного файла на другой есть независимо от типа компилятора.

monk ★★★★★
()
Ответ на: комментарий от anonymous

Если честно говоря, то все эти mxl - «лаба», но ПОЛЕЗНАЯ …

Ныне добавляю в архитектуру и конечно разрабатываю API, которое позволит содержать метаданные о иерархических данных.
API позволит к примеру создать объектную базу в которую можно положить метаданные конфигуратора и данных 1С 8.3 любого проекта.

Всё выше, и выше, и выше
Стремим мы полёт API,
И с каждою функцией проще
Вести разработку программ.

Потому вот и вспомнил о mxl 1С 8.3 …

anonymous
()
Ответ на: комментарий от anonymous

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

Так как в API нет никаких зависимостей от стороннего API, то его можно будет использовать в любой ОС.

Шутка /но с долей правды/

Вполне реально для Linux создать иерархическую метадата базу, которая будет метаданные о Linux в целом.
То бишь метаданные о сети, …, …, …

Хватит уже дистрибутивы плодить!
anonymous
()
Ответ на: комментарий от anonymous

Хватит уже дистрибутивы плодить!

Интересная статья https://habr.com/ru/post/576304/ Как снизить зависимость кода от структуры данных?

Не понятно - «Это идеи или уже есть конкретная разработка?» …

anonymous
()
Ответ на: комментарий от anonymous

Не понятно - «Это идеи или уже есть конкретная разработка?» …

Похоже идеи

Идей много, а реализаций мало
anonymous
()
Ответ на: комментарий от anonymous

Идей много, а реализаций мало

Как сказал бы Хазанов …

Раз существуют метаданные, то существуют и данные.  
Раз существуют     данные, то существуют и метаданные.  
С метаданными легче управлять данными.

Фантазии 23-го стандарта C++ отложу в СТОРОНУ /но с идеями ознакомлюсь/ …

anonymous
()
Ответ на: комментарий от anonymous

Вполне реально для Linux создать иерархическую метадата базу, которая будет метаданные о Linux в целом. То бишь метаданные о сети, …, …, …

Не желает ли кто создать xml-s, содержащих метаданные о конфигурации Linux?
В метадата базу эти данные можно будет поместить пятью строчками кода на C или C++ …

Понятно, что сами xml будут не пригодны для администрирования /права доступа к метаданным, …/.
В метадату базу же не сложно добавить права доступа на разделы, …

Шутка

Как говорил персонаж из мультфильма о Карлсоне

По телевизору показывают Windows ...
Но чем мы хуже?
anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

Понятно, что сами xml будут не пригодны для администрирования /права доступа к метаданным, …/.

Потому как к разным конфигам права на доступ разные.
К примеру Вася может иметь права лишь для изменений некоторых конфигов,
Если же xml будет содержать узлы с метаданными на разные конфиги, то как обеспечить права доступа к узлам xml?

anonymous
()
Ответ на: комментарий от anonymous

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

Владимир! Вы, как я понимаю, исходников своего творения выкладывать никуда не собираетесь? Просто не обижайтесь тогда, что на эти комментарии тут смотрят как флуд (а в теме про модули C++ это ещё и офтопик).

А вопрос про формат mxl можно было бы задать отдельной темой (зарегистрировавшись, разумеется). 1С под линуксом работает, так что это даже не офтопик.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от anonymous

Ну автор темы эту шутку и имел в виду в заголовке темы, так что комментарий у вас из серии «Спасибо, кэп»!

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Владимир! Вы, как я понимаю, исходников своего творения выкладывать никуда не собираетесь? Просто не обижайтесь тогда, что на эти комментарии тут смотрят как флуд (а в теме про модули C++ это ещё и офтопик).

Это да.

Честно говоря еще предстоит много поработать

Вот rapid система будет бесплатна.
Она будет включать всю функциональность API.

К примеру в Linux можно и с 1С работать.

Исходники где?

Что касаемо предложенного в топиках, то это можно реализовать и без моего API.

Архитектуру Linux нужно развивать

Об этом речь ...
anonymous
()
Ответ на: комментарий от hobbit

а в теме про модули C++ это ещё и офтопик

В Посоветуйте книгу по python для «заканчивающих» к примеру все оффтоп.

Белые придут   - грабят.   
Красные придут - грабят.

@hobbit, в любых тредах на 99% обсуждение идет вне темы треда …

anonymous
()
Ответ на: комментарий от hobbit

Владимир! Вы, как я понимаю, исходников своего творения выкладывать никуда не собираетесь?

Скажу честно почему.

Не готов еще духовно к этому.   

То что разрабатываю - одна из технологий, позволяющих использовать метаданные в run-time.
Конечно не претендую на то, что она лучшая.
Стараюсь конечно архитектуру и API разработать эффективной.

Кроме этого данная технология будет СУПЕР упрощать разработку вредных программ /вирусы, трояны, …/.

Поэтому пока не готов открывать исходники …

anonymous
()
Ответ на: комментарий от anonymous

данная технология будет СУПЕР упрощать разработку вредных программ

Да будет так.

Аминь!

/Один/ Эс.

anonymous
()
Ответ на: комментарий от anonymous

Модули - это семантический инклюды. Нужно понимать фундаментальное отличие С++ от скриптух. Что такое модули? Модули это альтернативное название ворованного из С++ ооп во всякие фп и иже с ним скриптухи. Т.е. это механизм инкапсуляции логи/данных.

В С++ для этого есть другие средства. В ворованной скриптухе типа раста - нет. Поэтому те дошколята, которые понимают под модулями именно ворованное ООП из крестов не понимают как можно жить без них. Но им не рассказали, что в С++ этого ненужно.

В С++ есть иклюды. Это уже полностью состоятельная концепция. Единственная её проблема - она не семантична. Т.е. язык не знает, что инклюд это отдельная сущность. У неё нет области видимости и прочее.

Вот модуль это просто семантический инклюд. Работает так же. Поэтому модули это нормально. Это просто инклюды без препроцессора.

anonymous
()
Ответ на: комментарий от anonymous

Вот модуль это просто семантический инклюд. Работает так же. Поэтому модули это нормально. Это просто инклюды без препроцессора.

вы попутали импорт деклараций с модулем, как единицей трансляции со специфицированным импортом и экспортом из других модулей.

главной фичей модулей является правильная инициализация глобальных обьектов программы…а не как бог на душу положит в случае плюсов.

а в реально модульных языках такая ошибка не может появиться по определению.

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

собрали вы в одном порядке обьектники, тестировали-тестировали - все отлично… собрали в другом и отправили в космос… и она сломалась, потому что порядок инициализации стал другой.

так что нормальные каноничные модули - это правильно. но вот сумеют ли в плюсах их до каноничности довести - сказать не могу.

alysnix ★★★
()
Ответ на: комментарий от alysnix

Опять выходишь на связь? Я ведь тебе уже сообщил, что никаких «у плюсов есть только разбиение на единицы трансляции в виде файлов» у плюсов нет. Плюсы невозможно разбирать на какие-то единицы трансляции.

anonymous
()
Ответ на: комментарий от alysnix

Вот в этом все си с классами макаки. Жрут дерьмо, гадят. У них там какие-то дыры и проблемы есть. Ты же говоришь, что у тебя этих проблем нет и объясняешь почему. Объясняешь что для тебя и языка являются модули.

Но нет, прибегает макака и рассказывает, что в том огрызке языка, которые используют поломои типа него всё не так. Я заранее тебе сообщил, что всё не так и твои представления, поломой, никакого отношения к тому о чём я говорю не имеют. И, повторю, я об этом сразу же сообщил.

anonymous
()
Ответ на: комментарий от alysnix

А теперь берёшь stdlib и собираешь раздельно. Начни с того, чтобы прилинковать вектор.

Кстати, удивительно то, как бездарность с помойки ничего не знающая пытается на что-то ссылаться и что-то блеять.

anonymous
()
Ответ на: комментарий от Siborgium

А нигде лол. Так же как и макросы препроцессора туда не попадают. Как и неймспейсов нормальных не изобрели. Вот поэтому C++ никто и не любит, кроме пачки извращенцев :DDDDD

hateyoufeel ★★★★★
() автор топика
Ответ на: комментарий от anonymous

А теперь берёшь stdlib и собираешь раздельно. Начни с того, чтобы прилинковать вектор.

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

ты утверждаешь, что этот твой стдлиб состоит из раздельно некомпилируемых файлов и их можно скомпилировать и собрать только вместе? это все, что ты утверждаешь?

а реальность тебе утверждает, что на плюсах МОЖНО разрабатывать программы из РАЗДЕЛЬНО компилируемых файлов, называемых единицами трансляции, об отсутствии!!! которых ты трещал языком выше по тексту.

и то, что какие-то мутаки, написали какую-то раздельно некомпилиремую мутоту, вообще не имеет отношения к вопросу.

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

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от Siborgium

Осталось только разобраться, где в TU шаблоны, являющиеся ключевым элементом языка.

прям там и лежат в текстовом виде. где им быть еще??? TU это выход препроцессора. потом компилятор все это жует и генерит конкретные типы и функции из темплейтов, .. а может быть как-то по другому?

и потом. не являются шаблоны КЛЮЧЕВЫМ элементом языка. можно написать прогу произвольной сложности и без них. Ключевой элемент, это элемент, принципиально важный для разработки.

можно писать произвольные проги вообще без стдлиба. с ключиком для линкера -nostdlib

потому чудик что носится с «вектором» именно оттуда, выглядит странно.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Так же как и макросы препроцессора туда не попадают. Как и неймспейсов нормальных не изобрели.

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

а неймспейсы, это просто префикс к декорированному имени именованной сущности внутри компилятора и обьектника. Если это понимать, то можно это и принимать.

alysnix ★★★
()
Ответ на: комментарий от alysnix

но модулей нет. оттого жеппа с инициализацией нетривиальных глобальных обьектов нависает надо всеми.

Шутка такая? Что ты не можешь инициализировать?

kvpfs ★★
()
Ответ на: комментарий от alysnix

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

Ты блеяла - ты обязана пруфцевать. Т.е. я делаю вывод, что ты обгадилась, бездарная си с классами обезьяна?

а реальность тебе утверждает, что на плюсах МОЖНО разрабатывать программы

Невозможно. Тебе дали «программу» на С++ и послали собрать её раздельно. Ты обгадилась. Теперь у тебя два варианта - либо вектор, втдлиб и все адекватные либы на С++ не С++, либо у тебя проблемы.

можно на самом модульном языке, написать программу из одного! модуля размером в миллион строк

Т.е. любая С++-программа?

получить заслуженное звание мутака, и стать твоим другом и коллегой.

Ты там уже сообщил это санитарам?

anonymous
()
Ответ на: комментарий от kvpfs

Шутка такая? Что ты не можешь инициализировать?

просто задай себе вопрос - важен ли порядок инициализации «модулей» в с++?

если ответишь - нет, то это к доктору. а если - да, то задай себе вопрос - а как этот порядок определяется в плюсах?

alysnix ★★★
()
Ответ на: комментарий от alysnix

Поиграем в игру, хотя играть с инвалидами такое себе, но всё же.

потому чудик что носится с «вектором» именно оттуда, выглядит странно.

Пишешь полиморфный вектор с линковкой. Если оттуда тебя не устраивает. Как напишешь - сообщишь.

Теперь смотрим за оправданиями этой бездарной обезьяны.

anonymous
()
Ответ на: комментарий от anonymous

Тебе дали «программу» на С++ и послали собрать её раздельно. Ты обгадилась. Теперь у тебя два варианта - либо вектор, втдлиб и все адекватные либы на С++ не С++, либо у тебя проблемы.

тебе дали программу на модульном языке, состоящую из одного модуля. и попросили собрать раздельно. гыгы

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

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

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от anonymous

Покажешь эту прогу? Хоть одну.

Зачем прогу?
Это Си, который совсем не C++.
На нем гигатонны хороших проектов.

Скорее всего @alysnix говорил о том, что на С++ можно вести разработку в а-ля Си стиле и изредко использовать C++ возможности языка …

anonymous
()
Ответ на: комментарий от alysnix

Т.е. вектор собранный раздельно ты не покажешь? Можно фиксировать слить?

anonymous
()
Ответ на: комментарий от anonymous

Пишешь полиморфный вектор с линковкой.

что такое «полиморфный вектор с линковкой», чучело? прежде чем линковать, надо иметь реальный код который создается, в общем случае, только при актуализации шаблона. что там линковать, если кода еще нет. его нет физически.

разберись в терминологии короче.

alysnix ★★★
()
Ответ на: комментарий от anonymous

Это Си, который совсем не C++.

Я выше об этом говорил.

Скорее всего @alysnix говорил о том, что на С++ можно вести разработку в а-ля Си стиле и изредко использовать C++ возможности языка …

Ни о чём эта макака не говорит. Это просто бездарный си с классами бот, который бегает везде и пишет херню.

Ему уже сообщили, что шаблоны - это фундаментальный концепция С++. То, что делает С++ им. Шаблоны не могут в раздельную компиляцию, а значит и С++ тоже.

anonymous
()
Ответ на: комментарий от alysnix

а если - да, то задай себе вопрос - а как этот порядок определяется в плюсах?

Ну а проблема в чём? У тебя нет возможности задать порядок инициализации глобальных объектов?

kvpfs ★★
()
Последнее исправление: kvpfs (всего исправлений: 1)
Ответ на: комментарий от anonymous

Покажешь эту прогу? Хоть одну.

а что тебя принципиально ограничивает, если шаблонов нет? приведи пример.

alysnix ★★★
()
Ответ на: комментарий от alysnix

Тебе уже приводили. В любом случае ты забелял - ты приводи. Показываешь любую С++-программу без шаблонов. Хотя бы одну. Ну и да - это должно быть что-то сложное уровня там хрома/линукс-ядра/гцц.

anonymous
()
Ответ на: комментарий от kvpfs

У тебя нет возможности задать порядок инициализации?

к меня нет возможности АВТОМАТИЧЕСКИ строить такой порядок. а то что можно сделать ручками и костыльно не может устраивать для больших проектов.

даже синглетоны(ленивая инициализация) не решают проблему в полном смысле.

alysnix ★★★
()
Ответ на: комментарий от anonymous

Показываешь любую С++-программу без шаблонов. Хотя бы одну. Ну и да - это должно быть что-то сложное уровня там хрома/линукс-ядра/гцц.

В чем проблема то?

Вот реальный пример.
Лет пять назад перевел SQLite на C++, но по существу это ни код C++ …

То что какой-то ГЕНИЙ в C++ template ввел не красит C++ …

anonymous
()
Ответ на: комментарий от anonymous

То, что делает С++ им. Шаблоны не могут в раздельную компиляцию, а значит и С++ тоже.

ты сам понял что сказал???

ты не можешь нарисовать в файле свой собственный шаблон и скомпилировать этот файл? аааахахахаха.

чем обьелся-то?

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от anonymous

Лет пять назад перевел SQLite на C++, но по существу это ни код C++ …

эти чукчи перечитали александреску. и теперь не могут не впендюрить шаблон куда ни попадя, потому что крута.

то есть отбери у них александреску и шаблоны, у них отвалятся руки и потечет слюна.

alysnix ★★★
()
Ответ на: комментарий от anonymous

Лет пять назад перевел SQLite на C++, но по существу это ни код C++

SQLite это примитивная херня, но в любом случае в этой вселенной оно на си.

anonymous
()
Ответ на: комментарий от alysnix

а неймспейсы, это просто префикс к декорированному имени именованной сущности внутри компилятора и обьектника. Если это понимать, то можно это и принимать.

Ты не понял. Вот у меня два хидера из разных библиотек экспортируют тип с одинаковым именем. В какую сторону мне идти?

Другие языки решают эту проблему очень просто – квалифицированными импортами. Но C++ даже такой простой вещи не может.

hateyoufeel ★★★★★
() автор топика
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от alysnix

Дошклёнок, ты пошёл раздельно собирать вектор. Это пример. А так же пошёл искать программу нужной сложность на С++ без шаблонов. Ты там вернулся?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.