Berkus
саттера я уже читал на эту тему, смотреть не буду)
Anonymous
Известно что о 4 издании "язык программирования с++"? Может кто знает. Я просто кроме 3 издания найти не могу что-то
Anonymous
Страуструпа
Anonymous
есть на английском кажется толькко
Berkus
страус не нужен
Anonymous
или уже перевели?
Anonymous
или уже перевели?
Так вот я и спрашиваю, много же времени уже прошло
Square
хм, а тестов с наскока не нашел
Маркетологи Интел работают)
Square
У нас раньше тут активничал парень из российского отделения, даже к icc руку прикладывал. Но чот пропал
Square
удаляют?)
А поди их разбери
Evgenii
я аж задумался, чем хорошо компилятор тестировать
Square
Сложно распутываемым кодом :)
Square
Интел чертяка адски циклы разворачивает и всякое байтоебство творит хитрое
Square
я аж задумался, чем хорошо компилятор тестировать
Из последнего - Hyperscan собранный интелом в разы быстрее msvcшного
Square
Danil
щас будет глупый вопрос
Danil
а интеловский компилятор подходит только для интелловских процов?
Danil
вики сказала x86, x86-64 и IA-64
Danil
меня на самом деле архитектуры больше интересовали
Square
Ну начить надо было спросить про них)
Danil
а для всяких рисков есть что-то специфичное в плане компилеров?
Danil
или gcc наш лучший друг?
Danil
мипсы, sh4, arm
Danil
для армов знаю есть отдельный gcc
Square
Square
Не
Square
Всё вроде risc
Danil
х86 - cisc
Square
Ну ок.
Evgenii
х86 - cisc
под капотом риск)
Danil
ну под капотом риск, да
Danil
но это маленькие секретики
Anonymous
есть кто Ruby шарит?
Square
есть кто Ruby шарит?
Вопрос то буит?
Денис
Люди. Я тупой. Ну, правда, тупой. Я разобрался с указателями, разобрался с шаблонами, классами, ООП, всеми приницпами С++, я понимаю, как делать архетектуру более удачной, чем многие нубы. Я прочитал 3 книги по С++, я зашарил вв идее программирования на уровне памяти - как и что работает, на уровне железа, как лучше делать так, чтобы код был максимально проивзодительный (ну, я утрирую, но суть одна). И вчера я втупил. Вопрос дичайше тупой. Идея h и cpp файлов. Связка понятная - я пишу в срр код, в h я делаю объявления, привязываю h к одному срр, потом привязываю его в второй срр, в котором мне нужен первый срр. Но вот суть, смысл этого мне далек. То есть, я не понимаю, почему один хэдер добавлятся в 2 срр, и вдруг эти два срр становятся объедененными. Как компилятор этот момент понимает?
Денис
Я достаточно давно програмлю, но вот эту идею никогда не разбирал и работал с ней на автомате. А вчера решил ее копнуть и понял, что я нихрена не понимаю в файло-образовании в срр
Billy
Врмя 6 утра. В 6 утра никто не понимает ничего.
Seva
@Den_Kuzn а можешь сами сорцы пошарить? Я правильно понимаю, что ты имеешь в виду объектные файлы?
Денис
@Den_Kuzn а можешь сами сорцы пошарить? Я правильно понимаю, что ты имеешь в виду объектные файлы?
Не. Я имею в виду связку самих заголовочных и кодовых (сурсных) файлов.
Seva
А, так это просто препроцессор
Денис
А, так это просто препроцессор
Да, это я понимать. Я говорю о том, что не понимаю, как он подставляет 2 срр с 1-им хеддером, как понимает, что связка происходит именно между ними.
Seva
Хедер в текст записанный в нем (по модулю инструкций препроцессора)
Денис
Хедер в текст записанный в нем (по модулю инструкций препроцессора)
ты про то, что из хедера пвихивается текст объявлений всех, правильно?
Seva
А, кажется понял
Денис
А, кажется понял
Могу расписать еще раз свой вопрос, может, смогу более внятно задать его =)
Seva
Есть хедер, в котором декларируется класс A и класс B. Есть A.cpp с имплементацией A и B.cpp с имплементацией B, так?
Billy
Могу расписать еще раз свой вопрос, может, смогу более внятно задать его =)
Один срр - один юнит трансляции. Линкер потом все их собирает.
Anatoly
В с++ header файл кусок кода и никакой семантической нагрузки не несет
Billy
Могу расписать еще раз свой вопрос, может, смогу более внятно задать его =)
Почитай лучше, как компилятор работает. Это полезно. Ахо, Ульман, «компиляторы». Dragon book
Денис
Есть хедер, в котором декларируется класс A и класс B. Есть A.cpp с имплементацией A и B.cpp с имплементацией B, так?
Не совсем. Давай немного иначе. Есть 1.cpp и 2.cpp В 1срр есть функция main(). В 2срр есть функция foo2(). Можно преставть, что это объекты. В хедер мы только 2срр расписываем. В 1срр main() использует foo2(). Чтобы воспользоваться foo2 - мы просто подключаем хедер, который содержит в себе объявление этой функции. Так же, мы приписываем в 2срр этот же хедер. И оно теперь связано. Как бл*ть?! =)
Денис
Никак. Там тебе выше ответили. И объясни что ты понимаешь под : они теперь связанны
В том плане, что теперь компиляция проходит, и фу2 вызывается без проблем. Понял, что гуглить
Seva
Тебе не нужна компиляция
Seva
Тебе нужно понять, как устроен механизм линковки
Billy
Компиляция продей всегда. Линковка нет. Почитай про то, как работает компилятор.
Денис
Тебе нужно понять, как устроен механизм линковки
Я понимать, компиляция мне не нужна - это я описал конечный результат.
Seva
Так сходу нашел статью на Хабре, может кто лучше посоветует: https://habrahabr.ru/post/150327/
Billy
Ахо, Ульман. Компиляторы. - авторы и название книги. 4е издание
Денис
Спасибо всем, понял, что тема не такая простая, и на раз два не дадут ответа =)
Денис
Спасибо за линки на статьи и книги, буду вдымлять
Денис
Простая
Сможешь в двух словах объяснить?
Seva
Ну смотри, так по-простому. Когда ты компилируешь cpp-файлы, ты создаешь бинарники
Seva
В бинарниках записываются сигнатуры методов, которые ты вызываешь.
Seva
На этапе компиляции вовсе необязательно, что метод с данной сигнатурой будет определен в том же объектном файле, где он вызван
Seva
Задача линковщика взять все объектные файлы и соединить с определениями методов
Seva
Ты можешь стереть одно определение foo2 и посмотреть, какую ошибку получишь
Seva
Кстати, в какой среде ты собираешь проект?
Денис
Задача линковщика взять все объектные файлы и соединить с определениями методов
То есть, он смотрит на хедеры - если они совпадают, то он линкует?
Seva
Ох, да, VS может лишать некоторой видимости того, что происходит