@ProCxx

Страница 2278 из 2477
Евгений
14.08.2018
09:06:25
Кроче, прозрачный и логичный механизм импорта-экспорта - вот что надо.

Дед Пегас
14.08.2018
09:06:43
Евгений
14.08.2018
09:06:43
ну вроде есть и сейчас anonumous namespaces
эт ж явный костыль в разрезе данной задачи

Roman
14.08.2018
09:07:22
я не спорю что с модулями будет более гибко, но имхо все и так почти привыкли

Google
Igor
14.08.2018
09:07:54
эт ж явный костыль в разрезе данной задачи
это не костыль, это фича ортогональная модулям

Евгений
14.08.2018
09:08:03
и итераторы описывать привыкли, но auto - збс

Roman
14.08.2018
09:08:51
лямбды принципиально новая фича которую функторы не заменяют

т.к. функторы не умеют захватывать контекст

Евгений
14.08.2018
09:09:12
это не костыль, это фича ортогональная модулям
я понимаю. но выше их привели как один из механизмов "разграничения уровней доступа на уровне модуля".

Roman
14.08.2018
09:09:26
а модули координально ничего для меня не меняют

Евгений
14.08.2018
09:09:42
Igor
14.08.2018
09:10:47
т.к. функторы не умеют захватывать контекст
struct Functor { int &a; Functor(int &a) : a(a) {} void operator()() { a = 123; } }; int x = 120; Functor f(x); f(); же

Евгений
14.08.2018
09:11:03
а модули координально ничего для меня не меняют
auto, range-based loops тож ничего не меняют принципиально. но язык причесывается

Ilia
14.08.2018
09:11:05
хотя я не понимаю зачем модули нужны большинству людей
Нужны, чтобы шаблонный код можно было бы быстро компилировать и шаблоны экспортировать. Это вроде как единственная прагматичная цель. НО, на самом деле модель компиляции и сборки в С++ очень сложна. Я вот пробовал её объяснить кому-то не Сшнику -- это воообще практически невозможно, концепций вообще никаких нет. Программист просто должен знать, как это работает ВСЁ ЦЕЛИКОМ, и что получится на выходе. Вот для того, чтобы какую-то модель сборки создать, тоже нужны модули.

Roman
14.08.2018
09:11:11
Евгений
14.08.2018
09:11:50
ну тут ты сам всё сделал руками
ну а полный захват контекста - тоже не самый тру-вей

Google
Евгений
14.08.2018
09:12:07
обычно пишем [&x, &y]()...

Ilia
14.08.2018
09:12:59
ну я вот сейчас работаю с клангом, вроде как проект большой, а собирается достаточно быстро
ПОтому что те, кто его писал, не идиоты. А ты пойди б... объясни обычному программисту, почему тело шаблонной фукнции ДОЛЖНО быть в заголовочном файле, но если оно используется только в одном исходном модуле, то МОЖНО И НЕ В ЗАГОЛОВОЧНЫЙ.

Дед Пегас
14.08.2018
09:13:44
Ilia
14.08.2018
09:13:49
Это совсем не то.
Это совсем как раз то.

Обязательно нужно.
Зачем создавать 20 способов сделать одно и то же ? Превратим язык в Perl. И так уже не далеко.

Roman
14.08.2018
09:14:26
нет, ну можно ещё и external template сделать , чтобы окончально добить

Ilia
14.08.2018
09:15:32
и итераторы описывать привыкли, но auto - збс
Теперь надеюсь дожить до Ranges и наконец забыть эту херню с begin(), end()

Roman
14.08.2018
09:15:34
ладно, модули наверное действительно понятнее чем header + source

но я боюсь что всё закончится тем что будут писать как на джава

один класс, один файл, все методы inline

Anatoly
14.08.2018
09:16:11
нет, ну можно ещё и external template сделать , чтобы окончально добить
дык, его уже нет в стандарте external template или ты о чем-то другом?

Ilia
14.08.2018
09:16:38
т.к. функторы не умеют захватывать контекст
Наоборот, лямбды заменяют функторы. И именно для захвата контекста нужны функторы были. Если захват не нужен, можно было и просто функцию использовать.

Ilia
14.08.2018
09:17:44
один класс, один файл, все методы inline
В этом ничего плохого нет, но не будут, ибо другая модель компиляции.

Roman
14.08.2018
09:18:19
почему не будут? модули это позволяют

Дед Пегас
14.08.2018
09:18:25
Зачем создавать 20 способов сделать одно и то же ? Превратим язык в Perl. И так уже не далеко.
Почему? Удобно на одном уровне разложить несколько сущностей, часть из которых для внутренних нужд, часть на экспорт.

Дед Пегас
14.08.2018
09:19:33
Нет.

Google
Дед Пегас
14.08.2018
09:19:45
Любую фигню можно вытащить.

Ilia
14.08.2018
09:22:00
Любую фигню можно вытащить.
Не понял. static -функции модуля ты можешь вытащить? Ну да, только если передашь её адрес наружу как-то...

Stanislav
14.08.2018
09:22:37
Плюс разграничение уровней доступа на уровне модуля. Типа public члены модуля, private
ну дак, в модулях же то что наружу должно торчать и помечается словом export, остальное остается внутри, зачем тебе еще public/private ? O_o

Ilia
14.08.2018
09:23:22
Короче, где найти последний TS по модулям?

Stanislav
14.08.2018
09:24:18
тут

Roman
14.08.2018
09:24:21
Короче, где найти последний TS по модулям?
http://open-std.org/JTC1/SC22/WG21/docs/papers/2018/p1103r0.pdf

Stanislav
14.08.2018
09:25:02
Ilia
14.08.2018
09:26:39
Ну вот, поговорили про модули... Я всё их прочитать не могу.

Nik
14.08.2018
09:30:38
Пока либо компиляторы, либо системы сборки, не станут достаточно умными, модули будут выглядеть как очередной костыль.

Ilia
14.08.2018
09:31:10
Системы сборки и так уже достаточно умные

Nik
14.08.2018
09:32:33
здесь можно получить представление о проблеме https://build2.org/article/cxx-modules-misconceptions.xhtml

Roman
14.08.2018
09:33:19
здесь можно получить представление о проблеме https://build2.org/article/cxx-modules-misconceptions.xhtml
я вроде читал это в прошлом году и там написано что всё хорошо. и в этом build2 модули уже работают

Ilia
14.08.2018
09:34:44
А кто автор?
Видимо, это должен быть Ричард Смит?

Roman
14.08.2018
09:36:21
Интересно, а кто-нибудь знает как это работает в java? когда я пишу import org.mylib что происходит? org.mylib уже должен быть собран в class file к этому моменту? и как система сборки в java понимает в каком порядке классы компилировать?

Наверное она парсит заголовки .java файлов и автоматически строит древо завсисимостей и порядок компиляции?

Google
Aidar
14.08.2018
09:38:05
Дык джаве же пофиг

Aidar
14.08.2018
09:38:38
Если потом . class подменить и там чегото не будет - свалится в рантайме

Nik
14.08.2018
09:39:48
Roman
14.08.2018
09:39:48
Nik
14.08.2018
09:40:47
Видимо, это должен быть Ричард Смит?
The compiler should not become a build system. Richard Smith

Roman
14.08.2018
09:40:59
В Java тоже раздельная компиляция. Классы могут компилироваться в любом порядке, они независимы.
Как независимы? Как компилятор узнает сигнатуры некомпилированных классов?

В C++ сигнатура есть в хедере

Aidar
14.08.2018
09:41:20
Да там независимо

Потомучто оно ищет сначала . class

Ilia
14.08.2018
09:41:39
Как независимы? Как компилятор узнает сигнатуры некомпилированных классов?
БлиН, там всё просто . Класс А использует класс B откуда-то. B должен быть уже скомпилирован.

Aidar
14.08.2018
09:41:45
А потом если не найдет компилит . java

Roman
14.08.2018
09:41:53
Aidar
14.08.2018
09:42:11
Можешь поиграться с вызовом javac из консоли

Первая лаба в нашем вузике у студентов именно такая

Google
Roman
14.08.2018
09:44:06
Но как я понял в C++ модули так работать не будут. Т.к. в C++ нет стандарта по размещению проектов в файловой системе

Т.е. если в Java понятно где искать, то в C++ модуль может лежать где угодно

Ilia
14.08.2018
09:44:45
Надеюсь, что так

Roman
14.08.2018
09:45:48
А что в этом хорошего? В Java во всех проектах всё одинаково, в С++ в каждом проекте всё по-разному

кто-то любит хедеры в отдельную папочку сложить, кто-то любит .h и cpp вместе, кому-то нравится cpp, кому-то cxx, плохо

половина проекта на CamelCase, половина на snake_case

Дед Пегас
14.08.2018
09:47:37
Camel_Snake

Stanislav
14.08.2018
09:51:59
Побитый
14.08.2018
10:25:55
Roman
14.08.2018
10:26:20
ну модули это как раз шанс поменять

т.к. проектов использующих модули ещё нет

Alexander
14.08.2018
10:26:42
Stanislav
14.08.2018
10:27:06
так как модулей ещё нет :)
есть в экспериментальном виде :D

Alexander
14.08.2018
10:27:20
Stanislav
14.08.2018
10:30:06
це равно отсутствию ?
не, ну студия ближе всего к использованию, там хоть std либа в модулях

Ⱪonstantin
14.08.2018
10:57:32
Интересно, а кто-нибудь знает как это работает в java? когда я пишу import org.mylib что происходит? org.mylib уже должен быть собран в class file к этому моменту? и как система сборки в java понимает в каком порядке классы компилировать?
Там грамматика не контекстно зависима. Импорты влияют на таблицу имён, поэтому классы можно билдить в любом порядке, лишь бы имена нашлись друг к другу

Andrey
14.08.2018
11:28:13
Интересно, а почему unified call syntax или extension functions не приняли в стандарт? Вижу много пропозалов на эту тему, но в драфте C++20 ничего на эту тему нет
Вы за то, чтобы 1. вместо f(x, y) можно было бы вызывать x.f(y), или 2. вместо x.f(y) можно было бы вызывать f(x, y), или 3. и то, и другое?

Roman
14.08.2018
11:28:51
Ну т.е. что-то вроде http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0079r0.pdf мне кажется оптимальным

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

Страница 2278 из 2477