eXeL@B —› Софт, инструменты —› Полноценный C/C++ компилятор |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 14 июня 2016 07:26 · Личное сообщение · #1 Недавно продолжительное время возился с чужим проектом, написанном на сях, и неожиданно для себя увлёкся (сам закоренелый паскальщик). Решил более близко познакомиться с этим языком, но в процессе столкнулся с очень большой проблемой – отсутствием полноценного компилятора. Под полноценностью подразумевается наличие неурезанного встроенного ассемблера. Щупанью подверглись 3 продукта: мелкомягкий, интеловский и поделие от Digital Mars. Первые джва не знают о директиве DB/DW/DD (зато детище MS занимается самодеятельностью в асм-блоке), как следствие не дают возможности создать jump-table (самое смешное, что хаемый всеми багландский компилер не имеет таких ограничений). У последнего нет этого фатального недостатка, но к большому огорчению есть другой – деоптимизация кода левыми инструкциями (не для выравнивания). В общем вопрос такой: существует ли на свете C/C++ компилятор (или может какая-то из версий упомянутых), способный генерить качественный код и обладающий полнофункциональным inline-ассемблером? Я что-то не нашёл. |
|
Создано: 04 июля 2016 13:30 · Личное сообщение · #2 |
|
Создано: 13 июля 2016 01:07 · Поправил: FalseMaster · Личное сообщение · #3 Вот плохо, что уведомления на мыло не сделать, как всегда забыл о теме… Ну да ладно, она всё-равно себя исчерпала и отписывающиеся скатились в оффтоп. Я просто хотел немного поиграться с Си, но как видно так и помру проклятым паскальщиком К тому же оказалось, что я сильно отстал от жизни – начиная с версии XE в делфийском компилере появились директивы для выравнивания кода (и это ох**нно). Ещё бы реализовали это для данных, кодогенератор довели до ума, да препроцессор добавили, и тогда у сишного компилятора не останется никаких преимуществ. dosprog >> Вот те раз. А где ж там Паскаль? Как это где? В начале проседуры: Code:
Code:
>> И вопрос - вот этот RET, он возврат куда? И откуда? Очень странный вопрос. На следующую после "CALL" инструкцию вестимо. >> - Это путь к созданию безнадёжно глючного софта. Ты так говоришь, потому что привык, что компилятор генерит за тебя половину кода. Но это не труЪ, чувак >> Кстати, это выглядело отталкивающе ещё в Turbo-Pascal'е - код вперемежку с данными. Какой ужас. Ну береги тогда свой манямирок от дизассемблеров/дебаггеров, а не то как покажут тебе таблицу переходов, вкоряченную непосредственно (с выравниванием на DWORD) после "jmp dword [<addr> + r32*4]", в скомпиленном твоим любимым MSVC бинарнике. |
|
Создано: 13 июля 2016 01:16 · Поправил: dosprog · Личное сообщение · #4 FalseMaster пишет: Очень странный вопрос. На следующую после "CALL" инструкцию вестимо. Нормальный вопрос. Потому, что никак нет - возврат будет по тому адресу, который в стеке. А что там в стеке будет при твоём подходе, это неизвестно никому. FalseMaster пишет: Ты так говоришь, потому что привык, что компилятор генерит за тебя половину кода. Да, компилятор этим занимается, приходится это учитывать. |
|
Создано: 13 июля 2016 02:51 · Поправил: FalseMaster · Личное сообщение · #5 dosprog >> А что там в стеке будет при твоём подходе, это неизвестно никому. Почему неизвестно-то? Что запихали, то и будет, не? Или ты имеешь в виду порчу стёка при записи в память по кривому указателю? Так от этого компилятор не защитит даже если писать на Си/Паскале без асм-вставок. При таком уровне кодобоязни остаётся только на VB перейти или, ещё лучше, на HTML >> Да, компилятор этим занимается, приходится это учитывать. А при моём подходе ничего учитывать не надо (кроме пролога/эпилога). Что на входе, то и на выходе, ня! |
|
Создано: 13 июля 2016 05:01 · Личное сообщение · #6 |
|
Создано: 13 июля 2016 06:32 · Личное сообщение · #7 dosprog >> куда будет в приведеном примере ret, не учитывающий пролога. Ох и дотошный же ты чел. Возврат будет куда следует, т.к. функция объявлена как register (тип вызова по умолчанию), локальные переменные отсутствуют, и компиляция производится с ключом {$W-} (аналог сишного Oy). Лучше бы в другой теме что-нибудь полезное предложил. |
<< . 1 . 2 . |
eXeL@B —› Софт, инструменты —› Полноценный C/C++ компилятор |