LINUX.ORG.RU

Модули

 


0

1

Салам пополам, братья и сестры! Начал изучат программирование и дошел до модулей. И хочу спросит а они уже есть? Прочитал про GCC он уже может модули?

В плюсах 20х есть, а про си я хз. гцц надо дев версию брать из гита, шоб работало

anonymous
()

А какая от них польза? Это же тупое дублирование «врожденного» функционала с инклюдами и разбиением одного гигантского сырца на файлы!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Stierlitz_

Как плюсы могут быть 20?

Это версия не компилятора (причём какого? их много), а стандарта.

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

Я же начинаю

С ЛОРа начал С изучать? Беда-беда…

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

На философию меня не тянет. Прошу понять вас.

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

Теперь уже начал.

ВБРОС! Чистейший!

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

Да нет никаких модулей в С! С чего ты это взял? Есть какая-то каша для C++, и то через одно место.

И на сайте пишут, что хреново оно еще работает. Но можешь сам попробовать примеры 11-м g++ собрать. Только каким в этом случае боком тег «С»?

Вот, попробовал отсюда пример. Не работает:

g++ -fmodules-ts hello.cc main.cc
g++: ошибка: unrecognized command-line option <<-fmodules-ts>>

g++ --version
g++ (Gentoo 10.2.0-r5 p6) 10.2.0
…

Видимо, 11 надо ставить.

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

А какая от них польза? Это же тупое дублирование «врожденного» функционала с инклюдами и разбиением одного гигантского сырца на файлы!

Типичные проблемы сишечки:

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

  2. Коллизия имён функций из различных библиотек. Что хуже, часто коллизия бывает между функциями, которые вроде бы не являются интерфейсом либы (смотри проблему 1).

Вот и приходится для какой-то мелочёвки всё называть my_awesome_lib_foo, my_awesome_lib_bar вместо foo и bar.

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

1. Это - не проблема.

2. Никогда не натыкался. Но да, небольшой шанс есть. Поэтому обычно библиотечные функции называют длинными стремными именами. Но можно и короткие использовать, а разруливать проблемы макросами (?).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Stierlitz_

Не без иронии, но некоторые фишки вроде стартового кода очень даже ничего

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

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

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

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

Да нет никаких модулей в С! С чего ты это взял?

Фу блин… А то я уже заволновался. Лет 20 «применяю» си по надобности, а тут даже засомневался, а я точно на си писал? :) Полез, проверил… Вроде похоже, что на си. :)

Oleg_Iu
()

дошел до модулей. И хочу спросит а они уже есть?

В Haskell есть. Рекомендую начать с него.

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

Коллизия имён функций из различных библиотек.

В C++ есть namespace’ы. (В Python, конечно, круче механизм)

Я к тому, что, если встречаешься с такими кейсами, может имеет смысл уже взять не Сишечку, а хотябы плюсы?

Kroz ★★★★★
()

Бери лучший из лучших ЯП - Ada! И будут тебе модули.

anonymous
()

Если не смущает, то можно попробовать:

The implementation has a few known missing features:

    Translation-Unit Local entities, Prague '20, p1815 (includes p2003)
    Partition definition visibility rules
    Private module fragment
    Parser-level merging of already-imported GMF entities (the reverse is implemented)

    Global Module escape mechanism of extern "C/C++"
    Debug generation is somewhat fragile, can ICE 

Of course there are bugs in it )

В гцц должны быть с 11 версии, раньше пилились в отдельной ветке.

В шланге тоже сыро, и там ещё какая-то подства есть в виде нескольких версий модулей, и флаги разные, что вроде -fmodules-ts и -fmodules (может убрали лишнее, не уверен).

pavlick ★★
()

их нет ибо не везде

восприми инклюды модулями и продолжай.

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

сотни говно-билд систем которые навернули поверх инклюдов раздельную компиляцию( да-да истинную ибо не всякое инклюденье в этих(каждой в отдельности) билд@-ах есть модуляченье)

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

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

A: снижение цикломатической сложности через явность контрактов достигаемых при раздельной компиляции.

сорян за валинорский.

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

через специфику хоста «нет» того до чего нельзя пробиться

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

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

Stierlitz_
() автор топика

Модулу-2 учи, там есть модули. Джаву, Скалу учи.

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

Стрелять за такое нужно.

Только в бывшем СССР появился такой ублюдок, как С/С++. Это разные языки и схожесть названий не должна смущать.

Либо кодишь на С, либо на С++, но не на этом дебильном гибриде с strcpy и кастами (type).

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

оно так и оно не так ( хрисипов принцип тут нет)

по стандартам это разное и в том числе этодругое

по факту С/С++

isocpp.org u hub if u realy

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

Разбей один исходник на уйму файлов, и будет тебе счастье! Если в данном сишном файле и его зависимостях не было изменений, make перекомпилировать не будет.

Ну и на кой черт эти модули нужны?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Stierlitz_

Как ты себе это представляешь? Современный С++ вообще ничего общего с С не имеет, кроме немного похожего синтаксиса!

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Miguel

Ну во у меня список файлов:

ls *.[hc]
binmorph.c  cclabling.h      cmdlnopts.c  dilation.h  draw.h       fc_filter.h  fits.h         grasshopper.h  imagefile.h  inotify.h  median.c  stbimpl.c
binmorph.h  cclabling_ori.h  cmdlnopts.h  draw.c      ec_filter.h  fits.c       grasshopper.c  imagefile.c    inotify.c    main.c     median.h
cmake генерирует Makefile, далее make каждый сишный файл компилирует раздельно и объектные уже собирает воедино. Если я внесу изменение в файл cmndlnopts.c, следующий make перекомпилирует лишь его и соберет все заново. Если внесу измение в fits.h, перекомпилированы будут все файлы, которые его включают.

Ну и чем от этого "модульность" отличается? Где цимус?

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

ты не внемлишь?

отделение реализации от интерфейса

ака устранение «проблема хрупкого интерфейса»

в сях решено этапом линковки - т.е этам сборки бинарей соответсвующих форматом линкеру.

в языках с явной модульностью это на уровне синтаксиса указанием что где видно(вызываемо/читаемо/пишемо) тем или иным путём (вплоть до кейса первой буквы идентификатора в маргинальных)

легендарные долгие сборки в общем случае у плюссов(и у plainold) обусловленны текстовым джойном всего сырца - у этого свои преимущества ага.

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

тем что вынесено(или не до внесено - зависит как Имярек видит мир и его эволюции) за пределы синтаксиса модульность/пакетность

линтер часть языка али нет?

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

но в gcc есть

Да всю «модульность» можно порешить добавлением опции -cprefix=modname!

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

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

для хидеров это не так (обычно) ибо для линтер неточтобыAI

т.е на хидерах на уровне стандарта более брутфорсный принцим - компилируй всё.

ага сборщик чутка спасает но не так глобально как чёткая модульность

чёткая т.е sound а не бюрократия жабки/шарпки - в которых модульность(в части реже билдится весь мир) достигается более поздним связыванием благодаря VM

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