LINUX.ORG.RU

[соцопрос] Pure C

 


0

0

Я вот никогда не понимал природу яростных споров типа: C vs C++. С++ надмножество (почти) языка С. Мне всегда казалось, что С++ дальнейшее развитие обычного С. А значит лучше использовать С++ (за редким исключением), а С забыть, как анахронизм. Почему же до сих пор существуют адепты чистого С.

Хотел бы обратиться к тем, кто до сих пор пишет прикладной софт на С. Почему вы это делаете? Чем вам нравится С? Почему не нравится С++?

Убедительная просьба всем остальным воздержаться от комментариев. Все равно вы никому ничего не докажете. Зато топик превратится в срач. Данная тема для меня интересная. Но уж больно она «горячая».

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

> А в группе произвольная операция - ее не называют сложением

Как только её ни называют .) И сложением, и умножением, и еще хз чем :)

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

там строки - последовательности?

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

Smalltalk:

на лисп можно вообще любой синтаксис накрутить) Тем более в данном случае запись типа (. «asa» «saa» «sasa») менее избыточна

pseudo-cat ★★★
()
Ответ на: комментарий от ae1234

> можно скомпилировать for(;P(«\\n»),R-;P(«|»))for(e=C;e-;P(«_»+(*u++/8)%2))P(«| »+(*u/4)%2);

Нельзя. На R- и e- будет ошибка

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

> нафига в C++ string.h или препроцессор?

В C++ string.h и нет :-) Там <cstring> вместо него. Для всяких std::memmove, std::memcpy :-)

или препроцессор

Дает возможность использовать одни и те же заголовки/библиотеки как в C, так и в C++.

Сюрприз, но всякие #include именно препроцессор обрабатывает.

sjinks ★★★
()
Ответ на: комментарий от pseudo-cat

>там строки - последовательности?

Да

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

Ога. , определена в базовом абстрактном классе

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

В C++ string.h и нет :-)

При этом «abc» является C-style строкой, а «abc» + «cde» должно вызывать ошибку компиляции.

Кстати, к твоему сведению namespace'ы в C++ лишь в 1993-м году появились, и никаких std:: не существовало.

Совместимость нужно было ломать сразу, а не постепенно.

Сюрприз, но всякие #include именно препроцессор обрабатывает.

Ну и почему это нельзя было по-человечески сделать, как в Go или D?

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

> Совместимость нужно было ломать сразу, а не постепенно.

Совместимость практически не сломана, и является одним из главных козырей C++ (если не самым главным).

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

>Ну и почему это нельзя было по-человечески сделать, как в Go или D?

Совместимость нужно было ломать сразу, а не постепенно.

:)

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

> но зачем забивать свой мозг тоннами говна?

Это относится и к программированию в целом :) Суета сует.

Manhunt ★★★★★
()

> Хотел бы обратиться к тем, кто до сих пор пишет прикладной софт на С. Почему вы это делаете?

Си и Си++ - два языка с предсказуемым рантаймом, при этом Си проще.

Чем вам нравится С?

Мне не особо нравится Си - он сильно устарел.

Почему не нравится С++?

Слишком сложен - неоправданно сложен для предоставляемых возможностей. Можно выбрать подмножество, но трудно удержаться в его рамках.

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

Тебе ясно написали - любой синтаксис.
Есть макро-литеры - пишем парсер своего синтаксиса, подставляем в макро-литеру и вперед.

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

а панятия неимею - простое решение

str1=«abc»+«def»; устроило бы :)

открой для себя C :)

#include <stdio.h>
int main() {
    char *msg="hello" "word";
    printf("%s\n",msg);
    return 0;
}
MKuznetsov ★★★★★
()
Ответ на: комментарий от Love5an

> Тебе ясно написали - любой синтаксис.

А я ясно сказал, что это ложь.

Есть макро-литеры - пишем парсер своего синтаксиса

Пример или GTFO.

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

>не нужно помнить типы val,val1,val2 на протяжении всего кода

завязывай писать простыни, которые на экран не влазят.

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

>> Пример или GTFO.

loop сойдёт? :)

Нет, конечно. Питоновский for (с кортежом на месте переменной цикла и с else, ага) - подошел бы. Да вообще любая ссылка на существующую библиотеку - если сделать любой синтаксис и на самом деле не проблема - значит, его должны были сделать уже не раз.

tailgunner ★★★★★
()

> Чем вам нравится С?

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

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

x0r ★★★★★
()

1) использую C для написания простых прог. Для которых «нормальные люди» используют баш, и для которых слишком лень подготавливать окружение жавы.
2) С++ не помещается в мой мозг. Каждый тред о плюсах превращается в дебаты как у ПГМ. Каждая книжка претендует на Библию. Любая элементарная операция создается на основе тысячи неочевидных шаманских правил, передающихся полу-устным способом. Как же сделать что-то «правильно» никто не рассказывает.
3) Шаблоны ужасны. STL тоже. Я ниасилил прочитать исходник STLя, и так до конца и не понимаю как именно он работает.
4) Знакомые, которые пишут реальный софт, утверждают, что он ни разу не кроссплатформенный.

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

его должны были сделать уже не раз.

Делали и уже не раз.

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

Да там вообще intel-assembler можно в 10-20 строк описать (и работать заставить) ;)

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

Нет, конечно. Питоновский for (с кортежом на месте переменной цикла и с else, ага) - подошел бы. Да вообще любая ссылка на существующую библиотеку - если сделать любой синтаксис и на самом деле не проблема - значит, его должны были сделать уже не раз.

оно никому особо не нужно

(defun my-mega-parser (stream char)
  ...)

(setf-macro-character #\% 'my-mega-parser)

%
python_like Code...

ну как-то так

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

> Примеры - синтаксис в rdznl и cl-interpol

Хотел спросить, где именно там точная имитация синтаксиса другого языка, но скажу проще: ПНХ, чмо.

tailgunner ★★★★★
()

С си и плюсами все примерно и так понятно. А вот из «новых» языков что выберите: D, Java, C#, Vala итд.

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

> С си и плюсами все примерно и так понятно. А вот из «новых» языков что выберите: D, Java, C#, Vala итд.

что-нибудь из итд.

korvin_ ★★★★★
()

C++ излишне сложен и продолжает усложнятся. C++ навязывает псевдопарадигмы и их готовые реализации. Мне этого достаточно, чтобы продолжать использовать C. Ещё на Go надо будет получше посмотреть.

Достаточно или надо с примерами?

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

> C++ навязывает псевдопарадигмы и их готовые реализации.

Достаточно или надо с примерами?


Досыпь примеров, чего уж там :D

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

>Ты тупой баран.

Удивляюсь как тебя по статье 5.2 ещё не выперли отсюда.

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

> C++ излишне сложен и продолжает усложнятся.

В действительности, Си тоже неоправданно сложен. Хотя и немного проще, чем С++.

Manhunt ★★★★★
()

На OpenCL/CUDA пока что нет С. Потому и пишу

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

> Ты тупой баран.

Тупой баран здесь только ты, потому что на вопрос так и не ответил,

Да еще и обидчивый, как девочка.

Я ответил тебе в твоем же стиле. Не нравится? Так и было задумано.

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

>Досыпь примеров, чего уж там :D

По поводу навязывания псевдопарадигм, это тот софт которые использует ооп и шаблоны даже там где это этого пользы мало. Его тяжело читать, и ещё тяжелее править. К тому же отдельные конструкции языка по каждому случаю, не слишком изящно и недостаточно просто. Псевдо по тому, что ООП и ОП не есть парадигмы в том же смысле, что и декларативная, функциональная, императивная.

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

Есть ещё более конкретный, но отчасти контрпример. Перегрузка операций в C++. Это может сделать код более выразительным, особенно при работе с векторами/матрицами и т.п.. Хотя не всегда очевидно как компилятор разберется с очередным выражением, и может не совсем удачно, в этом и недостаток.

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

А пример можно? И что нибудь общего назначения

Haskell, *ML, Scala. при необходимости - расширяя с помощью C (или Java). Tcl в качестве скриптового языка

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

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

pseudo-cat ★★★
()
Ответ на: комментарий от Manhunt

>В действительности, Си тоже неоправданно сложен. Хотя и немного проще, чем С++.

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

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

>Тупой баран здесь только ты, потому что на вопрос так и не ответил,
В CL синтаксис можно менять совершенно как угодно. Если ты такой тупой, что приведенный примеров тебе мало, вот еще:
http://common-lisp.net/project/clpython/

(clpython.parser:enter-mixed-lisp-python-syntax)

Я ответил тебе в твоем же стиле. Не нравится? Так и было задумано.

Нет, ты ответил в стиле обидчивой девочки.

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

>> Я ответил тебе в твоем же стиле. Не нравится? Так и было задумано.

Нет, ты ответил в стиле обидчивой девочки.

Если со стороны тебе твой же стиль кажется стилем обиженной девочки - задумайся о своей половой принадлежности. Хотя... может, ты и на самом деле девочка, которая притворяется толстым бородатым троллем? Это всё объяснило бы %)

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

> Кстати, к твоему сведению namespace'ы в C++ лишь в 1993-м году появились, и никаких std:: не существовало.

А в 1979 он назывался C with classes, и что? Текущий стандарт языка — ISO/IEC 14882:1998, там std есть.

Совместимость нужно было ломать сразу, а не постепенно.

Ну как бы у Страуструпа были другие цели: максимальная совместимость с C для более простой миграции на C++.

Ну и почему это нельзя было по-человечески сделать, как в Go или D?

Машину времени на тот момент не изобрели (D появился где-то в 1999, а Go еще лет через 10).

Во-вторых, проще прочитать The Design and Evolution of C++ Страуструпа — там он даёт ответы на многие вопросы.

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