LINUX.ORG.RU

Способы выстрелить себе в ногу

 ,


2

6

Раз уж сегодня день нубских вопросов... Господа, делитесь способами стрельбы себе в ногу (или сразу в голову). Начну первым: вызвать чисто виртуальную функцию. Ну и классика жанра - указатели.

★★★★★

Ответ на: комментарий от Meyer

Ну, если серьёзно, есть каста людей, ничего кроме C и C++ не знающих и не желающих знать. Как дама с невыносимо страшной фотографией в этом треде, например. Вот таких людей надо избегать в работе, потому что проекты с ними превращаются в лютый ад. Проверено на практике.

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

Но ведь такие как человек на видео как раз и говорят, что делать.

Вот и общайтесь в таком духе с человеком из видео.

Еще раз для дебилов: тут удивились, почему кому-то могло потребоваться написать собственный shared_ptr. На самом деле для этого есть причины. Одна из них озвучена.

Нравится она вам или нет, сталкиваетесь ли вы с такими проблемами или нет — это ваши личные половые трудности. Но если вы мне начинаете говорить, что мне делать, то вот этого не нужно. Тогда мне не придется указывать вам адрес для пешего эротического путешествия.

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

Но если вы мне начинаете говорить, что мне делать, то вот этого не нужно.

Не нужно писать альтернативу shared_ptr. Это ни к чему.

azelipupenko
()
Ответ на: комментарий от iZEN

Тормоза жабы, и способы извращённого обхода этого несколькими способами, вплоть до аппаратного патчинга процессора (Jazelle) и всё равно не помогает!!!

anonymous
()
Ответ на: комментарий от hateyoufeel

А если говорить всерьез, то что в 2018 можно использовать для новых проектов вместо C++ в тех нишах, где C++ хорошо себя чувствует?

Разве что Rust или Ada.

Что-то еще?

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

Если там что-то из серии

/* API либы, через который вся работа */
struct {
    uintptr_t (*func)(<чётатам + va_list какой-нибудь>);
    ...
} my_functions_t;

/* собственно внешний интерфейс */
my_functions_t* start_core(<чётатам>);
void stop_core(void);
плюс заказчику нужен *.pas файл чтобы он мог включить его в проект и собирать отдельно от core-либы.
В случае, если либа из серии «кишки наружу», тогда да, можно и просто параметры вызова согласовать. upd. И то с теми же va_list-ами или константными указателями (const <чёта-там>*) потенциально можно сильно накривить.

SkyMaverick ★★★★★
()
Последнее исправление: SkyMaverick (всего исправлений: 2)
Ответ на: комментарий от anonymous

Не делай попыток выглядеть умнее - у тебя это не получается.

Пока чтов банковской и биржевой сфере все транзакции совершаются посредством Java. Пробовали запустить на .Net - поперхнулись.

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

Г-но сменили на мочу и поперхнулись.

anonymous
()
Ответ на: комментарий от SkyMaverick

Совмещал Java и Delphi в одном проекте через JNI. Ядро вообще было написано на Си. Из одной среды в другую передавались строки и числа. Так вот, универсальным интерфейсом между нативщиной и явским кодом были функции, соответственно, протокол «общения» был завязан на имена, передаваемые параметры и возващаемые значения - так называемый «плоский API». Убирать функции, которые уже используются, было нельзя, добавлять новые - можно.

iZEN ★★★★★
()

Был в команде кадр, каждый конструктор начинал строчкой «memset(this, 0, sizeof(T));». ЧСХ, оно так и не выстрелило.

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

Был в команде кадр, каждый конструктор начинал строчкой «memset(this, 0, sizeof(T));»

И долго он смог пробыть в команде?

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

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

Ну а ниши специфические: там, где пересекается сложность и высокие требования к производительности/ресурсоемкости.

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

И как ощущения от проекта?
А здесь был здоровый Дельфёвый проект и нужно было внедрить новый функционал для которого, уже реализована поставщиками либа. Но проблема, что либа имеет интерфейс, как вот выше описал -> все структуры и callback-и (считай несколько header-ов (ЕМНИП был один главный - большой и три маленьких - сервисных)) сиди и переписывай в pascal unit-ы.

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

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

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

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

Ну это вы же заявляете, что на C++ вообще ничего нельзя начинать делать в 2018. Значит куда не плюнь (вот вообще куда не плюнь) вы видите достойные и реальные альтернативы. Я и прошу перечислить те, что вы видите.

Если же отталкиваться от примеров, то вот, совсем свежий от FB: https://code.facebook.com/posts/1906146702752923/open-sourcing-katran-a-scala...

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

Ну это вы же заявляете, что на C++ вообще ничего нельзя начинать делать в 2018. Значит куда не плюнь (вот вообще куда не плюнь) вы видите достойные и реальные альтернативы. Я и прошу перечислить те, что вы видите.

Ну так ты напиши, куда именно мне плевать. Что ты увиливаешь-то? Сам же сказал, что есть ниши, где C++ чувствует себя комфортно.

hateyoufeel ★★★★★
()

Многопоточность и неаккуратность - самый надежный и труднообнаруживаемый способ выстрелить себе в ногу так чтобы и голова отлетела.

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

И как ощущения от проекта?

Проект был небольшой: из Java-кода нужно было вызывать нативный код, но не наоборот. Так что тут всё просто. Если была нужда делать обратные вызовы - из нативного кода вызывать явский, то тут пришлось бы изобретать ещё один нетривиальный протокол.

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

Если же отталкиваться от примеров, то вот, совсем свежий от FB

Как я понял, all the hard work делает ядро, а это только конфигурялка XDP/eBPF.

Зачем её писали на C++?

anonymous
()
Ответ на: комментарий от Bobby_

В D есть сборщик мусора, без которого D превращается в тыкву betterC.

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

Как дама с невыносимо страшной фотографией в этом треде, например

сделал мой день

Deleted
()
Ответ на: комментарий от loz

Ну, это сайд-эффект от доступной мощи. Можно «моя нога стреляй себя» и не делать, если подходить к делу ответственно.

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

Можно «моя нога стреляй себя» и не делать, если подходить к делу ответственно.

Можно, но не получается вообще ни у кого.

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

По-моему это не очень практичный компромисс.

loz ★★★★★
()

не с/с++, но 1с. чем не вариант?

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

И долго он смог пробыть в команде?

Да :( Ну, там и место было проклятое.

anonymous
()
Ответ на: комментарий от Meyer

если подходить к делу ответственно.

Так не бывает.

Только сегодня искал сжималку jpeg, наткнулся на это: https://github.com/tjko/jpegoptim. Судя по readme, автор пилит её с 96-го года. И что же мы видим первой записью в чейнжлоге: fix double free.

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

Судя по readme, автор пилит её с 96-го года
fix double free

Это не есть ответственный подход к делу. Видимо он ее вечерами под пиво пилил.

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

Далеко не всегда. Собсно асан сабж то и поймал, но благо среди тесткейсов один из пары десятков попался тот, на котором асан срабатывал.

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

Рассказывать басни, а потом отнекиваться - это виляние.

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

Попытка скрестить синтаксис типичных функциональных ЯП и C.

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

Вот уж кто тут пернул - ты. Это те, кто плюсы не осилил городят свои извращённые системы типов и наследованием на языке, не подразумеваем это изначально. А потом мне приходится это разгребать.

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

Это те, кто плюсы не осилил городят свои извращённые системы типов и наследованием на языке, не подразумеваем это изначально.

Где-то заплакал разработчик GLib.

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

Сделать хитрожопую структуру со структурами внутри, в одной из которых хранится float. Словить hardfault от того, что float оказался невыровненным, а FPU такого не умеет.

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

Если не «паковать», то не словишь.

А если паковать - словишь и на int, при записи поля по указателю на него.

И да, от уровня вложенности это не зависит.

shkolnick-kun ★★★★★
()
Последнее исправление: shkolnick-kun (всего исправлений: 1)
Ответ на: комментарий от Meyer

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

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

Кто бы заметил ошибку, если не знал, что она тут есть?

И тут в ветку врывается статистический анализатор от конторы с блюющим пони на логотипе.

anonymous
()
Ответ на: комментарий от shkolnick-kun

Она не паковалась. Вот не помню точно, то ли компилятор не сделал нормально выравнивание во вложенной структуре, то ли я доигрался с указателями. Но с int работало! Cortex-M4.

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

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

Скорее второе, иначе должно было выровнять поля по самому «длинному».

В Cortex-M0 еще «круче», там нельзя делать доступ к не выровненным uint16_t uint32_t по указателям. Точнее можно, но через memset...

shkolnick-kun ★★★★★
()
Последнее исправление: shkolnick-kun (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.