BG Development


Страници: (24) [1] 2 3 ... последна »  ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> хахахах, вчера забелязах нещо яко!
Дон Реба
Публикувано на: 11-07-2018, 05:56
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 7130
Регистриран на: 11.11.06



все още С++ третира "ФДГХГФХГХ" като char*, а не като const char*, въпреки че отдавна процесорите се изцепват ако опиташ да пишеш в кодовия сегмент . как ли вият от мъка и безсилие прогресивисти и поборници за късане с позорните средновековни практики като робството, неравенството на половете и липсата на const?
PM
Top
johnfound
Публикувано на: 11-07-2018, 06:08
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 6825
Регистриран на: 27.05.04



И къде тука има писане?


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 2B446ADCEC7E180CD4C59391D81D4CAB3E99CA7AE767DB3AB45AF976F8A2050FF071DDB733F1
PMEmail PosterUsers Website
Top
Дон Реба
Публикувано на: 11-07-2018, 06:40
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 7130
Регистриран на: 11.11.06



QUOTE (johnfound @ 11-07-2018, 06:08)
И къде тука има писане?

const модификатора е вид подсказка дали можеш или не можеш да пишеш, която освен това се следи от компилатора. когато аргумент на някаква функция е char* това значи че функцията може да се опита да пише в стринга, а на практика дори значи че това е резултата от функцията, което е доста полезна подсказка. функциите които ползват стрингове за вход по правило се пишат с аргументи const char*, което не пречи да им подадеш char*, но обратното не може - да подадеш const char* там където се изисква char*.
това че "ДФГХ" спокойно се подава в char* означава че човек може да си направи краш дори спазвайки дисциплина, просто от липса на информация или рефакторинг на стар работещ код.

аз не съм фен на компилаторно налаганата дисциплина, и бих предпочел компилатора да дава предупреждение, а не грешка (защото се случва да се пише в конст указател), но въпреки това const модификатора е по-скоро полезен. освен това за разлика от привате модификатора, конст има напълно легален начин да се заобиколи, който макар и рядко се ползва в реалния живот, а привате няма. затова никога не ползвам привате, там първо подсказката за разработчика е почти никаква (само от интелисенса, слага иконка), и второ е напълно незаобиколим.
PM
Top
dvader
Публикувано на: 11-07-2018, 07:04
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 4133
Регистриран на: 12.07.05



QUOTE (Дон Реба @ 11-07-2018, 05:56)
все още С++ третира

Когато казваш "С++" трябва да казваш за кой компилатор иде реч - стандарта си изисква да са const. Майкрософтския си има опция по въпроса. И добре, че я има, защото има тонове легаси код, дето е написан по "старият" начин.
И не на последно място, защо все още ползваш char*, било то const или не, имаш си string_view за целта.

Това мнение е било редактирано от dvader на 11-07-2018, 07:06


--------------------
I find your lack of faith disturbing
PM
Top
Gamma Goblin
Публикувано на: 11-07-2018, 07:31
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 1289
Регистриран на: 21.02.18



да не споменавам, че имаш и джава


--------------------
Напред! Живота е сраженье! Напред! И прав всегда ходи!
Напред, макар към поражение! Ако ще паднеш, прав падни!
---
Raw, and untamed in spirit, We chew this world and Spit it out
---
Challenge my own world to chaos
---
“I overcame myself, the sufferer; I carried my own ashes to the mountains; I invented a brighter flame for myself.”
PMEmail PosterUsers Website
Top
johnfound
Публикувано на: 11-07-2018, 07:58
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 6825
Регистриран на: 27.05.04



А между другото, в сегмента на кода е съвсем законно и нормално да се пише. Това си е част от архитектурата. Специалните защити са просто особености на операционната система и/или на конкретен хардуер, което няма причини да влияе на синтаксиса на език, който трябва да е преносим.


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 2B446ADCEC7E180CD4C59391D81D4CAB3E99CA7AE767DB3AB45AF976F8A2050FF071DDB733F1
PMEmail PosterUsers Website
Top
Дон Реба
Публикувано на: 11-07-2018, 08:16
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 7130
Регистриран на: 11.11.06



QUOTE (dvader @ 11-07-2018, 07:04)

И не на последно място, защо все още ползваш char*, било то const или не, имаш си string_view за целта.

защото не съм залупен идеалист и работя по реални проекти, а не да печеля олимпиади по ооп правоверност. тая философия ми е от последните 4-5 години, преди като бях наивно новобранче си жулех стрингове с най-голям кеф.
в реалните проекти, често има по три чешита стрингове (библиотеки, плъгини, 3рд парт компоненти), и съвсем лесно може да се окаже че подаваш един стринг към функция която ползва друг. това в повечето случаи е само перформанс проблем, тъй като почти всички класове за стринг имат конверсия от/към чар*, но опита ме убеди че не само за перформанса , но генерално е по-добре стринговите аргументи да са const char*, а не стринг
стринговете са си за вътре, чудесен инструмент са, но е добре да се избягват по интерфейсите. всяка функция която има шанс да бъде извикана от външен код някой ден, задължително трябва да приема const char* като аргумент, а не стринг, дори да ползва вътре дължина на стринга или нещо подобно, което е чиста загуба на перформанс със const char*.
ако функцията няма шанс да бъде извикана като външна, но може да мине с const char* (тоест няма перформанс проблем), пак се оказва че по-добре да бъде const char*.

PM
Top
Дон Реба
Публикувано на: 11-07-2018, 08:20
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 7130
Регистриран на: 11.11.06



QUOTE (johnfound @ 11-07-2018, 07:58)
А между другото, в сегмента на кода е съвсем законно и нормално да се пише. Това си е част от архитектурата. Специалните защити са просто особености на операционната система и/или на конкретен хардуер, което няма причини да влияе на синтаксиса на език, който трябва да е преносим.

специално на х86 е така и операционните системи го спират по секюрити причини, но цялото ти изказване е срам за човек дето се праска че не е програмист,а инженер. инженерите по-често пишат на системи където "сегмента на кода" изобщо не е в рама и физически не може да се пише, не и директно.
PM
Top
gat3way
Публикувано на: 11-07-2018, 08:26
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3115
Регистриран на: 22.06.12



Почти убеден съм че не ги слага у .text-a а в .rodata-та такива неща поне в линуксчето де иначе и при кода да ги слагаше там страниците памет немат права да се пише у тях тъй че нема секюрити драми
PMEmail Poster
Top
johnfound
Публикувано на: 11-07-2018, 08:37
Quote Post


Group Icon
Име:
Група: VIP
Ранг: Почетен член

Мнения: 6825
Регистриран на: 27.05.04



QUOTE (Дон Реба @ 11-07-2018, 09:20)
специално на х86 е така и операционните системи го спират по секюрити причини, но цялото ти изказване е срам за човек дето се праска че не е програмист,а инженер. инженерите по-често пишат на системи където "сегмента на кода" изобщо не е в рама и физически не може да се пише, не и директно.

Всички фон Нойманови архитектури са така, не само x86. При тях принципно няма разлика между код и данни. Което е и правилния подход към нещата де.

И няма от какво да ме е срам – език като Ц не може да базира синтаксиса си на някакви частни особености на архитектурата. А в моя любим асемблер, този конфлит се решава автоматично – ако имаш инструкции да пишеш в кода – пиши, ако нямаш, много ти здраве. icon_lol.gif


--------------------
asm32 - Приложно програмиране на асемблер.
Tox: 2B446ADCEC7E180CD4C59391D81D4CAB3E99CA7AE767DB3AB45AF976F8A2050FF071DDB733F1
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (24) [1] 2 3 ... последна » Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0