LINUX.ORG.RU
ФорумTalks

Apple предлагает заменить заголовочные файлы на модули.


0

2

Apple предлагает заменить

#include <stdio.h>
на
import std;

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

http://llvm.org/devmtg/2012-11/Gregor-Modules.pdf?=submit

★★★

Последнее исправление: JB (всего исправлений: 2)

Ответ на: комментарий от f1xmAn
import std.math;
import std.vector;

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

#include <iostream>
int main(void)
{
  std::cout << "Hello world" << std::endl;
}
Нужно будет включить в текст файл с 1,000,000 символов, тогда как используя import можно будет разобрать файл iostream один раз и кэшировать резульат.

cast kernelpanic

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

Ну можно время компиляции сократить. А вообще идея хорошая, фреймворки Маковские крайне хороши и удобны для разработки. Достаточно компилятору путь до фреймворка указать и он сам разберется, это удобнее, чем с pkgconfig шаманить.

Gorthauer ★★★★★
()

Очень любопытно, здравая мысль (небольшое неудобство из-за карт модулей, но окупит себя с лихвой).

Ждем, когда они запилят это в llvm (ну и добавление поддержки в cmake и emacs).

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

trollface

а потом пойти в суд и требовать такого префикса везде import com.apple.inc

ещё патент выкапают который получили лет 10 назад.

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

Беспокоит лишь то, как именно они собираются это делать

// module.map
module std {
  module stdio { header "stdio.h" }
  module stdlib { header "stdlib.h" }
  module math { header "math.h }
}
Выглядит не очень Сишно

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

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

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

То есть на линуксах эта хрень явно будет в паре с pkgconfigом работать, а на виндах как всегда через жопу. Плюс еще непонятно что делать со всякими конструкциями типа LIB_EXPORT и прочими дефайнами, от которых зависят подключаемые хедеры. То есть тут определенно надо что-то с линковкой делать. Старый добрый -l напарывается с разбегу на грабли.

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

Надеюсь еще Страуструп и Ко. не отвернут свои носы от этого.

Ну, nvidia сделала свой диалект С - CUDA. Скорее всего, это тоже станет диалектом в llvm, мэйнстримом не станет.

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

Плюс еще непонятно что делать со всякими конструкциями типа LIB_EXPORT и прочими дефайнами, от которых зависят подключаемые хедеры. То есть тут определенно надо что-то с линковкой делать. Старый добрый -l напарывается с разбегу на грабли.

Если cmake научится с этим работать - никаких проблем не будет.

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

там tldr, и кроме того не написано почему /Precompiled headers are a terrible solution/

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

uses std; круче.

Удваиваю. А еще begin и end; вместо непонятных фигурных скобок. И точкой завершать обязательно.

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

Что ж ты такой умный на простом как молоток ассемблере не кодишь?

urandom
()
Ответ на: комментарий от shimon
#define uses(_H) #include <_H.h>
#define begin {
#define end }

нащет точки надо подумать

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

Лучше без begin и без точки (c) lua

На котором нет потоков и все числа double - с таким упрощением слон превращается, превращается слон - в элегантного кабана.

Napilnik ★★★★★
()

они переизобрели D, или просто прочитали про него ?

Atlant ★★★★★
()

будем посмотреть, может что и хорошее родят

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

Хороший предкомпилированный заголовок ускоряет повторный разбор в 3-10 раз, а в современных условиях возникли ситуации, когда надо в 100. Инкрементальную компиляцию поцоны пока не осиливают.

quiet_readonly ★★★★
()

Нипонятно.

Все 87страниц не осилил, после 20-30стало скушно.

Выводы:

Про ускорение:

$time gcc hello.c -S

real    0m0.018s
user    0m0.012s
sys     0m0.003s

$time gcc hello.c -E &> /dev/null 

real    0m0.008s
user    0m0.003s
sys     0m0.005s
$cat hello.c 
#include <stdio.h>
int main(void) {
    fprintf(stdout, "Hello, World\n");
}

Это так блин ваще медленно, всего-то компиляция сократится на 0.1-0.3%. Хотя возможно плюсовая шаблонная каша будет долго тупить.

Профитов невижу, удобства тоже.

o2n3e
()

А если в заголовочнике нет пространства имен, а тупо лежат классы/функции? Как они предлагают импортировать?

И, что самое плохое, они предлагают синтаксический сахар, который сломает совместимость.

grondek
()
Ответ на: Нипонятно. от o2n3e

Презентация у них относительно неразжёванная, но я могу добавить подробностей. Сейчас XCode и Visual Studio для разбора кода в редакторе используют не какой-то быстро действующий кем-то написанный движок, а непосредственно компилятор - XCode точно использует clang, студия вроде как использует библиотеки msvc, и разбирает код ещё дольше чем XCode. А пару месяцев назад я взял и скачал ветку QtCreator с плагином, использующим clang вместо быстрой, но обречённой быть неточной нативной модели кода. И - тормоза, на i5 уходит в среднем 1 секунда на подсветку и 0,3-0,5 на автокомплит.

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

Что касается gcc hello.c -E, clang ещё года 3 назад тестировали на реальных проектах, а не на hello.c - и получили 25% времени на препроцессинг, 25% на парсинг, и около 40-45% на генерацию кода - то есть как у вас с gcc и у меня с clang на файле hello.c. Вот только при использовании clang как тулзы обработки кода, а не как компилятора, нет этапа генерации кода, а скорость парсинга уменьшится многократно. Останется 5-10% от семантического анализа и пара процентиков на препроцессинг и парсинг.

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

Во-первых они предлагают несколько вариантов реализации, один из которых совместимость не ломает, а фактически даёт компилятору указания, как заголовки превратить в модули. Во-вторых модули предлагались как часть C++ 2011, но не вошли - и детали не додумали, и авторам компиляторов решили не добавлять работы.

Видимо авторы clang решили немного ускорить события и представить публике годную реализацию модулей до стандарта C++ 2017. В принципе оправданно, сейчас компилятора серьёзных осталось только 3, и два из них опенсурсные, модули реализуют без проблем. MS с их лозунгом going native придётся тоже пойти следом за gcc/clang.

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

скорость парсинга уменьшится многократно

Ой, опечатался. Время парсинга уменьшается многократно при использовании модулей - т.к. вместо 100.000 строк придётся разобрать 1-2 тыс., а импортированные модули будут дёргаться уже на этапе семантического анализа из заранее готового кеша.

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

Не в том месте, на компиляции он быстрей.

frozenix ★★★
() автор топика
Ответ на: Нипонятно. от o2n3e

Размер iostream в 10 раз больше stdio.h

frozenix ★★★
() автор топика

Они упоролись? модуль по умолчанию у них игнорирует препроцессор стейт перед импортом. А в том же ядре до **пы хедеров которые только макросами и утыканы, которые по разному от этого препроцессор стейт работают (тот же dev_dbg, например).
Ждем комментария Линуса.

AiFiLTr0 ★★★★★
()
Последнее исправление: AiFiLTr0 (всего исправлений: 1)

Футуристический вариант шикарен — модули выглядят почти как в Java.

Sadler ★★★
()

Не трожь С!

Хороший язык, нечего его в говнопитон превращать!

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

Да падет на них проклятие Святого Никлауса :)

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

а перечисление недостатков для Ъ будет?

Тот самый, главный и фатальный.

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