- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
#include <iostream>
#include <string>
#include <boost/foreach.hpp>
int main(int argc, char* argv[]) {
std::string str = "Boost FOREACH!";
char ch;
if (boost::foreach_detail_::auto_any_t _foreach_col11 = boost::foreach_detail_::contain( ( str ) , (true ? 0 : boost::foreach_detail_::or_( boost::foreach_detail_::and_( boost::foreach_detail_::not_(boost::foreach_detail_::is_array_( str )) , (true ? 0 : boost::foreach_detail_::is_rvalue_( (true ? boost::foreach_detail_::make_probe( str ) : ( str )), 0))) , boost::foreach_detail_::and_( boost::foreach_detail_::not_( boost_foreach_is_noncopyable( boost::foreach_detail_::to_ptr( str ) , boost_foreach_argument_dependent_lookup_hack_value) ) , boost_foreach_is_lightweight_proxy( boost::foreach_detail_::to_ptr( str ) , boost_foreach_argument_dependent_lookup_hack_value)) )) ) ) {} else if (boost::foreach_detail_::auto_any_t _foreach_cur11 = boost::foreach_detail_::begin( _foreach_col11 , (true ? 0 : boost::foreach_detail_::encode_type( str , boost::foreach_detail_::is_const_( str ))) , (true ? 0 : boost::foreach_detail_::or_( boost::foreach_detail_::and_( boost::foreach_detail_::not_(boost::foreach_detail_::is_array_( str )) , (true ? 0 : boost::foreach_detail_::is_rvalue_( (true ? boost::foreach_detail_::make_probe( str ) : ( str )), 0))) , boost::foreach_detail_::and_( boost::foreach_detail_::not_( boost_foreach_is_noncopyable( boost::foreach_detail_::to_ptr( str ) , boost_foreach_argument_dependent_lookup_hack_value) ) , boost_foreach_is_lightweight_proxy( boost::foreach_detail_::to_ptr( str ) , boost_foreach_argument_dependent_lookup_hack_value)) )) ) ) {} else if (boost::foreach_detail_::auto_any_t _foreach_end11 = boost::foreach_detail_::end( _foreach_col11 , (true ? 0 : boost::foreach_detail_::encode_type( str , boost::foreach_detail_::is_const_( str ))) , (true ? 0 : boost::foreach_detail_::or_( boost::foreach_detail_::and_( boost::foreach_detail_::not_(boost::foreach_detail_::is_array_( str )) , (true ? 0 : boost::foreach_detail_::is_rvalue_( (true ? boost::foreach_detail_::make_probe( str ) : ( str )), 0))) , boost::foreach_detail_::and_( boost::foreach_detail_::not_( boost_foreach_is_noncopyable( boost::foreach_detail_::to_ptr( str ) , boost_foreach_argument_dependent_lookup_hack_value) ) , boost_foreach_is_lightweight_proxy( boost::foreach_detail_::to_ptr( str ) , boost_foreach_argument_dependent_lookup_hack_value)) )) ) ) {} else for (bool _foreach_continue11 = true; _foreach_continue11 && ! boost::foreach_detail_::done( _foreach_cur11 , _foreach_end11 , (true ? 0 : boost::foreach_detail_::encode_type( str , boost::foreach_detail_::is_const_( str ))) ) ; _foreach_continue11 ? boost::foreach_detail_::next( _foreach_cur11 , (true ? 0 : boost::foreach_detail_::encode_type( str , boost::foreach_detail_::is_const_( str ))) ) : (void)0) if (boost::foreach_detail_::set_false( _foreach_continue11 )) {} else for ( ch = boost::foreach_detail_::deref( _foreach_cur11 , (true ? 0 : boost::foreach_detail_::encode_type( str , boost::foreach_detail_::is_const_( str ))) ) ; ! _foreach_continue11 ; _foreach_continue11 = true) {
std::cout << ch;
}
std::cout << std::endl;
return 0;
}
Конечно, это не совсем говнокод, но... я офигел когда посмотрел во что превращается простой BOOST_FOREACH
жирный — жирный
курсив — курсив
подчеркнутый — подчеркнутый
перечеркнутый — перечеркнутый
мигающий — мигающий
цвет — цвет (подробнее)
размер — размер (подробнее)
(подробнее)
Просто медленно компилируется, и что?
Да и не так уж и медленно компилируется, что-бы плакать...
Нужно будет срочно поправить какой-то баг, и вот ты уже по самую макушку в абсолютном дерьмище.
А нужно просто иметь мозг, что-бы это исправить.
*Оптимизирован по скорости выполнения.
*Гибок.
*Удобен в использовании, если ты знаешь С++.
Минусы:
*Дольше компилируется.
*Внутрь лучше не заглядывать (минус, не имеющий веса).
Такой говняной кодогенерации, как темплейты с++ еще поискать надо
>*Гибок.
Уебишен - более точная характеристика
>*Удобен в использовании, если ты знаешь С++.
Удобен если ты не знаешь ничего кроме С++
>*Дольше компилируется... в говнокод
>*Внутрь лучше не заглядывать (минус, не имеющий веса).
Вот это поворот событий, вот оно как оказывается! Да ты поди в своей разлюбимой венде сидишь за тремя фаерволами - а все потому что внутри гавно, но это не важно, так?
>не тяжёлую
Взаимоисключающие параграфы.
Да и кроссплат не с++'ом единым... как говорится.
>>не тяжёлую
>Взаимоисключающие параграфы.
Нда? Напомни-ка мне, какой размер рантайма у большинства либ буста?
template<int MaxCountElementInStack>
class Stack
{
...
};
И чё получил?
Допустим ты используешь стек с параметром Stack<10>, Stack<11>, Stack<12>... Stack<1000>
То что ты получишь? 990 классов реализаций стека в екзешнике?
Ну ты и загнул. Ничего лишнего...
И никто не мешает сделать размер стека параметром конструктора.
Я понимаю, что для морд к аксессу, которыми ты себе зарабатываешь на доширак лишние три инструкции (да ещё с доступом к памяти) это пустяки. Но для рендеринга, матмоделирования и других жадных до CPU задач - это важно.
Из-за каких-то жалких 3 инструкций заводишь целый шаблон, а затем 990 экземпляров одного класса, раздувая экзешник...
Чем-же он прост?
Лишь в конечном исполняемом екзешнике и простоте использования.
Надо быть готовым к любому говну в коде когда дело качается плюсов.
Можешь его использовать...
В сложном слове, пишушемся через дифисы, только последнее слово склоняется.
Ваш К,О.
почему тогда `Ваш`?
ГдеЗдесьСиПлюсПлюсевский.
Я дельфист.
fxd
То что С++ стал популярен - лишь случайность.
Те, кто кроме C++ ничего другого не знают - просто не понимают, что мучаются, оттого плачут, колятся, но продолжают жрать кактус. Кто знает чуть побольше чем всего лишь жалкий C++, писать на этом позорище невообразимо противно.
ХОТЕТЬ!
Раз в полгода зарплату получил сумму в N-значимых разрядов и гуляй))
Это не макрос - это хер собачий. В унылом С++ нельзя написать настоящий макрос: ТрупСтрауса забыл спиздить эту фичу в втюхать в свой "шедевр", и скорее всего он вообще не знал что такое макры, для таких и препроцессор чудом кажется.
name-clause::= named name
variable-clause::= with-clause | initial-final | for-as-clause
with-clause::= with var1 [type-spec] [= form1] {and var2 [type-spec] [= form2]}*
main-clause::= unconditional | accumulation | conditional | termination-test | initial-final
Так жеж можно свой язык написать. О_о
Да именно так и надо подходить к делу:
есть задача - есть заточенный под нее язык, маленький, простой и логичный, на котором без труда может формально описать описать задачу, даже тупенькая секретутка, а не ломать голову в каком месте ты пропустил точку с запятой.
«Любая достаточно сложная программа на C или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp[1]»
«…в том числе и сам Common Lisp», а теперь понятно.
Мне нужно попроще, например С++.
С таким подходом тебе лучше в пещере жить, фиговым листом жопу вытирать, да подножным кормом питаться, а хули - проще некуда
>Это каша.
А это каша. Да. Но можно же делать это нормально. Язык свободный. Мультипарадигменный.
ложь и провокация. с++ изгадил все парадигмы за которые попытался ухватиться, в итоге получили то что получили то есть говно
обожди, тут еще не решили _зачем_ на цэ++ программировать :)
Ну и ещё нет auto :)
какое точное описание С++
Видимо тебя в детстве родители заставили написать компилятор С++ на контролёр х51 и теперь ты до конца дней срешь кирпичами, написав его.
2.Даже если нужен то кода там сто тонн
А templаte - отдельная проблема. Очень неординарная вещь. С ним придётся прилично повозиться.
Если речь про программирование микроконтроллеров то замена ему Plain C, Forth (возможно придется новый язык создать).
Если веб, то тут пока PHP основную долю занимает, правда уже начинает терять проценты в пользу Python, Ruby.
Распределенное приложение? Erlang вне конкуренции.
Так может С++ вообще не нужен был никогда?
Легче программировать.
Это понятие довольно субъективное. Кроме того, оно не оправдывает того, что на C++ "программируют только идиоты".
В это входит большая скорость разработки и меньшая стоимость сопровождения.
Да хоть на Java, хоть на Haskell, хоть F# - все зависит от конкретной задачи.
>серверное приложение
Аналогично (тут может и эрлангу предпочтение стоит отдать).
Будто бы это удобно. Конечно С++ подходит для встроенных систем. Иной раз покупка более дорогого контроллера обойдется дешевли, чем поддержка сишного кода на более слабом контроллере дорогим медленно работающим программистом.
Дальше все микроконтролеры на С++ перейдут. Вот увидите.
Опять же для длительных математических расчетов не плохо С++ подходит.
>Forth
Он тоже для математических расчётов, но устарел.
Поживем - увидим. Вполне возможно, что этому на руку сыграет засилье быдлокодеров (и жителей Индии, занятых в аутсорсинге), да вот только качество кода останется тем же.
>Опять же для длительных математических расчетов не плохо С++ подходит.
Это тоже, между прочим, фанатизм.
Плюсовый код плохо поддается распараллеливанию, а то что удалось по тридам распихать еще и семафорить надо, абсолютно необязательный оверхед (в отличие от функциональных языков в которых распределенность "из коробки")
>Forth Он тоже для математических расчётов, но устарел.
Форт, как и Лисп, языки, хорошо подходящие к метапрограммированию, как к основному предназначению, со всеми вытекающими.
Компилятор не всегда засимофорит оптимально. Человек тоже не всегда оптимально.
Но у человека есть больше шансов, хотя напрячся придётся.
>семафорить надо, абсолютно необязательный оверхед
Просто вы сказали, что получаем не обязательный оверхед. А мы получаем его в обоих случаях. Как с функциональными языками, хоть без них. Семофорить нужно везде.
Но по возможностям на данном этапе развития автоматизированных систем задачу можно распаралелить более эффективно вручную. Хотя, кому это нужно...
Если человек, что называется "не шарит", то у него шансы 0.00
Хотя если он не шарит, то наверное ерланг и лисп тоже не вдупляет.
Опять же на С++ можно написать более быструю реализацию, хотя писать ручками.
ололо пока ты будешь это пейсать ктото получит баблосы за прогу слабаную на VB наколенке (Максимка Прохоров, например) и полетит на сейшеллы
За компилируемым в натив C#-подобным язычком.
а натив рулил всегда (кроме выделений памяти).
скорость разработки на C# быстрее всего лишь на проценты...
единственный плюс C# (ящитаю) это то что можно посадить студента и не бояться что он напорет боков дальше своей песочницы, отсюда сэкономленные нервы руководителя...
но если вдруг нам нужна производительность, C# будет долго и упорно портить нервы не только разработчикам и руководителю...
допустим сейчас я не могу вспомнить ни одной более-менее серьезной игры на С# и не думаю что появится что-то серьезное в ближайшие годы... а С++ опять набирает силы, так как
iPhone - ObjC, C++
Android - java, С++
Windows Phone - C#, C++
XBox360 - C#, C++
PS3 - C++
PSP - C++
Wii - C++
Bada - java, C++
Maemo - C++
PalmPre - C++
Symbian - C++ (хоть и урезанный)
у нас для всего этого один! движок на С++...
100к приносит нормальная казуалка изданная на 3-4 порталлах... я уже много раз слышал о том что на питоне и шарпе их можно печь как пирожки, но выходят теже сроки но более высокие системные требования + секс со сторонними библиотеками, которые не любят издатели...
моно можно вкомпилировать статически в один экзешник.
моно можно сконфигурировать, чтобы занимала чото-то где-то 4 мб всего (т.е. ненужные либы стрипятся).
моно моно моно!
для всего того же (кроме пары пунктов) можно запустить моно, при этом не пиша велосипеды (а я уверен, что половина вашего движка - велосипед)
любой движок это велосипед... даже если он на С# или Java или даже на Brainfuck...
The current default minimal mono install requires less than 4 MB of disk space and 4 MB of memory (plus disk and memory required by the operating system and programs running on mono)
как я понял, 4 мб - это минимум, выше - память под само приложение.
+ эта инфа на их сайте судя по всему устаревшая, под моно 1.x, поэтому хз как щас.
Так уж и в 100000000000000 раз?!!!!111111
напиши хоть один более менее взрослый шаблон, и поймешь что псикика у плюсеров покруче твоей будет...
Ты, мудаебина, ни одного настоящего шаблона в своей ебланской жизни и не видел даже. Ad-hoc от предикативного полиморфизма не отличишь, да ты и не знаешь что это, илита ебаная.
Тебе об этом и говорят уже сотый пост, что С++ говноязык, имеющий к НАСТОЯЩЕМУ метапрограммингу лишь незначительное и косвенное отношение, но ты блядь, как дебил, все про одно: "шаблоны, шаблоны, шаблоны рулят, шаблоны быстрее ассемблера" - нахуй запущенная шаблонизация головного мозжечка.
Схуяли?
пример плз... хоть посмотрю как люди живут...
пример использования можно накидать, ну или хотя бы рассказать где это может пригодиться... я понимаю, что Nemerle является функциональным языком и очень глупо с вашей стороны сравнивать разные парадигмы программирования, но все же мне очень интересно...
Это и есть главная прелесть метапрограммирования - создать новое, выразив его через базовые вещи.
>> глупо с вашей стороны сравнивать разные парадигмы
Ты же постоянно орешь тут про шаблоны С++, выдавая их чуть ли не за божественные творения, но это далеко не так, пример выше показывает их ограниченность.
Как это применять? Да как хочешь, ограничений нет: можно отдельный DSL создать, можно синтаксис подогнать под задачу.
Из разряда "зачем нам ЯП в машинных кодах надо програмить"
>>яве и шарпе
Reflection тоже считается причастным к метапрограммированию.
Нет смысла для этого использовать шарп- уже давно существуют и F# и Nemerle, и под JVM есть функциональные языки.
А оно нужно?
чтото мне кажется что ты школьничек никера не понимаешь в функциональном программировании и тем более в DSLях
Я с дуба рухнул реализовывать самостоятельно while? У меня в С++ while есть и уже оптимизированный, а вы пользуетесь костылями.
http://ru.wikipedia.org/wiki/Vala
ГовноГовном.
Приводит в ужас промежуточная трансляция в си? Да ты уебок.
Язык-то повыше уровнем, чем быдлоцпп
Нисколько, если делать грамотно. Си - это лоувел, это почти ассемблер. Поэтому если "трансляционные шаблоны" написать верно, то скорость будет такая же. Плюс к тому же для си сделано столько оптимизаций, что ты для своего недокомпилятора в жисть не реализуешь.
Так вот, что там делает компилятор - не должно волновать, ибо на выходе будет то же самое. Я вот чего-то не вижу жалоб по поводу того, что компилятор промежуточно выдаёт .o-файлы. А это ведь такой же промежуточный слой, как и си-код.
Какая разница для программиста?
К тому же, для си сделаны лучше оптимизации. Поэтому у трансляции в си такие плюсы:
1) 100% кроссплатформенность
2) лучшая оптимизация на любой платформе
3) нет ненадобности писать компиляторо-зависимые фронтенды к бэкендам (к гцц напр.)
4) отсутствие времени на отладку, борьбу с багами на уровне машинного кода в случае, если делать собственный компилятор - и так далее.
Я не понимаю, почему люди боятся трансляции в си. Видимо, недостаточно "круто", "игрушечно". Писькомеры, иопта.
Ты это своей бабушке скажи, когда будешь компилить на 16 битную, 32 битную и 64 битную платформу.
На самом деле у проблемы есть решение: не использовать инт. Есть ещё одно решение: вообще никогда не использовать инт.
Что же тогда использовать? А использовать int32_t, int64_t, int16_t, uint32_t, uint64_t, uint16_t --- вот это всё. Пускай на 32-битной машине int64_t будет эмулироваться двумя регистрами, зато он вместит требуемый нам диапазон значений.
а теперь пойди найди мне c99 расшщирения в 16ти битном компиляторе
большинство 16ти разраядного кода написано под всякие borland c, которые (по причине выпуска в середине 90-х) не умеют c99
тогда у нас либо не получится хранить указатель на функцию (что портит стандрт как мне кажется), либо у нас tiny model размер с гулькин хуй один сегмент, и я не очень понимаю что там можно написать насях. Загрузчик для MBR?
>> теоретически 16-разрядный код может быть и за пределами x86. Мало ли в мире архитектур...
Сомневаюсь что в 2K18 кому-то интересны такие архитектуры. x86-то интересен только ради обратной совместимости. Хотя конечно где-то могут работать какие-нить станки с ЧПУ или оборудование конца 80-х, но я не очень уверен что под них пишут _новый_ софт
Но вообще я не копегаген в эмбеддед (у нас тот вроде Борманд любитель всякой мелкотни). Я знаю только про армы, mipsы и атомы, не исключено что где-то кто-то юзает 8бит.
Хотя я не очень понимаю зачем.
Энергопотребление, цена. Ты же не будешь ставить i7 в ёлочную гирлянду? Хотя эту нишу походу отберут мелкие 32-битные армы.
Ну и ардуинщики же -- всё-таки порог вхождения у авр на порядок ниже чем у армов.
Так 8 бит действительно используют ардуинщики?
Вау.
А тортики ты лазером нарезаешь?
Ну CPLD можно, но они будут подороже мелких контроллеров. А к большинству FPGA тебе ещё внешнюю флешку надо и т.п.
Нет, но я и процессоры в гирлянду не ставлю. У меня была в детстве гирлянда, мне кажется там был такой элемент, он нагревался и разрывал цепь. Нет?
Современные гирлянды, даже самые китайские, умеют сложно мигать, по разным программам. В них есть чип. Обычно он выглядит как размазанная по плате пластмассовая сопля, (это, видимо, маленькие танзисторы залиты каким-то пластиком?), но иногда он прямо осязаемый, чёрный жучок с ножками.
Интересно, а может быть там asic?
Сконпелял пустую программу main(){}, а DMC выдал COM-файл почти на 6 Кб. Судя по тому, что он юзает EXE2BIN он сперва конпеляет в EXE. Не знаю, сколько сегментов он юзает, но он там чото мутит с сегментными регистрами, все call'ы и jmp'ы near. И в COM-файле много лапши и говна: Правда не все флажки работают. И ещё дополнительно нужно устаналивать либы и улититы.
а ты подумай, кто здесь сейчас что-то меряет в посте выше?
сдохни. написать "using namespace std;" нельзя было? или буст уже мозги окончательно высосал?
Ты каждый раз пишешь std::, а это лишнее, если один раз напишешь: using namespace std;
млин пять буков им лень напечатать. или typedef описательный добавить.
а вообще от этих 5 символов профита больше, так как интелисенс выведет список...
Что С++ говно.
Что С++ говно.
унылые распиаренные поделки
у нас базы данных на FOXPRO !
Я пишу на С#, молодой и уже есть девушка. Уезжаю в Москву.
шаблоны - полное говно, обычный синтаксический сахар, бездумно (и через анус) засунутый в язык
>>>>Кодогенерация, метапрограммирование
это все мимо си-плюс-плюса, ибо ни нормального оптимизатора не прикрутишь, ни дсл'ей не напишешь
Я о томже.
WUT? И как же ты заменишь шаблоны другими средствами языка (си), диабетник?
>это все мимо си-плюс-плюса, ибо ни нормального оптимизатора не прикрутишь, ни дсл'ей не напишешь
Оптимизаторы у плюсов лучшие из всех языков тащемта.
В си? Никак, и с++ тоже т.к. нет у них средств для расширения языка.
>Оптимизаторы у плюсов лучшие из всех языков тащемта.
Хуй там, плюсцовое дерьмецо чтоб соптимизировать надо пару раз сотоне помолицца. А вот чистый си оптимизируется хорошо
Раз никак, то шаблоны - это НЕ синтаксический сахар.
>А вот чистый си оптимизируется хорошо
Ну ещё бы, ведь вся рутинная работа за компилятор проделана человеком.
Ты дурак. Вменяемой и равноценной замены нет. И если бы ты знал что шаблоны раскрываются обычной синтаксической подстановкой то чушь бы не нес.
>Ну ещё бы, ведь вся рутинная работа за компилятор проделана человеком.
Никто не заставляет на сях кодить, пиздуй сосать у своего божка Страуструпа, и не забудь его в обосранную попку чмокнуть.
Ну ёпта, а я о чём? "синтаксических сахар" - это возможность языка, без которой можно обойтись ценой чуть большей писанины.
>пиздуй
пиздуй сам, и byval с byref не перепутай, когда быдлокодить будешь.
template - когда их оформляешь - столько приходится писать, что пиздец. Так, что хуй.
Строгая типизация, что поделаешь. Для того-же php при метапрограммировании приходится сто тонн тестов писать и всё равно потом окажется, что что-то неучтено.
Это ему не в плюс. Да и к чему сравнивать уебешный пхп и С++?
Ты точно ебанутый, конкретно и на всю свою головку. Тебе, бляденышу, сказали уже, что "шаблоны раскрываются обычной синтаксической подстановкой" и ты, тлять, после этого смеешь эту хуйню взвякивать? Если интелектишки не хватает так и скажи.
Мне похуй, что тут вякнул малограмотный обсос.
Это ложь. Ссылку давай?
Если бы ты хоть что-то в этом понимал, то не вякал бы. Знал бы, что это не так.
>Тебе, бляденышу, сказали
>Тебе, бляденышу, сказали
>Тебе, бляденышу, сказали
>Тебе, бляденышу, сказали
>Тебе, бляденышу, сказали
Хотя шаблоны предоставляют краткую форму записи участка кода, на самом деле их использование не сокращает исполнимый код, так как для каждого набора параметров компилятор создаёт отдельный экземпляр функции или класса
И? Все это знают, ибо читали мануал к языку. Или для тебя это новость?
И не я. Кстати, тебе бы поучиться мысли выражать. Шаблоны - они работают как (сюрприз!) шаблоны. Я думал, это очевидно.
Если же ты, в скудоумии своём, полагал, что шаблоны позволяют одному и тому-же машинному коду обрабатывать объекты разного типа, то тебе стоит открыть словарик живого великорусского языка и почитать там статью "шаблон".
А если тебе всё-таки дозарезу надо одним кодом обрабатывать разные типы, то для этого в плюсах есть другие средства. А шаблоны - это средство метапрограммирования, а не синтаксический сахар, дурья твоя башка!
этот высер даже упоминаться не должен в треде в котором прозвучали слова Лисп и Форт
А я ему..."
Даешь 1000 комментов к концу недели!
подметать двор
только один этот недоязычек осилил и решил мАскву покорять? не слабое чсв
Сам недочеловечек.
ололо посмотрим на тебя в твои 35, молодой C#-програмер
А ты все еще хочешь программировать на Цэ++?
бухаю в асинхронном потоке
Кодим на чистом C, ЧСХ!
Но поскольку я выгляжу в точности как описан программист на C++ (хоть и не программирую на C++), то мы друг другом не интересуемся!
Хотя у меня ситуация хуже. Я программирую, приемущественно, на С++... :D
>то мы друг другом не интересуемся!
У нас тоже они есть, но интереса друг к другу нет.
А у вас девушки выглядят, как С++ программисты?
У нас нет.
Первым делом первым делом самолеты
Ну а девушки а девушки потом.
/////////////////////////////////////////
О С++ поговорили, теперь пора и о девушках. :)
Мы только что вдвоем...
наладили автотесты, поговорили про тонкости распределения ресурсов в нитях и потоках и обсудили новую систему сборок.
И обратно каждый к своей работе:)
Лучше бы наладили контакты. Или они не красивые?
Красивая... Но копипейстом грешит!
говнокодность Basic = 10 говнокодностей С++ - значит басик в 10 раз хуже С++
и наоборот
Java = -2 C++ по шкале говнокодности - значит жабка лучше ц++ в 2 раза
К какой?
trollface.jpg
Алсо, а жабомашина или дотнетомашина под под спарки вообще есть? А если openbsd вместо солярки?
Да что ты. То, что ты в говнокодерской сфере крутишься - твои половые проблемы и на всеобщее обозрение выносить не стоит. А кому то нужен не быдлоязычок С++ а куда более вменяемые и имеющие jit языки
Тебе, ебанату, ведь "ВМ не уперлась", так что иди фапни на свой канпелятор С++
потому она всегда тормозит, пока не прогреется
>и она кросплатформенная.
лол
Верёвочка лопнула
И jit'а прихлопнула.
https://www.youtube.com/watch?v=r67lhwSgLyY
Англичане говорят "you are welcome", раньше вроде говории "I am not at all".
Нидеры говоря "graag gedaan", или еще "tot uw dienst"
https://www.fluentu.com/blog/spanish/youre-welcome-in-spanish/
Ты не понел. Как живя в Аргентине организовать поездку по топовым местам?
Это тоже самое, что живя в 1024--динске посетить Камчатку. Близко же, хуле.
Сибирь там, Урал, Владивосток, всё вроде рядом, что в той части России. Сел, да поехал
Ни денег не жаль -
Что ж тут поделать.
Если решил уезжать -
Уезжай,
Незачем медлить.
Кто здесь любил тебя,
Кто тебя знал -
Все не помеха.
Вышел из дома,
Пришёл на вокзал,
Сел и поехал.
Стрелки, как белки,
Навстречу летят
С ветки на ветку.
Люди и звери
Подходят к путям -
Брось им монетку.
Полка, футболка,
Вагон-ресторан,
Карты, потеха.
Вышел на станции,
Хлопнул стакан,
Сел и поехал.
Так пересёк ты
Свой Божий мирок,
Вжился, пригрелся.
Так и доехал
До райских ворот -
Кончились рельсы.
Вышел, размялся,
Спросил сигарет -
Просто для смеха.
Взял на перроне
Обратный билет,
Сел и поехал.
https://www.youtube.com/watch?v=RRLZLLH7xQU
Как там новый призеднт, который живет с сестрой и четырьями клонами своей покойной собаки?
Вроде "bueno" могут сказать, если меня не глючит. А так в основном молчат и улыбаются.
After 50 years of association with the famous Jewish name, the kindergarten in the village of Tangerhütte said that it wanted a more “diverse” identification.
Going forwards it will now be known as “world explorer kindergarten”.
literary-hitler.jpg
> hack
Сами авторы буста признают, что хаки и говно.
// И. о. Метаметакэпа.
// И. о. метаметаметакэпа.
тут уже разобрались что к чему))
В жопу такой "высокоуровневый язык", лол.
или за слова отвечать не привык?
Все ссылочные типы моего "C-boost"'а через type-punning приводятся к базовому типу (структура базового типа лежит вверху layout'а каждой структуры). Базовый тип содержит функцию-диспетчер, работающую с сообщениями (простые целочисленные значения) - (функция-диспетчер winapi'шного окна ведёт себя подобным образом). В общем, любой объект, который подтип базового типа, может принимать сообщения.
А дальше:
Понимаешь, сука? Итератор посылает сообщения объекту (через макрос CF_SEND в функциях cfIterator_HasNext и cfIterator_Next). А там уже у каждого объекта своя реализация сообщений cfList_Count_MSG и cfList_Get_MSG.
К слову, в итераторе есть специальное кеширующее поле, которым пользуется класс LinkedList, чтобы сохранять текущий нод.
К слову, итератор - fail-fast, при изменении версии контейнера во время итерирования выкинется исключение (легче сделать исключения в си, чем становиться с++-гомосексуалом).
используется так:
Это точно Си? Т.е. свой ООП с блекджеком и деффачками?
Истинный ООП юзает сообщения, они у меня есть. Базовый класс такой:
Все "типы"-потомки должны хранить вверху своих структур вот так:
Всё, терь MyCoolClass может отвечать на сообщения (функцию m_dispatch видишь?), только в конструкторе надо сначала проставить функцию-диспетчер.
И никакой ебаный с++ не нужен, ололо.
Инкапсуляция, ящитаю, не долнжа быть совсем уж fool-proof. Всё реализуется на основе соглашений. А соглашение такое, что поля с префиксом m_ нельзя трогать.
Полиморфизм реализуется через отправку сообщений функции m_dispatch (как в смолтоке).
Что значит "нормаьлное наследование"? Семантически оно у меня есть. Синтаксически нет проверок на тайп-паннинг.
++
я не претендую на то, чтобы из си сделать ФЯ.
>>>>>могу сделать generic-итератор по коллекциям любого типа, лол.
Ты писал???? Оказывается все не так просто в твоем "высокоуровневом си"
Переменная? О_о
Карри, Хиндли-Милнер и прочие, конечно, молодцы, но для практики их изыскания малопригодны (выведение типов не особо нужно, без каррирования легко обойтись и то дэ).
а вообще это не лучше и не хуже, а просто другой подход.
слишком категорично, то что ты это не применяешь не означает ненужность этих фич
атата =) а кто тут у нас говорил что смолток для говнокодеров, а? =))))))
вот например в ВизуалБейсике мне нравится декларативная подписка на события. но это не умаляет его говённости.
на то он и первый ооп язык, чтобы идеи обкатать
Будто бы это так долго, что я успею поесть....
А вообще твои виртуальные функции - тот же вызов по указателю, а то и хуже.
Ты может и нет, а я да.
>А вообще твои виртуальные функции - тот же вызов по указателю, а то и хуже.
В c++ для итерирования по контейнеру не используются виртуальные функции. Ну, обычно.
Хотелось бы на это посмотреть.
>В c++ для итерирования по контейнеру не используются виртуальные функции.
Зато твои эти виртуальные функции понапиханы у тебя во все дыры в твоем С++.
Зато компилируется не три часа.
если бы знал, что там ещё делает с++-компилятор under the covers, при твоей паранойее "тормозов" тебе толлько и на ассемблере кодить.
В дотнете для foreach'а энумераторы делаются через реализацию интерфейса IEnumerator, а интерфейсные методы вызываются там через такой же диспатчинг.
в objc так же должно быть. в java наверняка так же.
Про компилируется 3 часа - пиздежь и провокация. По крайней мере в STL, не знаю как в буст.
Вот поэтому дотнет и сливает при обработке больших объемов данных.
оверхед там милипиздрический, objc весь построен на этом.
Конечно, для итерирования по коллекции объектов это все сойдет, там много не нужно, но для простой обыденной обработки массивов/списков, это слишком накладно.
> красивое, защищенное от многих ошибок
Ну да, макросы во все поля. Они прямо охуенно защищают от ошибок.
Свой велосипед не может быть надежнее чем встроенное средство, по определению.
я гнал не про это, а про то, что всё реализуется достаточно просто. необязательно разрывать себе мозг извращённой фантазией трупа страуса.
я в с++ как-то особо не видел шаблонов и вирт. функциях при обращении к самому лоу-левелу, там все сразу скуксиваются и скатываются к си-подобию. так же и у меня.
С# вообще тормозит. О нём мы не говорим. С++ так не делает.
троллинг же. C# тормозит только на стартапе. в моно можно применить aot. в java сделали демона, благоаря которому стартап как у натива.
выйди из анабиоза.
сука ну как можно такую хуйню писать а
Короче, джава сосет хуя у шарпа. Sad, but true.
Вообще забавно: двадцать лет питушки врали нам что благодаря JITу можно нанять анскильных программистов и они сделают всё хорошо, и всё равно когда тебе нужен нормальный перформанс, ты берешь плюсы, сишку, или хотя-бы Rust.
Не знаешь - молчи в тряпочку.
Как без диспатчинга тут обойтись - я не знаю.
И где скорость твоего диспатчингого метода?
Зачем пользоваться Си, если сам делаешь такие тормозные вещи, типа диспатчинга?
В С++, если не пользоваться всякими медленно компилирующимеся фичами - компилируется с той же скоростью.
Лень - дорога к прогрессу.
в foreach'е?
А в бууст_фориче для массивов просто проход по индексам.
Для сложных объектов бууст_форич использует также иттератор.
ну и зачем так извращаться? если я в компайл-тайме знаю все типы, нахрен мне тогда обобщённое итерирование? в ооп-си для обычных массивов я сделаю обычный for-цикл + индексирование. в местах, где нужно обобщение, которое в компайл-тайме не определить (напр., апкаст) - сделаю диспатчингом.
тут, оказывается, у вас всё упирается в синтаксис (в бусте для всего юзается boost_foreach), а не в производительность.
boost_foreach определяет всё на этапе компиляции, поэтому на производительность это не влияет вообще. Просто подставляется нужный вариант.
В отлиичие от тебя - я пользуюсь одним и темже для всего, а ты для разных контейнеров будешь использовать разные подходы (это копипаста, только скрытая).
компайл-тайм-полиморфизм мне нахрен не упёрся. не настолько туп
Это как?
Лол! ООП головного мозга это когда ООП суётся во все поля, т.е. туда, где он нахрен не нужен.
А я это сделал, потому что надо. с++ - говно, остальные йезыги или тянут рантаймы и зависимости по хуй знает сколкьо, или кривы, малодокументируемы и хуёня. Остаётся праведный си.
Алсо, что скажешь насчёт GObject? Наверное его тоже долбоёбы пишут? А ты весь такой умный в парадном.
но нет, они у меня как в Аде, простыми константами целочисленными.
О, маладец. А если надо, скажем, имя файла не существующего передать наверх, или номер строки, на которой парсер сломался, или код ошибки сторонней либы, ты как поступаешь? Переменную глобальную заводишь?
У меня исключения - это _исключительный_ случай, т.е. ты думал, что файл есть, а его хопа, и нет. Исключительная ситуация, ахтунг! И блок для обработки.
Если ошибка являются частью контракта/интерфейса, т.е. отсутсвие файла - нормальное явление, то используются другие механизмы (как вариант - возврат через bool, или проверка заранее на наличие файла и т. д.).
Доп. информация выводится в stderr.
И что ты с ней потом делаешь? Читаешь и распихиваешь по переменным и используешь в обработке исключения?
Вы зря тратите время заказчика.
в с++ от программиста ещё скрыт синтаксис и здравый смысл
наконец-то ты стал получать удовольствие от поедания кактуса, или просто на грибы переключился?
хаха, среди апологетов с++ два лагеря: 1) бравирующие школьники 2) программисты низшего и среднего звена, у которых нет выбора
Ты откуда вот? Почему в тебе столько любви?
я отношусь к людям которые не останутся без работы когда китайцы освоят C# и Java аутсорс...
Бравирующий школьник
Просто нужно потратить день и разобраться с этим.
Всё равно 99% от выполнения приложения потратися на сборку мусора. :D
во-первых, зачем это надо? чтобы в самом верхнем стекфрейме напечатать "такой-то файл не найден, извините"? так это выводится без проблем через stderr сразу там, где возбуждается исключение.
если нужно здесь же на месте создать файл, которого нет, то это происходит обычно в том стекфрейме, который и обладает ссылкой на имя файла.
прогонять имя файла выше имхо говнокод.
Я и не претендую :)
Нахуй это нужно? Самому нужно оптимизировать хвостовую рекурсию, а не давать на откуп компилятору, который может и не справиться.
Вообще нахуй рекурсию. Она всегда эмитируется через циклы и более эффективно.
Тот, хотя-бы производил впечатление интелекта выше среднего.
У вас интелект - олигофрена.
Умные люди, а что это такое? Объясните, плс.
type inference - автовыведение типа
зы подробности в гугле
Вообще в этих функциональных языках часто используется рекурсия.
В результирующем экзешнике её не будет?
Могу я ожидать переполнения стека из-за рекурсии функционального языка?
http://govnokod.ru/best/comments?time=ever
этот страх и ужас с++0х??
>появились нормальные лямбды
так маленькие дети поступают - в рот всякую гадость кладут, ну им то простительно, но тут то взрослые дядьки-разрабы компиляторов
складывается впечатление что разрабов на сковородке уже жарят, оттого и спонтанные фичи в стандарт вносят
пруф?
шизофазия в терминальной стадии, поциент неизлечим
Этот человек хотел сказать, что:
В новом стандарте С++0х введут в язык новую языковую конструкцию for_each и гарбидж коллектор. А если не введут, то введут во время принятия следующего стандарта. Что не понятного?
Да уж, многим такое не под силу. Гордись этим каждую секунду своей серенькой жизни.
конечно мне обидно, что обезьяны, которые не подходят нам на должность скриптовиков, получают в аутсорсе з/п соизмеримую с моей... но мне приятно то, что приходя на собеседование в любую аутсорс контору, мне предлагают должность не ниже чем лид проекта и зп в 2-2.5 раза больше чем я получаю сейчас... поменять искусство на обезьяний труд можно в любой день моей жизни, и естественно, когда нибудь я это сделаю...
И жизнь станет серой и унылой. Не торопитесь.
Я тоже так думаю. =)
Один обсирает, второй чуть ли не дрочит! И ЧСВ немереное.
И кто же тут обезьяна, мудень?
это миф из разряда "в C# нет утечек памяти"... скорость разработки на С# точно такая же как и на С++, единственная разница в профессионализме исполнителя, и именно из-за этого разработка станет более дешевой, и именно на этом сориентирована вся рекламная компания вокруг С# (можешь пересчитать сколько раз тут упоминалось что С# проще)...
а так все одно и тоже искать баги, оптимизировать, рефакторить надо в любом языке (даже в ПоХаПе)...
Так хули ты, тогда орешь что С++ илитный?
Ты его тоже не осилил, пока ты сортир драил, услышал как прогеры в курилке С++ обсуждали и решил тут так же выебнуться, инфа 100%.
Звучит как сотонисты. Так оно и есть. :D
а вообще я очень уважаю С, но я понимаю преимущества С++ перед ним...
http://blog.gamedeff.com/?p=84
А именно в строке:
typedef TT * iterator;
А дальше в цикле используется для прохода по массиву, типа
iterator i;
i++;
Приэтом это является итераторам и может использоваться в стандартных алгоритмах STL, типа сортировки, копирования и прочее.
смотрю тебя сильно напрягает то что я умнее... я знаю людей которые умнее меня, и вместо того чтоб их унижать, я учусь и развиваюсь, чтоб хотя бы не отставать и среднестатический С++ник поступает также... но вот среднестатический явист или шарпист или ПоХаПешник после недели работы считает себя чуть ли не пупом земли, требуя огромных зарплат и новых должностей, из-за этого цена продукта растет а качество падает... я ни разу не встретил ни одного русскоязычного блога о шарпе в котором человек описал, что беспокоится о количестве памяти или производительности своих программ на шарпе, при этом каждый второй англоязычный блог этим кишит... пересчитай всех своих друзей шарпистов которые знают что такое рефлекшн (reflection)... хватило пальцев одной руки? странно, они же профессионалы, и могут заткнуть за пояс любого С++ника, а пишут как индусские программисты на С (но у индусов хоть оправдание есть, в С этого нет)... уметь программировать и знать 20 разных фреймворков - это разные вещи... задумайся...
юзай валгринд, и ни одна ошибка не пройдёт мимо.
с++виндузятники о таки продвинутых технологиях не слышали?
Школьники совсем обнаглели нынче.
А нам же лучше. Пусть школота набежит, а у профессионалов будет больше работы и бабла.
пруф здесь http://lurkmore.ru/95%25_населения_—_идиоты
Это полезная вещь и для некоторых задач ускоряет работу приложений. Тк позволяет освобождать память в отдельном потоке, когда проц не загружен работой, например ожидает файла с диска.
Хотя при правильном проектировании - он загружен всегда.
На крайний случай обычный оптимизированный delete, также может освобождать память в отдельном потоке.
Для соответствующих задач, естественно. И загружен именно полезной работой, а не перевыделением памяти и копированием мегамассива в мегамассив форичем.
техника чем-то напоминает пул...
профит есть если часто выделять и освобождать блоки одинакового размера...
А "указатели" на эти списки расположены в отсортированном по размеру элементов списка "массиве"?
Ничего плохого, но и ничего хорошего.
Тогда new для таких объектов перегружать...
COM - говноархитектура Майкрософт, поэтому 100% для сборщика мусора с++ Маййкрософт для своего компилятора введут костыль для таких случаев. В дотнете же сделали такие костыли.
А их раздают с лозунгом: "Сборщик мусора в каждый дом"?
it's just like paradise!
capcha 6665 agreed
Мега тред.
С++ VS ВсеВсеВсе.
ВсеВсеВсе выигрывает! Даже мой визуал бейсик. С++ дерьмецо.
Не вижу. Быдлокодеры на всём_всём_всём (CamelCase для пидоров) только орут как стая мартышек и не в состоянии привести реальных аргументов. Придираться к раскрытию макросов - это вообще бред.
Макросы вообще вредны языку.
Их использование - верный признак говнокода.
слишком толсто
пруф будет?
XD))
с++ говно
PHP рулит и в этом никто не сомневается.
Рулит Перл!
хуй==хуй
Ви таки не пrавы!
Налетай! Засирай!
Ты вообще хоть рубль на своем Common Lisp заработал?
«Алгоритмы + структуры данных = программы» — Н. Вирт.
А. Степанов когда-то придумал, что алгоритмы и структуры данных должны быть порознь. Идея посетила его голову, когда он находился в состоянии бреда, вызванного отравлением грибами. Тем не менее, с появлением С++ и шаблонов в нём, идея оказалась воплотима, и была разработана библиотека STL, позже вошедшая в Стандарт.
В него почти полностью входит Си. Просто стал чуток типобезопаснее.
Можно также невозбранно пользоватся longjmp, malloc, не пользоваться классами и шаблонами.
Стало просто больше возможностей.
Если что-то делаешь кривое, то отдельно нужно длинную строку написать, что-бы согласиться.
Что-то типа пароля проверки на вменяемость, а когда таки напишешь, то увидев это уродство - откажешся от него и напишешь нормально без говнокодства.
удивительно, но разработчикам буста это не помешало наговнякать
Так от всего не защищает просто.
Why bother?
Из вопросов только кватернионы не знаю. Но если нужно будет, то как-нибудь разберусь...
вот можно еще почитать http://blog.gamedeff.com/?p=43
А ты первый раз слышишь? Видно в институте не учился и философию не проходил... Об этом ещё Платон говорил.
Утечкой называют память, которая не прикаких обстоятельствах не может быть освобождена до завершения программы, но не используется.
А в данном случае эта память освободится, если понадобится.
в сишарпе и в яве хорошие сборшики мусора, а все проблемы - по незнанию.
мнго памяти съедается на стартапе, потому что менеджер памяти делает это специально, потому что он видит, что в системе её ещё дохера. поэтому выделение памяти в них в некоторых случаях десяток раз быстрее происхоит, чем у с++, т.к. не нужно вызывать системные функции, ибо несколько десятков мб УЖЕ в нашем распоряжении. а выделение памяти под объекты - это краеугольный камень ООП-прогарммирования, и тут-то с++ сливает без костылей.
сори, но вы читали хоть что нибудь о менеджерах памяти?? какие системные функции?? проблемы менеджеров памяти в поиске свободных блоков а не в системных функциях... системные функции вызываются при выделении хипа (очень большого блока памяти, для множества объектов) и не зависят от языка программирования, они в любом случае вызовутся в любой программе...
про системные функции - ну я посмтоянно вижу злоупотребления...
А я забываю писать delete и все переодически это делают. Как после этого их нет? Есть и налицо.
Желательно бесплатные.
Хотя ломанные тоже сойдёт. :D
мне этого всегда хватало...
недавно вышло обновление vld (2.0), сам не пользовался но хвалят...
под iPhone есть своя тулза она показывает расход памяти во времени.
Крутыми и платными не пользовался около 2 лет, поэтому названий уже не вспомню...
для статического анализа лучшей считается PVS Studio (http://www.viva64.com/pvs-studio/) на хабре и в блоге интела есть примеры использования...
ищу аналог под винду. визуалстудио нет и не будет.
То что он раскрывается в мега конструкцию - ничего плохого.
В результирующий экзешник ничего лишнего не поподёт.
Например для массива будет обычный цикл for от константы до константы. В чем вообще проблема, то?
true ? 0 : foo
это продукт исключительно машинной генерации, или особо увесистой макросной конструкции.
В бусте сам макрос форича занимает 44 кб, вместе со всеми классами, что он использует.
http://www.boost.org/doc/libs/1_38_0/boost/foreach.hpp
Но реально дела обстоят ещё и хуже, тк туда инклудятся прочие h файлы:
#include <cstddef>
#include <utility> // for std::pair
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/assert.hpp>
#include <boost/mpl/logical.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/noncopyable.hpp>
#include <boost/range/end.hpp>
#include <boost/range/begin.hpp>
#include <boost/range/rend.hpp>
#include <boost/range/rbegin.hpp>
#include <boost/range/iterator.hpp>
#include <boost/range/reverse_iterator.hpp>
#include <boost/type_traits/is_array.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/is_abstract.hpp>
#include <boost/type_traits/is_base_and_derived.hpp>
#include <boost/iterator/iterator_traits.hpp>
#include <boost/utility/addressof.hpp>
# include <new>
# include <boost/aligned_storage.hpp>
# include <boost/utility/enable_if.hpp>
# include <boost/type_traits/remove_const.hpp>
Пруф?
это важно, да
> вас послушать - так все кодят на лиспе и яве.
Узнаю /ц/тардов Нульчана, ох, узнаю.
А мы можем это посредине дня сделать вручную. Пускай мы спотеем. От жары пот испарится и мы обгарим. Пусть С++ не напомнит нам, что мы не одели термозащитный костюм с последовавшим сгоранием заживо.
Но зато мы можем хоть как-то, а вы нет. В этом сила С++. Многообразие тяжёлых, но непревзойдённых возможностей.
не надо их жалеть ))))
абсыкаем по полной!
Наверное, когда они видят девушку, то любуются её иерархией классов, множественным наследованием, методами, помеченными ключевым словом virtual, указателями*, const_cast<тип>(var), перегруженным operator new() и прочими С++ ными костылями, а потом удивляются, почему она им не даёт. Схуяли?(с++)
Она не дала.
Epic Fail.
http://lisper.ru/articles/icfpc-2009-virtual-mashine
(Как написать виртуальную машину для ICFPC-2009 на Common Lisp)
В 100-ню строк пишут интерпретирующую и компилирующую виртуальную машину.
Помоему профит очевиден. Никакой Максим Прохоров со своим визуал бейсиком не напишет это за пару часов. На визуал бейсик это будет в пару тысяч строк. Я уеду на канары, а максимка будет ждать следующей работы, хоть и не долго, а С++ будут до посинения дрочить своё прошлое творение, превысив все допустимые сроки сдачи.
Может быть вы подскажите: на каких языках мне стоит научиться программировать в этой жизни и почему? Минусы тоже можете указывать, для полноты картины.
Логическое программирование - Пролог (альтернатив нет)
Скриптовые языки - Питон, Руби
Системное программирование - Си хорошо подходит (для всяких микроконтроллеров еще Форт)
Прикладное - C#, Java
>>на каких языках мне стоит научиться программировать
А это сам решить должен.
ооп и функциональщина - это подходы, это семантика, а не синтаксис. упираться в синтаксис - для говнокодеров.
heil orthodox c! 14/88
>>Схуяли?(с++)
>>это у вас, с++обезьян, всё тормозит и глючит. не то что си.
>>Баттхерт с++ного гомосека
>>Вы имеете право в жопу друг с другом долбиться
>>Насри себе в рот
>>Да ты уебок
"Вот же школоты-то понабежало"
Двойка тебе, школоло. Завтра родителей в школу.
Я так понимаю, функциональные языки больше подходят для решения некоторых типов задач, типа молотилки данных:
Трансляция, классификация данных, ммм... 1)Прошу привести конкретные области или ваши проекты, для которых функциональные языки больше всего подходят, чем императивные?
2)Может они не будут делать это максимально быстро, зато я буду разрабатывать проекты максимально быстро, я верно понимаю?
3)Для каких областей функциональные языки подходят плохо? Я так понимаю, для GUI? Приведите ещё примеры?
Тебе и не светит - для этого нужен мозг, не распидарасенный императивом.
http://s.lurkmore.ru/images/c/c7/Z150_03.jpg
Нет. Не верно, не надо искать серебряных пуль - надо решать задачу наиболее подходящим инструментом: на Лиспе драйвер не написать, С++ не подходит для метапрограминга.
Меня больше интересуют языки, продолжающие развиваться. Те, для которых появляются новые компиляторы. Те, что генерируют производительный код, пусть даже в небольшой ущерб удобству и возможностям. Меня не интересует лёгкость обучения. Ну для начала меня больше интересует платформа Windows. Пока меня больше интересуют не трансляторы, а именно компиляторы, тоесть по возможности не JIT и не MSIL компиляторы, хотя это не так важно. Ну и для удобства начинания какая-нибудь гуёвая IDE.
Я смотрю в сторону F# (он же OCaml + перделки и шлюхи .NET Framework), какой-то из диалектов Lisp (Видимо Схема?), Erlang (распределённые вычисления и многоядерное программирование) и Nemerle. 2) Правильно я смотрю?
3)Erlang, видимо не так актуален, тк задачи его уровня крайне редки. Ещё он использует порты для общения с внешним миром, что тоже не так приятно. Видимо он генерирует не самый оптимальный код для компьютеров простых смертных, у которых нет десятка ядер?
4)Если Lisp, то выбирать какой диалект?
Вообщем жду советов. =)
пруф или небыло...
на текущий момент хаскелл - авангард функционального программирования
>>Пока меня больше интересуют не трансляторы, а именно компиляторы
>>Если Lisp, то выбирать какой диалект?
Common Lisp и его реализация от Steel Bank (SBCL http://www.sbcl.org/)
http://www.gotdotnet.ru/blogs/mihailik/3588/10842/
А именно, финализатор (жалкое подобие деструктора) может вызываться во время сборки мусора, но это сборка мусора может так и не произойти до завершения программы, а это значит, что важные захваченные ресурсы могут долгое время не освобождаться и в таких случаях эта работа ложится на программиста.
Это почти тоже самое, что заставлять программиста вызывать delete вручную, особенно в свете исключений, возникающих в С# по поводу и без повода.
В С++ такой траблы нет, хотя это не оправдание, тк у него есть другие.))
Вася имеет мерседес, но у мерседеса сломан прикуриватель.
Гена имеет запорожец и у него таких проблем нет.
судя по мануалу, по крайней мере мону можно повредить, там написано что при эмбеддинге нативные потоки нужно регистрировать с помощью mono_gc_register_thread.
> Additionally, if (a) the structure is located on the stack, and (b) the structure contains only blittable types, then if you pass a structure to an unmanaged function by-reference, the structure will be passed directly to the unmanaged function, without an intermediate unmanaged memory copy. This means that you may not need to specify the Out attribute to see changes made by unmanaged code.
Получается, что мы получаем указатель в пределах managed-стека? Можем ли мы из unmanaged-кода пойти вверх по managed-стеку и покуралесить?
Проверил, можно!
В общем, на стороне managed-кода:
На стороне С:
> hacktest1.exe
13
10
> mono hacktest1.exe
12
10
Т.е. я смог изменить значение аргумента managed-метода. Также я смог менять локальные переменные, следующие за структурой DummyStruct.
:)
Кого имеют?
Я даже больше скажу. Тк это происходит в другом потоке, а в Виндовс вытесняющая многозадачность, то финализатор может вызватся в то время, когда какие-нибудь данные используются, и их испортит, если он их изменяет.
За этим дополнительно придётся следит с помошью синхронизации.
Отсюда ещё одна проблема. Пусть в проге один поток. Когда система будет работать в режиме не хватки памяти - она запросит гц собрать кучу. И окажется, что в каком-то финализаторе есть ожидание какого-нибудь семафора, но он сейчас не установлен, тк мы находимся в критической секции обновления данных, которые синхронизируются семафором.
Получается основной поток ожидает выделения памяти, а выделение ожидает сборки мусора, а сборка мусора ожидает финализатор, который ожидает возможности финализирования, ввиде разрешения от основного потока семафором.
Мне интересно, как эта проблема решается? Вообще имеет ли решение?
Неужели не использовать финализаторы, а делать это вручную?
Обходится конечно легко.
Путём выделения из кучи нового объекта, если есть конструктор копирования. Не приятно, конечно.
Вот так вот потеря производительности на пустом месте.
Помоему вот это тоже нормально:
частично для этого можно использовать struct's
нет такого конструктора
и вообще value-типы всегда передаются по значению
>нет такого конструктора
зато есть очень ценное "int i = new int();"
я понял) ты - кэп
ирония моего поста риторически вопрошае, нахрен интегеру пустой конструктор.
наверное для default(T).
костылизм.
:)
Видимо, только в идеальном мире.
Ребяа, кончайте кодить, вы уже тут почти все ебанулись головой апклаву.
И да, давайте дохуярим до тысячи.
Друзья, всегда просите своего диллера четко проговаривать название вещества. "ф" и "т" легко перепутать