C / C++

Программные средства разработки

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

C / C++

Непрочитанное сообщение Olej » 11 сен 2014, 12:26

Про C++ писать особо нечего - общеизвестно... ;-)
(хотя я лично C++ не люблю, и всегда предпочту C, Go, или Python ... при том что сделал несколько крупных групповых проектов на C++ ... да и для книги своей QNX/UNIX: анатомия параллелизма примеры писал на C++ - так лаконичнее)

Но есть некоторые любопытные мелочи, которые ужно бы зафиксировать себе на память:

1. online C++ ресурсы (WEB), вот такого вот сорта: C++ shell.
Где можно набрать (скопировать из файла, подредактировать) интересующий код и тут же посмотреть что там получается...
http://cpp.sh/v02/about.html :
This is a simple frontend for a GCC compiler on a linux machine.
Currently, the system compiles using GCC 4.9.0; with Boost 1.49 available.
Please note that your application is sandboxed, and certain system calls may fail.
По поводу недопустимости некоторых системных вызово они правы: как только дело доходит до pthread - так весь вывод становится глухо-немым :shock:

2. Наличие кроме g++ компилятора GCC под Linux компилятора Clang (из проекта LLVM), который очень и очень активно развивается...
И интерес даже не сколько в самом GCC/Clang, сколько в новой стандартной библиотеке C++ при Clang.
Clang может линковаться со стандартной библиотекой из GCC (опция -stdlib=libstdc++) и с новой библиотекой C++ (опция -stdlib=libc++),

3. Ну и интерактивный интерпретатор C++ (из того же проекта LLVM) - Cling - небезынтересен:
CLing
С++ интерпретатор Cling
(если это получит развитие)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: C++

Непрочитанное сообщение Olej » 11 сен 2014, 17:51

Olej писал(а): 3. Ну и интерактивный интерпретатор C++ (из того же проекта LLVM) - Cling - небезынтересен:
CLing
С++ интерпретатор Cling
(если это получит развитие)
CLing (в отличие от CLang) в репозитариях нет.
Но достаточно взять бинарную сборку на странице CERN: CERN PH-SFT Builds

Код: Выделить всё

 Name                                            Last modified     Size
cling-Ubuntu-14.04-64bit-1330543641.tar.bz2	11-Sep-2014 10:24 	111M
cling-Fedora20-x86_64-1330543641.tar.bz2	   11-Sep-2014 10:21 	111M
cling-doxygen-13305436.tar.gz                 11-Sep-2014 10:22 	6.6M
Вообще, интерпретатор Cling разработан в недрах ЦЕРНа (cern.ch) и в рамках замены существующего интепретатора CINT, входящего в состав фреймворка ROOT.
И получаем:

Код: Выделить всё

[Olej@modules bin]$ ./clang --version
clang version 3.6.0 (http://root.cern.ch/git/clang.git 2dc43a9efc630449253966b48f5a595682774054) (http://root.cern.ch/git/llvm.git ad898b2e020f16d38e764109de174b2c1cd07ee5)
Target: x86_64-unknown-linux-gnu
Thread model: posix

[Olej@modules bin]$ 
[Olej@modules bin]$ ./cling --version
Warning in cling::CIFactory::createCI():
  C++ ABI mismatch, compiled with __GLIBCXX__ v20131212 running with v20140624
0.2~dev 

****************** CLING ******************
* Type C++ code and press enter to run it *
*             Type .q to exit             *
*******************************************
При желании можно всё и собрать из GIT-репозитария: Cling Build Instructions.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: C++

Непрочитанное сообщение Olej » 12 сен 2014, 13:37

Olej писал(а): И получаем:

Код: Выделить всё

[cling]$ .rawInput
[cling]$ #include <iostream>
[cling]$ using namespace std;
[cling]$ .rawInput
Using raw input
[cling]! int foo(int x, int y) {
[cling]! ?   std::cout << "Y=" << y << std::endl;
[cling]! ?   std::cout << "X=" << x << std::endl;
[cling]! ?   return x + y;
[cling]! ?   }
[cling]! .rawInput
Not using raw input
[cling]$ foo(3,10)
Y=10
X=3
(int) 13
[cling]$ foo(5,7)
Y=7
X=5
(int) 12
[cling]$ .q

Код: Выделить всё

[Olej@modules bin]$ ./cling -std=c++11
Warning in cling::CIFactory::createCI():
  C++ ABI mismatch, compiled with __GLIBCXX__ v20131212 running with v20140624

****************** CLING ******************
* Type C++ code and press enter to run it *
*             Type .q to exit             *
*******************************************
[cling]$ #include <iostream>
[cling]$ using namespace std;
[cling]$ int cnt = 5;
[cling]$ auto proc = [&] (unsigned val) -> void { while (cnt-- > 0) cout << val << endl; }
(class (lambda at input_line_6:2:14) &) @0x7f2e8b4e0009
[cling]$ proc(77)
77
77
77
77
77

Код: Выделить всё

[cling]$ .rawInput
Using raw input
[cling]! class Foo {
[cling]! ?   int state;
[cling]! ?   public:
[cling]! ?   Foo() { state = 0; };
[cling]! ?   void SetValue(int value);
[cling]! ?   int GetValue();
[cling]! ?   };
[cling]! void Foo::SetValue(int value) {
[cling]! ?   state = value;
[cling]! ?   }
[cling]! int Foo::GetValue() {
[cling]! ?   return state;
[cling]! ?   }
[cling]! .rawInput
Not using raw input
[cling]$ Foo F;
[cling]$ F.SetValue(123);
[cling]$ F.GetValue();
[cling]$ cout << F.GetValue() << endl;
123

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: C / C++

Непрочитанное сообщение Olej » 21 окт 2014, 19:30

Сознаюсь :oops: ... что я поменял название этой темы: было C++ , а стало C/C++ ;-)

Потому как относительно самого C в Linux есть несколько мелочей, которых хотелось бы зафиксировать, а тему отдельную не хотелось заводить.

1. Весь Linux написан на C и ним пронизан (и все UNIX).
Поэтому не зная C хотя бы начально - нельзя понять многие вещи и в Linux, все системные вызовы Linux записываются как протогтипы C (стандарты POSIX и т.д.)
На месте начинающих карьеру программистов-разработчиков (даже уже начавших :lol: ... работающих) - я бы обязательно уделил некоторое время по-верхам изучить C. Для программиста, работающего на любом языке, это ознакомление с C можно проделать за 2-3 недели.

2. Менее известные вещи ... (вам об этом говорили? :lol: )
Из всех языковых средств под Linux, которые я "щупал" ... и знаю хотя бы от минимального уровня и до совершенно профессионального, из всего этого подмножества я видел только один язык который может работать в Linux без "прослойки" стандартной библиотеки C libc.so, даже тот же C++ "самостоятельно" не может работать!
Уберите эту библиотеку из системы - и любой ваш язык развалится :-o
Угадаете какой это единственный без C? :lol: (я попозже скажу)
А поэтому: только то, что есть в библиотеке C - есть в любом вашем любимом языке, и ничего больше! ... выше головы не прыгнешь.
А поэтому язык C и его библиотеки (стандарт POSIX) нужно хотя бы бегло просмотреть, если вы хотите сделать программирование своей специальностью.

P.S. А язык, который умеет делать системные вызовы автономно, минуя стандартную библиотеку C - это Go (угадали?).
А почему это так - понятно, потому что:
а). у истоков разработки Go стоял (его туда Google подвели ;-) ) Денис Ритчи, который 40 лет назад создавал и язык C;
б). потому что язык Go является естественным продолжением линии развития C -> C++ -> Go, он фактически продолжил C++, но убив его монстроидальную громоздкость;
в). может и ещё несколько второстепенных причин (таких как Plan9 :lol: и др.)

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: C / C++

Непрочитанное сообщение Olej » 21 окт 2014, 19:38

Olej писал(а):Сознаюсь :oops: ... что я поменял название этой темы: было C++ , а стало C/C++ ;-)
А активизировалась эта тема потому как меня попросили в очередной раз "по-быстренькому" натаскать в программировании сына давних знакомых.
Вот вводная: а). человек с законченным высшим техническим образованием, б). которого не учили в институте программированию и в). хочет ;-)
(как в том давнем анекдоте: "чтоб при деньгах и руки всегда в тепле были" :lol: )

И порядок такого натаскивания я вижу так:
1. Поверхностное знакомство с C;
2. ... а дальше "ныряем" в естественное его развитие в C++ и, может, Go ...
3. ... или в изучение Python.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: C / C++

Непрочитанное сообщение Olej » 21 окт 2014, 19:44

Olej писал(а): 1. Поверхностное знакомство с C;
Попалась мне, в связи с этим, очень приятная, кажется, книжка: С. В. Шапошникова, "Особенности языка С. Учебное пособие. Лаборатория юного линуксоида", май 2012.

Очень рекомендую книжку (PDF) скачать. Читать можно и в браузере, но лучше чтобы была автономная копия.

Почему не Б. Керниган, Д. Ритчи. "Язык программирования C."?
А потому, что она объясняет в предисловии к книге ... и я с этим абсолютно согласен:
В книге K&R встречается использование конструкций и понятий языка до того, как они будут объяснены. Начиная где-то с главы 3, примеры
достаточно сложные и объёмные.

K&R - наилучшая из существующих в природе книг по C, но в качестве справочника, чтобы под рукой всегда лежала ... но для первого знакомства, да ещё по-верхах - не самая лучшая.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: C / C++

Непрочитанное сообщение Olej » 04 янв 2015, 17:49

Olej писал(а): И порядок такого натаскивания я вижу так:
1. Поверхностное знакомство с C;
2. ... а дальше "ныряем" в естественное его развитие в C++ и, может, Go ...
3. ... или в изучение Python.
По поводу доступных учебных курсов по C, интерактивных обучающих сайтов ... и прочих самоучителей (спрашивают не раз):

- 6 видео-уроков по C.
Вполне нормально для начала, бегло просмотреть 1 раз ;-) ... может больше и не надо, если не планировать язык C как инструмент в Linux, а только иметь его как базу для понимания других языков (как говорилось выше);
(там же, кстати, и 12 видео-уроков по Visual C++ ... Visual - это, конечно, сильно ослабляет актуальность, но C++ вполне можно просмотреть для самого начального знакомства).

- learn-c.org
Welcome to the learn-c.org free interactive C tutorial.
Очень неплохо и компактно: вам дают пример, объясняют как и предлагают его выполнить ... не нужно устанавливать никаких компиляторов.

P.S. Конечно, это всё не тот ещё уровень, когда можно идти работать продуктивно ... но впаривать на собеседованиях рекрутерам уже можно ... а дальше - искусство обретёте в бою. :lol:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: C / C++

Непрочитанное сообщение Olej » 27 дек 2015, 23:40

Прекрасный online справочник под рукой, когда вы пишете код на C++:
Изображение

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: C / C++

Непрочитанное сообщение Olej » 13 фев 2016, 17:37

Olej писал(а):Прекрасный online справочник под рукой, когда вы пишете код на C++:
Изображение
Ещё один не менее полезный справочник ... online под рукой : http://en.cppreference.com/
C++ reference
C++98, C++03, C++11, C++14, C++17

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: C / C++

Непрочитанное сообщение Olej » 27 апр 2016, 17:13

Программисты на C — самый большой разделённый народ в мире?
Сегодня, 26 апреля 2016 г., арбитражный суд Орловской области должен был решить вопрос, является ли язык программирования C иностранным языком.

Столь необычным вопросом суд озаботился из-за Федеральной антимонопольной службы (ФАС), которая возбудилась вот на это объявление, размещённое напротив местного политеха:
Изображение
ФАС посчитала это объявление рекламой, а по закону реклама на иностранном языке должна быть дублирована на русском. Руководитель компании Stork.ru Михаил Паулкин с выводами ФАС не согласился, и дело дошло до рассмотрения арбитражным судом Орловской области. Суд должен был вынести решение сегодня, но отложил заседание на 25 мая.

Нужно заметить, что признание судом языка программирования C иностранным языком позволит программистам на C бороться за официальное признание себя в качестве малого этноса. Малый этнос — это уже не обычное профессиональное сообщество, а народ. Народ же, не имеющий своего государства, может воспользоваться правом на самоопределение, записанным во Всеобщей декларации прав человека ООН.

Ответить

Вернуться в «Инструменты программирования»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость