LINUX.ORG.RU

чистый Си

 


2

3

Всем добра. Учусь программированию под линукс, знаю что нет ничего лучше чем практика. Пересел из микроконтроллеров, поэтому практически все нужно осваивать заново. Много гуглил но так и не смог найти примеры работы как загрузить веб контент, json или код html, и cookie на чистом си под линукс. а также как отправлять cookie. Киньте пример или ссылку на него, только рабочий пример пожалуйста, так как для меня это новые ворота.

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

И вот даже такое анонимное чмо, как вы,

Я сюда, гребень ты штопаный, не захожу под своим ником чтобы меня не видели в обществе таких у-bков как ты. Стыдно мне здесь с вами находится под своим ником, который также используется мной и на других ресурсах.
И на 4pda тоже давно не захожу, по той же причине. Но там ещё большее дно, чем здесь. Днище, можно сказать.
Это как зайти поесть и/или выпить в какую-то низкопошибную рыгаловку, где собирается всякий сброд.

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

Вы и вам подобные превращаете любой ресурс в помойку, потому что ваш удел — это лексика уровня «гребень ты штопаный» и «у-bков». И заведи вы себе аккаунт, на вас бы быстро перестали обращать внимание.

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

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

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

это лексика уровня «гребень ты штопаный» и «у-bков».

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

Вы и вам подобные превращаете любой ресурс в помойку

Анонимусы здесь были всегда. В помойку ЛОР превратили регистранты, вроде тебя. Ну и нашествие вчерашней школоты.

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

А большинство регистрантов тут клоуны кстати, если ты не заметил.

Благодаря тому, что они регистранты я в курсе кто клоун, а кто нет. А вот вы все одинаковые. Кто хочет общаться предметно, тот пусть регистрируется. Остальные чмошники идут лесом.

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

А какая разница, если ники каждый день новые? Все регистранты тоже одинаковые, выделяются разве что совсем упоротые.

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

Вы не правы в технической части, так что зря спорите

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

Все регистранты тоже одинаковые

Не все. Про тех, с кем общался уже понятно, чего ожидать. Вот когда RazrFalcon говорит про Rust или dave про Haskell — это можно принять к сведению. Если Iron_Bug говорит про C++ — то это сразу в топку.

Про тех, с кем еще не общался, можно составить мнение, вот как о Moisha_Liberman. Причем довольно быстро.

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

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

Для крестов(не си) move был нужен, иначе вообще не обеспечить инварианты абстракций.

Неверно, на уровне языка нет ничего из этого.

Колхоз, на уровне языка всё это есть. Гугли определения object representation и value representation.

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

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

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

Готов согласиться. Речь о том, что при использовании шаблонов функции с шаблонным параметром для функтора у компилятора больше возможностей по оптимизации кода, чем в случае с обычной функцией и указателем на функцию в виде параметра.

Как же ты быстро поплыл, начал кукарекать про какие-то функторы. Но даже тут ты обосрался.

К тому же, я тебе уже сообщил о пробеле в твоём понимании. Никто, в здравом уме, не основывает анализ кода на каком-то колхозном дерьме - ты перепутал методичку.

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

Ты так и будешь кукарекахать херню, я буду посылать тебя за подробностями и обоснованием, а ты опять будешь обсираться? Ну пытайся.

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

Обосрался тут только ты, пытаясь что-то кукарекать про язык, про который ничего не знаешь.

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

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

В авторитетах хорошего мало. Если я в одном треде напишу что-то умное, то это не значит, что в другом треде я не напишу глупость. Да и глупость неделю назад ничего не значит, ведь сегодня я могу быть умнее, и моё мнение может быть другим.

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

Вы не понимаете, чем отличается наличие фичи в языке (и, соответственно, во всех компиляторах, которые претендуют на поддержку этого языка), от игрушечной эксплуатации нестандартных расширений одного компилятора.

Да, для меня наличие фичи «в языке» и «в компиляторе» — понятия расплывчатые. Вот, например, чем они отличаются для языков python, java, pascal?

Я предвижу, вы ответите, что у C есть «стандарт», а значит «в языке» есть только то, что стандарте, даже если в компиляторах этого нет? Но никто не пишет глядя только на стандарт. Стандарт — это ориентир, у «стандартной» программы выше шанс не сломаться при обновлении компилятора. Но никто не использует фичи из стандарта, если их нет в компиляторе, ведь прогу просто нечем будет собирать. То есть в конечном итоге всегда смотрят на компилятор.

Стандарт — это страховка на будущее. Если в C11 этих расширений нет, а в C22 они появятся, то, что, от этого программы внезапно начнут работать иначе? Нет же! Это просто формальность, руководство о том как стоит писать программы. А в конце концов всё зависит от компилятора.

Но в нашем случае всё это не важно. Мы ведь просто выясняли, могут ли в C быть лямбды. И выяснили — могут. Даже без того варианта, есть куча других способов, вплоть до:

void (*mylambda)() = parse_and_create_lambda("void (){printf(\"This is lambda!\\n\");}");

Да вы яркий пример того, что среди анонимов практически нет адекватов.

Я-то тут причём? Мне просто нравится исследовать необычные способы использования языка. Это помогает лучше узнать язык. Но это ж не мои примеры кода. Лично мне пример с макросом не нравится, он, хоть и очевиден, слишком ограничен. А вот читать curry.c было намного интереснее, он использует трюк, сродни рантайм пакерам. А это интересный инструмент, пусть он нужен не часто, но о нём стоит хотя бы знать.

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

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

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

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

Откуда берётся вся эта ахинея? Вам какие-то бездарность пересказывают какую-то херню, которую где-то услышали, но ни вы ни те ламерки не понимаете, что эта херня работает только тогда, когда ничего иного нет. Давай на примерах.

У нас есть функция, функция торчит в мир - компилятор обязан сгенерировать её в том виде, в котором она должна быть. Там присутствует алиасинг, говнолиасинг, abi и прочая херня. Почему она там присутствует? Она там присутствует не потому, что компилятор её учитывает, либо кому-то она нужна - это просто некий универсальный интерфейс, который должен торчать наружу.

Но, при анализе и при генерации кода - все и всегда ссали и ссут на все эти маня-правила. Поэтому не существует никаких «компилятор не помёт, что там нет алиасинга», «компилятор поймёт, что там const», «компилятор потеряет контекст при касте» - нет - ему насрать.

Поэтому можешь хоть через void * аргументы посылать - компилятор всегда будет знать что это, ведь любой подобные анализ основан на flow, а не на типах и подобных мусорных аннотациях. Если ты своим говнокодом не сломаешь флоу - абсолютно неважно как и что ты там будешь делать - для компилятора все твои указатели, ссылки-говнилки всегда будут лишь алиасами на существующие объекты.

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

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

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

Я предвижу, вы ответите, что у C есть «стандарт»

Нету у си стандарта. Это этот убогий ламерок несёт ахинею. Всё крупное, что написано на си - ссало и будет ссать на стандарт.

Да даже в С++ много кто ссал на стандарт.

Лично мне пример с макросом не нравится, он, хоть и очевиден, слишком ограничен.

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

вплоть до

Есть __auto_type

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

Лично мне пример с макросом не нравится, он, хоть и очевиден, слишком ограничен.

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

Там было про этот пример, если что.

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

Можете дополнить ссылками, что почитать?

Понятия не имею - это элементарные вещи. Берёшь гцц, пишешь что-то типа:

#include <cstdio>



struct A {
  void hello() {fprintf(stderr, "%s\n", __PRETTY_FUNCTION__);}
};

struct B {
  void hello() {fprintf(stderr, "%s\n", __PRETTY_FUNCTION__);}
};

struct tagged {
  size_t tag;
  void * data;
};


// __attribute__((noinline)) 
void * cast(void * p) {return p;}

void bar(void * p) {
  auto & t = *(tagged *)p;
  switch(t.tag) {
    case 0: return ((A *)t.data)->hello();
    case 1: return ((B *)t.data)->hello();
  }
}

int main() {
  A a;
  tagged t{.tag = 0, .data = &a};
  bar(cast(&t));
}

Любой пример - мне лень его придумывать. У тебя есть -fdump-tree-all и базовая(эмпирическая) логика.

Видишь подобное:

main ()
{
  void * D.3763;
  struct tagged t;
  struct A a;
  void * _1;
  int _9;

  <bb 2> :
  t = {};
  t.data = &a;
  _5 = &t;
  _1 = _5;
  bar ( _1);

  <bb 3> :
  a ={v} {CLOBBER};
  t ={v} {CLOBBER};
  _9 = 0;
  return _9;

  <bb 4> :
<L1>:
  a ={v} {CLOBBER};
  t ={v} {CLOBBER};
  resx 1

}

Этот результат предсказуем. Далее, ты заранее можешь предположить(найти) правила свёртки. Я думаю, что ты не будешь спорить с тем, что _5 и _1(из каста) - это одно и тоже. void * p = aptr; bptr = p; - здесь в aptr и bptr - один и тот же объект.

main ()
{
  void * D.3763;
  struct tagged t;
  struct A a;

  <bb 2> :
  t = {};
  t.data = &a;
  bar (&t);

  <bb 3> :
  a ={v} {CLOBBER};
  t ={v} {CLOBBER};
  return 0;

  <bb 4> :
<L1>:
  a ={v} {CLOBBER};
  t ={v} {CLOBBER};
  resx 1

}

Собственно, результат был очевиден. И причины очевидны - компилятор(и ты сам) не отслеживаешь типы/говнипы и прочую херню - ты отслеживаешь именно флоу, о чём я и говорил выше. Т.е. если ты знаешь откуда в коробке взялся какой-то объект - ты знаешь что это за объект и тебе не нужно думать о том «что бы могло быть и как». Если про базворды, то это называется data flow analysis.

А вот когда этого не знаешь - ты не знаешь ничего. Собственно, если ты раскомментируешь там ноинлайн - флоу будет потеряно. У тебя разрезается поток, у тебя данные заходят в функцию и что там с ними происходит - неведомо. И именно это ломает оптимизацию, а не какие-то там типы/говнипы и прочие колхозные аннотации. Всё изменится, если ты сделаешь преобразование которое изменяет данные, либо имеет какие-то сайд-эффекты. То тогда да, компилятор не будет считать их одним и тем же.

Тоже самое касается и потуг про алиасинг. В ситуации с инлайном, да и даже тем же «constprop»-клонированием(как альтернатива инлайну без инлайна, если по-колхозному) - компилятор может ссать на все эти правила и генерировать функции какие хочет. И очевидно, тут ненужны никакие мусорные колхозные правила, о которых кукарекают хомячки. Ты узнаешь знаешь где у тебя алиасы, а где нет.

Все эти правила работают только тогда - когда ты ничего не знаешь. Тут уже приходят на помощь всякие правила/хинты.

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

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

Мой опыт общения на LOR-е показывает, что среди анонимных оппонентов процент адекватных и знающих людей слишком мал, чтобы тратить время на чтение анонимных комментариев. Поэтому речь идет не об авторитетах, а об экономии времени за счет отсева заранее мусорных комментариев (пусть даже ценой потери некоторых адекватных комментариев).

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

Если вас это не устраивает, то вы можете игнорировать меня точно так же, как я игнорирую вас.

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

Только не на Си, а на Фортран. А то Си много ресурсов жрёт и какой-то медленный. Вчера приложение написал, так оно почти ничего не делает, но весит 14 килобайт. И оперативки не напасёшься.

kostyarin_ ★★
()

Чистый план, душистый план... А сишечку лучше называть няшной и с классами. Ага.

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

Как мне нравится, когда кто-то, не имеющий профильного образования определяет неврологический статус поциента. Адекватен/не адекватен. Судя по Вашему слогу, милейший, мания величия - это просто ерунда.

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

Написанное каждый воспринимает через собственные когнитивные искажения. Вы, например, почему-то восприняли, что «адекватен/не адекватен» употреблен в медицинском смысле.

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

Прошу простить, но являюсь апологетом олд скульной научной школы, без этих ваших поней и прочего неологизма, посему для меня это определение соответствует бсэ. Или Вы можете удивить иными ипостасями теории познания, что заранее является вариантом проигрышным?! Ибо чересчур гуманитарно.

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

Вот вы как раз и являетесь примером «неадекватного комментатора» с «неадекватными комментариями». Ибо приходите суда обсуждать вещи, не имеющие ни малейшего отношения к предмету разговора. Ни к тому, что есть в «чистом С», а что «нестандартными расширениями С». Ни к тому, почему я прошу зарегистрироваться для продолжения предметного общения.

И да, мне пофиг, насколько ваше восприятие моих слов расходится с вашим же восприятием БСЭ.

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

Любопытненько. Судя по очепяткам, Вы или нервничаете, или малограмотны, несмотря на порожний пафос. Впрочем очепятаться «суда», пробематично. Или Вы не на кверти? Если Вы начнете анализировать поступающие данные, а не мыслить устоявшимися в Вашей голове клише, причинно-следственную связь будет проще увидеть. Порядка 20 лет не регистрировался и все было хорошо. Вынужден неудовлетворить Вашу просьбу. О причинах коллега выше великолепно написал.

Ок, раз Вам «пофиг на бсэ», открою Ваш, видимо, любимый источник информации и прочитаю: В праксиологии Адекватность — совершение одних и тех же поступков личностью в аналогичных ситуациях, умение контролировать свои эмоции в различных обстоятельствах. Определенное поведение которое ясно, и не вызывает у окружающих никаких вопросов. Формирование тождественных когнитивных картинок в памяти в аналогичных состояниях воли личности».

Назовите пожалуйста хотя бы одну причину, по которой я, как неадекватный по Вашему разумению, индивид,должен принимать для себя мнение окружающих, (то есть Вашу согласно определения), как истину, дабы у Вас «не возникало никаких вопросов»?!

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

Судя по очепяткам, Вы или нервничаете, или малограмотны, несмотря на порожний пафос

У меня проблемы с изучением языков, даже по русскому оценка была не выше тройки.

По поводу обнаруженного вами где-то пафоса без комментариев, как и по поводу выражения «порожний пафос».

я, как неадекватный по Вашему разумению, индивид

Я еще раз вынужден указать вам на то, что вы по-своему интерпретируете мои слова. Я не назвал вас неадекватным индивидом. Речь идет о том, что ваши комментарии в данной теме неадекватны, т.к. не имеют отношения к обсуждавшимся вопросам. Соответственно, я воспринимаю вас как неадекватного _данной теме_ комментатора.

Порядка 20 лет не регистрировался и все было хорошо. Вынужден неудовлетворить Вашу просьбу.

Да без проблем. Меня ваше мнение не интересует. Интересует ли вас мое мнение — мне вообще фиолетово.

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

Вы професcионал ... Пустые споры портят ваш имидж.

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

Толсто. Fortran - высокоуровневый язык и кушает ресурсов больше чем Си.

Как вариант можно и на Си писать, только весь код сунуть в main и использовать goto, т.к. fastcall - слишком медленный. А лучше сделать приложение можулем ядра, чтобы избежать переключения контекста user/kernel. Т.к. это очень медленно. И использовать BareMetalOS, разумеется, Linux-то не из быстрых. Да и весит много.

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

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

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

Вообще-то нет.

Но таки на Си компилятор не имеет возможности заниматься теми вещами, которые он проделывает для крестов.

Начнём с того, что С-компилятор ни чего для крестов не проделывает. gcc и g++ это разные компиляторы. И то, что gcc является «соборным компилятором» не отменяет того факта, что для кода на С++ будет вызван g++. C++ это уже давно не прекомпилятор к С под названием CFront. Да, первая версия С++ была именно прекомпилятором.

Где будет легче встроить f в тело функции, в f1 или в f2?

Ни где. Нет такого понятия как «легче» или «сложнее». Что в С, что в С++ ещё со времён CFront, везде компиль работает одинаково. Чтоб мне тут долго не рассусоливать, найдите книгу Артура Гриффитса «GCC. Полное руководство», она хоть чуток и староватая, но там рассказано в общем и целом как gcc/g++ работают.

В любом случае что С что С++ работают либо с адресом, либо с адресом + смещение. Они ни чего не знают о семантиках, о «проще» или «сложнее» и т.д. и т.п. Есть какая-то синтаксическая конструкция, они проверяют её синтаксическую корректность, переводят в ассемблерный код согласно правил RTL (register transfer language) для данной платформы (а gcc/g++ поддерживается ~60 платформ), применяют оптимизации, ассемблируют в объектный код и далее пуляют с таблицей перекрёстных ссылок линкеру. Всё. Больше ничего не происходит.

Но дальше вот тут есть одна малопонимаемая an mass херня. Со времён CFront стандарт на С++ малость «подобрел» и «округлился в талии». Туда понапихали всего что только в башку взбрело. И теперь g++ хочешь-не хочешь, а приходится разбирать все эти синтаксические конструкции. Поэтому, если у Вас есть два проекта с сопоставимой по объёму кодовой базой, то проект на С++ для своей компиляции займёт больше времени. Синтаксических конструкций просто больше. А там ещё vtables (vmt, без которых не будет того же наследования, даже если оно тут и не нужно) будет создавать даже если они и не пригодятся, короче, дохера работы, которой нет у компилятора С. Вот и всё.

«Легче» здесь только одному. Программисту. Человеку. Но и то вопрос, т.к. не факт что использование «всей мощи С++» это легче и проще чем создать в С свои типы данных, да просто работать с ними. Без того же наследования, если ему оно тут ни к чему. Значит, и механизмы обеспечения наследования он может на фиг выкинуть, не грузя себе мозг и не затрахивая мозги компиля. Если наследование здесь «к чему», то будь добр или реализовать, или сразу использовать С++.

Так что, с точки зрения компилятора, оно не факт что есть что-то «проще» или что-то «сложнее». С точки зрения человека вроде как есть. Но и то под вопросом. Всё остальное это уже просто ассемблер.

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

Да проще всё!

Я им тут уже порекомендовал почитать Артура Гриффитса, «GCC. Полное руководство».

После прочтения ими этого чуток и устаревшего, но действительно полного описания можно обсуждать что-либо. Без прочтения — только время терять. Не вкурят. Хоть тут весь местный форумный «Приорат С-она» костьми поляжет с Царём во главе. =)))

Не в коня корм. Они мыслят человеческими абстракциями. А надо смотреть на то как работает компиль. И ещё вопрос какой именно. gcc или g++.

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

Я не говорил о том, из какой именно организации врачи.

Понадобится. Это из тех, чьи рекомендации будут восприняты к однозначному исполнению любым эндокринологом на территории РФ. Там, у них... много народа. И база только увеличивается. Число диабетиков растёт.

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

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

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

Нет.

Не «Капитан Очевидность». В данном случае не меньше чем Адмирал Ясен Пень. =)

Вы не понимаете как работает компилятор. Приговор — читать Артура Гриффитса до просветления. А для начала мои ответы выше.

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

Да. Про то и речь.

В некоторых случаях «объект» это тоже «тип данных». Если удобнее так, то почему бы и нет и зачем себе отказывать в маленьких радостях?

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

Неадекватность - это все же ближе к медицине.

Есть ряд устойчивых выражений, которые не имеют прямого и однозначного отношения к медицине: адекватные меры, адекватный ответ, адекватное решение. Даже выражение «адекватное поведение», в зависимости от контекста, может иметь отношение к правилам этикета или соблюдению официального протокола, а не к медицине.

eao197 ★★★★★
()

есть только C.

остальное это DSL или предкомпиляторы, которые деляют вид что они язык.

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

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

также хотелось бы ткнуть пальцем в project graal, вернее в ту его часть которая truffle. всем желающим запилить Единственно Верный, потому что Правильный Язык (тм) посвящается. из коробки - профайлер, отладчик, все дела.

пилите шура, пилите (с)

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

В принципе, это очевидно.

А там уже просто как скажете. Вам виднее.

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