The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Новая версия набора компиляторов LLVM 3.4

06.01.2014 23:30

Увидел свет релиз проекта LLVM 3.4 (Low Level Virtual Machine) - GCC совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизации). Сгенерированный платформонезависимый псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.

Основные новшества LLVM 3.4:

  • Существенно увеличена производительность генератора кода. При использовании флагов оптимизации "-Os" и "-O2" по умолчанию включена поддержка автоматической векторизации циклов, ранее применяемой только при указании флага "-O3". Также включен по умолчанию представленный в прошлом выпуске новый SLP-векторизатор.
  • Сборка по умолчанию бэкенда для использования в качестве целевой платформы GPU семейства R600 (HD2XXX - HD7XXX). Бэкенд необходим для компилятора шейдеров LLVM, который в свою очередь требуется для открытой реализации стандарта OpenCL;
  • В llvm-ar задействована новая библиотека объектов и обеспечена генерация архивов и таблиц символов в формате GNU;
  • Значительно расширены биндинги для языка OCaml, которые теперь охватывают возможности всех библиотек LLVM;
  • Внесены заметные изменения в бэкенд для процессоров PowerPC, положительно повлиявшие на качество кода и скорость сборки;
  • В бэкенд MIPS добавлена поддержка архитектуры MSA (MIPS SIMD Architecture);
  • Добавлен экспериментальный бэкенд для архитектуры SPARC V9;
  • В бэкенд для архитектуры SPARC добавлена поддержка JIT, fp128, обработки исключений и TLS (Thread-Local Storage);
  • Расширены возможности бэкендов X86, ARM32, AArch64 и SystemZ;
  • LLVM 3.4 является последним выпуском, который может быть собран компилятором с поддержкой стандарта C++'98, для сборки следующих версий потребуется компилятор, совместимый с C++'11.

Улучшения в Clang:

  • Обеспечена полная поддержка всех возможностей текущего чернового варианта будущего стандарта C++1y;
  • В Clang Static Analyzer существенно улучшена поддержка C++, сокращено число ложных срабатываний и расширено число выявляемых ошибок;
  • В состав включена новая утилита "clang-format", которую можно использовать для автоматического форматирования кода в текстовых редакторах или интегрированных средах разработки на основе заданного набора правил стилевого оформления кода;
  • Добавлен драйвер с экспериментальным альтернативным интерфейсом командной строки, обеспечивающим совместимость на уровне опций с компилятором cl.exe из состава Visual Studio. Драйвер может применяться для упрощения миграции проектов на Clang без переработки сборочных сценариев;
  • При использовании флага "-O4" теперь не включается оптимизации на стадии компоновки (link-time optimization), для которой следует явно указать флаг "-flto", применяемый при любом уровне оптимизации.

Новые субпроекты на базе LLVM 3.4:

  • Проект Mozilla начал развитие проекта DXR, в рамках которого подготовлен инструментарий для поиска и навигации по большим кодовым базам, таким как исходные тексты Firefox. Поддерживается полнотекстовый поиск, запросы с использованием регулярных выражений и структурированные запросы в форме "найти все вызовы такой-то функции".
  • Обновлена реализация LDC - компилятора для языка программирования D, комбинирующего фронтэнд из состава эталонного компилятора D с бэкендом на базе LLVM, позволяющим генерировать эффективный нативный код. LDC поддерживает генерацию кода для систем x86/x86_64 Linux, OS X, FreeBSD и Windows, и PPC64 для Linux. В разработке находится создание генератора кода для архитектур ARM и AArch64.
  • Представлен LibBeauty, инструментарий для декомпиляции и обратного инжиниринга, построенный с использованием дизассемблера LLVM и LLVM IR Builder. Приняв на входе объектный файл (.o) на выходе генерирует файл в промежуточном представлении LLVM (.bc или .ll). Пока поддерживается только архитектура x86_64.
  • Likely - открытый предметно-ориентированный язык для распознавания изображений. Алгоритмы распознавания на лету компилируются (JIT) при помощи инфраструктуры LLVM MCJIT для выполнения на одно- или многоядерных CPU, а также на GPU с использованием OpenCL SPIR или CUDA.
  • Прогресс в реализации проекта Portable Computing Language OpenCL (PoCL), в рамках которого ведётся разработка полностью открытой реализации стандарта OpenCL, независимой от производителей графических ускорителей. PoCL позволит разработчикам не задумываться об особенностях той или иной реализации стандарта и использовать предоставляемые компилятором оптимизации вместо применения специфических для каждой платформы техник ручной оптимизации. PoCL реализован по модульному принципу, позволяющему использовать различные бэкенды для выполнения OpenCL-ядер на разных типах графических и центральных процессоров;
  • PNaCl (Portable Native Client) - интегрированная в браузер Chrome система, которая позволяет организовать выполнение приложений, написанных на языках C и С++, в специальном изолированном окружении web-браузера, независимо от текущей аппаратной архитектуры. Например, скомпилированный для PNaCl исполняемый файл может быть выполнен в различных версиях Chrome и Chrome OS, независимо от аппаратной архитектуры (x86, x86_64, ARM, MIPS) и типа операционной системы, демонстрируя при этом производительность, близкую к родному для данной целевой платформы исполняемому файлу. В PNaCl вместо генерации машинного кода приложение компилируется в универсальный биткод LLVM и поставляется в непривязанном к конкретной платформе исполняемом формате ".pexe". В процессе запуска приложения промежуточный биткод LLVM транслируется в машинный код текущей платформы на стороне локальной системы пользователя.
  • WebCL Validator - позволяет проверять корректность языка WebCL C, который является подмножеством OpenCL ES 1.1;

Из параллельно развивающихся проектов, основанных на LLVM, можно отметить:

  • KLEE - символьный анализатор и генератор тестовых наборов;
  • Runtime-библиотека compiler-rt;
  • llvm-mc - автогенератор ассемблера, дизассемблера и других связанных с машинным кодом компонентов на основе описаний параметров LLVM-совместимых платформ.
  • VMKit - виртуальная машина для Java и .NET;
  • Реализация функционального языка программирования Pure;
  • LDC - компилятор для языка D;
  • Roadsend PHP - оптимизатор, статический и JIT компилятор для языка PHP;
  • Виртуальные машины для Ruby: Rubinius и MacRuby;
  • LLVM-Lua
  • FlashCCompiler - средство для компиляции кода на языке Си в вид, пригодный для выполнения в виртуальной машине Adobe Flash;
  • LLDB - новая модульная инфраструктура отладки, использующая такие подсистемы LLVM как API для дизассемблирования, Clang AST (Abstract Syntax Tree), парсер выражений, генератор кода и JIT-компилятор. LLDB поддерживает отладку многопоточных программ на языках C, Objective-C и C++; отличается возможностью подключения плагинов и скриптов на языке Python; показывает крайне высокое быстродействие при отладке программ большого размера;
  • emscripten - компилятор биткода LLVM в JavaScript, позволяющий преобразовать для запуска в браузере приложения, изначально написанные на языке Си. Например, удалось запустить Python, Lua, Quake, Freetype;
  • sparse-llvm - бэкенд, нацеленный на создание Си-компилятора, способного собирать ядро Linux.
  • Portable OpenCL - открытая и независимая реализация стандарта OpenCL;
  • CUDA Compiler - позволяет сгенерировать GPU-инструкции из кода, написанного на языках Си, Си++ и Fortran;
  • Julia - открытый динамический язык программирования, использующий наработки проекта LLVM.
  • Jade (Just-in-time Adaptive Decoder Engine) - универсальный движок для декодирования видео, использующий LLVM для JIT-компиляции адаптивных конфигураций декодера видео, определённых комитетом MPEG Reconfigurable Video Coding (RVC);


  1. Главная ссылка к новости (http://lists.cs.uiuc.edu/piper...)
  2. OpenNews: В проект LLVM вошла разработанная в Intel runtime-библиотека OpenMP. Red Hat представил OpenMP 4.0 для GCC
  3. OpenNews: Новая версия набора компиляторов LLVM 3.3
  4. OpenNews: Представлен Dagger, декомпилятор исполняемых файлов в промежуточное представление LLVM
  5. OpenNews: Проекту LLVM присуждена премия ACM Software System Award
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/38798-llvm
Ключевые слова: llvm, clang
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (183) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, IMHO (?), 23:34, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    йо, ма йо, я еще 3.3 не успел собрать, а уэе 3.4 есть
     
     
  • 2.6, Куяврег (?), 00:09, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +30 +/
    собирай на компьютере - это быстрее.
     

  • 1.2, Анод (?), 23:41, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > Features
    >    JIT compile Lua scripts to native code using LLVM's JIT engine. JIT supports x86, x86_64, PowerPC 32/64 processors.
    >    Compile Lua scripts to native executables.
    >    Cross-compile Lua scripts to native executables/modules a different target then the host.

    Торт!

     
     
  • 2.57, AnonuS (?), 01:57, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > ... Сгенерированный платформонезависимый псевдокод может
    > быть преобразован при помощи JIT-компилятора в машинные инструкции
    > непосредственно в момент выполнения программы. ...

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

    [li]Псевдокод — (в неформальной лексике) байт-код, машинно-независимый код низкого уровня, генерируемый компилятором и исполняемый виртуальной машиной.


    Взято отсюда: http://ru.wikipedia.org/wiki/%D0%9F%D1%81%D0%B5


    Доколе будет распространятся эта гнилая "неформальная лексика" ?

     
     
  • 3.85, Аноним (-), 04:31, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Доколе будет распространятся эта гнилая "неформальная лексика" ?

    Почему вообще не использовать англоязычные термины, если только "русское" слово биткод не кажется более лучше. Например, в медицине/биологии используются термины на мертвом языке (латынь, если кто не понял) и никто в мире вроде не жалуется на непатриотичность, все всех понимают - универсальный язык. Почему в IT нельзя использовать универсальную терминологию на почти мертвом языке и не ломать голову. Помнится, одна страна уже вроде попыталась в патриотически-националистическом порыве перевести все на рiдну мову, было смешно.

     
     
  • 4.90, Константавр (ok), 05:54, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Но свой комментарий ты всё-таки написал по русски?
     
     
  • 5.110, Аноним (-), 16:26, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Но свой комментарий ты всё-таки написал по русски?

    Да вы тут все демагоги недоношенные.

     
  • 5.184, Аноним (-), 02:03, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А на каком языке я его должен был написать? Не тупи.
     
     
  • 6.201, ffsdmad (ok), 07:17, 11/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    на таком на котором пишут новости? не?
     
  • 4.173, ffirefox (?), 20:16, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Таки посмотрите и где Ваша медицина, и где IT ;)

     
     
  • 5.185, Аноним (-), 02:04, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Таки IT будет там же, где на украине медицина, если всю терминологию перековеркать.
     
  • 4.196, похкто (?), 18:28, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    таки да
    Longus penis basis vita
     
  • 2.89, Аноним (-), 05:08, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Хреновый там JIT.
    Годный JIT у LuaJIT.
     
     
  • 3.111, Аноним (-), 16:27, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Хреновый там JIT.
    > Годный JIT у LuaJIT.

    Ну, перепиши и прославишься.

     
     
  • 4.131, Аноним (-), 19:47, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Так зачем, LuaJIT уже есть.
     
     
  • 5.189, arisu (ok), 02:21, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Так зачем, LuaJIT уже есть.

    так тому анонимусу же главное — «прославиться». поэтому он ничего и не пишет: на «приветмирах» не прославишься, а для сложных проектов нормально работающий мозг нужен.

     
  • 2.187, arisu (ok), 02:20, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Features
    >>    JIT compile Lua scripts to native code using LLVM's JIT engine. JIT supports x86, x86_64, PowerPC 32/64 processors.
    >>    Compile Lua scripts to native executables.
    >>    Cross-compile Lua scripts to native executables/modules a different target then the host.
    > Торт!

    это не торт, это куча мусора. чем оно лучше LuaJIT — тем, что надо весь монструозный llvm с собой таскать, да ещё и c++ компилятор, чтобы LLVM собрать? тьфу.

     

  • 1.3, pavlinux (ok), 23:44, 06/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > В Clang Static Analyzer существенно улучшена поддержка C++,
    > сокращено число ложных срабатываний и расширено число выявляемых ошибок;




    char *str_port;
    char *str_p;

    str_p = (char *) calloc(1, 5);

    str_port = str_p;  // Вот тут оно матерится, что "Value stored to 'str_port' is never read"

    str_port = strpbrk(fulladdr, ":");
    str_port++;
    port = (uint16_t) strtol(str_port, NULL, 10);

    free(str_p);



     
     
  • 2.4, Анод (?), 23:58, 06/01/2014 [^] [^^] [^^^] [ответить]  
  • +6 +/
    Разве это не так?
     
     
  • 3.5, pavlinux (ok), 00:02, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Разве это не так?

    А что не видно?

     
     
  • 4.7, Анод (?), 00:15, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Нет, ты в той строке присваиваешь значение, а в следующей затираешь его. Или я где-то не прав?
     
     
     
    Часть нити удалена модератором

  • 6.11, parad (ok), 00:40, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Value stored to 'str_port' is never read

    попробуй еще раз перевести и с равни с тем о чем ты говоришь.

     
     
  • 7.14, ананим (?), 00:52, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Переменные могут быть неинициализированы.
    Он бы ещё на это ругался:
    int a, b=5;
    a=b+1; // и писал бы — а потерялась, ай-ай-ай.
     
     
  • 8.26, parad (ok), 01:13, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    ну ты тоже гугл транслейтом воспользовался написано же - запизанное значение н... текст свёрнут, показать
     
     
  • 9.29, ананим (?), 01:16, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –8 +/
    Да похеру что, тут важно где Хорошь флэйм разводить ... текст свёрнут, показать
     
  • 5.12, ананим (?), 00:49, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не прав.
    Неинициализированному указателю присваивается значение.
    Это штатная ситуация. И таких много.
     
     
  • 6.15, Аноним (-), 00:55, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    2 раза подряд присваиваем.
    Где это она штатная? Я ещё понял бы двойное присваивание если одно присваивание выполнялось при условии каком-то(то есть тут было ветвление), а так бессмысленное действие.
     
     
  • 7.20, ананим (?), 01:05, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Где два?
    Вначале объявляем (значение при этом не определено). Потом присваиваем.
    Вот если бы я не определённую переменную захотел использовать, вот тогда и матюгался.

    Зыж
    И не нужно свои стандарты какие-то выдумывать.
    Полно подобного кода. Например пустой двусвязный список, 2-а указателя инизиализируются на самого себя. И т.д.
    Я могу хоть 100500 указателей с одним и тем же значением понасоздавать.
    А вот читать 100500 таких ложных срабатываний... так между ними что-то важное и пропустишь.

     
     
  • 8.24, Аноним (-), 01:10, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    code char str_port объявили char str_p str_p char calloc 1, 5 ... текст свёрнут, показать
     
     
  • 9.27, ананим (?), 01:14, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вот где положили 4-я строка , там он и отматюгался если верить павлинуху А... текст свёрнут, показать
     
     
  • 10.30, Аноним (-), 01:17, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ну так уж порешили те кто анализатор писал, что бы ругалось на ту строку в котор... текст свёрнут, показать
     
     
  • 11.36, ананим (?), 01:30, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ну да А если присваивание которое второе будет на 100500 строк кода ниже Или... текст свёрнут, показать
     
     
  • 12.43, Аноним (-), 01:38, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Для начала когда мы выйдем за пределы локальной области видимости указатели начн... текст свёрнут, показать
     
     
  • 13.45, ананим (?), 01:42, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Для начала вернитесь к указанному примеру А когда и если поймёте почему не до... текст свёрнут, показать
     
     
  • 14.54, Аноним (-), 01:51, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вот и возвращайся если до тебя не дошло ... текст свёрнут, показать
     
     
  • 15.98, ананим (?), 09:23, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Хамить не стоит, юноша В той строке ошибки нет, и вы уже это поняли Но ослиное... текст свёрнут, показать
     
  • 12.63, pavlinux (ok), 02:32, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Так, мужики, мне нужна эта фича, чтоб сохранить адрес выделенной области Потому... большой текст свёрнут, показать
     
     
  • 13.67, Knuckles (ok), 03:01, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    В чем проблема На такой код не будет ругаться уже Неужели разницы не видишь ... текст свёрнут, показать
     
     
  • 14.70, pavlinux (ok), 03:04, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    На какой такой На первый - ругается, на второй - крэшдампится ... текст свёрнут, показать
     
     
  • 15.75, Knuckles (ok), 03:11, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На этот int main void char a char b b char c... текст свёрнут, показать
     
     
  • 16.95, oOo (?), 08:13, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Интересно на какой день до павлина дойдёт Делайте ставки ... текст свёрнут, показать
     
     
  • 17.112, Аноним (-), 16:27, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    На десятый ... текст свёрнут, показать
     
  • 15.200, Не понял (?), 16:38, 10/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Он не ругается - он честно предупреждает, что оптимизатор или процессор при ou... текст свёрнут, показать
     
  • 13.69, skb7 (ok), 03:03, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А что, разве clang анализатор ругается на этот код первый листинг Например g... текст свёрнут, показать
     
     
  • 14.72, pavlinux (ok), 03:05, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    угу, точнее, шланг молчит Орёт Анализатор, про него весь шухер Ой блин, там... текст свёрнут, показать
     
     
  • 15.78, anonymus (?), 03:38, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Присваивание a b лишнее, сначала вы присваиваете а адрес строки в b а затем, сра... текст свёрнут, показать
     
     
  • 16.116, pavlinux (ok), 17:16, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    ПАТАМУ ША ЭТО ПРИМЕР, ВСЁ НАМНОГО СЛОЖНЕЕ ... текст свёрнут, показать
     
  • 15.82, anonymus (?), 03:56, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И да, зачем в этом примере переменная b я не пойму, она только создается, выделя... текст свёрнут, показать
     
     
  • 16.84, Inome (ok), 04:20, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    На самом деле эту переменную компилятор игнорирует, так как с ней не производитс... текст свёрнут, показать
     
     
  • 17.119, pavlinux (ok), 17:17, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    ПАТАМУ ША ЭТО ПРИМЕР, ВСЁ НАМНОГО СЛОЖНЕЕ ... текст свёрнут, показать
     
  • 16.118, pavlinux (ok), 17:17, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    ПАТАМУ ША ЭТО ПРИМЕР ... текст свёрнут, показать
     
     
  • 17.183, Аноним (-), 02:00, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Сжалюсь ужо над человеком a Ta-da И не должен после этого ругаться Наде... текст свёрнут, показать
     
  • 8.28, Аноним (-), 01:15, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Полно подобного кода Например пустой двусвязный список, 2-а указателя инизиализ... текст свёрнут, показать
     
     
  • 9.31, ананим (?), 01:18, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Бред Я не могу создать двусвязные списки локально ... текст свёрнут, показать
     
     
  • 10.34, Аноним (-), 01:22, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Сферический конь в вакуме мы не проанализируем Пример кода напиши и засунь в LL... текст свёрнут, показать
     
     
  • 11.40, ананим (?), 01:36, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    В общем хватит флэймить Пример уже есть И ругаться он там не должен ... текст свёрнут, показать
     
     
  • 12.52, Аноним (-), 01:49, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нету флейма И с какого перепуга не должен Если тебе идеологически не нравится ... текст свёрнут, показать
     
     
  • 13.64, BayaN (ok), 02:33, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вопрос в том, будет ли он ругаться в случае инициализации переменой или нет В п... текст свёрнут, показать
     
  • 13.65, pavlinux (ok), 02:34, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ну так и скажи - Я тупее компилятора, Шланг спасёт меня ... текст свёрнут, показать
     
     
  • 14.122, Av (ok), 17:48, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    У тебя проблемы с диалектикой ... текст свёрнут, показать
     
  • 2.9, xdbxd (?), 00:28, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    LLVM всё правильно ругаецца. Нефиг 2 раза подряд ЗАПИСЫВАТЬ значение указателя.
     
     
  • 3.10, pavlinux (ok), 00:35, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –5 +/
    > LLVM всё правильно ругаецца. Нефиг 2 раза подряд ЗАПИСЫВАТЬ значение указателя.

    Чо????

     
     
  • 4.13, Аноним (-), 00:51, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    str_p = (char *) calloc(1, 5);
    str_port = str_p;  // Вот тут оно матерится, что "Value stored to 'str_port' is never read"
    str_port = strpbrk(fulladdr, ":"); // ниразу не считав str_port мы его перезаписали

    А что непонятно?
    Сначала в str_port засунули 1 указатель, а потом нифига с ним не делая перезаписываем его. Получается что строка str_port = str_p;  бессмысленна и её надо выкинуть или выполнять какие-то действия с указателем.

     
     
  • 5.16, ананим (?), 00:57, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –4 +/
    В str_port ничего не запихивали, прикинь.
    Он до этого имеет неопределённое значение.

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

     
     
  • 6.18, pavlinux (ok), 01:01, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > В str_port ничего не запихивали, прикинь.

    Это указатель!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    4 (8) байт!!! ВСЁ, НЕТ ТАМ БОЛЬШЕ НИЧЕГО!


    > Павлуша, проверь что скажет, если эту строку закомментить, плс.

    Молчит, всё нормально.

     
     
  • 7.25, ананим (?), 01:11, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > >В str_port ничего не запихивали, прикинь.
    >Это указатель!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!4 (8) байт!!! ВСЁ, НЕТ ТАМ БОЛЬШЕ НИЧЕГО!>

    Иииииииии? :D
    >>Павлуша, проверь что скажет, если эту строку закомментить, плс.
    >Молчит, всё нормально

    Ну и слава Богу.
    С рождеством.

     
     
  • 8.37, pavlinux (ok), 01:33, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Гладиолус ... текст свёрнут, показать
     
     
  • 9.41, ананим (?), 01:37, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Лопата Указатели по-умолчанию тоже не инициализируются Усё ... текст свёрнут, показать
     
     
  • 10.49, pavlinux (ok), 01:46, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    censored ... текст свёрнут, показать
     
  • 7.33, ананим (?), 01:21, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Зыж
    А если и следующую?
    До инкремента?
    Будет увеличивать неинициализированный указатель?
     
     
  • 8.55, pavlinux (ok), 01:53, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вот уже начинаем понимать, что такое указатель D Есть переменная - значит е... текст свёрнут, показать
     
     
  • 9.79, ананим (?), 03:47, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вот не трынди, ок Переменная есть переменная У неё есть свой адрес, а вот что ... текст свёрнут, показать
     
     
  • 10.191, Аноним (-), 10:32, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Если разыменовывать неинициализированную, то да мусор А если использовать опера... текст свёрнут, показать
     
     
  • 11.202, ананим (?), 08:25, 11/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А если без если, то анализатор должен предупреждать об операциях с переменными с... текст свёрнут, показать
     
  • 6.19, Аноним (-), 01:02, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Он ругается на эту строку потому что при следующем упоминании str_port мы затёрли значение, а то которое положили в этой строке ни разу не использовали, но ни как не потому что в этой строке мы затираем значение которое ни разу не использовали (про что вы подумали).
     
     
  • 7.21, pavlinux (ok), 01:06, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > Он ругается на эту строку

    Какая нафиг строка ЭТО УКАЗАТЕЛЬ! НЕТ в С строк.

     
     
  • 8.22, Аноним (-), 01:07, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Я про строки кода, а не про содержимое переменных Читать научись ... текст свёрнут, показать
     
  • 8.73, Knuckles (ok), 03:07, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Есть переменная, которая хранит значение адреса Это значение перезаписывается б... текст свёрнут, показать
     
     
  • 9.104, ананим (?), 11:05, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вот только согласно павлинуху он матюгается именно на первое присваивание, а не ... текст свёрнут, показать
     
  • 6.35, Inome (ok), 01:28, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    str_port=адрес начала выделенного 5 байтового пространства. Он не должен на это ругаться
     
  • 3.59, Славик (?), 02:02, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Дело даже не в том что это указатель. Переменная может быть смаппирована на порт вывода например. Который может вообще не читаться.
     
     
  • 4.71, Аноним (-), 03:04, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Без volatile это UB, а с volatile он и ругаться не будет.
     
  • 2.56, Аноним (-), 01:54, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Позорище-то какое. Павлуша, оказывается, не понимает указатели.

    >str_port = str_p;  // Вот тут оно матерится, что "Value stored to 'str_port' is never read"
    >
    >str_port = strpbrk(fulladdr, ":");

    Смотри. В первой строчке кода ты кладёшь некое значение (вообще не важно в данном случае, указатель или просто int) в str_port, дальше это значение не читаешь из этой переменной, а сразу же, во второй строчке, записываешь новое значение в эту же переменную.
    Первая строчка вообще бесполезна, и оно на неё ругается. В принципе оно могло бы и на обе строчки указать: здесь мол ты пишешь, а вот здесь опять туда же пишешь. Но решили, видимо, не перегружать сообщениями.

     
     
  • 3.61, AnonuS (?), 02:17, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Позорище-то какое. Павлуша, оказывается, не понимает указатели. ...

    Наверное просто переменные, к указателям данная ошибка наверное имеет таки косвенное отношение.

    > Но решили, видимо, не перегружать сообщениями.

    нашего Павлика.


     
     
  • 4.102, Аноним (-), 10:39, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Скорее всего Павлик автоматически в голове разыменовывает указатель и не понимает, что слово Value в сообщении анализатора означает сам указатель, а не строка, на которую он указывает.
     
     
  • 5.192, Аноним (-), 10:36, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Скорее всего Павлик автоматически в голове разыменовывает указатель и не понимает, что
    > слово Value в сообщении анализатора означает сам указатель, а не строка,
    > на которую он указывает.

    Дак естественно, что в контексте указателей анализатор имеет ввиду адрес, к-й этот указатель хранит. Это ж естественно, но Паша что-то не понимает.

     
  • 3.74, anonymus (?), 03:10, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вы правы, добавлю ссылку на "стандарт" http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.14.html
    http://tigcc.ticalc.org/doc/string.html#strpbrk

    "strpbrk returns a pointer to the first occurrence of any of the characters in s2"

     
  • 2.86, Аноним (-), 04:51, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >char *str_port;
    >char *str_p;
    >str_p = (char *) calloc(1, 5);
    >str_port = str_p;  // Вот тут оно матерится, что "Value stored to 'str_port' is never read"
    >str_port = strpbrk(fulladdr, ":");

    И абсолютно правильно матерится. Не нравится - не заставляй умный анализатор проверять свое творчество.

    А вообще лучше блоб нвидевский проверь анализатором и расскажи нам об успехах.

     

     ....большая нить свёрнута, показать (70)

  • 1.32, pavlinux (ok), 01:21, 07/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    А теперь я покажу, как спрятать от этой дуры "double free"



    #include <stdlib.h>
    int main(void)
    {
            char *a;
            char *b;
            b = (char *)calloc(1, 5);
            a = b;
            a++;
            free(b);
            free(a);

    return 0;
    }


    $ scan-build gcc -Wall -Wextra -W test.c
    scan-build: Removing directory '/tmp/scan-build-2014-01-07-43' because it contains no reports. // ДА ТЫ ЧО??!!!!




    ./a.out
    *** glibc detected *** ./a.out: double free or corruption (fasttop): 0x0000000001573010 ***
    ======= Backtrace: =========
    /usr/lib64/tls/x86_64/libc.so.6[0x3000878b66]
    ./a.out[0x4005c7]
    /usr/lib64/tls/x86_64/libc.so.6(__libc_start_main+0xf5)[0x3000821455]
    ./a.out[0x4004a9]
    ======= Memory map: ========
    00400000-00401000 r-xp 00000000 00:0f 606571                             /tmp/a.out
    00600000-00601000 r--p 00000000 00:0f 606571                             /tmp/a.out
    00601000-00602000 rw-p 00001000 00:0f 606571                             /tmp/a.out
    01573000-01594000 rw-p 00000000 00:00 0                                  [heap]
    ...
    ...
    ...



     
     
  • 2.38, ананим (?), 01:33, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А чё у тебя гцц, а не шланг?
    Палишься? :D
     
     
  • 3.39, pavlinux (ok), 01:35, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А чё у тебя гцц, а не шланг?

    шлаг это компылятор!

    На, скушай



    $ clang -W -Wall -Wextra  test.c
    $ echo $?
    0



    > Палишься? :D

    Палишься, сыннко! :D

    Я ваще-то про Шланг Static Analyzer

     
     
  • 4.44, ананим (?), 01:39, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Дык не видно где ты его применяешь.
     
  • 2.42, freehck (ok), 01:37, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Да уж. Как говорил Бабаян, указатели - головная боль архитектуры современных компьютеров.
     
     
  • 3.46, Inome (ok), 01:42, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На ассемблере куда проще работать с адресами и указателями и это (факт!). Ждём патч для Си на преобразование указателей в более человеческую форму!11
     
  • 3.51, ананим (?), 01:49, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну… пока что(?) лучше с ними, чем без них.
    Не, в С++ (особенно начиная с С++11) их применять вообще нет надобности. Но конструкции порой, скажем так, сложные получаются.
     
  • 3.81, Crazy Alex (ok), 03:52, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Это головная боль Бабаяна, может? ну предельно примитивная же конструкция. Что может быть проще чем коробочка, в которой лежит номер другой коробочки?
     
     
  • 4.83, Inome (ok), 04:06, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ага, "проще некуда" и прям совсем не заставляют задуматься конструкции типа этой: "(*(void(*)())0x8048330)((char *)10,(int *)0x8048341);" которые довольно-таки часто можно встретить в разных эксплойтах или в сорцах доисторических времен, этак 80х-90 годов, где если не через строчку, в каждом файле можно увидеть подобное:)
     
     
  • 5.91, skb7 (ok), 06:49, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    пффф...



    typedef void (*func_t)();

    #define FUNC_ADDR (func_t)0x8048330
    #define ARG1      (char *)10
    #define ARG2      (int *)0x8048341

    int main(void)
    {
    func_t func = FUNC_ADDR;

    func(ARG1, ARG2);

    return 0;
    }



    и что тут сложного?

     
     
  • 6.92, skb7 (ok), 06:53, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Единственное, что там вообще может заставить задуматься, это первая звёздочка, которая там на самом деле и не нужна вовсе. Тут расписано:
    http://stackoverflow.com/a/17321313

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

     
  • 6.127, Inome (ok), 19:11, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Никто не говорил, что это сложно. Ваша конструкция вообще читается с первого раза). Это заставляет задуматься и какое-то время потратить на разбор.
     
     
  • 7.139, skb7 (ok), 02:05, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    заставляет, но я просто к тому, что не стоит выдавать обфусцированный код за проблемы указателе
     
  • 7.140, skb7 (ok), 02:09, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Заставляет. Я имею ввиду, что не стоит выдавать обфусцированный код за проблемы указателей или проблемы Си (см. начало обсуждения). Можно писать и с использованием указателей так, что сразу всё будет понятно. И Си дает достаточно возможностей для написания выразительного кода. Просто в том примере код намеренно запутан.
     
  • 5.123, metallica (ok), 17:51, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Приведённый пример прост, вызов функции с параметрами указателями на char с значениями 10, и 0x804834, по указателю с значением 0x8048330 который есть указатель на функцию, принимающую и возвращающую  void, есть гораздо сложнее.
     
     
  • 6.128, An123321 (?), 19:35, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Пупок не развяжется ещё "сложнее" разбирать ? Линки на иоцц с сложными, добавлю себе в портфолио)
     
  • 6.162, skb7 (ok), 07:48, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > принимающую и возвращающую void

    Если бы она принимала void, то как ей аж 2 параметра передали? В чистом Си (в отличии от C++) запись "void fun()" означает функцию, которая принимает неограниченное количество аргументов любых типов. Это оставлено для совместимости со старым кодом. Вот тут подробнее:

    [1] http://stackoverflow.com/questions/51032/is-there-a-difference-between-foovoi

    [2] http://stackoverflow.com/questions/13319492/understanding-the-difference-betw

     
     
  • 7.166, metallica (ok), 11:40, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ну дык кто его знает каким компилятором думается компилить C или С++,
    поэтому написал бы "(*(void(*)(char*,int*))0x8048330)((char *)10,(int *)0x8048341);"
    Вопрос корректности записи оставался на совести автора, наше дело представить
    её смысл.
     
     
  • 8.172, skb7 (ok), 19:46, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Естественно C Потому что на C приведенный пример не скомпилируется, т к в C ... большой текст свёрнут, показать
     
     
  • 9.177, metallica (ok), 22:36, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален В оригинале movl 134513456, Мx call rd... текст свёрнут, показать
     
     
  • 10.178, metallica (ok), 23:27, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Забыл про разметку В оригинале code movl 134513456, eax call... текст свёрнут, показать
     
     
  • 11.179, skb7 (ok), 00:18, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    В таком случае действительно лучше приводить к void func_t char , int Пр... текст свёрнут, показать
     
  • 11.180, An123321 (?), 00:32, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я тут ненароком подслушал ваши дебаты,но у меня один вопрос - почему в x86_64 пр... текст свёрнут, показать
     
     
  • 12.182, metallica (ok), 01:23, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Так в GNU Linux В BSD, solaris передаются через стек В других не знаю ... текст свёрнут, показать
     
     
  • 13.197, анонимус (??), 11:32, 10/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    не порите чушь, ей больно ... текст свёрнут, показать
     
  • 12.190, hizel (ok), 09:37, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Чтобы быстрее вызывалось ... текст свёрнут, показать
     
  • 12.194, skb7 (ok), 17:43, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Поиск по запросу amd64 abi parameter passing 1 http en wikipedia org wiki... текст свёрнут, показать
     
     
  • 13.195, metallica (ok), 18:05, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Может быть BSD ковырял последний раз ещё на x86, а solaris на x86_64-32 разрад... текст свёрнут, показать
     
  • 3.88, AnonuS (?), 05:05, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +5 +/
    > Да уж. Как говорил Бабаян, указатели - головная боль архитектуры современных компьютеров.

    Твой Бабаян - обычный неосилятор указателей !!!

    :-)))

     
     
  • 4.114, Аноним (-), 16:29, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >> Да уж. Как говорил Бабаян, указатели - головная боль архитектуры современных компьютеров.
    > Твой Бабаян - обычный неосилятор указателей !!!
    > :-)))

    И - да, он авторитетище!

     
  • 2.76, skb7 (ok), 03:15, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Странно, у меня всё ок. Проверяю ваш код вот так:



    $ scan-build gcc -c main.c

    scan-build: Using '/usr/bin/clang' for static analysis
    main.c:10:9: warning: Attempt to free released memory
            free(a);
            ^~~~~~~
    1 warning generated.
    scan-build: 1 bugs found.
    scan-build: Run 'scan-view /tmp/scan-build-2014-01-07-011258-4567-1' to examine bug reports.



    Версия clang:



    $ aptitude -F %p search ~i^clang
    clang-3.4



     
  • 2.87, Аноним (-), 04:58, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > А теперь я покажу, как спрятать от этой дуры "double free"

    Лол, теперь ты обиделся на статический анализатор за то что он обнаруживает НЕ ВСЕ твои косяки? Это не удивительно, особенно если учесть что ты не умеешь его использовать.


     
     
  • 3.120, pavlinux (ok), 17:20, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> А теперь я покажу, как спрятать от этой дуры "double free"
    > Лол, теперь ты обиделся на статический анализатор за то что он обнаруживает
    > НЕ ВСЕ твои косяки? Это не удивительно, особенно если учесть что
    > ты не умеешь его использовать.

    ТЫ МУДИЛО АНОНИМНОЕ, ВЫСЕР ВАКУУМ ЭТО ВАЖНАЯ ИНФОРМАЦИЯ  

     
     
  • 4.132, ваноним (?), 22:52, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    ути-пути, какие мы нежные. опять двойку в школе получил?
     

     ....большая нить свёрнута, показать (33)

  • 1.93, Аноним (-), 07:20, 07/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А в нем таки есть поддержка OpenMP или нет?
     
     
  • 2.103, Аноним (-), 10:45, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    есть поддержка OpenMP 3.1, сейчас активно пилится 4.0
     

  • 1.94, Fracta1L (ok), 08:13, 07/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    О, попробую снова собрать свою генточку сабжем. На 3.3 почти удалось.
     
     
  • 2.97, oOo (?), 08:41, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > О, попробую снова собрать свою генточку сабжем. На 3.3 почти удалось.

    А помните как линуксоеды тут и на лоре на фряшников собачилисть?
    А терерб - наперегонки :)

     
     
  • 3.99, anonymus (?), 09:44, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Верь в это.
     
  • 3.105, ананим (?), 11:14, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Наперегонки что? Эксперементируют со своей системой?
    На так у меня (на десктопе, не на серверах) половину пакетов интеловским компилятором собрано.
    Вот только в линухе эти эксперементы по желанию, а в бсде добровольно-принудительно.
    И уж тем более я не агитирую за самый кошерный компилятор, как некоторые. Просто гцц самый надёжный вариант во всех смыслах.
     
     
  • 4.106, Fracta1L (ok), 11:20, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вот да, согласен.

    У меня мотивом попыток собрать генту шлангом выступила быстрая сборка. На Firefox, например, разница была в 10 минут (емнип) в пользу clang. Однако далеко не все пакеты собираются цлангом, а некоторые даже если и собираются - работают весьма странно, пример - падающий компиз при попытке свернуть окно в заголовок.

     
     
  • 5.107, Аноним (-), 14:06, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    На FreeBSD шлангом собираются уже почти все порты. Gentoo просто тормозит с импортом соответствующих патчей.
     
     
  • 6.108, Fracta1L (ok), 14:34, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Или порты FreeBSD отстают по разнообразию от гентушного дерева.
     
     
  • 7.109, iZEN (ok), 15:28, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    over-24K портов FreeBSD отстают от портов Gentoo по разнообазию версий разве что, но не по уникальности.
     
     
  • 8.121, Fracta1L (ok), 17:37, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А в портах есть ядро Linux D... текст свёрнут, показать
     
     
  • 9.129, Аноним (-), 19:42, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Таки есть Правда не самый свежак ... текст свёрнут, показать
     
  • 9.136, Аноним (-), 00:15, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Не в портах, но лежит прямо рядышком с ядром фряхи в виде модулей ядра фряхи, ве... большой текст свёрнут, показать
     
     
  • 10.137, iZEN (ok), 01:07, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Зачем распаковывать вручную Есть порты gentoo http www freshports org search... текст свёрнут, показать
     
  • 8.124, metallica (ok), 18:02, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Происходит ли какая активность в freebsd по проектам, финансируемым DARPA по пов... текст свёрнут, показать
     
     
  • 9.130, Аноним (-), 19:44, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В списке спонсоров гос учреждений нет В OpenBSD после того как Тео послал их в ... текст свёрнут, показать
     
  • 5.126, ананим (?), 19:03, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Если интересно, то делал вот так http://www.gentoo-wiki.info/HOWTO_ICC_and_Portage с небольшими изменениями).
    Вот это тоже http://habrahabr.ru/post/83324/ читал, но делал по первой ссылке.
    Не вижу особых трудностей сделать также по аналогии для clang.
    В любом случае удобно получается.
    Но честно говоря результат больше джаст4фан, чем реальный профит.
     

     ....большая нить свёрнута, показать (14)

  • 1.133, Yaisis (?), 23:01, 07/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Будущее за LLVM, я это давно уже понял.
    И промежуточный байткод - это круто, так как можно компилировать в него программы, выполняя супероптимизацию и в таком виде можно распространять их, а конечную компиляцию в машинный код выполнять в момент установки под нужную архитектуру. Эта компиляция по-идее должна осуществляться намного быстрее, чем из исходников, написанных, например, на Си.

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

     
     
  • 2.134, Admiral (?), 23:51, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Будущее за LLVM, я это давно уже понял.
    > И промежуточный байткод - это круто, так как можно компилировать в него
    > программы, выполняя супероптимизацию и в таком виде можно распространять их, а
    > конечную компиляцию в машинный код выполнять в момент установки под нужную
    > архитектуру. Эта компиляция по-идее должна осуществляться намного быстрее, чем из исходников,
    > написанных, например, на Си.

    Юзвери лают – караван идет.

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

    Если MS заинтересуют они будут пилить в гордном одиночистве, ибо винда в транке llvm ни кому не нужна

     
     
  • 3.141, Yaisis (?), 02:25, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Юзвери лают – караван идет.

    Вы хоть знаете, что такое LLVM и как она работает ?

    > Если MS заинтересуют они будут пилить в гордном одиночистве, ибо винда в транке llvm ни кому не нужна

    Причём тут MS ?
    Никто вроде про винду и не вспоминал.

    Про ихнюю .NET я вспомнил только потому, что какой бы язык в ней вы не использовали, базовый набор библиотек в нём один и тот же. Т.е. будь это C#, F# или Pyton например они могут использовать набор функций фреймворка. И поэтому нет необходимости при изучении нового языка изучать и его библиотеки.

     
     
  • 4.175, Crazy Alex (ok), 21:36, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    В результате базовый набор ограничений тоже оказывается для всех одним и тем же. В общем, минусы тоже есть, хотя плюсы велики, да. Под никсами, впрочем, сишный аби обычно вполне достаточен.
     
  • 2.135, metallica (ok), 23:58, 07/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Хомячкам из норки не видно каким убожеством является их божество .NET,
    потому-что ничего больше не знают, а знали бы, даже не упоминали бы
    его, не говоря о выражении мнения о каком-то его удобстве и превосходстве.  
     
     
  • 3.138, anonymus (?), 01:42, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А не развернете ли вы свое виденье на платформу .Net?
     
  • 3.142, Yaisis (?), 02:59, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Безразницы, кто написал NET и то, что её больше используют под виндовс NET - ... большой текст свёрнут, показать
     
     
  • 4.143, metallica (ok), 03:14, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Как Вас колбасит от проблемы разного названия функций в разных библах. По
    мне так reference в зубы и вперёд.
    Не спасёт Вас LLVM потому-что в мире опенсурса тут же начнут появляться
    альтернативы, форки и т.д.  Это как ситуация с C++ STL и boost-
    всё, что есть в STL продублировали в boost, и обязательно с некоторыми труднозапоминаемыми изменениями
    в семантике и сигнатурах. Обязательно, стань LLVM стандартом, начнут появляться разные
    LLVM++ и всюду начнут пропихиваться, потому-что это верный способ для
    программеров показать свою деятельность  и выделить именно свой проект.
     
     
  • 5.149, Yaisis (?), 04:16, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Сомниваюсь, что форк LLVM появится, но если появится, то ничего страшного Пусть... большой текст свёрнут, показать
     
     
  • 6.163, Аноним (-), 10:40, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Сомниваюсь, что форк LLVM появится, но если появится, то ничего страшного.

    Не появится по одной простой причине - developers, developers, developers (c) Ballmer
    Не найдется столько разработчиков компиляторов, чтобы его тянуть.

     
  • 4.144, index.html (?), 03:23, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сказочник тот ещё никогда не видел, чтобы у кого-то возникали трудности вызова ... большой текст свёрнут, показать
     
     
  • 5.151, Yaisis (?), 04:41, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    NET создали, как конкурента Яве, но Макрософт реализовала его только под виндов... большой текст свёрнут, показать
     
  • 4.145, ананим (?), 03:27, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Попахивает матёрым маркетинговым булшитом и промытыми мозгами Ничего они оттуда... большой текст свёрнут, показать
     
     
  • 5.146, ананим (?), 03:47, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    ззыж Чтобы не быть голословным, пруфы 1 http en wikipedia org wiki Register_... большой текст свёрнут, показать
     
  • 5.147, Yaisis (?), 04:03, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я и не говорю, что берут, но LLVM начали делать позднее NET и его разработчики ... большой текст свёрнут, показать
     
     
  • 6.150, ананим (?), 04:28, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >Сам байткод не является полноценным и независимым и он только для одного языка. В LLVM байткод - это полноценная самодостаточная виртуальная машина

    Так, свободны молодой человек. :D
    Полный бред несёте. Очевидно, что вы были (надеюсь, что были), мягко говоря, не в курсе.
    И теперь просто не желаете признавать свои ошибки. В силу воспитания и юношеского максимализма.
    man intermediate representation (IR) (хотя, впрочем, предвидя это, пруфы я выше уже дал http://www.opennet.me/openforum/vsluhforumID3/93448.html#146 которые вы не успели прочитать и сразу ринулись в «бой» :D)

    Ещё раз. LLVM интересен не по-этому. Разберитесь с этой аббревиатурой. Как впрочем и с gcc.

     
     
  • 7.153, Yaisis (?), 05:16, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Полный бред несёте. Очевидно, что вы были (надеюсь, что были), мягко говоря, не в курсе.

    И теперь просто не желаете признавать свои ошибки

    Нет, я просто был не в курсе или просто подзабыл.

    А недостатки GCC описаны тут http://rus-linux.net/MyLDP/BOOKS/Architecture-Open-Source-Applications/Vol-1/

    Возможно в GCC какие-то уже устранили, он же развивается, но я не в курсе.
    Ну а ваш предыдущий комментарий, похоже был позже моего написан, конечно бы я его учёл, если б увидел.

     
     
  • 8.155, ананим (?), 05:49, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Там время указано если что зыж llvm хорош тем, что он именно llvm Low Level Vi... текст свёрнут, показать
     
     
  • 9.157, Yaisis (?), 06:24, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    И по поводу LLVM я не знаю, что выйдет из него, но после понятия основных механ... большой текст свёрнут, показать
     
     
  • 10.161, ананим (?), 07:08, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Безусловно Просто мне порой смешно смотреть, когда начинаются 171 войны 187 ... текст свёрнут, показать
     
     
  • 11.171, Yaisis (?), 19:27, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    gt оверквотинг удален GCC поддерживает множество систем предварительной обраб... большой текст свёрнут, показать
     
     
  • 12.181, ананим (?), 00:42, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ещё раз 8212 llvm не компилятор ... текст свёрнут, показать
     
  • 10.164, Аноним (-), 11:01, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, счас Связь с нативными языками есть только если interop уже кто-то пропи... текст свёрнут, показать
     
     
  • 11.170, Yaisis (?), 19:06, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я не имею ввиду нативные языки, а только НЕТовские Это и понятно, что у нативны... текст свёрнут, показать
     
     
  • 12.186, Аноним (-), 02:13, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    То есть в первую очередь шланг и c c - вполне нативные языки Ты просто не пон... текст свёрнут, показать
     
  • 7.154, Yaisis (?), 05:18, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Скорее всего просто не заметил ваш комментарий.
     
  • 4.148, ананим (?), 04:15, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >т.е. если сейчас считается С/С++ одним из самых быстрых языков, благодаря своему оптимизатору

    А ЭТОМУ где вас научили?
    С/С++ быстры, потому что ГОРАЗДО ближе к низко-уровнему языку — ассемблеру.
    Чтобы понятней — конструкции С/С++ преобразуются в гораздо меньший по объёму машинный код, чем большинство остальных высоко-уровневых языков. И это только для компилируемых языков!!!
    И второй плюс — программист на С/С++ гораздо в большей степени владеет информацией в какой именно машинный код трансформируется та или иная конструкция.

    >И так же хотелось бы, чтоб можно было без труда использовать в любом из языков любую внешнюю функцию, написанную тоже на любом языке, как в .NET можно написать функцию на C# и использовать её в F#.

    То, что вас «научили» из любого языка относительно легко создавать и вызывать COM-объекты, ещё не значит, что все остальные языки разучились создавать и вызывать библиотеки (.a, .so,…)
    Или вы о том, что там всё однообразно, хоть и безобразно, вызывается (другими одна на всё библиотека классов)? :D

     
     
  • 5.152, Yaisis (?), 05:04, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > То, что вас «научили» из любого языка относительно легко создавать и вызывать COM-объекты, ещё не значит, что все остальные языки разучились создавать и вызывать библиотеки (.a, .so,…)

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

    Приведу пример: Я хочу установить QT, после чего сразу же в Си заработает следующий код:

    #include <QApplication> ...

    И я так же хочу, чтобы сразу же заработал следующий код на питоне:

    import QApplication ...

    И аналогичный код на других языках.
    Но такого не будет, потому что для питона, например, надо установить PyQT(или что-то подобное, не помню уже), что является прослойкой(если не ошибаюсь), связывающей данный язык с библиотеками QT.

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

    Приведу другой пример: Допустим я установил под .NET фреймворк OpenTK. То тогда я могу вызывать функции данного фреймворка, как из С++, С#, F#, Python и любого другого .NET языка.

    COM-объект - это совсем другое, не то об чём я.
    И кстати мне интересно, какая в Линуксе технология, заменяющая COM ?

     
     
  • 6.156, ананим (?), 06:06, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Нет, просто хотелось бы, чтобы установил например QT и его функции можно было вызывать в любых других языках.

    Для этого есть биндинги (т.е. поддержка в самих языках). Например для Qt:
    $ eix qt|grep -i bindi
    * dev-libs/libindicate-qt
         Description:         Python bindings for the Qt toolkit
         Description:         A python binding for libpoppler-qt4
         Description:         Ruby bindings for Qt4
         Description:         Qt Perl bindings
         Description:         Qt Ruby bindings

    И то, это для C++-библиотек (там имена в объектниках «коверкаются». подробности http://en.wikipedia.org/wiki/Name_mangling)
    Для библиотек С (или при использовании extern "C" в С++, что требуется для dll в винде) всё ГОРАЗДО проще.
    А вообще, это не технический, а административный вопрос стандартизации юзер-спейсного АПИ. И всё. Конечно, строем ходить проще, никаких проблем с пробками и транспортными коллапсами.
    Но свобода творчества мне лично дороже. :D

     
     
  • 7.158, Yaisis (?), 06:45, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Спасибо за разъяснение, но вот по-моему эти биндинги ни к чему, я как раз за построение общего универсального АПИ между языками. Мы же можем из любого языка вызвать Си функцию, но для этого её надо объявить определённым способом (extern(C) или что-то подобное) и надо указать, где находится библиотека и т.д.

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

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

     
     
  • 8.160, ананим (?), 06:59, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Как бы вам объяснить то 8230 Для этого сами языки должны быть адаптированы К ... текст свёрнут, показать
     
  • 8.165, Аноним (-), 11:07, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    LLVM тут ничем не поможет, так как компилятор любого языка должен видеть определ... текст свёрнут, показать
     
     
  • 9.168, Yaisis (?), 18:57, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Дело в том, что у LLVM есть фреймворк для создания компиляторов, разработкики им... текст свёрнут, показать
     
     
  • 10.188, Аноним (-), 02:21, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Ты не понимаешь, определение вызываемой функции нужно на уровне исходников, текс... большой текст свёрнут, показать
     
  • 9.169, Yaisis (?), 19:01, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А компиляция вызова происходить будет на уровне байткода В LLVM компиляторы язы... текст свёрнут, показать
     
  • 6.159, ананим (?), 06:51, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >COM-объект - это совсем другое, не то об чём я.
    >И кстати мне интересно, какая в Линуксе технология, заменяющая COM?

    Во первых очень даже при чём. Это просто продолжение этой технологии.
    На второй вопрос ответить сложнее. И вот почему — слишком большой круг задач, к которым эту технологию приспособили.
    Но в оригинале COM-объект (тот что только с интерфейсом IUnknown) нужен только для одного — вызывать чужые блобы из своего ПО. Всё.
    Опенсорс — это слишком креативно для корпорастов мс.

    Если рассматривать далее, то пожалуйте в технологии IPC и RPC.
    Кстати, COM ничем не отличается в этом плане. Просто позаимствовала RPC (со своими изменениями) вот отсюда — http://ru.wikipedia.org/wiki/%D0%A3%D0%B4%D0%B0 (и далее на DCOM), которую тоже можно использовать в своём ПО в linux (man rpcclient и даже http://www.bettina-attack.de/jonny/view.php/projects/php-msrpc/ ).
    А вообще на текущий момент — dbus пожалуй стандарт (который теперь уже не демон, а в ядре. Спорное решение на мой взгляд, но вам понравится — теперь уж точно стандарт :D)
    http://ru.wikipedia.org/wiki/Dbus (обратите внимание на вызовы методов. Там же ссылка на lor, где есть примеры) — как видите, писать можно на чём угодно и взаимодействовать с чем угодно.

     
  • 6.193, Led (ok), 14:17, 09/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Приведу пример: Я хочу установить QT, после чего сразу же в Си
    > заработает следующий код:

    Какое отношение QuickTime имеет к Си-коду, школота?

     
  • 4.174, ffirefox (?), 20:34, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Проблема с .Net не то, что все языки на .Net будут одинаково быстро работать, а в том, что они будут одинаково тормозить. Но, как Вы правильно заметили, будут работать практически все и сразу (хотя, порой, исключения есть). С QT и традиционными компилируемыми языками код быстро будет работать гарантированно на одном языке (на котором писался), а вот для подключения библиотеки к другому языку приходится потрудится (хотя, не все так страшно, например, для того же Python или Lua). Но, потрудившись и скорость получим соответствующую.

     

     ....большая нить свёрнута, показать (37)

  • 1.167, yantux (??), 18:47, 08/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Нормальным языкам типа Паскаль, такие извращения не нужны.
     
     
  • 2.176, Аноним (-), 22:05, 08/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Разработчики Delphi и Lazarus забыли об этом тебя спросить и присобачили pascal к llvm.
     
     
  • 3.198, Владимир (??), 11:56, 10/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    llvm-pascal давно загнулся и не дышит.
    Нет работающего транслятора pascal в llvm.
     
     
  • 4.199, Admiral (?), 16:20, 10/01/2014 [^] [^^] [^^^] [ответить]  
  • +/
    автор llvm-pascal не осилил pascal
     

  • 1.203, Аноним (-), 21:52, 13/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Ребят, может кто подскажет, каким образом реализовать замыкания с помощью llvm?
     
  • 1.204, Perain (?), 22:37, 27/01/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    https://github.com/llvm-mirror/clang/commit/e0e019f

    Profile-Guided Optimization (PGO) support is landing within LLVM's Clang C/C++ compiler in catching up to feature parity with GCC and their never-ending effort to improve performance of compiled binaries.

    For those not normally excited by compilers, Profile-Guided Optimizations are a means of profiling a compiled program so that on subsequent compilations the compiler can better optimize the code for improved run-time performance. PGO is very different from traditional source-level optimizations and it's taken some time for Clang to implement the support besides the fact not many utilize this compiler optimization technique due to it being time intensive with requiring multiple compilations plus run-time profiling.

    With a code commit that hit Clang mainline last week, there's now the initial instrumentation for Profile Guided Optimizations. While the code is still in early form, proper Clang PGO support will hopefully be a feature of LLVM 3.5.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру