[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.31221 Reply
File: CPP.png
Png, 1.61 KB, 200×200 - Click the image to expand
edit Find source with google Find source with iqdb
CPP.png
C++
>> No.31222 Reply
Как правильно изучать Qt? По документации на офф-сайте иил есть книги? Интересует прежде всего создание интерфейсов и графика.
>> No.31224 Reply
>>31222
Читая исходники PyMol.
>> No.31225 Reply
>>31224
Это шутка?
>> No.31229 Reply
>>31225
Нет!
>> No.31231 Reply
>>31221
Насколько сложно перейти с С на С++ и с С++ на Java? Как долго привыкаешь?
>> No.31232 Reply
>>31231
Как с синего "Петра I" на чёрный "Мальборо".
>> No.31277 Reply
Что с этой Qt5? Все ломанулись уже её использовать и Qt4 окончательно устарела и лучше сразу учить Qt5? Или Qt5 - сырая бетка и все ещё используют Qt4? В офф репах убунту почему-то до сих пор Qt и QtCreator 4.
>> No.31283 Reply
>>31277
> Qt5 - сырая бетка
Да нет же
> The current evaluation versions are Qt 5.0.2
>> No.31284 Reply
>>31277
> Qt4 окончательно устарела
Что за крайности.
> лучше сразу учить Qt5
Под новые проекты - да.
> все ещё используют Qt4
Естественно, мало кто побежал сразу же переписывать свои программы под Qt5. Но это не говорит о том, что Qt5 не нужен.
> В офф репах убунту почему-то до сих пор Qt и QtCreator 4.
Они там и останутся. Просто в новой версии ubuntu (может в 13.04 уже) добавят Qt5. По крайней мере Qt3 был в репах достаточно долго, так долго что все активные программы с него успели съехать. Удалили его вроде бы только в 12.10, в то время как Qt4 вышел в 2005.
>> No.31287 Reply
>>31284
Блин, а есть deb-пакет или PPA с Qt и QtCreator 5?
>> No.31288 Reply
File: muzhik_9400699_big_.jpg
Jpg, 54.04 KB, 800×666 - Click the image to expand
edit Find source with google Find source with iqdb
muzhik_9400699_big_.jpg
>>31287
собери сам, что там трудного?
>> No.31298 Reply
>>31288
Чекинстал всё сделает? Или так неправильно?
>> No.31299 Reply
>>31288
Алсо, я подумал, что собственнй деб-пакет может быть неправильным, нет? А там будут зависимости сохранены? Не будет конфликтов с ними?
>> No.31300 Reply
>> No.31301 Reply
>>31232
Никогда не курил.
>> No.31302 Reply
>>31298
В большинстве случаев - да, все сам сделает. Правда, если разработчики совсем уж криворукие - может ругаться на неправильное расположение директорий у меня так с гнустепом было, но это не страшно, все равно будет удаляться и устанавливаться корректно.
>> No.31513 Reply
>>31287
> Блин, а есть deb-пакет или PPA с Qt и QtCreator 5?
$ apt-cache search qt5
libmgl-qt5 - library for scientific graphs. (Qt runtime library)
libqt5concurrent5 - Qt 5 concurrent module
libqt5core5 - Qt 5 core module
libqt5dbus5 - Qt 5 D-Bus module
libqt5gui5 - Qt 5 GUI module
libqt5network5 - Qt 5 network module
libqt5opengl5 - Qt 5 OpenGL module
libqt5opengl5-dev - Qt 5 OpenGL library development files
libqt5printsupport5 - Qt 5 print support module
libqt5sql5 - Qt 5 SQL module
libqt5sql5-mysql - Qt 5 MySQL database driver
libqt5sql5-odbc - Qt 5 ODBC database driver
libqt5sql5-psql - Qt 5 PostgreSQL database driver
libqt5sql5-sqlite - Qt 5 SQLite 3 database driver
libqt5sql5-tds - Qt 5 FreeTDS database driver
libqt5test5 - Qt 5 test module
libqt5widgets5 - Qt 5 widgets module
libqt5xml5 - Qt 5 XML module
qt5-default - Qt 5 development defaults package
qt5-qmake - Qt 5 qmake Makefile generator tool
qtchooser - Wrapper to select between Qt development binary versions
libqt5qml5 - Qt 5 QML module
libqt5quick5 - Qt 5 Quick library
libqt5quickparticles5 - Qt 5 Quick particules module
libqt5quicktest5 - Qt 5 Quick Test library
libqt5qml-graphicaleffects - Qt 5 Graphical Effects module
libqt5v8-5 - Qt 5 JavaScript backend module
libqt5v8-5-dbg - Qt 5 JavaScript backend debugging symbols
libqt5v8-5-dev - Qt 5 JavaScript backend development files
libqt5v8-5-private-dev - Qt 5 JavaScript backend private development files
libqt5multimedia5 - Qt 5 Multimedia module
libqt5multimedia5-plugins - Qt 5 Multimedia module plugins
libqt5multimediaquick-p5 - Qt 5 Multimedia Quick module
libqt5multimediawidgets5 - Qt 5 Multimedia Widgets module
qtmultimedia5-examples - Examples for Qt 5 Multimedia module
libqt5svg5 - Qt 5 SVG module
libqt5svg5-dev - Qt 5 SVG module development files
libqt5svg5-private-dev - Qt 5 SVG module private development files
libqt5clucene5 - Qt 5 CLucene module
libqt5designer5 - Qt 5 designer module
libqt5designercomponents5 - Qt 5 Designer components module
libqt5help5 - Qt 5 help module
qdbus-qt5 - Qt 5 D-Bus tool
qttools5-dev-tools - Qt 5 development tools
libqt5xmlpatterns5 - Qt 5 XML patterns module
libqt5xmlpatterns5-dev - Qt 5 XML patterns development files
libqt5xmlpatterns5-private-dev - Qt 5 XML patterns private development files
>> No.31522 Reply
>>31302
В чем тогда плюс собирать пакет с помощью dpkg-buildpackage?
>> No.31567 Reply
А ни у кого нет книги или ссылки на книгу Макса Шлее по Qt4.8?
>> No.31579 Reply
Привет аноны. Есть одна задача, а именно написать функцию, которая будет выкидывать из двунаправленного списка все строки, большие k предыдущих и возвращать указатель на начало списка. Можете помочь? У меня есть наброски, но они выкидывают элемент, только если подряд k строк возрастают. А вот собственно и она. http://pastebin.com/4EezPmr4
>> No.31581 Reply
>>31579
Ну есть такая маза, ведешь 2 итератора по списку, первый на +k от второго, и запускаешь на каждой итерации циклы for(it=it1;it!=it2;it--), для которых понятно как считается условие. Ах да, на шаге где удаляешь, инкремент заднего итератора не надо делать
>> No.31582 Reply
>>31579
Это скорее С чем С++. Если от тебя не требуется самостоятельная реализация двусвязного списка, то это std::list в STL.(хедер <list>). А если требуется, то не лучше ли реализовать его в виде своего класса? Даже если писать на С без ООП, то нужно больше функций, лучше реализующих интерфейс, нет?
>> No.31583 Reply
>>31579
Что значит больше k предыдущий? Вместе взятых или каждой? По длине или лексико-логически?
>> No.31584 Reply
>>31583
Лексико-графически, заплетык языкается, простите.
>> No.31585 Reply
>>31583
Лексико-графически. Каждой по отдельности. То есть у меня список например 1 2 3 33 2 1 1 3 4 32 3 3 4 1 переделает в 1 2 3 2 1 1 3 32 3 3 4 1 при k=3
>> No.31586 Reply
>>31581
А как удалять элемент списка?
>> No.31587 Reply
>>31586
Направлять предыдущий на следущий, а следущий - на предыдущий и удалять.
>> No.31588 Reply
>>31587
Да, и запили для этого отдельную функцию, будь человеком. Сразу станет меньше ошибок.
>> No.31604 Reply
>>31581
Сравнение указателей некорректно, нет?
>> No.31605 Reply
>>31604
Указатели равны, когда они указывают на один и тот же участок памяти или оба нулевые. На Си и С++ и вообще их можно невозбранно двигать ++/-- или прибавлять к ним целые числа. Они вроде указывают на какой-то конкретный байт оперативы, поправьте меня.
>> No.31606 Reply
>>31604
Корректно, даже на процессорах, где они в виде двух чисел: "адрес + ограничение".
>> No.31608 Reply
>>31581
Может я ошибся где, но тоже работает неправильно. При проверке на предыдущие k элементов он не видит уже удаленные и удаляет элемент, даже если удаленный был больше. То есть 2 2 2 4 3 1 он переделает в 2 2 2 1 при k=3
>> No.31610 Reply
>>31608
а, понял тебя. Прикольно. Делай как хочешь, только клонируй список
>> No.31620 Reply
File: n1k0nsh00ter__yoko_2_by_momokurumi-d47zndl.jpg
Jpg, 235.37 KB, 700×1054 - Click the image to expand
edit Find source with google Find source with iqdb
n1k0nsh00ter__yoko_2_by_momokurumi-d47zndl.jpg
Анон, скажи, что я делаю не так? Код для Arduino, компилируется через avr-gcc.

Основной файл:
#include <PCIntHelper.h>

void setup() // запускается один раз при старте прошивки
{
  PCIntHelper.initialize();
}

void loop() // запускается в цикле после выполнения функции setup()
{
}
PCIntHelper.h:
#ifndef PCINTHELPER_H
#define PCINTHELPER_H

class PCIntHelper
{
  public:
    static void initialize();
};

#endif
PCIntHelper.cpp:
#include "PCIntHelper.h"

void PCIntHelper::initialize()
{
}
При билде компилятор выдаёт вот такое сообщение:
pcinthelper_test.ino: In function 'void setup()':
pcinthelper_test.ino:5: error: expected unqualified-id before '.' token
Подозреваю, что я сфейлил с объявлением статического метода PCIntHelper.initialize(), но как в таком случае объявить его как метод класса, а не конкретных экземпляров?
>> No.31621 Reply
>>31620
> PCIntHelper::initialize();
Недавно в C++?
>> No.31622 Reply
>>31621
всмысле
void setup() // запускается один раз при старте прошивки
{
   PCIntHelper::initialize();
}
>> No.31623 Reply
>>31620
Советую все-таки выучить плюсы перед тем как писать на них.
PCIntHelper::initialize();
>> No.31627 Reply
>>31621
>>31623
Да, недавно в C++. Спасибо за подсказку, оно работает.
И всё-таки плохо зделали тупо ваш C++. Неужели нельзя было сделать как в C#, где доступ к любым методам класса (неважно, static или нет) выполняется через точку?
>> No.31629 Reply
>>31627
> плохо сделали тупо ваш C++
Ты только сейчас заметил?
>> No.31631 Reply
>>31627
> Неужели нельзя было сделать как в C#
Когда делали C++ не было "как в C#"
алсо, имена класов и объектов находятся емнип в разных неймспейсах
>> No.31633 Reply
>>31627
> И всё-таки плохо зделали тупо ваш C++. Неужели нельзя было сделать как в C#, где доступ к любым методам класса (неважно, static или нет) выполняется через точку?
Тупо сделали C#. Если здесь при чтении листинга сразу понятно, что вызывается именно статический метод, то при повсеместном использовании точки еще поди разберись, что именно дергается.
>> No.31634 Reply
File: Sample.jpg
Jpg, 9.72 KB, 380×78 - Click the image to expand
edit Find source with google Find source with iqdb
Sample.jpg
>>31633
Только если ты дальтоник.
>> No.31636 Reply
>>31633
И даже для дальтоников есть соглашения по именованию кода, помогающие отличить тип от переменной. В отличие от плюсоёбской венгерской нотации, захламляющей код ненужными префиксами, принятое в C# соглашение RSDN действительно помогает пониманию кода.
>> No.31641 Reply
>>31636
Только вот один вопрос: ЗАЧЕМ методы именовать УпперКемальКейсом, ловерКемаль и юнегз_кейс ведь лучше, не?
>> No.31643 Reply
>>31641
> ловерКемаль
Спорный вопрос. Лично я тоже пользуюсь lowerCamelCase вместо рекомендованного в RSDN UpperCamelCase - очень уж я к нему привык.
> юнегз_кейс
Это вообще какое-то недоразумение, ящитаю.
>> No.31644 Reply
>>31643
Питон и руби например любят юнегз_кейс.
>> No.31653 Reply
>>31641, >>31644, >>31643
ИМХО хОтЬ_лЕсЕнКоЙ именуй, главное чтобы вся команда придерживалась общих соглашений.
>> No.31656 Reply
>>31653
От ТоГо, ЧтО вСе ЧлЕнЫ кОмАнДы ПрИдЕрЖиВаЮтСя ИмЕнОвАнИя ЛеСеНкОй, чИтАеМоСтЬ кОдА нИкАк Не ПрИбАвЛяЕтСя. то_же_относится_и_к_юникс_кейсу_кстати.
>> No.31660 Reply
А я везде стараюсь использовать юникс_кейс, даже в именах_классов, потому_что с ним код больше похож на текст на естесственном_языке.
>> No.31661 Reply
>>31660
Вот в MYSQL код на естественном языке, он типа от этого понятнее?
>> No.31662 Reply
>>31656
Я бы заколебался именовать все подряд лесенкой, и читаемость кода смутила бы меня даже не в первую очередь.
>> No.31672 Reply
>>31661
Нет, он не на естесственном языке.
>> No.31673 Reply
>>31660
НеОченьТоИПохож. КамелЛучще.
>> No.31674 Reply
>>31673
Нет. Если подчёркивания заменить на пробелы, будет точно как на естесственном языке.
>> No.31675 Reply
>>31660
Паскалеводы вот тоже гордятся тем, что их язык больше похож на естественный, чем какая-то б-гомерзкая сишечка. Правда, они вообще любят гордиться глупыми недоработками своего языка - например, "Наш компилятор настолько туп, что не может в области видимости переменных, поэтому нам до сих пор приходится объявлять переменные в начале функции. Зато благодаря этому мы всегда можем сказать, какие переменные используются внутри функции, а вы со своей сишечкой не можете! Ну и говно же ваш си(плюсплюс)!" И где их язык теперь, во втором десятилетии XXI века?
>> No.31678 Reply
>>31675
> И где их язык теперь, во втором десятилетии XXI века?
Умер, но оказал влияние на lua, python, ruby (через elffel), go и другие хорошие языки.
>> No.31696 Reply
>>31678
> lua, python, ruby (через elffel), go
> хорошие языки
очень хуёвая икспертиза
>> No.31697 Reply
Эпиграф. "Хороший язык программирования помогает программистам писать хорошие программы. Ни один из языков программирования не может запретить своим пользователям писать плохие программы". Киз Костер.

Постулат I. Лучшим языком программирования является C++.
>> No.31698 Reply
Но ведь плюсы не помогают, а мешают писать хорошие программы.
>> No.31701 Reply
>>31698
Когда тебе нужен нативный мега-оптимизированный бинарь, реализующий бизнес-логику больших масштабов, выбирать не приходится.
>> No.31702 Reply
>>31701
"Байтоёбство" и "бизнес-логика больших масштабов" - взаимоисключающие параграфы. Пока отдел программистов будет в лучших традициях segfault-driven development отлаживать своё поделие на плюсах и содомировать байты, пара сишарпопрограммистов уже давно успеет выпустить релиз.
>> No.31703 Reply
>>31678
На самом деле в рубёвом синтаксисе больше Алгол чем Поцкаль (который сам потомок Алгола).
>> No.31704 Reply
>>31701
> нативный мега-оптимизированный бинарь
> реализующий бизнес-логику больших масштабов
Это вызывает в моей голове деление на ноль. Что-то в голову не приходит примеров за исключением каких-нибудь поисковых машин или мощной realtime аналитики по очень большому входящему потоку. Anyway, почему тогда не чистый С для критичных моментов и обертка на *favoriteproductionlanguage" для всего остального?
>> No.31705 Reply
>>31702
Ты меня опередил
>>31704-кун
>> No.31707 Reply
>>31702
> Пока отдел программистов будет в лучших традициях segfault-driven development отлаживать своё поделие на плюсах и содомировать байты, пара сишарпопрограммистов уже давно успеет выпустить релиз.
Городские легенды. В жизни всё наоборот, у всех плюсоводов всё написано и отлажено поколение назад, а сишарперы каждый раз пердолятся с нуля и на месяцы вязнут в наслоениях абстракций.
>> No.31710 Reply
>>31707
Иногда мне кажется, что на доброчан можно зайти с нескольких параллельных вселенных. Или личный опыт у всех людей настолько разный, что мнения целиком и полностью противоположные.
>> No.31711 Reply
Как правильно реализовывать классы объектов, реализующих алгебраические объекты, которые можно складывать, умножать и т.д., такие как векторы, матрицы, комплексные числа и т.п.? То есть если я задам +, который берёт на вход две матрицы, скажем, и возвращает результат, она же результат должна создать с помощью new? Как тогда писать выражениея типа d+((a+b)+c) так, чтобы не было мемликов? Или нужно только создавать указатели для промежуточных результатов и вручную удалять их?
>> No.31712 Reply
>>31707
> у всех плюсоводов всё написано и отлажено поколение назад
...и когда к этому говну мамонта приходится прикручивать поддержку x64 или править глюки под Windows 7+, то сопровождающие плюсоводы начинают рвать на заднице волосы. Я видел такой "написанный поколения назад" плюсоёбский код (один из компонентов SCADA), и моей задачей было поправить баги и допилить несколько нужных заказчикам фич. Писать новый грамотно спроектированный код на C# гораздо приятнее, чем разгребать эти залежи байтоёбского говна.
>> No.31713 Reply
>>31711
Перегрузка операторов поможет тебе, юный падаван.
>> No.31714 Reply
Предлагаю прекратить языкосрач, он ненужен.
>> No.31715 Reply
>>31711
Прочитай уже Страуструпа, он не зря свой талмуд писал.
>> No.31716 Reply
>>31713
Я не про то. Ну вот написал я плюс так:
Matrix& operator+(const Matrix& a, const Matrix& b)
{
   Matrix* c = new Matrix();
   /*  типа  вычисляем c по a и b   */
   return *c; 
}
А потом пишем в коде:
a = (b+c)+d;
Объект, полученный при первом сложении у нас же потеряется, станет мемликом, так?
>> No.31717 Reply
>>31716
Зачем ты возвращаешь адрес Matrix&? Или я что-то не так понял, лолд.
Тут можно же просто возвращать Matrix и тогда не должно проебаться.
Ты проверял?
>> No.31718 Reply
>>31717
>>31716
Начнём с того, что сложение всех мыслимых и немыслимых матриц уже реализовано в сторонних библиотеках и вместо того, чтобы тупить на форумах, лучше потратить в гугле 5 минут да засесть за изучение исходников.
>> No.31719 Reply
>>31718
Блядь, мы не конкретно про немыслимые, а вообще про алгебраические объекты. Это понятно.
>>31717
Нет, не проверял. Вот как, говоришь... Блин, в где лучше прочитать про использование памяти в плюсах?
>> No.31721 Reply
>>31719
У Страуструпа, вестимо. Я тоже его не целиком осилил, и вообще хуй простой. Вот читать буду летом, его и Кернигана
Суть примерно такова - знаком & ты получаешь адрес указателя, а не то значение, которое там хранится.
>> No.31728 Reply
>>31716
Хоть это и не обязательно, для сохранения семантики операторов категорически рекомендуется для бинарных операторов возвращать новый объект по значению, в твоем случае:
Matrix operator+(const Matrix& a, const Matrix& b) {    Matrix c;    /* типа вычисляем c по a и b */    return c; } А для операторов присваивания изменять this и возвращать его по ссылке:
Matrix& operator+=(const Matrix& b) {    /* к матрице this прибавляем b */    return *this; }
>> No.31742 Reply
Правильно ли я понимаю, что реализовав в абстрактном классе кучу методов на основе двух абстрактных методов и реализовав только эти два абстрактных метода в куче потомков, я добьюсь работы всех этих методов во всех потомках?
>> No.31744 Reply
>>31742
Да.
>> No.31745 Reply
>>31742
Как обычно, подумав еще секунду, я нашел что добавить.
Рассмотри вариант при котором вместо реализации абстрактных методов в наследниках, ты передаешь классу в конструктор указатели на два метода, реализующих твою логику. В некоторых случаях такой вариант предпочтительней.
>> No.31784 Reply
>>31721
> Суть примерно такова - знаком & ты получаешь адрес указателя
Нет, тут, это передача по ссылке. Как-то так.
>> No.31964 Reply
Анон, я не понимайт в чем ошибка. В теории это должно быть что-то вроде бегущего символа "С", но вместо того, что бы вывести 1 раз массив, переназначить элементы, очистить экран, снова вывести массив мой Микрософт Висуал С++ выводит сразу 7 или 8 массивов и начинает заново.

#include <iostream.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
void main()
{
   int n=0;
   int a[5][12];
   for (int i=0; i<5; i++)
   {
   for (int j=0; j<12; j++)
   {
   a[i][j]=1;
   }
   }
   a[0][0]=0;
   a[0][1]=0;
   a[0][2]=0;
   a[0][3]=0;
   a[1][0]=0;
   a[2][0]=0;
   a[3][0]=0;
   a[4][0]=0;
   a[4][1]=0;
   a[4][2]=0;
   a[4][3]=0;
  
   for (int h=0;h<100;h++)
   {
  
   for (i=4; i>=0; i--)
   {
   for (int j=11; j>=0; j--)
   {
if (j==0)
{
	a[i][j]=a[i][11];
}
else
{
	a[i][j]=a[i][j-1];
}
   }
   }
   for (i=0; i<5; i++)
   {
   for (int j=0; j<12; j++)
   {
if (n==12)
{
	n=0;
	cout<<'\n';
}
cout<<a[i][j];
n++;
   }
   }
   system("cls");
   }
   int lol;
   cin>>lol;
}
>> No.32244 Reply
Можно ли в шаблонах функций использовать в качестве шаблонных параметров числовые? С точки зрения синтаксиса и с точки зрения проектирования.
>> No.32264 Reply
>>32244
Можно. Нельзя.
>> No.32276 Reply
>>31221
Аноны, нужна ваша помощь по C++. Суть такова: начал его учить, делал немного консольные калькуляторы и квизы. Потом захотелось перейти на оконные. И тут ступор: как в Visual Studio 2012 запилить оконное приложение? Создаю пустой CLR проект и добавляю туда форму, но при попытке компиляции у меня отличная ошибка:
Ошибка 1 error LNK1561: Єюўър тїюфр фюыцэр с√Є№ юяЁхфхыхэр E:\VSProjects\Project2\Проект1\Проект1\LINK Проект1
Вроде как смог методом гугла расшифровать как "Точка входа должна быть определена", но на этом мощь поисковика иссякла. Как эту проблему исправить я так и не нашел. Может поможет кто?
>> No.32280 Reply
>>32276
Точка входа - это функция мейн. Она присутствует вообще?
>> No.32281 Reply
>>32276
> Studio 2012 запилить оконное приложение?
> Создаю пустой CLR проект
создай непустой проект и ничего в него не добавляй
> Єюўър тїюфр фюыцэр с√Є№ юяЁхфхыхэр
Используй студию только с английской локалью. Лучше и всю винду вообще английскую, потому что нагуглить что-нибудь полезное по сообщению об ошибке на русском языке невозможно (ну если только перевести с русского на английский и искать уже так)
>> No.32286 Reply
>>32280
Она должна присутствовать в отдельном cpp файле?
>> No.32287 Reply
>>32276
Правый клик по проекту -> Свойства -> Приложение -> Startup Object. Нужно выбрать класс, в котором есть метод Main, как точку входа в приложение. Но вообще, как правильно заметил >>32281-кун, не нужно создавать пустой проект, создавай винформс, там и форма сразу будет, и куча бойлерплейта.
>> No.32289 Reply
File: Снимок1.PNG
Png, 32.79 KB, 699×495
edit Find source with google Find source with iqdb
Снимок1.PNG
File: Снимок.PNG
Png, 45.30 KB, 949×514
edit Find source with google Find source with iqdb
Снимок.PNG

>>32287
В этом еще одна проблема. В создании проекта нету винформс. То есть он есть в C# и в VB, а в C++ - нет.
>> No.32291 Reply
>>32287
> класс, в котором есть метод Main
В С++ такое может быть? Я думал, это в С# - мейн - метод. Да, и мейн не с маленькой буквы?
>> No.32292 Reply
>>32289
Проект Win32 же.
>> No.32308 Reply
File: Окно-проекта-с-фо...
Png, 10.11 KB, 618×458
edit Find source with google Find source with iqdb
Окно-проекта-с-формой-на-VB.PNG
File: Win32Окно.PNG
Png, 35.29 KB, 638×353
edit Find source with google Find source with iqdb
Win32Окно.PNG

>>32292
Но ведь в Win32 проекте окно не такое и нет конструктора.
>> No.32310 Reply
>>32308
А вообще это нужно, когда есть Qt? Какие по сравнению с Qt у этого ВС-овского гуя преимущества?
>> No.32311 Reply
>>32310
Нативный гуй, а не какие-нибудь костыли с прослойками универсализации для обеспечения никому не нужной кроссплатформенности.
>> No.32312 Reply
>>32311
> какие-нибудь костыли
Что? Qt - это костыли?
>> No.32313 Reply
>>32312
Ну вот скажи мне, за счёт чего обеспечивается кросплатформенность, хотя между x-window system и оконным менеджером винды совсем мало общего? Правильный ответ: за счёт костылей и ограничения функциональности до "наименьшего кратного."
>> No.32314 Reply
>>32313
Я б понял, если б ты сказал, засчёт производительности, а что за такая функциональность скрыта за нативным гуем?
> за счёт костылей
Не костылей, а абстракции.
>> No.32316 Reply
Возможно ли такое, что компилятор начинает неправильно выдавать ошибки из-за того, что проект или компилятор сломался?
>> No.32317 Reply
>>32316
скорее всего ты что-то неправильно заинклудил и нихуя этого не понимаешь.
>> No.32318 Reply
>>32317
Ага, похоже. Multiple defenition пишет по отношению к тому, что написано единожды. Оба хедера имеют директивы ifndef define endif. Что может неправильно заинклудиться?
>> No.32319 Reply
>>32318
А, это я напрасно нешаблонные функции в хедер перенёс. Написал только их прототипы а сами - в цпп и заработало. Но только меня напугало, что оно заработало только после того, как я какие-то папки поудалял.
>> No.32320 Reply
File: I-have-no-idea-what-I-am-doing.jpg
Jpg, 40.28 KB, 630×340 - Click the image to expand
edit Find source with google Find source with iqdb
I-have-no-idea-what-I-am-doing.jpg
>>32319
> я какие-то папки поудалял
>> No.32339 Reply
>>32320
По соседству с папкой с проектом, лежат папки с длинными нзваниями, билды какие-то. Я про эти папки.
>> No.32345 Reply
>>32316
> Возможно ли такое, что компилятор начинает неправильно выдавать ошибки из-за того, что проект или компилятор сломался?
Возможно, если ты сам писал компилятор.
>>32319
Ребилд, еще ребилд.
>> No.32352 Reply
>>32345
Я написал что-то с темплейтами в ВС2008 такое, что она перестала всё компилировать вообще. Даже другие проекты, состоящие из пустого int main. Точнее оно компилирует, но всегда даёт ошибки времени выполнения. Причём я не мог её ничем удалить почему-то. При деинсталяции выдаёт ошибки и вырубает деинсталяцию.
>> No.32369 Reply
>>32352
Схоронил.
>> No.33047 Reply
File: гифки-бабах-101297.jpeg
Jpeg, 83.87 KB, 649×479 - Click the image to expand
edit Find source with google Find source with iqdb
гифки-бабах-101297.jpeg
>>32320
Ахахаха, ахахаха.
Все папки поудалял, бом-боооооом, хехееее, эхихе.
>> No.33266 Reply
Анон, скажи, а какие инструменты используют тру профессиональные программисты для проверки корректности входных данных? Например, пользователю предлагаются ввести целое число, и если он вводит строку, которую нельзя интерпретировать как целое число, то программа говорит ему об этом и предлагает ввести заново. Понятно, что можно всё вводить как строки, потом разбирать эти строку на предмет недопустимых символов или некорректной структуры, и в зависимости от этого уже что-то делать. Но это как-то ламерством попахивает. Должны ведь быть более аккуратные инструменты для всего этого, разве нет?
>> No.33267 Reply
>>33266
В любой вменяемой стандартной библиотеке должен быть метод вида Integer.TryParse(string) -> bool
>> No.33936 Reply
Анон, а поясни по хардкору про слово const:
1. Нужно ли его ставить перед параметрами, имеющими примитивные типы и передаваемыми не по указателю или по ссылке? Будет ли это иметь какой-то эффект, кроме захламления кода?
2. То же самое, но для возвращаемых примитивных значений.
3. Считается ли хорошим тоном расставлять const на каждый чих?
>> No.33937 Reply
Это я удачно наткнулся на этот тред.

Суть такова. Есть заголовочник Arduino.h, в котором объявлена функция digitalWrite(uint8_t, uint8_t), а также есть typedef uint8_t byte. Есть также мой исходник:
#include "Arduino.h"

class SoftPWM
{
    public:
        void digitalWrite(byte state);
		
    private:
        byte _pin;
		
        byte setPinState(byte state)
        {
            digitalWrite(_pin, state); // на этой строке возникает ошибка
        }
};
На отмеченной строке сборка прерывается, и компилятор вываливает вот такое сообщение:
D:\work\Projects\Arduino\libraries\SoftPWM/SoftPWM.h: In member function 'byte SoftPWM::setPinState(byte)':
D:\work\Projects\Arduino\libraries\SoftPWM/SoftPWM.h:81: error: no matching function for call to 'SoftPWM::digitalWrite(byte&, byte&)'
D:\work\Projects\Arduino\libraries\SoftPWM/SoftPWM.h:52: note: candidates are: void SoftPWM::digitalWrite(byte)
Вопрос: почему компилятор (avr-gcc) не может определить, что речь идёт о функции digitalWrite(uint8_t, uint8_t) из Arduino.h, а не о методе SoftPWM::digitalWrite(byte)? Как заставить его понять, что я хочу?
>> No.33938 Reply
>>33937
> byte setPinState(byte state)
То есть void setPinState(byte state), разумеется, хотя сути ошибки это не меняет.
>> No.33939 Reply
>> No.33947 Reply
Ох уж эти плюсы, понамешали байтоебство с ООП-ом и получилось монструозное убожище. Из функции класса вызывать функцию вне какого-либо класса, ну надо же.
>> No.33948 Reply
>>33947
За всю эту монструозность нужно взять и уебсказать спасибо и разработчикам стандартов C++, выбравшим мультипарадигменность вместо ООП, и разработчикам стандартной библиотеки Arduino, напихавшим свои функции в глобальный неймспейс. Знать бы ещё, как найти выход из этой ситуации без правки Arduino.h/cpp и их зависимостей.
>> No.33949 Reply
>>33948
Я не очень в этом разбираюсь, но попробуй вместо digitalWrite(pin, state) написать std::digitalWrite(pin, state)
>> No.33973 Reply
>>33949
Спасибо, анон, оно сработало. Только в моём случае функция digitalWrite лежала не в std, а просто в глобальном неймспейсе, поэтому её вызов выглядит как ::digitalWrite(_pin, state). Странно всё-таки, что компилятор не смог самостоятельно разрешить этот конфликт в данной ситуации - он же успешно его разрешает, если выкинуть метод SoftPWM::digitalWrite(byte). И особенно странно то, что MSVC (проверил на 2008) ведёт себя точно так же.
>> No.34042 Reply
>>31221
Объясните кто-нибудь, как заставить работать функцию optimize? Использую G++ 4.7.1, пробовал как #pragma GCC optimize("O3"), так и объявление прототипов функций вида int main __attribute__((optimize("O3"))), ничего не работает возможно, я неправильно понял суть optimize, я хочу, чтобы при компиляции на -O программа компилировалась на -O3
>> No.34043 Reply
>>33973
Чего странного-то, прочитай про приоритеты идентификаторов. В глобальном неймспейсе поиск осуществляется в последнюю очередь всегда.
>> No.34044 Reply
>>34043
Но почему оно упорно пыталось использовать digitalWrite из SoftPWM, если он не подходит по сигнатуре?
>> No.34049 Reply
>>34044
Потому что он блеать перекрывает функцию из внешнего неймспейса. Вообще. Полностью. Это же не перегрузка, это совсем разные вещи.
>> No.34061 Reply
>>34049
> Это же не перегрузка, это совсем разные вещи.
Что ты в данном случае понимаешь под перегрузкой, override (перекрытие метода родительского класса) или overload (наличие нескольких методов с одним именем и разной сигнатурой)?
Олсо, всё равно плохо зделали тупо.
>> No.34062 Reply
>>34061
Перекрытие никогда перегрузкой не называлось, няша. Плохо тупо у тебя голова работает, лучше бы матчасть учил.
>> No.34392 Reply
File: 247461.jpg
Jpg, 110.61 KB, 623×800 - Click the image to expand
edit Find source with google Find source with iqdb
247461.jpg
>>31221
Поясните пожалуйста по QT5 и Android. Как оно? Работает быстрее чем нативный? Списочки лагают?
>> No.34402 Reply
Доброкодер, есть проблема. Решил тут я поизучать C++11. Пишу, значит, программу, и что-то мне присралось завести std::queue из std::thread. Насколько я знаю, при присваивании объекта в контейнере используется копирующий конструктор, а мне надо, чтобы в очереди хранился указатель на объект. Ну и пишу я, std::vector <std::thread&> pool; а компилятор на этой строке такой, взял меня и послал.
>> No.34404 Reply
>>34402
Объекты в векторе создаются конструктором по-умолчанию, ссылка же должна быть инициализирована значением при её объявлении.
>> No.34405 Reply
>>34404
   Там не вектор а queue должно быть, хотя не суть. в чем сакральный смысл фразы проинициализировать ссылку? Я просто указал тип объекта ссылка на поток, а компилятор на это ругается. что инициализировать то?
>> No.34406 Reply
>>34402
> а мне надо, чтобы в очереди хранился указатель на объект
Зачем тогда вектору указываешь тип "ссылка"?
std::vector <std::thread*> pool
>> No.34412 Reply
>>34402
Не понимаю, в чём проблема?

Делаешь пандорический захват, лифтишь в монаду, потом строишь рекурсивную схему (здесь подойдёт зигохистоморфный препроморфизм) как монадический трансформер из категории эндофункторов, и метациклически вычисляешь результат. Любой второкурсник справится. А если делать на анафорических лямбдах — так задачка вообще на пять минут.
>> No.34425 Reply
>>34405
Почитай, что ли, как ссылки работают и этот твой queue, может дойдет.
>> No.34459 Reply
Господа, прошу как нуб — посоветуйте учебник получше для жаждущего ступить на эту стезю. Ибо в техникуме только начался курс по С++, а преподаватель уже сказал, что надо учить самому.
>> No.34480 Reply
>>34459
Stephen Prata - C++ Primer Plus
Bjarne Stroustrup - The C++ Programming Language
>> No.34483 Reply
>>34480
Стивена Прату я смогу понять при среднем знании английского?
Что-то из этого подходит, если я не знаком с Си?
>> No.34494 Reply
>>34483
> Что-то из этого подходит, если я не знаком с Си?
K&R
>> No.34495 Reply
File: 02b82c218a06052ac4301a5fbe911e962124fd6f.jpg
Jpg, 735.02 KB, 2410×3155 - Click the image to expand
edit Find source with google Find source with iqdb
02b82c218a06052ac4301a5fbe911e962124fd6f.jpg
>>34494
Он же плюсы учит. Зачем ему знать Си? Чтобы потом мучиться?
>> No.34500 Reply
>>34495
Плюсовику не повредят знания няшной. Вот глянь например гугль-цэ++-коде-стайл, у них там такие-то няшизмы.
>> No.34512 Reply
File: 1379438182139.png
Png, 0.98 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1379438182139.png
>>34495
Чтобы к вечности прикоснуться же.
Вот и капча - не даст соврать!ы
>> No.34514 Reply
>>34500
> Плюсовику не повредят знания няшной
Вот когда C++ освоит, тогда и за C берётся. А пока он не "плюсовик".
> Вот глянь например гугль-цэ++-коде-стайл
Как-то у тебя несвязно написано. В первом предложении про C, а во втором — про C++ code style. Сам не определился еще, что выучить?
>> No.34516 Reply
>>34514
А конце слово няшизмы, которое означает что гугль в своем коде-стайл местами предпочитает сишные конструкции плюсовым.
>> No.34521 Reply
>>34516
Мы об одном гайде говорим?
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
Используется куча плюсовых возможностей. К Сишкиным рекомендациям можно отнести отказ от использования исключения и RTTI, и абзац про sizeof. Остальное либо применимо к обоим языкам, либо касается одной из возможностей C++ (и таких пунктов больше всего).
Даже преобразование типов рекомендуют делать *_cast<...>(...)
>> No.34533 Reply
File: 137960592382329.jpg
Jpg, 85.24 KB, 608×400 - Click the image to expand
edit Find source with google Find source with iqdb
137960592382329.jpg
Сап, котаны. Хочу выучить C++ чисто для себя, для развития. Есть под рукой Х. Дейтел, П. Дейтел - Как программировать на C++. Подойдёт?
>> No.34535 Reply
>>34500
> глянь например гугль-цэ++-коде-стайл
если советуешь это говно, то первым делом отсылай в раздел "почему мы так сделали" где описаны условия применимости.
если кратко - там нагромождено куча костылей для поддержки устаревшего кода и прочих проблемных мест. там прямо написано "если бы мы писали весь код с нуля, то гайдлайн были бы иными".
%но обычно этот пункт никто не читает и орут "ОЛОЛО, ГУГЛЬ ЗАПРЕТИЛ ИСКЛЮЧЕНИЯ, ОЛОЛО", хотя на самом деле это сделано ради совместимости и в других ситуациях гугль бы не запрешал их%
>> No.34536 Reply
>>34535
Исключения конечно синтаксически и в плане высокоуровневой логики няшны, но увеличивают и притормаживают результирующий бинарник.
>> No.34537 Reply
>>34536
Не брошенное исключение влияет на скорость не больше погоды на марсе. Исключение не бросаются пачками, чтоб сильно замедлить работу программы, да и вообще скорее всего придётся остановить выполнение текущей задачи и сообщить пользователю, что пиздец пришёл.
А ещё их не используют, потому что нет гарантий бинарной совместимости исключений в разных библиотеках.
>> No.34538 Reply
File: b_8910.jpeg
Jpeg, 36.13 KB, 700×467 - Click the image to expand
edit Find source with google Find source with iqdb
b_8910.jpeg
>>34536
> использует исключения для логики
>> No.34539 Reply
>>34538
А поцчему нет?
>> No.34548 Reply
>>34539
гвозди микроскопом забиваете?
>> No.34560 Reply
>>34548
А вы таки считаете код вида:
if (someFunc1() != 0)
{
    error("Some error 1");
}
if (someFunc2() != 0)
{
    error("Some error 2");
}
if (someFunc3() != 0)
{
    error("Some error 3");
}
...
чем-то хорошим?
>> No.34561 Reply
>>34560
нет
просто когда говорят "логику на исключениях" имеют ввиду подсчеты с использованием исключений, что есть грех
>> No.34562 Reply
>>34533
Лучше начни с SICP.
>> No.34608 Reply
>>31221
Меня тут с собеседования послали. Вопрос почему нельзя кидать эксепшены в конструкторе? Ответил что потому что деструктор не вызовется. Правильный ответ?
>> No.34609 Reply
>>34608
Надо было сказать "Потому что ООП не нужен".
>> No.34610 Reply
>>34608
Эксепшены в конструкторе кидать можно, по крайней мере, компиляторы не запрещают. Деструктор действительно не вызовется.
http://ideone.com/r09LB9
>> No.34615 Reply
>>34608
> Вопрос почему нельзя кидать эксепшены в конструкторе?
потому что код писали макаки неспособные в RAII

а вообще можно
>> No.35992 Reply
File: 138656787215453.jpg
Jpg, 76.38 KB, 1000×894 - Click the image to expand
edit Find source with google Find source with iqdb
138656787215453.jpg
Ибн4: иди читай Страуса. Видел только скан.

Анон, учу я ваш богомерзкий С++. И вот что, читаю я с читалки(киндел), так как с моника читать больно.
Таким образом выбор у меня из книг, что имеют ОСР-слой. Попалась первой книга Липмана. И что-то не катит мне стиль повествования, и дико сбивают постоянные ссылки на другие главы. И разметка послетала. Вообще фу.

Посему реквестую электронную книгу по с++, которую я смогу ловко конвертнуть на читалку. Я знаю у вас есть! Да простят меня, желательно не в тысячу страниц. Что бы общая информация давалась сначала, а после я уже детализирую где надо.
Возможно мне даже книга не по плюсам нужна, а по шаблонам проектирования что-ли. В общем я попадаю на два типа информации: либо все очень просто, либо сразу ничего не понятно. Очевидно из-за моего без системного самообучения.

Во! Было бы еще круто, что бы существовал список задач, которые затрагивают постепенно все более сложные моменты.

У меня есть книга "Культин. Кресты в задачах и примерах". Но там триста страниц считают синус разными способами. Не очень увлекательно.

Короче, я не знаю как жить, анон. Посоветуй, на что фантазии хватит.
>> No.35993 Reply
>>35992
Страуструп.
>> No.35994 Reply
File: 190406_1_600.jpeg
Jpeg, 11.98 KB, 304×463 - Click the image to expand
edit Find source with google Find source with iqdb
190406_1_600.jpeg
>>35993
Короче, как по волшебству, после твоего напутствия, нашел Страуструпа в тхт по первой ссылке. Надеюсь, познаю зен после ее прочтения.
>> No.35995 Reply
File: -.jpg
Jpg, 156.67 KB, 1600×900 - Click the image to expand
edit Find source with google Find source with iqdb
-.jpg
Я вам пикчу для следующего треда принес, братюни.
>> No.35996 Reply
>>35992
По шаблонам программирования - книга четырёх. По С++ Страуструп, кто же ещё. Найди 4-ое издание. Тебе нужна книга, освещающая С++11. Иначе это упущенное на старьё время. Алсо вроде Мейерса рекомендуют по ООП, если тебе интересно. Алсо, все ругают Шилдта по чём свет стоит, его не бери.
>> No.35998 Reply
>>35995
Ватермарка же.
>> No.36002 Reply
Пишу напоминалку на Qt. Как сделать лучше - отдельный таймер для каждого напоминания или общий таймер для всех? По отдельности обработку каждого таймера можно сделать эффективнее (скажем, если напоминание вызывается каждые полчаса, то и слот будет вызываться только каждые полчаса). Однако таких таймеров может быть целая куча, если и напоминаний много. Если один таймер общий для всех, то придётся каждую секунду вызывать слот и для каждого напоминания проверять, не стоит ли ему показаться.
>> No.36003 Reply
>>36002
> Если один таймер общий для всех, то придётся каждую секунду вызывать слот и для каждого напоминания проверять, не стоит ли ему показаться.
1. Вычисляешь время следующего ближайшего напоминания
2. Засыпаешь на это время.
3. Напоминаешь
4. Goto 1.

Плодить кучу таймеров и слотов - это в стиле Qt, но это плохой стиль программирования.
>> No.36004 Reply
>>35996
Перевода четвертого издания, как я понял, еще нет? Боюсь чтение сего на буржуйском успехом не окончится. Второе уже на 10% вчитал, право- отличная книга.
Мейерса читану следующим, благодарю.
>> No.36005 Reply
File: 1335431861720.jpg
Jpg, 143.74 KB, 1280×960 - Click the image to expand
edit Find source with google Find source with iqdb
1335431861720.jpg
>>36003
Я как-то об этом не подумал. Спасибо, анон.
>> No.36007 Reply
>>36004
> Боюсь чтение сего на буржуйском успехом не окончится.
Не бойся. Читай на буржуйском. Тебе всё равно придётся привыкнуть к чтению на буржуйском. На русском всегда одно старьё, сейчас ты с этим сталкиваешься и впредь всё время будешь сталкиваться.
>> No.36016 Reply
>>36003
> Goto
По рукам линейкой!
>> No.36033 Reply
>>36016
Выкинь свою линейку и возьми гаечный ключ. Тут тебе не школа.
>> No.36035 Reply
>>35998
GIMP тебе поможет.
>> No.36038 Reply
>>36035
Просто не будем использовать твою картинку для следующего треда. Из-за формата и вотермарки она никуда не годится.
>> No.36040 Reply
>>36038
Вы сначала тред добейте.
>> No.36047 Reply
>>36040
Нам нужно сначала объявить ОП-пост нового треда.
>> No.36197 Reply
File: Снимок.PNG
Png, 41.42 KB, 671×338 - Click the image to expand
edit Find source with google Find source with iqdb
Снимок.PNG
>>31221
Сап, няши, можете ответить на вопрос начинающего быдлокодера программиста? Вот, в чем суть проблемы: нужно получение рандомных чисел, есть rand() с привязкой к времени, но есть одно "но": несколько раз подряд функция выдает одно и то же число, то есть конечный вариант выглядит так, как на скрине. Вот код функции получения урона:

int battle(int HP)
{
   int damage;
   srand(time(NULL));
   damage = rand() % 11;
   HP = HP - damage;
   return HP;
}
>> No.36198 Reply
>>36197
Не надо srand каждую итерацию вызывать, этим ты заново задаёшь сид, а time не очень-то точная функция.
>> No.36199 Reply
>>36197
Ага, теперь понял, если медленно пропускать ходы, то числа будут разными. Можно привязать к чему-то другому, если нужно быстрое получения рандомных чисел?
>> No.36200 Reply
>>36198
Поставил srand только в main, но все та же проблема.
>> No.36201 Reply
>>36200
Все, спасибо большое, проблема решилась. Оказалось, что сид задавался еще в одном месте.
>> No.36202 Reply
>>36201
Лол, так и знал, что надо подождать, пока ты ещё несколько раз свой код проверишь. Так вот что такое опыт.
>> No.36212 Reply
>>36202
Анон, это снова я. Долго гуглил, но так и не нашел, как сделать операцию повторяющейся раз в определенное время? Только делать таймер, а потом через if проверять, прошло ли нужное время?
>> No.36214 Reply
File: Шуруп-закручен-невозможным-образом.jpg
Jpg, 37.77 KB, 604×453 - Click the image to expand
edit Find source with google Find source with iqdb
Шуруп-закручен-невозможным-образом.jpg
Анон, где почитать про новые фичи C++11, чтоб было написано более-менее доступно? Стандарт читать боюсь.
>> No.36215 Reply
>>36214
В педевикии.
>> No.36216 Reply
>>36214
Вроде в 4-ом издании Страуструпа должно быть. (English only)
>> No.36217 Reply
>>36212
Да. В стандартной библиотеке ничего нет на эту тему.
>> No.36220 Reply
>>36214
Энтони Уильямс - Параллельное программирование на С++ в действии.
В конце книги есть приложения с описанием.
>> No.36222 Reply
File: rotations.txt
Txt, 0.00 KB, 0 lines - Click the image to get file
view edit
rotations.txt
Есть один код строк в 200, а именно тот, который я прикрепил к посту. Этот код нормально компилируется, но работает не так,как надо. Опытным путём я выяснил, что дело в том, что функция solve, вызываемая из main, не работает. Т.е не делает вообще ничего по непонятной мне причине. Может какой-нибудь добрый человек посмотреть, в чём там дело?
>> No.36223 Reply
>>36222
> Может какой-нибудь добрый человек посмотреть, в чём там дело?
А что твоя солве должна делать? Я для параллелизма использую OMP, есть ещё Intel Threading blocks и Math Kernel Library
>> No.36224 Reply
>>36222
Такое ощущение, будто над каждым студентом стоит злой бандит, который:
- за каждый уместный отступ в начале строки бьёт линейкой по пальцам;
- за каждый необязательный пробел в коде отвешивает хорошего подсрачника;
- за каждый содержательный комментарий откручивает голову котёнку из стоящей рядом коробки;
- за каждое содержательное название параметра или переменной бьёт электрошокером (надо отдать должное >>36222-куну - судя по всему, он таки мужественно вытерпел несколько ударов);
- заставляет копипастить код минимум из трёх источников, иначе этот злой бандит изнасилует малолетнюю сестрёнку студента-программиста;
- за каждое использование delete[] для освобождения массива суёт в задницу студента раскалённый паяльник.

>>36222-кун, отлови момент, когда твой надсмотрщик будет смотреть в другую сторону, и отпиши свои координаты. Может быть, тебе стоит вызвать полицию/милицию?
>> No.36225 Reply
>>36223
Она должна делать решение системы линейных уравнений с матрицей размера n*n методом вращений, распараллеленное при помощи threads с количеством тредов, равным TC.
>>36224
> студента-программиста
Ох лол, я бы сейчас хотел быть программистом. Но я им не являюсь, а программу нужно сдавать вот прям завтра. Можешь конкретнее указать, что там не так, а то словосочетания вроде " уместный отступ " или "необязательный пробел" мне ничего особо не говорят. Насчёт несодержательных комментариев искренне прошу прощения.
>> No.36226 Reply
File: rotations.txt
Txt, 0.00 KB, 0 lines - Click the image to get file
view edit
rotations.txt
>>36224
Попробовал зделать содержательные комментарии и вообще привести текст в удобочитаемый вид.
>> No.36227 Reply
File: rotations.txt
Txt, 0.00 KB, 0 lines - Click the image to get file
view edit
rotations.txt
>>36225
> уместный отступ
Отступ, отделяющий структурную единицу языка от окружающего её кода. Например, внутри функции ты ставишь перед каждой строкой один таб, перед строками внутри цикла for в этой функции - два таба, перед строками внутри if внутри for внутри функции - три таба, и так далее.
> необязательный пробел
Пробелы, отделяющие арифметические операторы, а также операторы присваивания и сравнения, от операндов.

Твой код мог бы выглядеть как-то так (поправил только оформление, смысловую часть не трогал).
>> No.36228 Reply
>>36227
Ок, спасибо, но от этого ничего не меняется. Функция solve даже в красивом выровненном коде с уместными пробелами не запускается. Я абсолютно точно знаю,что вся программа работает правильно за исключением того места,где main вызывает solve, а solve почему-то ничего не делает. Код работает так, будто там на месте
void Solve(int ThreadCount, double* a, double* b, double* s, double* c, int n, int finish)
{
   //несколько десятков строк кода//
}
cтоит void Solve(int ThreadCount, double* a, double* b, double* s, double* c, int n, int finish){}. И я уже часов семь кряду не могу понять, что там не так.
>> No.36229 Reply
>>36228
Пара хинтов:
1. Любая IDE, даже древний турбоси, умеет отладку и точки останова. Запустив код из IDE, ты можешь встать на точке останова, посмотреть на содержимое параметров и локальных переменных и продолжить выполнение кода в пошаговом режиме.
2. Если же вас заставляют писать код в блокноте и конпелять в каком-нибудь gcc, а осваивать gdb ой как не хочется, то есть вариант натыкать printf с выхлопом интересующих переменных во все спорные закоулки кода, а затем запустить программу и изучить, что творится в её выводе в консоли. Сомневаюсь, что, если ты вставишь printf с выводом параметров в самое начало функции Solve(), то он не отработает.
>> No.36230 Reply
>>36229
> . Сомневаюсь, что, если ты вставишь printf с выводом параметров в самое начало функции Solve(), то он не отработает.
Я именно это и делал, не отрабатывает.
>> No.36231 Reply
>>36230
> Если же вас заставляют писать код в блокноте и конпелять в каком-нибудь gcc, а осваивать gdb ой как не хочется, то есть вариант натыкать printf
Именно что заставляют, причём не на простом gcc, а gcc по-садистски настроенном, который даже запрещает использовать sqrt в коде на C. Что касается printf, то я их применял+компилировал и запускал куски программы по отдельности, каковым образом я и выяснил, что работает всё, кроме перехода от main к solve.
>> No.36232 Reply
>>36230
Сейчас обнаружил,что в коде с правильными пробелами и отступами printf работает, т.е solve запускается, но по окончанию работы solve все параметры возвращаются к тем значениям, которые они имели до вызова solve.
>> No.36472 Reply
Обесните, как нормально работать с строками в этих ваших ебучих плюсах?
Вот, например, элементарная совсем задача — есть метод add_log(char* s) или add_log(std::string s), я в него хочу пихать всякие форматированные строки. Если использовать ебучий snprintf, то надо каждый раз писать аж три строки — выделить новый буффер, снпринтфнуть туда строку, сделать вызов add_log. Альтернатива — сделать add_log c va_list, но насколько я знаю, всякие vsprintf напрямую вызвать не получится, а значит это мне блядь копипастить килотонны кода из стандартной библиотеки еще?

Как по-человечески написать то, что в моем любимом питоне например выглядит как add_log("Value1 {} Value2 {}".format(v1, v2))? Одной строкой, без ебучих микроманипуляций буферами.
>> No.36473 Reply
>>36472
Тьфу блядь, оказывается vsprintf все-таки можно использовать напрямую. Но все равно, это же явно черезжопный метод. Как это по-человеческие делается обычно?
>> No.36475 Reply
>>36473
То, что тебе кажется черезжопным, в плюсах является нормальной практикой. Страдай.
>> No.36476 Reply
>>36475
Не верю, что прямо все так пишут. Тем более, что char* и т.д. это вообще гря не плюсы.
Наверняка где-то есть секретная реализация строк, которая сама умеет в управление памятью, форматирование и т.д., просто я о ней не знаю.
>> No.36477 Reply
>>36472
Я не знаю питон. Что ты имеешь в виду под форматированными? Приведи пример входных и выходных данных.
>> No.36478 Reply
>>36477
Щас оно выглядит так:
else
{
   // Forked, wait for input
   add_log("[P] Forked child %i\n", child_pid);
}
//...
void FrontEnd::add_log(const char * format, ...)
{
    //...
    log[log_length] = (char*)malloc(sizeof(char) * 100);

    va_list args;
    va_start(args, format);

    vsprintf(log[log_length], format, args);

    va_end(args);
    log_length += 1;
    
    for (int i=0; i<log_length; i++)
    {
        mvwprintw(csw_log, i+1, 0, log[i]);
    }
    wrefresh(csw_log);
}
>> No.36479 Reply
>>36478
Где ты туп плюсы видишь? Маллок, чар*, принтфы, это - С. Я тебе сказал пример входных/выходных данных дать, а ты мне что?
>> No.36480 Reply
>>36479
Ты не знаешь как работает принтф или что?
("[P] Forked child %i\n", child_pid); => "[P] Forked child 27632"
>> No.36481 Reply
В С++11 так можно с std::string:
"[P] Forked child " + to_string(child_pid) + "\n"
>> No.36482 Reply
File: misaka.png
Png, 63.50 KB, 659×634 - Click the image to expand
edit Find source with google Find source with iqdb
misaka.png
Котанчики!
Посоветуйте IDE под прыщи для написания С++ говнокода, желательно чтоб могло в cmake; альзо надо автодополнение, переход к определению классов, методов, справка по стандартным либам и всё такое.
>> No.36483 Reply
>>36482
QtCreator вроде нормальный. Предугадывая вопросы, он не навязывает использование Qt и там вроде можно как-то проект на cmake делать(я видел такую кнопку в создании проекта). А в чём суть cmake? Что она делает?
>> No.36484 Reply
>>36483
Плюсую qtcreator, он довольно легкий и при этом имеет весь нужный мне функционал.
>> No.36485 Reply
А есть ли какой-нибудь простой способ дебага макросов? Есть один злоебучий макрос, без которого жить совсем нельзя, я хочу увидеть, что он генерирует на определенном коде.
>> No.36486 Reply
>>36485
А, всё, сам нашел. gcc -E выводит код после препроцессинга. Правда, со всеми инклудами, но да похуй.
>> No.36487 Reply
>>36483
cmake дает теоретическую возможность сборки проекта под другие платформы: шиндоуз и осх например.
>> No.36488 Reply
>>36487
Раз про Qt Creator разговор, то чем тот же qmake не угодил? Кроссплатформенность никуда не деётся же.
>> No.36489 Reply
>>36487
>>36488
А чем вам make не угодил? Обязательно нужно тянуть дополнительные зависимости?
>> No.36490 Reply
>>36489
У меня есть один легаси проект на automake. Километры m4 скриптов, которые понять вообще невозможно. Какая-то астральная магия в configure.ac.
Каждый раз, как надо внести изменения чуть сложнее, чем добавление нового .cpp файла, проклинаю тот момент, когда я согласился на мейк вместо кумейка.
Надо быть конченым мазохистом, чтобы этим пользоваться в современных проектах, у голого мейка или комбинаций с аутомейком нет ни одного преимущества перед кумейком/цмейком/сконсом.
>> No.36516 Reply
>>36489
Я открою тебе страшную истину: стадии конфигурации и сборки проекта -- это совершенно разные стадии! Make отвечает за сборку, cmake -- за конфигурацию. И cmake (сюрприз!) может генерировать Makefile'ы для make. Или проекты для VS.
>> No.36521 Reply
>>36516
> стадии конфигурации и сборки проекта -- это совершенно разные стадии! Make отвечает за сборку, cmake -- за конфигурацию.
Так-то да, но для того чтобы собрать в 99% случаев исходники нужно сконфигурить.
>> No.36523 Reply
>>36521
Почему в университете практически принципиально не учат ничего конфигурировать? То есть вообще ничего и никогда.
>> No.36524 Reply
>>36523
Потому, что в России IT-образования нет в принципе. Если преподаватель вообще хоть азы стандартной библиотеки плюсов дал — можешь радоваться, тебе жутко повезло.
>> No.36525 Reply
>>36524
А зачем тогда работодатели хотят, чтобы у меня была корочка и делают удивлённые глаза, когда я говорю им, что ушёл оттуда?
>> No.36526 Reply
>>36525
Потому что ты общался с насяльником или HR'ом, а они только по корочкам и стандартному набору вопросов навыки определять умеют.
>> No.36531 Reply
>>36521
> но для того чтобы собрать в 99% случаев исходники нужно сконфигурить.
Совершенно верно! И в чём противоречие?
>> No.36532 Reply
Доброчан, поясни мне пару вещей:
Когда ты объявляешь указатель, и запихиваешь туда что то, оно там будет жить пока ты сам его не потрешь, так?
А если ты объявляешь переменную (не указатель), инициализируешь, то ее ведь не нужно самому освобождать, так? Но, в таком случае, когда эта память освободится?

Еще - при каждой передаче переменной не через указатель - она полностью копируется?

И вообще, подкиньте чего-то годного по поводу указателей, управления памятью и memleak'ах. Только что бы кратко и по существу, книг я читать не собираюсь (а то опять будут за циклы пояснять, и все такое).
>> No.36533 Reply
>>36532
Читай время жизни переменных, это же самые основы. Вкратце - переменная гарантировано живет до конца блока, в котором была объявлена.
> книг я читать не собираюсь
Ну и дурак.
>> No.36534 Reply
>>36532
> Когда ты объявляешь указатель, и запихиваешь туда что то, оно там будет жить пока ты сам его не потрешь, так?
Нет.
> А если ты объявляешь переменную (не указатель), инициализируешь, то ее ведь не нужно самому освобождать, так? Но, в таком случае, когда эта память освободится?
Обыцчно - не нужно.
> Еще - при каждой передаче переменной не через указатель - она полностью копируется?
Нет.
> И вообще, подкиньте чего-то годного по поводу указателей, управления памятью и memleak'ах. Только что бы кратко и по существу, книг я читать не собираюсь (а то опять будут за циклы пояснять, и все такое).
читай книги, расти над собой.
>> No.36536 Reply
>>36532

Дорогой, твой уровень, судя по твоему вопросу, таков, что тебе книги читать и читать. В указатель ничего не запихивается, это такая же переменная, как и все остальные, просто она содержит адрес начала области памяти на которую указывает. И не всегда эту область надо освобождать. Короче, читай книги. Это полезно.
>> No.36541 Reply
>>36532
> Когда ты объявляешь указатель, и запихиваешь туда что то, оно там будет жить пока ты сам его не потрешь, так?
Если оно было создано оператором new, то да.
> А если ты объявляешь переменную (не указатель), инициализируешь, то ее ведь не нужно самому освобождать, так? Но, в таком случае, когда эта память освободится?
В конце области видимости. Когда {} закончатся, в которых она была объявлена.
> Еще - при каждой передаче переменной не через указатель - она полностью копируется?
Да. Если это объект, то при передаче в параметр неявно вызывается конструктор копии. Если ты присвоение делаешь, то если конструктор копии не объявлен explicit, то он же будет использоваться для присвоения, если не переопределён отдельно оператор присвоения. Если конструктора копии нет, то он создастся автоматически и будет копировать все поля и будет работать неправильно, если в полях будут указатели на динамическую память(О которых шла речь в начале), поэтому конструктор копии и оператор присваивания надо самому реализовывать.
>> No.36556 Reply
>>36541
Спасибо, все более или менее понятно.
>>36536
Ну, если уж на то пошло, то переменная только указывает на указатель, а в память, на которую ссылается указатель, таки можно что-то запихнуть. Разве я не прав?


Если уж на то пошло, разобрался в достаточно многих ЯП, прочитав 1 книжку, которая пояснила мне за циклы, условия, функции, ООП, а потом - только примеры кода и документация. Пытался начинать читать пару книг, но все сводилось к тому, что 90% я скипал абзацы. По этому такое отношение к книгам. Хотя, судя по всему, из за того, что cpp такой cpp, придется одну все таки прочитать.
>> No.36557 Reply
> Пытался начинать читать пару книг, но все сводилось к тому, что 90% я скипал абзацы.
Знакомое чувство. Не все книги так написаны. Есть много книг, которые предполагают, что ты это уже знаешь. Надо знать, какая книга для кого и чего написана.
>> No.36560 Reply
>>36557
Таки он как раз и не знает, и ему надо читать книгу для ньюфагов и не выпендриваться.
>> No.36584 Reply
>>36560
Много раз думал, что бы тебе такого язвительного ответить, но каждый раз останавливал себя. Доброчан же!
>> No.36604 Reply
File: Neko_by_Jen_Jen_Rose.png
Png, 354.46 KB, 787×769 - Click the image to expand
edit Find source with google Find source with iqdb
Neko_by_Jen_Jen_Rose.png
Нубовопрос о выделении памяти под элементы на стеке и синтаксисе этого действия.
Допустим, у меня есть некий класс, который держит внутри буфер с данными (размер буфера определяется для каждого экземпляра при создании):
class SomeClass
{
private:
    uint8_t _data[];
    size_t _capacity;
    // ...

public:
    SomeClass(size_t capacity)
    {
        _capacity = capacity;
        _data = // ...?
    }
}
Собственно, вопрос: как сделать так, чтобы _data стал массивом из capacity элементов? Кучи нет, всё живёт в стеке, поэтому оператор new использовать нельзя.
>> No.36606 Reply
>>36604
Временно решил проблему шаблонами:
template<size_t capacity> class SomeClass
{
private:
    uint8_t _data[capacity];
    // ...
};
Тем не менее, как мне кажется, это костыль. Я же правильно понимаю, что препроцессор превратит SomeClass<16>, SomeClass<64> и SomeClass<128> в три разных класса, и стараниями компилятора реализация каждого из них будет занимать свой кусок памяти программ?
>> No.36607 Reply
>>36606
По-моему то, что ты хочешь, вообще невозможно. То, что разещается на стеке, должно быть известно при компиляции. Это же статическая память. Даже на темплейтах ты можешь засунуть в <> только статическую константу. Если я не туплю.
>> No.36608 Reply
>>36604
Передавай в конструктор размер и создавай data динамически в нем
>> No.36609 Reply
>>36608
Он хочет на стеке, статически, без new(и без malloc тоже, стало быть).
>> No.36610 Reply
>>36607
> По-моему то, что ты хочешь, вообще невозможно.
Печально. Неужели даже списки инициализации не помогут (к сожалению, с их синтаксисом в C++ я вообще не знаком)?
> Даже на темплейтах ты можешь засунуть в <> только статическую константу.
В момент компиляции она будет известна - там будет либо дефайн, либо хардкодное число. Динамически создавать экземпляры SomeClass я не буду.

>>36608
> Передавай в конструктор размер и создавай data динамически в нем
Но каким образом? _data = new uint8_t[capacity]?
>> No.36611 Reply
>>36610
Поясню ещё немного - вероятнее всего, SomeClass будет использоваться как-то так:
class AnotherClass
{
private:
    SomeClass _someClassInstance(16); // или, в случае с темплейтами, SomeClass<16> _someClassInstance
    // ...
}

// ...
#if (RAM_SIZE > 4096)
    #define BUFFER_SIZE 128
#else
    #define BUFFER_SIZE 32
#endif

class YetAnotherClass
{
private:
    SomeClass _someClassInstance(BUFFER_SIZE);
}
>> No.36612 Reply
>>36610
А почему нельзя кучу?
>> No.36613 Reply
>>36612
Это особенность архитектуры AVR, для которой пишется этот код. Вся оператива там находится в одном адресном пространстве, и примерное её распределение показано на пикрелейтед (внешней памяти у меня нет, поэтому её с картинки можно смело вычеркнуть). Соответственно, возникают несколько проблем:
1. Аппаратного контроля доступа к памяти нет, т.е. контроллер не может самостоятельно понять, что стек приполз в кучу, наложился на неё и испортил данные в ней. Весь этот контроль выполняется программно, средствами malloc()/free() в avr-libc. Однако, поскольку malloc() работает не атомарно (его выполнение в любой момент может прерваться из-за каких-нибудь аппаратных прерываний), риск испортить кучу или стек таки остаётся. Проблемность воспроизводимости и устранения возникающих из-за этого проблем, наверное, очевидна.
2. При сборке кода компилятор раскидывает статически выделенные переменные по оперативе и по окончании сборки говорит, сколько памяти программ/данных он занял и сколько остаётся свободной (пикрелейтед). Динамическое же выделение памяти ломает этот механизм, и я больше не смогу сказать во время компиляции, вписываюсь я в доступную оперативу или нет.

tl;dr: на целевой архитектуре реализация кучи костыльна, и многие гуру этой архитектуры не рекомендуют её использовать. Поэтому и я не хочу прибегать к использованию кучи без крайней на то необходимости.
>> No.36614 Reply
File: malloc-std.png
Png, 2.73 KB, 484×293
edit Find source with google Find source with iqdb
malloc-std.png
File: Безымянный.png
Png, 30.96 KB, 724×741
edit Find source with google Find source with iqdb
Безымянный.png

>>36613
Картинки забыл.
>> No.36615 Reply
>>36614
Используй alloca. А лучше курни ассемблера, выброси из проекта кресты и оставь только няшный.
>> No.36618 Reply
>>36615
> курни ассемблера
Спасибо, уже прошёл это. Ассемблер по-своему хорош, конечно, но я хочу наконец перейти от хождения по граблям языковых средств и особенностей компиляторов к написанию логики. Сейчас я бы стал использовать ассемблер разве что для чтения дизассемблированного бинарника, чтобы понять, что я недообъяснил компилятору.
> выброси из проекта кресты и оставь только няшный
И вместе с крестами я потеряю ООП. Лично мне запись вида Serial.write(data) синтаксически нравится больше, чем HardwareSerialWrite(&Serial, data). Нет, на няшной, конечно, тоже можно наколхозить ОО-подобный велосипед, но зачем делать троллейбус из буханки?

В общем, наверное, оставлю на месте задание размера через темплейты. Пусть это костыль, пусть каждое из значений темплейта будет создавать отдельную реализацию класса, но по крайней мере не нужно будет туда-сюда копипастить исходники. А ведь всего-то хотел запилить для себя готовый кольцевой буфер, чтобы потом его использовать в разных местах, лол.
>> No.36619 Reply
>>36618
> пусть каждое из значений темплейта будет создавать отдельную реализацию класса
Если это точно действительно так и компилятор не драит сам реализацию, то, может, можно перенести всю реализацию в базовый класс, а темплейт сделать наследником?
>> No.36626 Reply
>>36618
> И вместе с крестами я потеряю ООП.
Ты уж определись, лишняя память тебе нужна или ООП со всякими темплейтами. Сколько памяти в твоей ардуине или что там у тебя? Какой там чип стоит?
Кучи бояться - код не писать. И няшный с его malloc/free тут будет оче кстати.
> Лично мне запись вида Serial.write(data) синтаксически нравится больше, чем HardwareSerialWrite(&Serial, data).
А по мне там разницы почти нет. Хотя это ещё на каком уровне.

Кстати, а зачем тебе вообще это твоё ООП, да на микроконтроллере то? Тебе так нужно наследование?

Кстати заодно ты можешь нагуглить AVR Studio
>> No.37007 Reply
Здравствуйте, плюсаны!

Я тут игрописарь, пилю потихоньку проекты на юнити, но подхожу к тому, что надо бы и плюсы освоить, надо же духовно расти.

Так вот, если учесть что проекты первое время будут в основном свои, есть ли смысл учить сразу С++11, или старый стандарт тоже нужен?
>> No.37008 Reply
>>37007
> духовно расти
> плюсы
Ты, кажется, направление перепутал - С++ это вниз, а не вверх.

По сабжу - свой проект тем и хорош, что ты в нём можешь делать что хочешь. Так что если есть желание и подходящий компилятор - пиши сразу на 11, кому сейчас упали эти устаревшие стандарты.
>> No.37012 Reply
>>37008
> кому сейчас упали эти устаревшие стандарты
Работодателям, которым в хуй не упиралось переписывать тонны работающего, отлаженного и проверенного годами кода на C++11 только потому, что 98 и 03 устарели.
мимокрокодил
Фух, с третьей попытки наконец построил валидное предложение.
>> No.37014 Reply
>>37012
Но тут возникает другой вопрос: кому нужны такие работодатели?
>> No.37021 Reply
>>37014
Илита погромирования итт?
>> No.37025 Reply
>>37012

Автор же сказал - проекты собственные. Какие, к дьяволу, работодатели?
>> No.37026 Reply
>>37012
А надо переписывать? Он что не обратно совместим со старым стандартом?
Алсо, речь же о новом проекте, какой ещё работающий код?
>> No.37027 Reply
>>37007
Учи сразу последний стандарт. Многие нужные и полезные вещи будут доступны сразу.
>>37012
Это проблема, но во первых новые проекты будут пилить на новом стандарте,
во вторых человек пописавший на новом стандарте и в древних проектах попытается делать нормально.
в третьих освоить новый стандарт ему после юнити будет проще чем старый.
>> No.37028 Reply
Господа, а как можно оценить свой уровень владения с++?
>> No.37031 Reply
>>37028

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

Если без шуток - найди человека, который знает намного больше тебя, и попроси его оценить твои знания.
>> No.37032 Reply
>>37007
Новый стандарт полностью совместим со старыми, он просто привносит некоторые новые фичи типа auto, циклов как в Питоне, лямбд и тд. Собственно, С++ и с С совместим почти полностью, не то что со старыми стандартами.
>> No.37033 Reply
>>37031
> Если без шуток - найди человека, который знает намного больше тебя, и попроси его оценить твои знания.
Ты студент небось? Где ты его найдёшь и как он будет оценивать? Это бессмысленно. Главное - это умение собственно программировать. В языке главное знать стиль, а не синтаксис.
>> No.37052 Reply
>>37033
Это не бессмысленно, твоя точка зрения устарела. У большинства свободных проектов и у сообществ любителей языка N есть менторы, которые помогают новичкам.
>> No.37056 Reply
>>37033

Ты такую хуету сейчас сморозил, что я даже не знаю, с какой стороны возразить.
> Где ты его найдёшь
В мире мало людей, знающих С++? Или я ему сказал искать не далее двух метров от дома? Интернет же есть. Ну ладно, для тех, кто не умеет находить никаких людей в интернете, кроме анонимусов на бордах, вот подробное руководство:

1. Берём любой известный проект на С++. Boost там, cjdns или ещё какое-нибудь говно. Можно даже ядро Linux.
2. Находим его репозиторий (на гитхабе или self-hosted - не суть).
3. Находим там имена людей, которые сделали больше всего коммитов.
4. Пишем этим людям на email.

Я не могу себе представить, чтобы кто-то из них отказался помочь новичку. Если не будет времени помочь - хотя бы подскажут, к кому обратиться.
> как он будет оценивать
Как и всё в этом мире - по результатам. То есть по написанному коду. Показываем свой лучший кусок и спрашиваем: "Что ты об этом думаешь?". Реакция варьируется от "Нихуя ты сечёшь" до "Ну и говно, шёл бы ты лучше сварщиком работать". Несколько таких оценок дают неплохое представление об уровне владения языком, главное - спрашивать именно спецов, а не сварщиков.
> Главное - это умение программировать
> В языке главное знать <...>, а не синтаксис
Я где-то сказал слово "синтаксис"? Если ты не знаешь синтаксис, то уровень владения языком ниже плинтуса, тут даже разговаривать не о чем.

Ты, видимо, путаешь уровень владения языком и умение программировать вообще.
>> No.37057 Reply
>>37056

cjdns и Linux на самом деле на Си, но похуй.
>> No.37058 Reply
>>37056
> Я где-то сказал слово "синтаксис"? Если ты не знаешь синтаксис, то уровень владения языком ниже плинтуса, тут даже разговаривать не о чем.
Ты сказал "владение языком" вместо "умения программировать на языке". Что значит, "владение языком"? Язык - это и есть синтаксис.
>> No.37061 Reply
>>37058

Я сказал? Это >>37028 сказал, я только проинтерпретировал.
>> No.37062 Reply
>>37061
> проинтерпретировал
С чего ты взял, что он про умение прогать на С++, а не про синтаксис, если он так сказал?
>> No.37064 Reply
>>37062

Да потому что синтаксис разучить в состоянии любая обезьяна, если дать ей учебник и полчаса времени. Поскольку доброаноны - самые умные, интеллигентные и образованные, было бы просто оскорбительно предполагать, что человек не справился с этой задачей.
>> No.37066 Reply
>>37064
Да хер, я почему-то думаю, что полностью мало кто знает синтаксис С++ и большинства других языков. Все знают чётко все отличия struct и class, что такое explicit и как конструктор может быть использован для неявного приведения типов, по каким правилам какими командами приводятся типы и чем эти команды отличаются, все числовые типы и все их отличия, как работает const и куда его можно писать, особенно в определении указателей(по крайней мере три разных места с двумя разными смыслами), адресную арифметику, все директивы #, какие именно операторы нельзя перегружать и прочее-прочее? Да хер там. Я уже не говорю про С++11, который, сто пудов, вообще 3 с половиной кодера знают хорошо.

А когда оказалось, что в студии можно написать <int, MyClass<int>>, а в gcc надо именно <int, MyClass<int> >, потому, что он >> принял за оператор ввода, я аж кирпичей выложил.
>> No.37067 Reply
>>37066

Да в других-то языках как раз всё хорошо, потому что после С++ все поняли, что язык должен быть простым и понятным, а не состоять из тридцати вагонов говна. Но я сейчас не об этом. У тебя очень странное понятие о синтаксисе как таковом. С какого чёрта ты, например, считаешь, что знать синтаксис означает знать все директивы препроцессора? Да они вообще у каждого компилятора могут быть свои. Синтаксис заканчивается после слов "Строка, начинающаяся с решётки - директива препроцессора", набор оных регламентирует уже стандарт языка. Остальное - аналогично. Синтаксис - это та маленькая часть языка, которая описывает, какие конструкции в принципе могут встречаться в программе. Если у тебя не возникает вопросов вида "Что означает этот оператор?" - всё, ты знаешь синтаксис и можешь приступать к изучению зоопарка стандартов, компиляторов, библиотек и деталей реализации фичи X на платформе Y. К синтаксису всё это не имеет ни малейшего отношения.
>> No.37068 Reply
>>37067
С директивами, может я и протупил, но explicit, приведение типов всякими кастами и неявное через конструктор - это уже синтаксис же. И случай с <int, MyClass<int>> - тоже. И конструкции типа
const int * const p;
тоже. И возможность написать методы прямо в struct и возможность писать или опускать public/private/protected и в struct, и в class - тоже.
> Если у тебя не возникает вопросов вида "Что означает этот оператор?"
Такого вопроса вообще может никогда возникнуть даже на программе, которую ты видишь впервые. Если язык очень хорошо спроектирован и программа очень хорошо написана.
const int * const p;, методы посреди struct, опущенные public или private в них, приведения типов такой вопрос запросто вызовут
> Да в других-то языках как раз всё хорошо
В соседнем треде перетирают по этому же поводу javascript, там вообще нихера никто не втыкает в эти прототипы толком.
>> No.37069 Reply
>>37068
> даже на программе
На языке, хотел сказать.
>> No.37070 Reply
>>37064
> Да потому что синтаксис разучить в состоянии любая обезьяна, если дать ей учебник и полчаса времени.
Допустим, что анон из треда о C++ с доброчана умнее обезьяны, которая читала учебник по синтаксису плюсов в течение получаса. Поскольку C++ синтаксически совместим с C, полагаем, что анон также знаком и с синтаксисом няшной. Стало быть, согласно твоей логике, для любого анона не составит труда объяснить, что делает синтаксически валидный кусок кода на сишечке:
#define _ F-->00 || F-OO--;
long F=00,OO=00;
main(){F_OO();printf("%1.3f\n", 4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
       _-_-_-_-_-_-_-_-_
            _-_-_-_
}
>> No.37071 Reply
>>37068
> <int, MyClass<int>>
Заёбы компилятора в синтаксис не входят.
> const int * const p;
Да, это как раз синтаксис. Только правила чтения таких конструкций одни и те вне зависимости от сложности.
> Такого вопроса вообще может никогда не возникнуть
Если синтаксис понятен с первого взгляда - это ещё не значит, что его нет.
> нихера никто не втыкает в эти прототипы
Я втыкаю в прототипы. Давай, задай мне очередной идиотский вопрос про то, как реализовать ООП через них.

И ещё раз - ты слишком широко трактуешь понятие синтаксиса. Можно сделать язык с синтаксисом С++, но без заёбов С++, и наоборот.
>> No.37072 Reply
>>37071
ОК, но анон всё равно говорил о "владении языком", что включает в себя синтаксис и семантику, вообще говоря весь стандарт, но не практику программирования на нём. Разговор становится всё более бессмысленным
>> No.37073 Reply
>>37072

Очередная херня. Владение языком - это именно практика и знание нюансов.
>> No.37082 Reply
>>37070

Слабовато вбрасываешь, давай сразу ассемблер.

Алсо, кому интересно, код посчитывает приблизительное значение числа пи. Объявляются две переменные, в "солнышке" выполняются двести две пары декрементов, в результате чего переменная F принимает значение -202, а OO становится равна -16 (из-за оператора "или" между парами для второй переменной декремент выполняется не всегда). Далее значение подсчитывается по простой формуле: пи ~= 4 x 202 / (16 x 16) = 808 / 256 = 3.15625. Всего-то навсего.
>> No.37083 Reply
>>37080
> давай сразу ассемблер
Зачем ассемблер, речь же идёт о простом синтаксисе С(++), в котором даже обезьяна с книжкой разберётся за полчаса. Вот ещё пример прекрасной, интуитивно понятной программы:
#define iv 4
#define v ;(void
#define XI(xi)int xi[iv*'V'];
#define L(c,l,i)c(){d(l);m(i);}
#include <stdio.h>
int*cc,c,i,ix='\t',exit(),X='\n'*'\d';XI (VI)XI(xi)extern(*vi[])(),(*
signal())();char*V,cm,D['x'],M='\n',I,*gets();L(MV,V,(c+='d',ix))m(x ){v)
signal(X/'I',vi[x]);}d(x)char*x;{v)write(i,x,i);}L(MC,V,M+ I)xv(){c>=i?m(
c/M/M+M):(d(&M),m(cm));}L(mi,V+cm,M)L(md,V,M )MM(){c=c*M%X;V-=cm;m(ix);}
LXX(){gets(D)||(vi[iv])();c=atoi(D);while(c>=X){c-=X;d("m");}V="ivxlcdm"
+iv;m(ix);}LV(){c-=c;while((i=cc[*D=getchar()])>-I)i?(c?(c<i&&l(-c-c,
"%d"),l(i,"+%d")):l(i,"(%d")):(c&&l(M,") "),l(*D,"%c")),c=i;c&&l(X,")"),l
(-i,"%c");m(iv-!(i&I));}L(ml,V,'\f')li(){m(cm+!isatty(i =I));}ii(){m(c=cm
= ++I)v)pipe(VI);cc=xi+cm++;for(V="jWYmDEn X";*V;V++)xi[*V^' ']=c,xi[*V++]
=c,c*=M,xi[*V^' ']=xi[*V]=c>>I;cc[-I]-=ix v)close(*VI);cc[M]-=M;}main(){
(*vi)();for(;v)write(VI[i],V,M));}l(xl,lx)char*lx;{v)printf(lx,xl) v)
fflush(stdout);}L(xx,V+I,(c-=X/cm,ix))int(*vi[])()={ii,li,LXX,LV,exit,l,
d,l,d,xv,MM,md,MC,ml,MV,xx,xx,xx,xx,MV,m i};
>> No.37085 Reply
>>37083
> речь же идёт о простом синтаксисе С(++)
А если речь идёт о шаблонах крестов? boost почитай.
И зойчем ты обфусцированный код приводишь? Это не пример кривого синтаксиса. Это пример работы обфускатора.
>> No.37086 Reply
>>37083

А эта конвертирует арабские цифры в римские. Ты весь вечер будешь программы с IOCCC постить?
>> No.37088 Reply
>>37086
Так нечестно, ты знал ответ.
>> No.37089 Reply
>>37070
> Поскольку C++ синтаксически совместим с C
начиная с 99 года - нет.
>> No.37092 Reply
>>37088

А ты всерьёз думал, что тут никто не помнит финалистов этого конкурса? Написал бы сам что-нибудь - хоть мозги бы размял.
>> No.37142 Reply
>>37072
Да именно это я и имел в виду.
Кстати что скажете об этом коде?

сlass TMapFunctorOnUrlAbstract
{
private :
   std::map<std::string,std::function<std::string(TParams) > > _mapFunctorOnUrl;
public:
   TMapFunctorOnUrlAbstract()
   {
   _mapFunctorOnUrl.insert(std::pair<std::string, std::function<std::string(TParams) > >("/url1",NFunctorOnUrl::url1));
   _mapFunctorOnUrl.insert(std::pair<std::string, std::function<std::string(TParams) > >("/url2",NFunctorOnUrl::url2));
   _mapFunctorOnUrl.insert(std::pair<std::string, std::function<std::string(TParams) > >("/url3",NFunctorOnUrl::url3));
   _mapFunctorOnUrl.insert(std::pair<std::string, std::function<std::string(TParams) > >("/url4",NFunctorOnUrl::url4));
   }
   ~TMapFunctorOnUrlAbstract(){}
   std::function<std::string(TParams) > getFunctorOnUrl(std::string url)
   {return _mapFunctorOnUrl[url];}
   bool find(std::string url)
   {
   if (mapFunctorOnUrl.end()!=mapFunctorOnUrl.find(url))
   return true;
   return false;
   }
};

////////////////////////////////////////////////////////////////////////////////////////////
typedef TSingleton<TMapFunctorOnUrlAbstract> TMapFunctorOnUrl;//////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
>> No.37160 Reply
File: petrosyan.jpg
Jpg, 7.47 KB, 193×261 - Click the image to expand
edit Find source with google Find source with iqdb
petrosyan.jpg
>>37142
Ехал :: через ::,
Видит :: - в :: ::.
Сунул :: :: в :: -
:: :: :: ::.
>> No.37161 Reply
>>37142
Почему бы просто не написать:
  bool find(std::string url)
  {
    return (*mapFunctorOnUrl.end() != *mapFunctorOnUrl.find(url));
  }
Про остальное не скажу ничего, мне противен этот мерзопакостный язык.
>> No.37162 Reply
>>37161
Условие проще понимается чем return (mapFunctorOnUrl.end() != mapFunctorOnUrl.find(url));
>>37160
Более ок было бы тайпдефы завести?
>> No.37163 Reply
>>37161
Что за странная мода писать сравнения задом наперёд?
>> No.37164 Reply
>>37163
Вероятно, это няшноёбская привычка с тех древних пор, когда компиляторы не считали случайное if (a = 5) вместо if (a == 5) за ошибку - в этих случаях от случайной ошибки спасала обратная запись. Какие тараканы заставляют людей выворачивать сравнения в наши дни, видимо, так и останется загадкой.
>> No.37510 Reply
анончики кто шарит в директе объясните нубу почему буфферизация не работает и экран мерцает
код отрисовки

int Process()
{
   DDSURFACEDESC ddsd;
   ZeroMemory(&ddsd, sizeof(ddsd));

   ddsd.dwSize = sizeof(ddsd);

   back->Lock(0, &ddsd, DDLOCK_WAIT, 0);

   int pitch = (int) ddsd.lPitch;
   UINT* v = (UINT*)ddsd.lpSurface;

   for(int x = 0; x < WIDTH; x++)
   for(int y = 0; y < HEIGHT; y++)
   v[x + y * (pitch / 4)] = 0x00000000;

// for(int i = 0; i < NUM; i++)
// {
// int x = 800 / 2 + (stars[i].x * 300.0f) / stars[i].z;
// int y = 600 / 2 + (stars[i].y * 300.0f) / stars[i].z;
//
// v[(int)stars[i].x + (int)stars[i].y * (pitch / 4)] = 0x00ffffff;
// }

   back->Unlock(0);

   prim->Flip(0, DDFLIP_WAIT);

   return 0;
}
>> No.37514 Reply
>>37510
не шарю в директе но рискну предположить что ты перерисовываешь все поэтому и мерцает,
перерисовывай только то что изменилось.
>> No.37516 Reply
>>37514
Оно и видно. Мерцать не должно, потому что двойная буфферизация.
>> No.37554 Reply
>>37510
Напрочь забыл всё о директе, но рискну предположить, что ты пытаешься использовать бэкбуффер в оконном режиме.
>> No.37558 Reply
>>37164
Как будто сейчас что-то изменилось?
https://ideone.com/khUvI3
>> No.37559 Reply
>>37163
Как узнать, где у сравнения перед, а где зад?
>> No.37560 Reply
>>37558
Да. Люди не пишут программы в блокноте и современные компиляторы и иде умеют кидать варнинги, когда видят такую хуйню. Но илите погромирования конечно же некогда смотреть на варнинги, у них и так этих варнингов на две страницы, ох уж эти тупые компиляторы.
>> No.37561 Reply
>>37560
Нет, компиляторы по-прежнему не считают if (a = 5) за ошибку. Потому что это по-прежнему не ошибка.
>> No.37563 Reply
>>37561
Наркоман. Кончай в глаза долбиться.
http://msdn.microsoft.com/en-us/library/7hw7c1he.aspx
>> No.37564 Reply
>>37563
> An assignment has a value (the value on the left side of the assignment) that can be used legally in another expression, including a test expression.
> can be used legally in another expression, including a test expression
> can be used legally
> can be used legally
> can be used legally
По-прежнему не ошибка.
>> No.37565 Reply
>>37564
Покажи мне, где я назвал это ошибкой.
>> No.37567 Reply
>>37565
В постах есть ссылки, вот тут это названо ошибкой
>>37164
>> No.37568 Reply
>>37560
Это дает более жесткие гарантии. Проект может собираться несколько часов на специальном билд сервере. По исходникам на том же сервере может пройтись скрипт автозамены, мало ли что. И да никто не говорит что ключики -pedantic -Weffc++ и -Werror не стоит указывать.
>> No.37569 Reply
>>37565
Посмотри сам.
>> No.37599 Reply
File: Untitled.png
Png, 14.69 KB, 665×215 - Click the image to expand
edit Find source with google Find source with iqdb
Untitled.png
Странно компилятор себя ведёт. Причём в первом случае nvar всегда равен нулю, а во втором - выдаче этакого генератора псевдослучайных чисел.
>> No.37601 Reply
>>37599
Да, я знаю что неинициализированные переменные нельзя использовать.
Мне попросту любопытно, ведь объявления переменных и функций не ведут к разметке памяти согласно документации, к этому ведет инициализация.
>> No.37602 Reply
>>37601
Ну а если ты и не собираешься этот свой nvar инициализировать, если ты вместо этого в какую-нибудь функцию передашь &nvar? Конечно же память под него выделяется сразу.
>> No.37609 Reply
>> No.37611 Reply
>>37609
Всё равно ничего не понятно. Нулём переменная инициализируется, если она static. Память под неё выделяется в любом случае, и это банальный sub esp, 4. Если переменная auto, то значение будет такое, какое было на стеке. Странно, что наличие получения адреса переменной в коде так влияет на работу программы. Хотя всё по стандарту.
>>37599
А ты покажи лучше дизасм функции main, посмотрим, что там компилятор накрутил.
>> No.37612 Reply
>>37599
А я наоборот не понимаю, сфигали сишка то будет что-то самовольно приравнивать нулю. Не понимаю, почему там ноль вначале в одном из примеров.
>> No.37614 Reply
>>37612
В дебаге может инициализировать. В релизе там всегда хлам будет, насколько я знаю.
>> No.37855 Reply
Доброкодеры дайте ответ пожалуйста, есть ли фриланс заказы для плюсового кодера?
И если есть то где искать и какие навыки нужны?
>> No.37857 Reply
>>37855
www.os2world.com чого вже там
>> No.37878 Reply
>>37857
Не могу зайти.

Реквестирую больше ссылок с описанием что нужно знать.
>> No.37907 Reply
>>37510
анончики, дополнение...
при использововании родного блитера все норм, как только использую flip все мерцает шо за нах?
>> No.37909 Reply
>>37907
Не используй flip.
>> No.37917 Reply
File: 1337609857549.jpg
Jpg, 371.44 KB, 600×3518 - Click the image to expand
edit Find source with google Find source with iqdb
1337609857549.jpg
Учусь кодить. Сейчас я юзаю sublime text и g++. Все остальное кажется неудобным и слишком громоздким для моих целей. Но мои программы становятся все больше и больше, и я понимаю, что мне нужно найти какую-то среду разработки. Поделитесь советами.
>> No.37922 Reply
>>37917
VisualStudio или QtCreator(не обязательно использовать Qt при этом). Только не говори, что это too mainstream.
>> No.37923 Reply
>>37922
И да, смысла брять якобы более простую IDE нет. Тебе не тянет карман дополнительный функционал и часть функционала помогает даже, когда ты ничего о нём не знаешь.(автокомплит и прочее).
>> No.37925 Reply
>>37923
Только если у тебя цоба-пека. Студия с каждой версией все тяжелее и тяжелее, из-за чего ради фич нового стандарта я перешел на кодблокс в итоге. А после нормальных иде для других языков вообще не знаю как на кресты возвращаться.
>> No.37927 Reply
>>37925
Расскажи что за нормальные ide для других языков?

Пользуюсь QtCreator потому что не осилил настроить sublime text
>> No.37928 Reply
>>37927
Вся линейка JetBrains, например. Лучше этого я ничего не видел.
>> No.37929 Reply
>>37928
И что в них есть такого чего нет в студии с актив_икс?
>> No.37930 Reply
>>37925
QtCreator тоже, что ли? Кодблокс неудобный.
>>37928
Вряд ли они легче QtCreator. Или я не понимаю.
>>37929
Читай предыдущие посты. Он наоборот говорит, что студия тормозит, де перегруженная.
>> No.37944 Reply
>>37930
> > QtCreator тоже, что ли? Кодблокс неудобный.
Полностью поддерживаю QtCreator отличная ide даже комититься можно не выходя из нее. Я в сущности разворачиваю на весь экран и доволен как слон.
> > Вряд ли они легче QtCreator. Или я не понимаю.
Меня тоже это интересует. Видимо там есть репл, для плюсов завести подобный механизм будет сложно.
> > Читай предыдущие посты. Он наоборот говорит, что студия тормозит, де перегруженная.
В этом он конечно прав. Студия подтормаживает, именно поэтому я перешел на QtCreator
>> No.37945 Reply
>>37930
>>37944
QtCreator мне просто не понравился. Не знаю в чём дело, мне приятнее спартанский кодблокс, чем это.
>> No.37972 Reply
Сейчас уже стали везде внедрять С++11 или все придерживаются знакомых остальным сотрудникам технологий? Стоит читать 4-е издание Страуструпа? Я что-то смотрю, у него нифига почти нет пояснений, что в каком стандарте. В VC++ куча недореализованного в С++11, даже в 2013 версии. А в gcc уже что, всё что ли? Всё реализовали? VC++ это новый интернет эксплорер, компилирующийся в ассемблер? У меня есть страх, что я выучу слишком новый стандар, приду и не смогу ничего написать из-за незнания нужного стандарта. Что за дурацкая профессия.
>> No.37981 Reply
>>37972
It depends. Если много старого кода, никто не будет переписывать или смешивать его с новым. Могут просто отказываться от некоторых фич, даже старых, если считают их чем-то плохим. Так что старый тебе в любом случае нужно знать.
>> No.37985 Reply
>>37972

Изучай новый. Как кстати собрался учить? QtCreator + mingv отлично себя рекомендуют(если не боишься откровенно лажево работающего дебагера) для меня по крайней мере. Что такое VC++ ,
С++ cli что ли? Тогда не стоит трогать эту бяку.

>>37981

Поддерживать древний проект не интересно, сложно протянуть какие то новые решения, поиграться с архитектурой. Так что если там не платят овер девятьсот золота смысла идти в такие проекты нет.

А в новом проекте знания с++ 11 вполне себе актуальны и востребованы. Кроме того новый стандарт сильно упрощает жизнь рядового кодера так что выбор вполне очевиден.
>> No.37986 Reply
>>37985
> поиграться с архитектурой
Свежеобученной макаке никто играть с архитектурой не даст. Конечно может у вас там в московиях овер9000 фирм и все ищут молодых и неопытных, но в мухосранске с такими предъявами работу хрен найдёшь.
>> No.37987 Reply
>>37986
Я из мухосранска няша. Мелкий проектик сежеобученной макаке как раз и нужно выдавать, чтобы она набила шишки и поняла как делать нужно и как нет, иначе потом в большом огребете проблем. Конечно за ходом того что она там воротит смотреть нужно, и даже говорить что так а что нет. Имхо все это задачи руководителя проекта. Но как та самая макака могу тебе сказать, что и задачу можно самому себе придумать и успешно ее решать набираясь опыта.
>> No.37990 Reply
>>37981
> или смешивать его с новым
А чем плохо смешивать с новым? Он же совместим. Если в отдельных модулях и фичах одной программы, допустим.
>>37985
У меня линукс. QtCreator + gcc. А что не так с ним?
> Что такое VC++ , С++ cli что ли?
Это название майкрософтовского компилятора, в вижуалстудии который.
>> No.38002 Reply
>>37990
Под линуксом все ок. Жесть начинаеться под виндой. Иногда не ставит точки. Если у тебя стартует несколько потоков останавливает выполнение и ждет пока ты явно скажешь продолжить.
> > Это название майкрософтовского компилятора, в вижуалстудии который.
Ясно, к сожалению у меня нет последней студии так что не могу проверить, но говорят поддерживает не все.
>> No.38246 Reply
File: complex.png
Png, 10.74 KB, 321×248 - Click the image to expand
edit Find source with google Find source with iqdb
complex.png
>>31221
Здравствуй анон. Есть тривиальная задача — написать функцию, которая бы выводила комплекное число в виде a + i*b. Как правильнее всего можно написать такую функцию? Подумал что можно написать таблицу пик соответственно которой программа будет выбирать что выводить. Выходит 10 if-ов. Может в C++ уже есть такие таблицы?
>> No.38270 Reply
>>38246

И тут внезапно влезаю я со своим CoffeeScript.
showA = (a) ->
	if a == 0 then '' else 'a'

showB = (a, b) ->
	result = null
	switch
		when b == 0
			return ''
		when b > 0
			result = if a == 0 then '' else '+'
		when b < 0
			result = '-'
	result += 'i'
	if Math.abs(b) != 1 then result += 'b'
	return result

complex = (a, b) ->
	if a == 0 and b == 0 then '0' else showA(a) + showB(a, b)


console.log  complex 5, -2  # a-ib
console.log  complex 5, -1  # a-i
console.log  complex 5,  0  # a
console.log  complex 5,  1  # a+i
console.log  complex 5,  2  # a+ib
console.log  complex 0, -2  # -ib
console.log  complex 0, -1  # -i
console.log  complex 0,  0  # 0
console.log  complex 0,  1  # i
console.log  complex 0,  2  # ib
>> No.38277 Reply
File: circus-site.jpg
Jpg, 72.72 KB, 560×431 - Click the image to expand
edit Find source with google Find source with iqdb
circus-site.jpg
>> No.38278 Reply
File: 13064079194671.jpg
Jpg, 112.83 KB, 530×380 - Click the image to expand
edit Find source with google Find source with iqdb
13064079194671.jpg
>>38270
> Табуляция
>> No.38279 Reply
>>38278
Бугурт пробелораба.
>> No.38280 Reply
>>38270
хм императивщина
>> No.38282 Reply
>>38278
Что это ещё не так с табуляцией? Никак в толк не возьму, что хорошего, когда ты должен жать на кнопку несколько раз, чтобы стереть один отступ.
>> No.38283 Reply
>>38282
Только во всяком говне вместо IDE. Нормальные редакторы умеют а) стирать несколько пробелов, чтобы убрать один отступ, и б) Shift+Tab.
>> No.38285 Reply
>>38270
if (b) {
    (a? cout << a : cout) << ((b < 0)? "-" : a? "+" : "") << "i";
    if (abs(b) != 1) cout << abs(b);
} else {
    cout << a;
}
>> No.38286 Reply
File: expr.png
Png, 18.99 KB, 729×222 - Click the image to expand
edit Find source with google Find source with iqdb
expr.png
>>38270
На javascript-е, кстати, легко. Нужно подобное на C++.
>> No.38287 Reply
>>38282
> 2014
> ставит отступы самостоятельно
>> No.38290 Reply
>> No.38292 Reply
>>38290
Да не нужны тут лямды, разве что ради ленивости. Тут просто 2д массив, из которого выбирается один элемент на основании значений элементов первого столбца и первой строки. Единственная проблема - я хз как узнать размер массива в крестах, стандартом оно вроде не предусмотрено.
>> No.38293 Reply
>> No.38294 Reply
>>38293
> массив
> std::vector
Хватит читать посты жопой.
>> No.38295 Reply
File: 982321227.gif
Gif, 448.45 KB, 500×275 - Click the image to expand
edit Find source with google Find source with iqdb
982321227.gif
>>38294
Ох, нижайше пардону прошу.
>> No.38296 Reply
>>38295
Окей.
>> No.38299 Reply
>>38292
Для данной конкретной задачи и необязательно узнавать размеры массива, достаточно их задефайнить константами.
>> No.38302 Reply
>>38299
Речь вроде как шла в общем о реализации этой самой ложиктабле. Для данной конкретной задачи достаточно нескольких if'ов.
>> No.38303 Reply
>>38294
Это и есть массив в крестах. Тот массив, о котором ты думаешь - это массив в С. Нет - ты можешь написать класс с отслеживанием размера. Получится урезанная верстия std::vector.
>> No.38309 Reply
>>38303
Да ладно, массив в крестах это array же.
>> No.38310 Reply
>>38303
> Нет - ты можешь написать класс с отслеживанием размера
> Получится урезанная верстия std::vector.
Очень уж сильно урезанная получится версия.
>> No.38311 Reply
>>38309
>>38310
А, вот, я про array написал, а вспомнить, что это конкретно, не мог. Всё же уже написано за нас, вот вам как раз массив с методом size(), не нужно отдельно хранить размер. Ещё и итераторы поодерживает, такой-то няшный контейнер зачем он вообще нужен, если есть vector.
>> No.38312 Reply
>>38311
У array фиксированный размер, возможно будет выигрыш по скорости в каких-то задачах.
>> No.38313 Reply
>>38246
`
double a, b;
cin >> a >> b;
if (a)
    cout << a << (b > 0 ? "+" : (b < 0 ? "-" : ""));
else
    cout << (b < 0 ? "-" : "");
if (b)
{
    cout << 'i';
    b = fabs(b);
    if (b != 1)
        cout << b;
}
if (!a && !b)
    cout << 0;
`
Так не пойдёт?
>> No.38314 Reply
>>38313
Немного перемудрил, вот пояснее вроде бы.
`
if (a || !b)
    cout << a;
if (b)
{
    cout << (b > 0 ? (a ? "+i" : "i") : (b < 0 ? "-i" : ""));
    if (fabs(b) != 1)
        cout << fabs(b);
}
`
>> No.38316 Reply
>>38314
Можно вообще в одно многоэтажное тернарное выражение написать, лол.
>> No.38317 Reply
>>38312
Как олимпиадник скажу, что обычно пользовался векторами, а про какой-то array даже не знал. Если уж совсем нужно оптимизировать(что встречается редко) - то уж сразу сишные массивы, там хотябы обращение прямое, без всяких классов масивов.
Если нужно вертор конкретной длины - v.resize(n).
>> No.38318 Reply
>>38316
Вот я, кстати, не знаю, как это сделать, там же в обеих частях должны быть одинаковые типы, как мне тогда выводить или не выводить число тернарником?
>> No.38319 Reply
>>38318
Пустая строка, очевидно же.
>> No.38320 Reply
>>38319
> одинаковые типы
> число и строка
Единственное, что мне приходит в голову, это какая-нибудь функция типа itos.
>> No.38321 Reply
>>38320
В 11ом внезапно запилили отдельную функцию std::to_string, принимающую любые численные типы, раньше приходилось либо извращаться с std::stringstream, либо пилить свой велосипед.
>> No.38332 Reply
>>38321
О, прекрасно.
   `std::cout << (a || !b ? std::to_string(a) : "") << (b > 0 ? (a ? "+i" : "i") : (b < 0 ? "-i" : "")) << (std::abs(b) != 1 && b ? std::to_string(std::abs(b)) : "");`
>> No.38335 Reply
>>38321
> В 11ом внезапно запилили отдельную функцию std::to_string, принимающую любые численные типы
Традиционное упоминание о C# и Java с указанием величины временного интервала между появлением метода ToString() в них и в C++11.
мимокрокодил
>> No.38336 Reply
>>38335
Как же вы уже заебали их сравнивать. Ну как можно такие разные технологии для таких разных задач сравнивать? Ещё и традиционное, просто прихуеть.
>> No.38345 Reply
>>38335
В джаве до сих пор нет арифметики указателей. Идите на хуй.
>> No.38351 Reply
>>38345
А в хаскеле есть! И, господи, какая же это жопа.
>> No.38352 Reply
>>38345

Не "до сих пор", а "не было, нет, и никогда не будет, потому что этот язык не предназначен для стрельбы в ногу".
>> No.38361 Reply
>>38345
> В джаве до сих пор нет арифметики указателей
Нужной только красноглазым байтоёбам для красноглазия и байтоёбства. Олсо, в чистом жавокоде нет ещё многих киллерфич C++ - например, сегфолтов и порчи содержимого собственной памяти.
>> No.38362 Reply
>>38361
В умелых руках и стеклянный хуй - смертельное оружие. Например, один знакомый рассказывал что какой-то сервайс на джаве у них часто отжирал всю оперативу и падал, оказалось что забывали какие-то там файловые дескрипторы закрывать, теперь падает реже.
>> No.38364 Reply
File: 1347641909100.jpg
Jpg, 35.79 KB, 400×299 - Click the image to expand
edit Find source with google Find source with iqdb
1347641909100.jpg
>>38362
А теперь представь, что бы было, пиши эти макаки на крестах.
>> No.38367 Reply
>>38364
У них бы не скомпилилось, их бы уволили и наняли бы нормальных программистов, и стала бы эта компания поживать да добра наживать.
>> No.38370 Reply
>>38367
Всё бы у них скомпилировалось. В крестах относительно слабая типизация, которая позволяет скомпилировать какой угодно бред. В любом случае, делать компайл-тайм проверку контрактов там очень дорого и очень-очень больно, если вообще возможно.
>> No.38371 Reply
>>38364
Примеры графических движков ААА-игр на джаве существуют?
>> No.38374 Reply
>>38371
И даже по этому показателю говнокресты безнадёжно отсасывают у няшной. Да что там, даже программисты с мировым именем признают плюсы беспросветным говном: http://harmful.cat-v.org/software/c++/linus
>> No.38375 Reply
>>38371
Ты же не способен следить за нитью срача. Срочно завязывай с крестами, пока говорить ещё не разучился.
>> No.38377 Reply
>>38375
Начало срача было с того, что какой-то наркоман не просто начал сравнивать языки для управляемого и неуправляемого кода, а даже назвал это сравнение традиционным.
>> No.38378 Reply
Вот смотри, >>38371, на какие посты ты отвечал:
>>38362
> Например, один знакомый рассказывал что какой-то сервайс на джаве у них часто отжирал всю оперативу и падал, оказалось что забывали какие-то там файловые дескрипторы закрывать, теперь падает реже.
>>38364
> А теперь представь, что бы было, пиши эти макаки на крестах.
>>38371
> Примеры графических движков ААА-игр на джаве существуют?
Ты наркоман? Какие ещё ААА игры, если речь шла про "какой-то сервайс с незакрытыми файловыми дескрипторами"?

Ну и да, игрульки составляют незначительную часть рынка, и никаких требований к надёжности и качеству у них нет. Тоже мне, серьёзный бизнес нашёл.
>> No.38381 Reply
>>38378
Отмотать дальше пробовал? Смотри на какие посты отвечали эти:
>>38361
> В джаве до сих пор нет арифметики указателей. Нужной только красноглазым байтоёбам для красноглазия и байтоёбства. Олсо, в чистом жавокоде нет ещё многих киллерфич C++ - например, сегфолтов и порчи содержимого собственной памяти.
>>38345
> В джаве до сих пор нет арифметики указателей. Идите на хуй.
>>38335
> Традиционное упоминание о C# и Java с указанием величины временного интервала между появлением метода ToString() в них и в C++11.
мимокрокодил
>>38321
> В 11ом внезапно запилили отдельную функцию std::to_string, принимающую любые численные типы, раньше приходилось либо извращаться с std::stringstream, либо пилить свой велосипед.
Я тебе говорю, чтоб ты не сравнивал инструменты для разных задач, ну какая, блядь, часть рынка.
>> No.38405 Reply
>>38381
> ко-ко-ко инструменты для разных задач ко-ко-ко-ко
Каких ещё разных задач? Системное программирование - это очень малая часть задач в современном программировании, а за его пределами кресты выступают в одной категории с другими языками. Если не считать ущербности и безнадёжного отставания говнокрестов от других языков, конечно.
>> No.38406 Reply
>>38405
> подражание звукам птиц
Будь добр, унеси это отсюда и положи, где взял.
>> No.38407 Reply
>>38406
То есть про "инструменты для разных задач" аргументов нет? Окей, так и запишем.
>> No.38408 Reply
>>38405
> а за его пределами кресты выступают
А может и не выступают, а какой-то дятел их пихает туда?
>> No.38409 Reply
>>38407
С чего ты взял, что мне нравятся кресты, или что я собираюсь их защищать? Это АИБ, привыкай. Мне не нравится твоя манера общения, и это всё, что я хотел сказать.
>> No.38410 Reply
>>38408
Да, тут есть несколько вариантов:
1. PM пропихивает кресты в новый проект, потому что:
а) "В управляемых языках VM и поэтому наш супер-пупер календарь будет тормозить";
б) "Я слышал, что кресты - это круто, многие программисты их используют" (см. ниже).
2. Программист сам выбирает плюсы, потому что:
а) "Меня в универе научили только плюсам";
б) "Только плюсы имеют право на жизнь! Всё остальное - тормозное ненужное говно!!!!!11";
в) "Кресты - это кроссплатформенность! Если я нагорожу в своём проекте ещё полмегабайта #ifdef'ов, то мой хелловорлд можно будет запустить даже на Raspberry Pi!".
г) "Многие новые проекты пишутся на крестах; наверное, их PMы не зря сделали такой выбор" (см. выше).
>> No.38415 Reply
>>38410
Ну да а еще для плюсов есть тонны мануалов библиотек и инструментов. И чтобы разобраться типовом коде не нужно быть мастером факториалов 80 уровня.
>> No.38417 Reply
>>38415
> И чтобы разобраться типовом коде не нужно быть мастером факториалов 80 уровня.
Ха-ха. Разберись в boost::spirit. Если не стошнит, то потом все зигоморфизмы тебе покажутся простыми, понятными и очень приятными.
>> No.38432 Reply
>>38415
Товарищь предлагает джиты.
>> No.38435 Reply
Вот смотрите, у меня есть класс, который можно нарисовать на экране. Я хочу это сделать, написав в модуле гуя функцию типа draw(KLACC sobaka) и что мне теперь гетер для каждого поля пилить? Ну, это же безумие, такого быть не может.
>> No.38436 Reply
>>38435
Пусть он выдаст векторную картинку в заданном масштабе, делов-то.
>> No.38438 Reply
>>38436
Нет, параметры класса меняются, их много и при этом, мне их нужно использовать вне и только для чтения. В C# оно реализовано, а в C++ нет, и ни одного разумного метода это обойти я не знаю. Когда там 2-3 поля нужно так обслуживать, канают гетеры, но для всех полей гетеры писать - это перебор.
>> No.38440 Reply
File: WordPro-Preview.png
Png, 11.00 KB, 480×448 - Click the image to expand
edit Find source with google Find source with iqdb
WordPro-Preview.png
>>38438
Ну вот так картинку и выдай.
>> No.38441 Reply
>>38435
Почему ты не пишешь draw в самом классе или в его наследнике?
>> No.38442 Reply
>>38441
Потому что не хочу мешать интерфейс и всё остальное. Вроде как draw(KLACC sobaka) довольно естественная функция. Если бы все было public сохранность данных можно было бы обеспечить таким образом: draw(const KLACC& sobaka). Но у меня private и мне так надо. Чому язык мне мешает делать как мне надо?
>> No.38444 Reply
>>38442
> Вроде как draw(KLACC sobaka) довольно естественная функция.
Нет, иметь такой метод в классе гораздо естественнее для ООП.
> Потому что не хочу мешать интерфейс и всё остальное.
Хочешь разделить интерфейс и реализацию? Эм, ну выдели draw в интерфейс и унаследуй его, определив реализацию. Или унаследуйся от KLACC и определи draw в наследнике. Что конкретно ты хочешь разделить? Ты отчаянно пытаешься превратить ООП в процедурщину.
>> No.38445 Reply
>>38442
Я самое главное не спросил. KLACC вообще за что отвечает?
>> No.38446 Reply
>>38444
> Эм, ну выдели draw в интерфейс и унаследуй его, определив реализацию.
И что же тогда, у него будет сам объект API рисования вызывать? Суть ООП как раз в том, что объекты - это контейнеры для данных, а их отображением занимается кто-то другой.
>> No.38447 Reply
>>38445
KLASS - это животное, оно отвечает за свою жизнедеятельность.
Идея с наследованием мне нравится. Но ещё это животное получает сведения об окружающей среде, в частности, некоторые сведения о других животных и о деревьях (для которых тоже есть класс), их там относительно немного, так что все на геттерах. Это достаточно ООП-сайд? Просто ему нужны тупо сведения для анализа, больше ничего.
>> No.38448 Reply
>>38446
Да, вот это тоже странно.

И ещё вот про наследование, у меня что, будут 2 копии объекта лежать, так чтобы одну из них ещё надо было все время обновлять? Я не понимаю.
>> No.38449 Reply
>>38435
Дружественные классы же. В крестах настолько уродливое ООП, что это решение даже не выглядит как костыль, и красивее него ты вряд ли что-то найдёшь.
>> No.38450 Reply
>>38446
> Суть ООП как раз в том, что объекты - это контейнеры для данных, а их отображением занимается кто-то другой.
Откуда ты это вычитал? Тут что-то не так. Как кто-то другой их будет отображать, если у него доступа нет? И куда тут по-твоему прикладывается принцип инкапсуляции вообще? Объекты - это абстракции, обладающие интерфейсом, а вовсе не контейнеры с данными.
>>38447
> Но ещё это животное получает сведения об окружающей среде, в частности, некоторые сведения о других животных и о деревьях (для которых тоже есть класс), их там относительно немного, так что все на геттерах.
Всё у тебя слишком просто. Ничего ж не понятно, откуда кто чего получает.
> Просто ему
Кому?

Заведи интерфейс IDrawable и отнаследуй от него животное и сделай в животном класс draw.
>> No.38451 Reply
>>38449
Это отлично, но я не хочу давать интерфейсу полного доступа к полям животного.
>> No.38452 Reply
>>38450
Да ты пойми, что я хочу, чтобы моя программа легко отцеплялась от одного интерфейса и подцеплялась к другому, интерфейс должен стоять совершенно особняком и код логики не должен от него никак зависеть.

Что касается того, кто что и откуда, там иерархия есть и все относительно прозрачно, мы не об этом.
>> No.38453 Reply
>>38451
Интерфейс выглядит так:
class IDrawable
{
virtual void draw()=0;
}
Это он весь, в четыре строки. Дальше так:
class Animal : public IDrawable
{
/* много штуковин */
virtual void draw();
}

B cpp уже так:
void Animal::draw()
{
/* код */
}
>> No.38454 Reply
>>38452
А, ясно. Ну тогда в наследнике где-то draw делать, наверное. Не знаю как лучше.
>> No.38455 Reply
>>38451
Но зачем давать полный доступ к свойствам животного? Выдели поля/геттеры свойств животного в отдельный интерфейс, тогда дружественные классы станут даже не нужны:
class ICreature
{
protected:
    double m_age;
    int m_hp;

public:
    virtual string getSomeStringID() = 0;

    // ...
    // lots of other class members and property getters here
    // ...
};

class Animal : public ICreature
{
    // ...
};

class IAnimalView
{
public:
    void draw(ICreature creature)
    {
        // ...
    }
};
Или раскрывай задачу подробнее, если этот способ не подходит.
>> No.38456 Reply
>>38452
> чтобы моя программа легко отцеплялась от одного интерфейса и подцеплялась к другому
Это какое-то... неожиданное понимание понятия "интерфейс". Обычно под интерфейсом как раз понимают наоборот нечто постоянное, скрывающее детали реализации. Т.е. это реализация может меняться, а интерфейс это должен скрывать.
>> No.38458 Reply
>>38455
И сразу пара фиксов:
   - Поля интерфейса ICreature публичны (к ним же тоже нужен доступ?).
   - Класс AnimalView называется именно так (без I). Можно даже заставить метод draw() принимать сразу Animal, а не ICreature, но это решение зависит от внутренней структуры твоей программы (и, кроме того, тебе этот подход чем-то не нравится).
>> No.38459 Reply
>>38456
Имеется ввиду гуй.

В общем, дабы не плодить лишних сущностей, я выбираю дружественный класс гуя с такой вот функцией отрисовки:
draw(const KLACC& sobaka)
Понимаю, что коряво, но в данном случае наиболее лаконично и просто.
>> No.38461 Reply
>>38459
И эти люди потом говорят, что GoF - сосунки, а паттерны ОО-проектирования не нужны. Так держать!
>> No.38462 Reply
>>38461
Неправда, я хороший. Их книжки не читал, это дерьмо доделаю без неё и похоже приступлю. Потом может буду править.
>> No.38463 Reply
>>38461
Какой из паттернов тут подходит?
>> No.38464 Reply
>>38463
Слишком мало исходных данных, чтобы сказать.
>> No.38467 Reply
>>38464
Думаю за неделю-две я все допишу и вброшу, скажете, что желательно переделать.
>> No.38468 Reply
Я тут игрался с няшной си, и внезапно у меня заболел компилятор:
void wtf() {
	struct {
		int a,b,c;
	} c = {0,1,2};
	c.c = 1235;
	assert(0x8+0x8 == 0x10);

	/* isn't true */
	if (*(int*)(&c+(sizeof(int))*2) == c.c) printf("\t\"struct is like an array - it just can have differently sized vars\"\n");

	/* let's see why */
	printf("1. %p 2. %p 3. %p 4. %p 5. %p\n", &c, &c.c, (&c+(sizeof(int)*2)), sizeof(int)*2, (&c)+0x8);

}
Вывод получается такой:
1. 0022FE94 2. 0022FE9C 3. 0022FEF4 4. 00000008 5. 0022FEF4
Идей нет, хотя очевидно что я делаю что-то не так.
>> No.38474 Reply
File: 4605-311017-baba_vanga.jpg
Jpg, 95.22 KB, 958×1000 - Click the image to expand
edit Find source with google Find source with iqdb
4605-311017-baba_vanga.jpg
>>38468
enwiki://Data_structure_alignment
> "struct is like an array - it just can have differently sized vars"
Nope.
>> No.38479 Reply
>>38468
Ты хочешь, чтоб вывелась строка?
Ну тогда как минимум
(char*)&c+(sizeof(int))*2)
иначе в байтах сдвиг будет еще умножен на sizeof(c)
А дальше тот самый alignment, непереносимость, ад и погибель.
>> No.38492 Reply
>>38468
> няшной си
> (*(int*)(&c+(sizeof(int))*2) == c.c)
Тебя обманули, такие однострочники называются как-то по-другому.
>> No.38634 Reply
Есть классы A, B, C, унаследованные от Base, у Base есть 1 метод. Управляющий класс должен содержать все объекты этих классов и управляющий метод, который будет последовательно вызывать у каждого объекта Base-метод. Притом мне нужно иметь 3 функции типа getA(), getB(), get_C(), которые будут возвращать ссылки на контейнеры с объектами каждого класса.
Как можно сделать: vector< vector<Base*> >, который содержит 3 вектора с объектами A, B, C в виде указателей на Base и приводить эти указатели туда-сюда. Однако это ничерта не безопасно, по крайней мере я не знаю способа как это сделать безопасно..
Второй выход: сделать три отдельных вектора под объекты каждого типа. Однако тогда придется опрашивать их по отдельности, что опять же неправильно.
>> No.38646 Reply
>>38634
template<class TPoint>
static std::shared_ptr<TPoint> myCast(Base current)
{
(void)::boost::polymorphic_downcast<TPointee*>(current.get());
return std::static_pointer_cast<TPointee>(current);
}

не это ли ты ищешь?
>> No.38691 Reply
>>38646
Это небезопасно, ибо если у базового наследников много, то преобразуется базовый во все что захочешь из этих наследников, со всеми вытекающими. Или я что-то пропустил и там все настолько умно сделано, что оно само разберется и не позволит мне ошибиться?
>> No.38705 Reply
>>37554
все в полноэкранном, при использовании блитера все норм, а если через флип то мерцает...
>> No.38724 Reply
>>38452 >>38459 >>38456 >>38467
Вот так это делается.
http://cube54.tk/oopro/1
>> No.38767 Reply
>>38691
У тебя будут проблемы если ты попытаешься откастить наследника к базовому и затем получившиеся откастить к другому наследнику.
И да если такое потребовалось то что-то не так с архитектурой. Но если уж ты уверен что оно тебе нужно. boost::polymorphicdowncast всегда следует использовать вместо стасиккаста. Он не сделает запрет каста, но покрайней мере в рантайме в дебаге не даст скастить класс к неправильному потомку.
>> No.38772 Reply
>>38767
Есть же динамик каст, чем он не устраивает?
>> No.38777 Reply
>>38772
забыл про него написать,сори
>> No.38799 Reply
File: EJq_WK65fvY.jpg
Jpg, 35.54 KB, 450×596 - Click the image to expand
edit Find source with google Find source with iqdb
EJq_WK65fvY.jpg
>>31221
Какой контейнер не изменяет адреса элементов при ресайзе?
>> No.38800 Reply
>>38799
Любой безразмерный.
>> No.38801 Reply
>>38800
Дай, пожалуйста, термин на английском.
>> No.38803 Reply
>>38799
std::list возможно, только у него нет ресайза как такового и по индексу обращаться нельзя, только итерации.
>> No.38804 Reply
>>38801
Memory stable.
>> No.38872 Reply
File: 06796f1e8e45fac784f9130cf4401296.jpg
Jpg, 423.93 KB, 637×900 - Click the image to expand
edit Find source with google Find source with iqdb
06796f1e8e45fac784f9130cf4401296.jpg
Что пишут на С++ рядовые программисты(не считая видеокодеков и подобных библиотек и движков к видеоиграм)? Вопрос к программистам на С тоже релейтед, если они здесь есть.
>> No.38873 Reply
>>38872
> Что пишут на С++ рядовые программисты(не считая видеокодеков и подобных библиотек и движков к видеоиграм)? Вопрос к программистам на С тоже релейтед, если они здесь есть.
Машин лёрнинг, распознавание речи. И прочие интенсивно пользующие железо штучки
>> No.38874 Reply
>>38872
Всё, всё что есть, с начала до конца. Программы, игры, ещё программы. Исключений меньше процента.
>> No.38875 Reply
File: 22bf4f3a4885f9eaf0f9faab47aee0a3.jpg
Jpg, 277.46 KB, 600×1100 - Click the image to expand
edit Find source with google Find source with iqdb
22bf4f3a4885f9eaf0f9faab47aee0a3.jpg
>>38873
Неужели все заняты распознаванием речи и подобным? Про железо понятно - в основном игры. И всё? Интересно чем занимается большинство людей которые просто работают программистами. Кроме сайтов(которые точно не на С) и программ для учета "что есть на складе"(которые можно написать на чем угодно) в голову ничего не приходит.
>> No.38876 Reply
>>38875
> в голову ничего не приходит.
Это твоя большая проблема - узкий кругозор. Перечитай хотя-бы этот тред. Этот вопрос тут поднимается каждую неделю.

Придётся поверить, раз пока сам не можешь проверить, что на C пишут не просто много, а подавляюще много. Другие языки не хуже, в чём-то даже лучше, но C - стандарт. И за 20+ лет на C написаны миллиарды строк кода - это тоже надо поддерживать.

Какой язык тебя впечатлил?
>> No.38878 Reply
File: modem.png
Png, 20.70 KB, 1280×1024 - Click the image to expand
edit Find source with google Find source with iqdb
modem.png
>>38875
Пикрелейтед для работы с модемом на самолётах, да
Алсо погугли suzuki burgman там крутится сишный код...
>> No.38879 Reply
>>38876
Внимание: в треде упорок, который путает C и C++. Будьте предельно внимательны и осторожны!
>> No.38880 Reply
Мне почему-то казалось, что разработка нового прикладного софта переползла на сишарп. На спп остались только старые большие проекты, и такие, где нужно побольше скорости, ибо дотнет сливает пока в этом плане. Не?
мимо
>> No.38881 Reply
>>38880
> сишарп
Умрёт же скоро.
>> No.38882 Reply
>>38881
А щто с ним? Вроде же в самом соку сейчас.
>> No.38883 Reply
>>38882
Привязан к мастдаю.
>> No.38884 Reply
>>38883
Mono, Xamarin, Unity3d.
>> No.38885 Reply
>>38884
Ещё Monogame.
>> No.38889 Reply
>>38881
Насколько скоро? Как-то это не очень заметно. Или вы таки считаете, что стимбокс перевернёт мир и все перейдут на линукс?
>> No.38892 Reply
>>38879
> Внимание: в треде упорок, который путает C и C++. Будьте предельно внимательны и осторожны!
Нда... Чувак реально думает, что это - разные языки, а не надстройка одного над базой другого. И этому сейчас учат? Жуть.
>> No.38893 Reply
>>38892
C11 и C++11 — это разные языки. Существует код на C11, который не является кодом на C++11.
>> No.38894 Reply
>>38893
> C11 и C++11 — это разные языки. Существует код на C11, который не является кодом на C++11.
Ты ещё компилятор-специфик вещи вспомни. Едина суть, едина идеология, удобные решения и подходы совпадают.

Впрочем, это неважно. Хотите доказывать что C и C++ - это большие разницы - удачи.
>> No.38895 Reply
>>38894
Разные подходы совершенно, разные применения.

Впрочем, это неважно. Хотите доказывать, что С и С++ - это одно и то же - удачи.
>> No.38896 Reply
>>38895
> Впрочем, это неважно. Хотите доказывать, что С и С++ - это одно и то же - удачи.
Не хочу. I win
>> No.38897 Reply
>>38896
Тем не менее, ты именно этим и занимаешься.
>> No.38898 Reply
>>38897
> Тем не менее, ты именно этим и занимаешься.
собстна, я, как и все, здесь просто убиваю время и развлекаюсь. Чего и тебе искренне желаю. Не палитесь своим юношеским максимализмом и всё будет хорошо.

Как я выучил C много-много лет назад, так больше ничего и не знаю. И я счастлив.
>> No.38899 Reply
>>38898
Ох вау, уже какие-то обвинения и домысливания пошли. Занятный у вас способ убивать время.
>> No.38900 Reply
>>38899
> Занятный у вас способ убивать время.
Таки стесняюсь спросить, вы здесь - работаете?
>> No.38901 Reply
>>38900
Это тут причём? Пост-то прочитайте.
>> No.38983 Reply
>>38894
> Едина суть, едина идеология, удобные решения и подходы совпадают.
Какая там единая идеология? С не подразумевает обязательного применения ООП. Торвальдс, вон, ругался, что ему для его задач неудобно применять С++ и что ООП ему сильно мешает в основном.
>> No.39023 Reply
>>38983
> > Едина суть, едина идеология, удобные решения и подходы совпадают.
> Какая там единая идеология? С не подразумевает обязательного применения ООП. Торвальдс, вон, ругался, что ему для его задач неудобно применять С++ и что ООП ему сильно мешает в основном.
А разве С++ требует применять ООП? Он даёт такую возможность, а вот использовать её или нет - на усмотрение кодера. Вон, ввели очередное функциональное богомерзие, даже хуже шаблонов, - хуже от этого стал C++? Нет. Допускаю, что даже практически значимые применения нововведениям будут со временем найдены. А мне этого не надо.
>> No.39024 Reply
>>39023
> хуже от этого стал C++?
> Нет
Действительно, куда уж дальше-то.
>> No.39033 Reply
>>39013
> А разве С++ требует применять ООП? Он даёт такую возможность, а вот использовать её или нет - на усмотрение кодера.
Нет - это будет просто Си.
> функциональное богомерзие, даже хуже шаблонов
Да ты, да!.. Ты!
>> No.39038 Reply
>>39033
Все правильно говорит этот достойный дон. Функциональный код уже на тысяче строчек превращается в не читаемую гадость.
>> No.39039 Reply
>>39038
Я не предлагаю полностью функциональный код, но удобные колбэки с лямбдами нужны и при том часто. Они часто позволяют делать код очень абстрактным и гибким. Они в крестах и раньше были, только писались очень неудобно.
>> No.39082 Reply
>>39039
std::function последний стандарт и все хорошо.
И тут скорее код делает гибким то что мы рассматриваем функцию как обьект с перегруженным оператором ().
Удобные колбеки нужны только потому что пока межпоточное взаимодействие дико неудобно и требует учитывать кучу вещей. Функциональная парадигма предлагает нам для решения данной проблемы все сделать константным и переложить распаралеливание на компилятор или виртуальную машину что имхо не всегда применимо и не всегда даст ожидаемый эффект ускорения.
>> No.39086 Reply
>>39082
> Функциональная парадигма предлагает нам для решения данной проблемы все сделать константным и переложить распаралеливание на компилятор или виртуальную машину
Нет. Иммутабельность - это возможность безбоязненно использовать переменную в двух одновременно тредах. А делать ли треды, как синхронизировать мутабельные данные - это ФП уже не ограничивает.
>> No.39103 Reply
>>39086
И мы приходим к тем же проблемам что и в не функциональных языках. Колбеки и в решетках к примеру есть. Да и в сущности колбек это всего лишь функция которая будет вызвана после выполнения операции. Его даже в няшной сделать можно. Передал ссылку на функцию и затем ее дернул и нет проблем.
>> No.39104 Reply
>>39103
> И мы приходим к тем же проблемам что и в не функциональных языках.
Не ко всем. Если обычные переменные нельзя изменять - то уходит достаточно большой пласт потенциальных ошибок, которые сложно отловить.
Изменять можно только вещи внутри определенных структур(причем саму эту структуру изменять нельзя), и методы, которые делают эти вызовы, могут отслеживать треды. Если мутабельная структура создана для оптимизаций быстродействия в одном потоке - она просто не даст изменять себя вне этого потока. Алсо, существуют контейнеры, которые изменяются только внутри транзакций.

Без мутабельности можно писать логику чистыми функциями, которые гарантированно не делают ничего плохого. Естественно, нам нужно будет когда-нибудь присоеденить их к IO, тредам и т.д., и написать кучку не-чистых функций. Но у нас будет прочный фундамент.
> Колбеки и в решетках к примеру есть.
Я помню эти ваши няшные коллбеки, где null* едет через null*. Спасибо, но лучше динамической типизации вьебу.
Да и при чем тут коллбеки? Не они проблема, а общие межтредовые данные.
>> No.39107 Reply
>>39103
Когда я говорю "удобные", значит я описываю функции там же, где передаю их. И передаю переменные в описание из контекста, в котором идёт описание. И чтоб полаконичнее!
>> No.39116 Reply
>>39104
А сам ты этого не можешь делать? Обязательно надо, чтобы язык ограничивал? Силы воли недостаёт или что?
к: поцеловал залогом. К чему бы это.
>> No.39131 Reply
>>39116
> А сам ты этого не можешь делать?
Ну напиши мне что-нибудь на Си иммутабельно. Для этого нужны структуры, которые можно изменять иммутабельно (листы, персистент вектор/меп/сет). Для этого нужны хай-ордер функции.
> Обязательно надо, чтобы язык ограничивал? Силы воли недостаёт или что?
Смищной ты. Вот написал ты либу, возвращаешь массив, а какой-то вася берет и изменяет значения прямо в том массиве. А твоя либа опирается на этот массив для дальнейших просчетов. Для того, чтобы так не было, придумали костыль с названием "инкапсуляция".
А в многопоточном мире все куда сложнее. Вот есть переменная. Откуда я знаю, можно ли ее безопасно смотреть из другого треда? А вдруг ее кто-то прямо в это время будет менять в другом треде?
Иммутабельность переменных уничтожает эти проблемы в корне. А еще она способствует ФП-стилю вместо императивщины.
>> No.39132 Reply
>>39131
> Иммутабельность переменных и структур
fix
>> No.39134 Reply
>>39131
> которые можно изменять иммутабельно
> изменять иммутабельно
Поехавший.
> персистент
Персистентность - это нечто совершенно другое, милый мой. Посмотри в словаре.
> Иммутабельность переменных уничтожает эти проблемы в корне.
Ага, от неё другие проблемы. Первое, что делает кацкелист - переизобретает кривую и медленную императивщину
>> No.39136 Reply
>>39134
> > изменять иммутабельно
> Поехавший.
> Персистентность - это нечто совершенно другое, милый мой. Посмотри в словаре.
http://ideone.com/zNSfOr изменяю иммутабельно, используя персистентный вектор. Проблемс, оффисер?
> Первое, что делает кацкелист
Будто мне не похуй. Они любят делать все вещи сложнее просто для того, чтобы они были сложнее.
>> No.39137 Reply
>>39131
> Ну напиши мне что-нибудь на Си иммутабельно
А что мешает? Можно даже const'ом накостылять, если удержаться не можешь.
> Для этого нужны хай-ордер функции.
Напиши себе библиотечку хайордерных функций, делов-то.
> а какой-то вася берет и изменяет значения прямо в том массиве
А тут всё просто. В документации написано, что менять нельзя? Нет - берёшь клавиатуру, стучишь ей себе по рукам и дописываешь документацию. Да - ну так кто ему виноват тогда, пусть страдает, раз дурак.
> Откуда я знаю, можно ли ее безопасно смотреть из другого треда?
Тебе же силы воли хватает, чтобы её не изменять? Если да, то безопасно.
> Иммутабельность переменных уничтожает эти проблемы в корне
А как ты синхронизацию будешь делать с иммутабельными переменными?
>> No.39142 Reply
>>39137
Иммутабельными переменными, хранящими мутабельную структуру, специально предназначенную для многопоточности.
http://clojuredocs.org/clojure_core/clojure.core/alter
>> No.39143 Reply
>>39131
Это кто еще поехавший, как только ты вернул указатель на свой массив Васе ты нарушил инкапсуляцию.
Либо копируй либо возвращай ссылку на константный объект.

>>39136
Слишком много модных слов серьезно. Не изменяемая сущность на то и не изменяемая чтобы ее не менять смекаешь? А так че молодец, только вот ты сам себе противоречишь. Что будет если из разных тредов будут смотреть пока ты свою структуру дергаешь? Понятно что кложурка разрулит на уровне vm и вроде все хорошо. Только то что синхронизацию за тебя воткнули не говорит что ее нет.
Именно из за подобных проблем я не видел функциональный язык без сборки мусора и vm. Просто потому что в противном случае все разваливается.
>> No.39144 Reply
>>39143
> Не изменяемая сущность на то и не изменяемая чтобы ее не менять смекаешь?
Она и не меняется. На основе ее создается новая сущность с измененными элементами. Часть элементов использует память старой сущности, но т.к. старая сущность иммутабельна - ничего плохого не случится.
> Что будет если из разных тредов будут смотреть пока ты свою структуру дергаешь?
Все будет хорошо, потому что структура не меняется.
> Понятно что кложурка разрулит на уровне vm и вроде все хорошо.
При чем тут уровень vm к иммутабельным персистентным структурам?
> Только то что синхронизацию за тебя воткнули не говорит что ее нет.
Она есть только там, где есть мутация. В иммутабельных персистентных структурах мутаций нет. В специальных структурах, которые расчинаны под мутацию в транзакциях - есть.
> Именно из за подобных проблем я не видел функциональный язык без сборки мусора и vm.
Одно с другим не связано. Сборка мусора - управление памятью. Можно сделать как в си, везде управлять руками, но зачем? Писать программы становится куда сложнее. Можно сделать как в objC с референс каунингом, но там свой недостаток - циклический референс. Так получается, что gc - это самый удобный вариант управления памятью, хоть и самый медленный.
VM - что ты скажешь про коммон лисп, который функции собирал в машкод? Наличие VM просто удобнее, как и в случае с GC.
> нарушил инкапсуляцию
Инкапсуляция - костыль для мутабельности.
>> No.39145 Reply
>>39136
Как меня бесят кацкелисты и лисперы.
> In computer science, persistence refers to the characteristic of state that outlives the process that created it. Without this capability, state would only exist in RAM, and would be lost when this RAM loses power, such as a computer shutdown.
Изменять иммутабельную структуру ты не сможешь, дурилка. Ты можешь только создать копию, что твой пример, собственно, и демонстрирует.
>> No.39146 Reply
>>39145
Зачем копия?
>> No.39147 Reply
File: по_другому_не_как.jpg
Jpg, 56.09 KB, 750×600 - Click the image to expand
edit Find source with google Find source with iqdb
по_другому_не_как.jpg
>>39146
Подругому некак.
>> No.39148 Reply
File: 1326778761936.jpg
Jpg, 138.87 KB, 620×400 - Click the image to expand
edit Find source with google Find source with iqdb
1326778761936.jpg
>>39145
> > In computer science, persistence refers to the characteristic of state that outlives the process that created it. Without this capability, state would only exist in RAM, and would be lost when this RAM loses power, such as a computer shutdown.
Какой же ты глупый, если ты путаешь персистентность с персистентными структурами.
> In computing, a persistent data structure is a data structure that always preserves the previous version of itself when it is modified. Such data structures are effectively immutable, as their operations do not (visibly) update the structure in-place, but instead always yield a new updated structure. (A persistent data structure is not a data structure committed to persistent storage, such as a disk; this is a different and unrelated sense of the word "persistent.")
enwiki://Persistent_data_structure

В моем примере структура не копируется. В ней заменяется один элемент, весь вектор при этом использует предыдущие значения.

>>39147
> Подругому некак, если меня бесят кацкелисты и лисперы.
fixed
>> No.39149 Reply
> В ней заменяется один элемент
Да ничего в ней не заменяется, поехавший. Посмотри внимательно на свой собственный код. Ты же сам её выводишь a в неизменном "после" своего assign. Структура копируется в b. Ах да, на при этом некоторые элементы шарятся, но это просто оптимизация компилятора, не влияющая на семантику.
> enwiki://Persistent_data_structure
Ручаюсь, что статью писал драный лиспер.
>> No.39156 Reply
File: macro-what-the-fuck.png
Png, 211.95 KB, 294×289 - Click the image to expand
edit Find source with google Find source with iqdb
macro-what-the-fuck.png
>>39149
> но это просто оптимизация компилятора, не влияющая на семантику.
Господи, какой же ты тупой. Персистентные структуры - весьма непростая тема для олимпиадного алгоритмического программирования (в котором только на C++ обычно и пишут). Это никакая не "оптимизация компилятора". Это отдельный тип структур, в котором скорость доступа и записи медленнее, количество используемой памяти больше, но можно хранить много состояний, которые разделяют общую память. a и b в моем примере - состояния одной и той же структуры. Структура генерирует новое состояние, в котором заменяется один элемент. Но так, как предыдущее состояние не исчезает, структура является персистентной и иммутабельной.
>> No.39158 Reply
>>39156
> олимпиадного
Так говорит, будто это больше ни за чем не нужно.
>> No.39159 Reply
>>39158
Так говорит, будто олимпиадные алгоритмические задачки не находят свое отражение в реальном мире.
>> No.39160 Reply
>>39156
> Структура генерирует новое состояние, в котором заменяется один элемент.
Нет, тупой здесь ты. В последнем посте ты уже просто пересказал то, о чём я говорил изначально. Что, никаких "изменений иммутабельного состояния" уже нет? А теперь сделай ещё один шаг: представь, что части структуры не шарятся, а всё копируется целиком. Изменится ли семантика?
>> No.39161 Reply
>>39160
> просто пересказал то, о чём я говорил изначально.
> > но это просто оптимизация компилятора, не влияющая на семантику.
> представь, что части структуры не шарятся, а всё копируется целиком. Изменится ли семантика?
Окей, assoc с копированием целиком. O(n) памяти и O(n) итераций на изменение одного элемента? Да такой семантики просто не будет, потому что такой подход не эффективен.
>> No.39165 Reply
>>39161
> Да такой семантики просто не будет, потому что такой подход не эффективен.
Ох вау. Всё, дальше можно не продолжать.
>> No.39168 Reply
>>39159
Ведь компиляторы с СУБД, осями, поисковиками и т.п. пишут боги из Асашай, а не такое быдло как мы?
>> No.39169 Reply
>>39168
Это я пишу их.
>> No.39173 Reply
>>39156
Ох щи. Я тебе про это и говорил не думал почему запись и доступ длиннее? потому что тут внезапно никакой изменяемости и локи локи тысячи их.
У тебя есть структура в которой могут ВНИМАНИЕ добавлятся состояния. И ты все еще утверждаешь что она неизменна? То что подобные вещи сложны сами по себе не отменяет факта что оно изменяемые.

Послушал бы вот этого >>39149 человека.
> > Сборка мусора - управление памятью. Можно сделать как в си, везде управлять руками, но зачем?
Затем что выдав возможность удалять произвольный обьект и выделять под него память и соответственно ходить по указателям ты теряешь гарантии неизменяемости и неожиданно вся стройная концепция с иммутабельностью летит в тар тарары. И сразу отпадает возможность паралелить код.
> > что ты скажешь про коммон лисп, который функции собирал в машкод?
Реализацию этого дела посмотри, лисп тащит в бинарь лиспмашину внезапно.

>>39169
а я пишу веб сервера лол )).
>> No.39175 Reply
>>39173
Ничего не понимаю, разве рекурсия не почти перечёркивает возможность параллелить код?
>> No.39185 Reply
>>39175
> 2014
> думает, что ФП - это рекурсия
>>39173
> локи локи тысячи их.
Какие локи, наркоман? Ни один элемент не подвергается мутации.
http://hypirion.com/musings/understanding-persistent-vector-pt-1
> Затем что выдав возможность удалять произвольный обьект ты теряешь гарантии неизменяемости
Инкапсулируй, считай референсы. В чем проблема-то?
> лисп тащит в бинарь лиспмашину внезапно.
Я не про создание бинарника. Даже обьявляя функции в REPL коммон лисп создает функции в машинных кодах, которые в нужных местах ссылаются в лисп-окружение. Это не совсем VM.
? (defun foo (x y) (if (= x y) (sin x) (* y (cos x))))
FOO
? (disassemble 'foo)
L0
  [0]     (leaq (@ (:^ L0) (% rip)) (% fn))
  [7]     (cmpl ($ 16) (% nargs))
  [10]    (jne L209)
  [16]    (pushq (% rbp))
  [17]    (movq (% rsp) (% rbp))
...
>> No.39186 Reply
>>39185
фп это функции. как в математике
>> No.39188 Reply
>>39186
> как в математике
Пожалуйста, не нужно этого. Функциональное программирование не более математично, чем программирование на брейнфаке.
>> No.39189 Reply
File: header.txt
Txt, 0.00 KB, 0 lines
view edit
header.txt
File: calculation.txt
Txt, 0.00 KB, 0 lines
view edit
calculation.txt
File: visualisation.txt
Txt, 0.00 KB, 0 lines
view edit
visualisation.txt

Доброго времени суток, li/s/p! Понадобилось прикрутить рисование графика к одному численному методу, поэтому пытаюсь разобраться с графикой на C++, использую для этого библиотеку freeglut. В качестве тренировочной задачи для освоения пока что пытаюсь написать следующее - в одном файлике квадратная двумерная область в цикле проходится по сетке с определенным шагом, результат в каждом узле записывается в массив, в другом файлике я хочу вызывать также пошагово в цикле элементы массива и строить график по точкам. Но, похоже, я ещё и файлы подключать не умею. Файлы следующие:
header - заголовочный файл, где объявляются переменные
calculation - вычисления и запись в массив
visualisation - попытка создать графику средствами freeglut При сборке проекта выдается, что используемые в visualisation файлы уже объявлены в calculation. (но они же из общего .h файла?..) Файлы с кодом прилагаю. Буду очень благодарен за объяснение, что делать, чтобы довести до человеческой реализации или рассказ, как сделать график по точкам из массива другим, более легким, способом.
>> No.39192 Reply
>>39188
ты скучный
>> No.39193 Reply
>>39189
Суть в том, что ты должен определения давать в cpp файле, а объявлять в h в твоем случае нужно использовать ключевое слово extern. Объясняю, когда ты используешь h файл с объявлениями переменных в нескольких cpp файлах, компилятор подставляет эти объявления переменных в каждый файл cpp, отсюда исходит ошибка переопределения.
Даю пример:
В h файле должен написать extern int a;
В cpp файле, любом где видна эта переменная должен ее определить int a = 0;
В итоге получаешь глобальную переменную a.

Могу в чем-то ошибаться на сонную голову. Вот тебе ссылка.
http://msdn.microsoft.com/ru-ru/library/0e5kx78b.aspx
>> No.39194 Reply
>>39189
И да, еще кое что, отказывайся от глобальных переменных по возможности, используй глобальные переменные только в одной единице трансляции. Это не сложно. Вместо того чтобы считать глобальные переменные в функции calculation(), ты можешь передавать их туда как аргументы, но тут для тебя думаю будет некоторая сложность, если ты только начал, то подучи указатели\ссылки, тогда сможешь передавать хоть что через аргументы функции и тогда сильная зависимость в глобальных переменных отпадет сама собой, в основном у тебя будет работа с локальными переменными, а если все таки нужно будет передавать что-то из одной единицы в другую, делай синглтоны списки, но и это не единственный вариант. И не стесняйся использовать STL.
>> No.39195 Reply
Аноны, как бы поудобнее реализовать перевод числа из десятичной системы счисления в любую другую с основанием меньше 10? Нужно реализовать с рекурсией и без. Теорию понимаю, а вот как бы подхватить остатки от деления и выводить их на экран?
>> No.39196 Reply
>>31221
Посоветуйте как изучать С++ с нуля. Чтобы как можно меньше болтовни (в учебниках) об абстрактных вещах.
Не бейте.
>> No.39197 Reply
>>39196
Но ведь любой учебник по крестам. Много об абстрактных вещах говорят в книгах про всякие принципы ООП, паттерны и прочий супер-пупер код.
Хотя я помню у меня были какие-то непонятки с базовыми вещами, которые внезапно были кратко и доступно объяснены в пафосной книге про умные указатели. Из чего я делаю вывод, что годных учебников нет и надо читать много разных, плюс отдельные статьи в интернетах по конкретным фичам.
>> No.39198 Reply
>>39193
>>39194
Поправил, теперь компилируется без ошибок. Спасибо тебе!
>> No.39199 Reply
>>39195
может массив. с рекурсией просто вывести можно
>> No.39201 Reply
>>39175
Конечно нет. Напишу пример с синтаксисом питона(мне он просто нравится реально питон так не делает)
def f(i):
   if (i<100):return
   for j in range(100):
f(i+1)
f(0)

for можно паралелить как вздумается никаких побочных эффектов это не вызовет. Все будет нормально.
>> No.39202 Reply
>>39185
> > Какие локи, наркоман? Ни один элемент не подвергается мутации.
загляни в реализацию, сириосли, объект содержащий неизменяемые обьекты сам изменяемый(иначе ты не смог бы добавлять в него элементы), смекаешь?
> > Даже обьявляя функции в REPL коммон лисп создает функции в машинных кодах, которые в нужных местах ссылаются в лисп-окружение.
Байткод ты хотел сказать. Так все делают.

Не хейть >>39175 он просто неопытен со временем прошарит.

>>39188
Доброчую.
>> No.39205 Reply
>>39196
> С++
> Чтобы как можно меньше болтовни (в учебниках) об абстрактных вещах.
> Не бейте.
Да тебя сразу убивать надо. С++ - это такой С с абстрактными вещами, поэтому вообще неясно, чего ты хочешь. Без прочного знания ООП ты не проживёшь в ОО языках, так что терпи. Нафига тебе вообще С++?
>> No.39206 Reply
>>39201
Компилятор или программист должен будет раскрутить это в цикл, а это возможно не для любой рекурсии.
>>39202
> Не хейть >>39175 он просто неопытен со временем прошарит.
Все повторяющиеся действия через функции высших порядков? Чисто функциональный язык без циклов в синтаксисе и без рекурсий останется Тьюринг-полным?
>> No.39207 Reply
>>39201
for проход по структуре - тоже самое, что и map.
http://clojuredocs.org/clojure_core/clojure.core/pmap

>>39202
> объект содержащий неизменяемые обьекты сам изменяемый(иначе ты не смог бы добавлять в него элементы)
Окей, я соврал про обьект. Его нету. Есть дерево указателей, которое нависает над элементами. Если мы меняем один элемент - мы меняем одну ветку указателей в дереве. Это иммутабельность уровня односвязных списков, только связей не одна, а 32. Просто людям соврали, назвав это вектором, азаза.
> Байткод ты хотел сказать.
Байткод - это такие комманды, которые интерпритируются VM. Коммон лиспы делают именно машкод, он отличается от архитектуры или от операционки.
> Не хейть
С чего бы мне?

>>39188
Функциональное прогаммирование таки более математично.
"х = х + 2" не похоже на математику, а "f(x,y,z) = <тело функции>" - похоже. f(x,y) == f(x,y) всегда, если функции чистые.
>> No.39209 Reply
>>39207
Просто ты не понимаешь, что такое математика. Математик вполне может корректно определить x=x+2, для этого он может, например, воспользоваться методом построения формальной теории, описанным в книжках Бурбаки, Гильберта и Клини. Собственно, компиляторы так и делают. Я часто видел высказывание, что, мол, 'запись x=x+2 некорректна с точки зрения математики', но это совершенно дилетантское высказывание, неумное вообще.
>> No.39210 Reply
>>39209
> 'запись x=x+2 некорректна с точки зрения математики'
вообще-то, Xt+1 = Xt + 2, где t - момент времени исполнения программы.

и всё получится.

моё мнение про функциональщину - узкоприменимо. А учитывая, что для связи с реальным миром приходится использовать откровенно нефункциональные костыли - теряется весь смысл.

Зачем писать в функциональном стале, если для связи с реальностью всё одно используются страрые добрые процедуры, обёрнутые в обёртку "типа функциональных" монад? нет чистоты стиля.
>> No.39212 Reply
File: 717ce8113c80b463457eeb06fee2fcf0.jpg
Jpg, 53.10 KB, 1000×582 - Click the image to expand
edit Find source with google Find source with iqdb
717ce8113c80b463457eeb06fee2fcf0.jpg
>>39210
> Зачем писать в функциональном стале, если для связи с реальностью всё одно используются страрые добрые процедуры, обёрнутые в обёртку "типа функциональных" монад? нет чистоты стиля.
Я тоже считал, что IO ломает функциональную чистоту. А потом я побывал на презентации FRP-библиотеки bacon.js и переубедился.
>> No.39213 Reply
>>39212
Который раз вижу эту картинку, только сейчас обратил внимание на оси. Проиграл.
>> No.39217 Reply
>>39206
> > Компилятор или программист должен будет раскрутить это в цикл, а это возможно не для любой рекурсии.
Не любой код можно распаралелить, что поделать такова жизнь.
> > Чисто функциональный язык без циклов в синтаксисе и без рекурсий останется Тьюринг-полным?
Думаю нет, На таком языке невозможно будет задать программу которая бесконечно печатает на экран какой нибудь символ. А на тьюринг машине можно. Значит он не тьюринг полный.
>> No.39219 Reply
>>39207
> > Окей, я соврал про обьект. Его нету. Есть дерево указателей, которое нависает над элементами.
Дерево указателей нынче не объект?
> > Коммон лиспы делают именно машкод, он отличается от архитектуры или от операционки.
Ага в жаве тоже есть понятие прогревание кода. ВМ сама может докомпилировать кусочки под конкретную архитектуру. И это все равно не отменит того факта что ручное управление памятью в функциональном мире не практикуют.
>> No.39220 Reply
File: 1389634923637.jpg
Jpg, 37.56 KB, 500×329 - Click the image to expand
edit Find source with google Find source with iqdb
1389634923637.jpg
>>39217
> > Чисто функциональный язык без циклов в синтаксисе и без рекурсий останется Тьюринг-полным?
> Думаю нет, На таком языке невозможно будет задать программу которая бесконечно печатает на экран какой нибудь символ.
Bitch, please http://ideone.com/3L0gpH http://ideone.com/YsgFxc

>>39219
> Дерево указателей нынче не объект?
Дерево указателей нынче не мутабельно. Ты не меняешь свойства дерева, ты создаешь новое. Это как оторвать первый элемент у списка и прикрепить другой. Или ты и в этом коде http://ideone.com/wfYeDw найдешь объект?
> ВМ сама может докомпилировать кусочки под конкретную архитектуру.
Ты не понимаешь ничего из мною сказанного. Хуево быть тобой.
>> No.39223 Reply
>>39220
> > Bitch, please
Пост прочти? азаза в твоей кложурке что рекурсии нет?
> > Чисто функциональный язык без циклов в синтаксисе и без рекурсий
> > cycle
ну я не знаю, не не цикл
> > Или ты и в этом коде http://ideone.com/wfYeDw найдешь объект?
И даже не один сучечка a b c что такое?

Дерево указателей нынче не мутабельно.

воу воу воу парень. Ты мне еще скажи что штука к которой ты дважды обращаешься одинаковым образом
и при этом она отдает тебе разные результаты не меняет свои свойства?

Подумай своей головой, а не цитатой из модной книги.
>> No.39224 Reply
File: BhPrdT8CMAEqQU5.jpg
Jpg, 57.32 KB, 600×450 - Click the image to expand
edit Find source with google Find source with iqdb
BhPrdT8CMAEqQU5.jpg
>>39223
> Ты мне еще скажи что штука к которой ты дважды обращаешься одинаковым образом
Где?
Я обращаюсь к двум разным переменным, которые ссылаются на две разные структуры. Эти структуры ссылаются на уже существующие структуры. Ты этого правда не понимаешь, или ты меня траллишь?
> Пост прочти? азаза в твоей кложурке что рекурсии нет?
Есть, но мы рассматриваем конкретный вопрос. Потому сделаем вид, что в кложурке их нет, а есть только остальные функции.
> ну я не знаю, не не цикл
Не цикл, а циклическая структура. Список, который замкнут сам на себя. Цикла нет, рекурсии нет, бесконечный хеллоуворд есть.
>> No.39227 Reply
File: cat.png
Png, 33.56 KB, 200×209 - Click the image to expand
edit Find source with google Find source with iqdb
cat.png
Новый тред: >>39226
>> No.39233 Reply
>>39223
> Пост прочти? азаза в твоей кложурке что рекурсии нет?
Вообще он понял, что я имел в виду, правильно.


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]