LINUX.ORG.RU

В Си макро магии для строк подвезли

 , ,


2

3

https://github.com/skullchap/chadstr

int table = 13;
int id = 37; 
str test1 = str("SELECT * FROM ", table, " where person_id ", id);
str test2 = str(test1);         //copies test1 to test2
str test3 = str(test2, test1); // returns concat of test2 and test1

test2 = test1; // acceptable, but wrong since test2 now points to test1 not copies it.

str(*test1); // returns const char* to use in printf like functions
Ex: puts(str(*test1)); // prints test1
chadstr test1 = str("pineapple"); 
chadstr test1range = str((range)(test1, 3,6)); // neap

Судя по всему оно умеет интерполяцию строк (в тч и конкатенацию) а так же виртуальные ранжи. В исходном коде есть зачатки сборщика мусора.

Исходный код с кучей макро магии https://github.com/skullchap/chadstr/blob/master/chadstr.h.

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

Это уже не С получается! Поэтому и не нужно.

Для конкатенации строк есть strcat (если буфер первой позволяет) либо sprintf в новый буфер.

Eddy_Em ☆☆☆☆☆
()

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

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

Потому что кому-то нужен класс string с кучей методов и перегрузок, а кому-то нужна структура с указателем и размером.

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

Ну ты понял.

Язык С с

  1. выводом типов (almost always use auto): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2697.pdf

  2. шаблонами(функции у которых тип параметров auto) и лямбдами: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2695.pdf

  3. деструкторами: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2589.pdf

  4. тут ещё очень много всего интересного: http://www.open-std.org/jtc1/sc22/wg14/www/wg14_document_log.htm

будет намного лучше чем С++ :)

Хочу верить в комитет С, что он одобрит много фич в С23 и это будет современный язык с сахарком.

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

Это будет разрыв шаблона у всех программистов мира. Омг конечно.

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

интерполяцию строк

Если слов не понимаешь то не используй их.

виртуальные ранжи

В тебе живёт великий маркетолог. Перестань нести бред и начни называть вещи своими именами

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

Именно из таких забытых единичек, sprintf и пр. и складывается си-культура, вследствие которой 90% софта дырявый глюкодром.

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

Зато это же класно, когда ты можешь не просто выстрелить себе в ногу, но и вообще самоубиться из гранатомета!

И это — вполне оправданная цена за простоту языка. Проще — только ассемблер, но там писанины слишком уж много.

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

Всякие расты и го рвутся в нишу си. Надо хоть немного осовременить язык иначе он вымрет.

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

Раст действительно хочет заменить плюсы. А вот с си непонятно. Много претендентов.

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

расты и го

Вот еще не хватало в хипстеры превращаться! Мне С хватает за глаза. И мне нравится, что на нем, в отличие от многих других ЯП, можно писать абсолютно все: хоть «скриптики», хоть веб и прочие сетевые хрени (чем сейчас и занимаюсь), хоть под микроконтроллеры, хоть модули ядра … И многое другое.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от cpio

Потому что кому-то нужен класс string с кучей методов и перегрузок, а кому-то нужна структура с указателем и размером.

Одно другому не мешает. Можно даже поря класса строки сделать открытыми.

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

Хочу верить в комитет С, что он одобрит много фич в С23 и это будет современный язык с сахарком.

Лучшее что может сделать комитет Си – это объявить его deprecated и самораспуститься.

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

которые и в правду набрали эволюционного балласта?

Rust набрал уже больше. Там вроде даже многоступенчатая сборка с разными версиями компилятора и рекомендуется 16 ГБ диска для сборки. По тормозам компиляции вполне конкурент C++. В целом идея шаблонов повсюду убога. И исключения нормальные до сих пор не завезли.

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

Компайл-тайм полиморфизм и zero-cost абстракции нужны так или иначе. Если не шаблоны, так constexpr-функции и паттерн-матчинг.

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

Компайл-тайм полиморфизм и zero-cost абстракции нужны так или иначе.

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

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

Может. Это просто слой абстракции сверху. Причем компилить можно хоть в C89 для какого нибудь некро железа.

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

без тормозов компиляции

Эта проблема существует, но большей частью искуственно надумана — компиляция программы занимает ничтожный процент времени в сравнении с савокупным временем её работы. Тем более, что зачастую она вообще происходит на на специализированных серверах.

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

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

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

но большей частью искуственно надумана — компиляция программы занимает ничтожный процент времени в сравнении с савокупным временем её работы

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

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

Сишный стиль кодинга это изменит до неузнаваемости.

Что ему будет? В сишном стиле можно и на C++ писать.

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

интересно, что из этого выйдет )

Да, подождём 23 год. Может ещё всё отклонит комитет.

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

Есть сомнения, auto зарезервированное ключевое слово, defer сломает совместимость.

На какой нибудь _Defer еще можно понадеяться.

Лямбды, авто, и деструкторы кстати уже есть в gcc.

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

а кому-то нужна структура с указателем и размером

std::string_view

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

Генерики в си уже есть, остальное можно сделать средствами языка. Так что там вводить особо нечего. Там много слов о всяких деструкторах мол вот free выходя из треда не делается, но эммм, это уже не уровень языка это просто уровень реализации тредов и всё. А вызвать функцию с чем угодно по выходу из тредов можно и сейчас. 99% фичей которые хотят запилить и так уже есть и если нужно они используются. И всё явно и всё видно как работает, в отличии от растов и прочих где в кихках чёрт ногу сломит на банальных вещах

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

Ты видимо вообще не программист, всё что выше описано уже есть. И ничего это не меняет. Фичи используются когда они нужны, а не УУУУУ НОВАЯ ШТУУУКА Я БУБУ ИЙЁ ИСПОЛЬЗАВАТ ВИЗДЕЕЕЕ. =)

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

Лямбды, авто, и деструкторы кстати уже есть в gcc.

Да, там в тех ссылках и написано. Типа в gcc уже есть. Давайте сделаем теперь обязательными для всех С компиляторов, но с норм синтаксисом, как в С++.

Вывод типов в gcc: https://gcc.godbolt.org/z/bddxjxhsT

Лямбды в gcc: https://gcc.godbolt.org/z/bd9dE5arh

ну и про «деструктор» (cleanup): https://gcc.godbolt.org/z/r11MvGbbE

@Eddy_Em и @X512 вам текущие примеры, которые уже компилируются в C(gcc) нравятся больше, чем код в предложениях к комитету?

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

Лично я считаю, что дальше C11 идти нет смысла. Я вообще пишу в основном на С99, а из С11 использую только инициализацию массивов по индексам

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от fsb4000

Eddy_Em и X512 вам текущие примеры, которые уже компилируются в C(gcc) нравятся больше, чем код в предложениях к комитету?

Я в целом против нестандартных расширений и вендор лока.

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

будет намного лучше чем С++

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

Комитет заплесневел в 80-х, с чего сейчас ему проснуться?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.