LINUX.ORG.RU

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

 , ,


1

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.

★★★

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

В смысле? Ты же сам вот здесь – Шок от С. Как склеивать строки? (комментарий) – говорил:

Ну так оформи эту шнягу в отдельный макрос или функцию. Чего как маленький-то?

Вот же он!

Princesska ★★★ ()
Ответ на: комментарий от 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)

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

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

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

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

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

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

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

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

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

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

расты и го

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

X512 ★★ ()
Ответ на: комментарий от 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

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

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

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

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

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

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

anonymous ()