- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
В этой статье я расскажу как сделать дополнительный поток в программе.
Приступим.
1. Создаём форму
2. Кидаем на форму кнопку со вкладки Standart
3. Кидаем на форму Memo со вкладки Standart
Переходим в код и после
private
{ Private declarations }
public
{ Public declarations }
end;
Пишем следующие:
TVANSThread=class(TThread)
Private
Protected
Procedure Execute; override;
Public
Constructor Create(CreateSuspended: boolean);
end;
Далее кликаем по строчке Constructor Create(CreateSuspended: boolean); и жмём сочентание клавиш Ctrl+Shift+C
После чего должно появится следующие:
constructor TVANSThread.Create(CreateSuspended: boolean);
begin
end;
В эту процедуру вписываем следующею строчку:
inherited Create(CreateSuspended);
Прокрутим чуть ниже и увидим процедуру TVANSThread.Execute;
Она выглядит так:
procedure TVANSThread.Execute;
begin
end;
В неё вписываем следующий код:
for i:=0 to 10000 do Form1.Memo1.Lines.Add(IntToStr(i))
И не забываем о переменных:
var i:integer;
Далее кликаем по кнопке и вписываем следующий код:
TVANSThread.Create(false);
Анальный урок.
Автор - анальный учитель с сайта www.vans-soft.ru/
да, несомненно,как же без них...
> В эту процедуру вписываем следующею строчку
> жмём сочентание клавиш Ctrl+Shift+C
> Прокрутим чуть ниже
Бля... это все равно, что дать обезьяне гранату, и показать как из нее дергать чеку. Вешать, потрошить и четвертовать за такие туториалы по тредам, в которых нет теории о том, что такое треды, для чего они нужны, чем они опасны и т.п...
если это Дельфи, то я думаю что вы зря так волнуетесь - обезянам дали гранату с уже вытянутой чекой. в VCL только главный поток имеет право доступатся к гуям - все остальные должны делать через специально анально - извратный метод (имя уже не помню) который жутко тормозит, потому что посылает сообщение главному потоку что бы тот дернул метод который хочет доступатся к гуям.
Ведите себя прилично, или я забуду, что Вы-царь.
Да, это точно. Увидев иероглиф без контекста не поймешь не только то, что он значит, но и даже то, как его прочесть... А еще все можно записать кучей способов :) Руби очень похоже на японский...
А японец, увидев в первый раз русское слово без контекста, сразу типа поймет, как его читать и что оно значит?
>А еще все можно записать кучей способов
Какой это кучей? Есть ромадзи (транслит), есть стандартная запись на кандзи+кана, иногда дополняемая фонетическими подсказками (фуригана, также известная как "руби"). Какие еще способы вы знаете?
В итоге, как мне кажется, попытка провести аналогию между японским языком и Ruby немного провалилась.
А что делать японцу, который увидел где-нибудь незнакомый ему иероглиф? Искать его в словаре? Слать более опытному другу фотку иероглифа ммской? Он ведь его ни прочитать вслух не сможет, ни транслитом/каной записать... Даже вбить в гуглотранслейт он его не сможет, если у него не включен рукописный ввод.
P.S. Да, я в курсе, что в тех же газетах на редких иероглифах они пишут фонетические подсказки. Но что если автор подумал, что этот иероглиф всем известен? Или в данном тексте никто с фуриганой не парился?
Да давно бы уже отказались от балласта кандзи, и перешли на кану/ромадзи... Хотя оно к тому и идет, где-то я слышал, что как бы не половина взрослых японцев разучилась писать кандзи.
Спасает кандзи от вымирания слепая вера в то, что так китайцам будет понятна хотя бы половина слов, хотя японский и китайский даже не родственники. Например, иероглиф 人 (похожий на лямбду) в обоих языках обозначает людей, хотя в китайском читается как «жень», а в японском как «хито».
Похожая инерция есть и в языках программирования. Все знают, что какая-нибудь конструкция для анскильных питухов или что реализована через жопу, однако сохраняют её реализацию и практику применения «для совместимости».
хих-хи-хи) хи-хикс.
Миф об обратной совместимости ;)
Не нужно было прогуливать школу. Эта проблема решается упреждающим обучением.
А если пораскинуть мозгами, то я могу назвать пару способов решения проблемы донесения неизвестного иероглифа без передачи рисунка:
1. Описать иероглиф словесно - я более чем уверен, что составные части глифов имеют общепринятые названия, вот из википедии: "К примеру, кокудзи 峠 (то:гэ, «горный перевал») состоит из знаков 山 (гора), 上 (вверх) и 下 (вниз)." - как можно видеть, знаки "вверх" и "вниз" довольно очевидны по начертанию даже для европейца.
2. Сказать, на какой знакомый иероглиф похож. Если есть хоть какой-то контекст, то этого может быть достаточно.
http://www.nihongo.aikidoka.ru/kanji_key.html
... И ничего не понимаем. Ключи могут не иметь ничего общего с образованными от них иероглифами (на первый взгляд). Например, ключ № 85 в упомянутой таблице.
Это в корейской хангыли символы тупо составляются из двух-четырёх знаков, а в иероглифах исходные символы могут деформироваться.
А я на этом и не настаивал, говорилось про проблему "объяснить словами начертание неизвестного иероглифа". А это просто приятный бонус.
Википедия, к слову, утверждает, что подавляющее большинство иероглифов относят к фоно-семантическим, когда одна часть глифа указывает на смысл, а другая - на произношение, то есть даже незнакомый иероглиф можно хотя бы отчасти понять и/или прочесть.
Спасибо за ссылку.
Ну растыкал он операции, которые в сишке делают 5-ю символами на 25символов - что это дало? Извращения вида @ и прочего. Зачем? Пошел по пути паскалятинки, аля: Животное не может запоминить, что '=' присваивание, а '==' - равно. А давайтека мы сделаем ':=', '===' и прочее. А потом оказывается, что ':+=' выглядит как говно и давайтека мы оставим '+=' и прощай логика.
Паскаль придумал идиот и всё, что наследует идие паскаля - говно. Обвисший жиром язык - говно.
наоборот, если язык не позволяет писать говно - значит, он сильно ограничен.
ты вполне можешь писать и на Руби в Си-стиле (разве что библиотеки разные), практически один к одному перенося алгоритмы.
Я говорю не про семантическое говно - я говорю говно на базовые синтаксические конструкции языка. Говно на руби даже рядом не валялось с говном на сишке.
>ты вполне можешь писать и на Руби в Си-стиле (разве что библиотеки разные), практически один к одному перенося алгоритмы.
Не могу. Логики в языке нет. Синтаксис говно. Синтаксические конструкци избыточно говно. Всё тормазит. Я ограничен. У меня нет нормального конпелятор(интерпритатора) - а есть ущебное говно. Весь язык создан для того, чтобы его юзали идоты - он логичен только для идиотов. Половина libc тоже создана для идиотов( отчасти благодаря ущербным ОС типа маздайки), но у меня посиксапи, и посикслиб( вчастности линукслиб).
И да, на руби можно писать лишь в псевдоси-стиле. И этот псевдоси будет ещё более псевдо, чем в жабе.
они там настолько базовые, что их там почти и нет. Руби позволяет писать так, как ты хочешь. там даже операторы - это методы (например, 1+2 это значит 1.+(2) )
> Синтаксис говно.
голословное кукарекание. приведи примеры
> Синтаксические конструкци избыточно говно.
тогда сишка еще избыточнее и говнистее
> Я ограничен.
наконец, признался. ты не знаешь язык, поэтому нихрена написать не можешь.
> интерпритатора
интерпрИтатора нет, но интерпретатор языка справляется со своей задачей
> Весь язык создан для того, чтобы его юзали идоты - он логичен только для идиотов.
толсто-зелено, и неаргументировано.
> И да, на руби можно писать лишь в псевдоси-стиле.
конечно, для этого есть си. в стиле си на руби, с его мощью, пишут только питухи вроде тебя.
ты угадал только в одном
> тормазит
только потому, что Руби - интерпретируемый язык, он проигрывает компилируемым в нативный код языкам.
но поверь ты мне, если у тебя все тормАзит - то, скорее всего, Руби тут ни причем, а это ты открыл в ИЕ 200 вкладок.
Методы - говно. Нету в программировании никаких методов - есть add r/m r/m. На более низком тоже add. Но только в питушарской руби есть методы на интех.
Ну, давай мне запили strchrnull() на руби, я поржу.
>интерпрИтатора нет, но интерпретатор языка справляется со своей задачей
Ага, тормазит так, как питушону и питушарскому жабаскрипту и не снилось.
>толсто-зелено, и неаргументировано.
Напиши на нём что-то сложно и производительное. Это и есть задача не для идиота.
>только потому, что Руби - интерпретируемый язык, он проигрывает компилируемым в нативный код языкам.
Да хоть конпелятор для него запили - он проиграет в говно. Он проигрывает интерпритируемым ЯП в хлам. Вон плюсы тоже конпелируемые, но сливают сишке в хлам. Любимые отговорки питухов.
Возмём жабаскрипт - тормазит как говно. Меняем стиль написания кода с питушарского на сишный - опа уже не тормазит, ибо си-стайл поддаётся оптимизации, а питухстайл нет. Ты хоть 100конпеляторов напиши для сопливой типизации и кастов струки в инт на каждом шагу - будет тормазить как говно.
Говоришь питушачьими шаблонами, аля "не компилированная - тормазит". Да сделайт ы сишку интерпритируемой - тормазить не будет, ибо это сишка. А все твои интерпритируемые языки давно компилируемые, но тормазят как говно.
Фу, блядь, фу, нахуй! Специально для таких уебков придумали термин "питоничненько", чтобы их стебать.
Есть ещё опечатки, не распознаваемые компилятором. Правда питушок, не писавший ничего больше 50 строк, не знает, что это такое и каковы последствия.
Ошибки возможно только в условиях, а пацаны отделяют условия дру от друга. Отделяя условия - пацан видит свои словия и шанс обишки минимален.
Так же, пацан перебирает в условиях в основном указатели, а писать ptr == ptr - ущербанизм, который никто никогда не пишет.
Я даже не могу придумать случаев, где в реальном коде( не коде анскильных питухов типа тебя, которые не знают даже синтаксиса своего ЯП - я уж не говорю о семантике и глубинных особенностях конпелятора/платформы и прочего) можно написать = вместо ==.
В 95% случаев сравненеи едёт с константой, а юзать дальше значение, вернувшие выражение (a = 10) не имеет смысла, ибо оно возвращает константу и всегда истинно(кроме нуля). Поэтому конпелятор это везде увидит и напишет тебе - смысла в твоём выражении нет - ты питух.
Остальные 5% случаев питухи не юзают.
Нихуя, питух, ГЦЦ не распознает, потому что в питушином сишком синтаксисе, придуманном долбоёбами (но ты даже им и в подмётки не годишься) есть много валидных конструкций, отличающихся одной малозаметной опечаткой, но имеющих совсем разный смысл.
> В 95% случаев сравненеи едёт с константой
Я смотрю, у тебя богатый опыт, много проектов зашипил?
Питух кукарекает, а примеров привести не может - удиви меня питух, примерами своими.
>Я смотрю, у тебя богатый опыт, много проектов зашипил?
Поэкты питухов типа тебя - мне не интересны, ибо ты животное, которое писать нормально не может из-за тотальной анскильности и недоразвитости.
Ты сам же сказал про if(a=b), только твоя отмаза что "это ненужно" выглядит жалко, больше похоже на признание слива.
main.c:33:2: предупреждение: присваивание, используемое как логическое выражение, рекомендуется [-Wparentheses]
if(a = b)
^
Дальше?
А разве у тебя код от них не покрывается сплошняком жёлтым?
Так же, я пишу код валидный для гнуси, с чего он должен давать ворнинги? Мой код никогда ворнингов не даёт.
ладно уж питон - я мне тоже не нравится оформление блоков табуляцией.
Питон хоть и паскалятинка - но там нет бегинов/ендов больше, чем самого кода. Вот возьми любую паскаль байду - почитай количесво символов в begin/end/function и прочих идентификаторов - т.е. того, что в сишке записывается одним символом - этих символом будет больше, чем занимает сам код программы.
пиздеж и провокация, от Си так только похожий синтаксис и конструкции (чтобы сишники не охуевали)
> Питон хоть и паскалятинка
пиздит и не краснеет. уж что-что, а питон создавался именно как легкочитаемый язык с минимумом ключевых слов и всяких скобочек. и именно потому символов там гораздо меньше, чем в аналогичном Си-коде.
Язык этои есть синтаксис и синтаксические конструкци, а не либц, анскильная лалка.
>пиздит и не краснеет. уж что-что, а питон создавался именно как легкочитаемый язык с минимумом ключевых слов и всяких скобочек. и именно потому символов там гораздо меньше, чем в аналогичном Си-коде.
Мне похрен как он там создавался - его синтаксис упращённая паскалятинка. Я и написал, что хотя это и паскалятинка - там нет миллионов избыточных символов, зачемт ы вторишь мне?
Нет, там символов не меньше. Такое страшное говно, месиво и кишки. Ну выпили в питоне скобочки из всяких выражений - что это дало? Кон стал копактней, красивей? Нет - он стал неразборчивой writeonly портянкой.
там нет libc.so
> что хотя это и паскалятинка
> там нет миллионов избыточных символов
я писал именно про избыточность бейсиков и паскалей.
> Кон стал копактней, красивей?
конечно, они не отвлекают от сути.
Ты тупое животное - там нет либц, но есть либруби, питух. И для тебя слив-питушка язык и есть эта либруби.
>я писал именно про избыточность бейсиков и паскалей.
Ты начал кукарекать, что питон типа не избыточный, ноя назвал его паскалятинкой, которая избыточна.
>конечно, они не отвлекают от сути.
Реально? Открой любой код на питоне - лютое говно. На миллиард строк нитко даже не подумает на нём что-то писать, на сотюно тысяч тоже, даже на десяток уже ссыкатоно.
> Нет - он стал неразборчивой writeonly портянкой.
Да ты ебанулся, байтодрочер. Иди такты считай, сука, готов спорить, что именно твое байтоебство и есть writeonly.
Вот-вот. Везде будет или скобочка, или богомерзкий end, а в питоне - только наблюдательность читателя.
Не дай Бог увидеть код с копипастами, где пробел чередуется с табом. В случае сишки это можно исправить хоть в блокноте, а тут - ад.
Ибо нехуй.
Но во втором-то можно новый уровень начать с нового типа отступов. (см http://ideone.com/79Rpn0)
Лол, именно в этом и есть говно, в том, что какого-то хуя они унаследовали некоторые самые уёбищные моменты синтаксиса.
Впрочем, красноглазому питушку, мнящему себя хацкером, всегда кажется, что всё, что от сишки - то хорошо, ведь это же сишка фап фап фап.
Меня не интересует мнение животного, который не осилил свой ЯП.
Уёбищный switch
Уёбищное struct type varibale;
Уёбищный unsigned
Уёбищное объявление указателей на функции, как будто нарочно пытались жопу на голову натянуть.
Даже объявление массивов уёбищное.
Лучше, чем в питухпаскалятинки.
>Уёбищное struct type varibale;
Питух не осилил тайпдеф? Пишут структуры как ты только питухи типа тебя. typedef struct {} type_t; type_t var;
>Уёбищный unsigned
Чем? Питух не осилил stdint? Иди проспись, питушара. uintsize_t.
>Уёбищное объявление указателей на функции, как будто нарочно пытались жопу на голову натянуть.
Просты ты питушара анскильная - вот тебе и не понятно. Понятней и занимает места меньше, чем в питушачьем паскале.
Есть typeof(f) f_ptr;
>Даже объявление массивов уёбищное.
int b[] - куда ещё проще? Давай покажи поскалячье говно - я поржу. И да, пацаны ны юзают массивы, питух.
Что потвоему лучше - написать 4 функции по 30строк, а потом массив указателей, либо писать свич на 200строк?
И да, для этого надо ввигачить в сишку лямбды, чтобы было ещё красивей. Причем не лямбды из ваших питух ООПговн, а нормальные.
Это кукареканье какое-то, тут даже отвечать на это ничего не надо.
Про "понятнее" - кукарекать не надо, ладно? Правило улитки, вся хуйня, ага...
Меньше места занимает - да, школьники любят на это дрочить.
> int b[] - куда ещё проще?
Да хотя бы int[] b. А то какого хуя название переменной внутри объявления типа?
>Да хотя бы int[] b. А то какого хуя название переменной внутри объявления типа?
У тебя инт есть тип. Тип всегда один. int[10] b: Это типа новый тип 10интов, типа которого есть б? Нет питух int b[10] - б стостит из 10 интов. Ну и да, int a, b[2], c[100];.
Ты питух несёшь полное говно, лижбы оправдать свою анскильность - придумываешь тысячи говно, игнорируешь 80% моих кооментов. Не отвечаешь на всё. Глупая сливашка-букашка.
А int b[10] - это хуйня.
> игнорируешь 80% моих кооментов
На белый шум-то нахера реагировать?
Ладно, приходи как поумнеешь. Иди к своим дружкам, которыет оже говно под ведроид написали - там все профи, а тут не кукарекай. Анскильный гений одного говна ненужного.
Чем надо было думать, чтобы создать это? Это как сделать молоток, который весит 50килограм - боёк которого решето. Возможно гвоздь со шляпкой диаметром 3-4сантиметра ты забьёшь - но остальные ты будешь забивать через жопу.
Сишка же - это набор молоточков - от ювелирных - до тысячитонных. А истинная сишка - вообще материал, из которого можно создать молоток любого вида.
Язык для домохозяек же
Если человек не отринул паскаль с первого взгляда на него - он уже с 99% не будет программистом никогда - максимым заедушной макакой. Программист-дворник - он метёт, бабло гребён - но нихране не понимает что он и как метёт.
но господа преподаватели считают иначе, поэтому мы имеем "99%" "заедушных макак"
лолшто
> Чтобы тебе написать функцию - тебе надо написать в 30раз больше символов, чем на сишке
лолшто
По статистике сишка самая многословная. Только статистика составлялась не для твоего питушиного говна, а для нормальных проектов.
> Сишка же - это набор молоточков - от ювелирных - до тысячитонных. А истинная сишка - вообще материал, из которого можно создать молоток любого вида.
Я бы понял, если бы ты сказал это про Лисп, но про сишку... Ты полный долбоёб.
Выкати мне код с перфомансом сишки на паскале. Потом выкати мне код, который будет работать без рантайма. В том же ОС. Какой код будет работать в кернелспейсе твоей ОС? Паскаль не обладает возможностями для написания быстрого кода - неспособен на быструю обработку информации вообще - это основа сегодняшнего кода. Так же он не способен на низкоуровневое общение с хардварной частью - неспособен работать без рантайма - тотальное говно.
>лолшто
Аналог на паскале, питух.
>Только статистика составлялась не для твоего питушиного говна, а для нормальных проектов.
Состовлялось для говна, которое писали питухи типа тебя, которые нихрена не осилили сишку.
>Я бы понял, если бы ты сказал это про Лисп, но про сишку... Ты полный долбоёб.
Лисп написан на сишке, питух. Ядро лиспа на лиспе - тоже написанно на сишке. А так же лисп неможет нихрена - производительный код на лиспе где? Про лисп машины не кукарекай. ОС на лиспе где? Нету. Не породию на ОС на бинарном лиспе, а реальную.
memcpy на лиспе мне пожалуйста дайте, как опировать из кернел в юзерспейс? Указатели мне запили. А где симды, нити? Поисксапи? Как прочитать файл? Как заммапить файл? Как сохранить контекст?
На тебе софтрендер, тут где-то в теме:
http://www.gamedev.ru/code/forum/?id=138759
упирается в память во внутреннем цикле, сишка бессильна
> Потом выкати мне код, который будет работать без рантайма.
Какого рантайма? Борландовского? Лол, у меня всё работает без рантайма, вот жеж ты питух, нихуя не знаешь.
> Аналог на паскале, питух.
Ну? А у тебя питушня в условии.
Хотя да, ++ в условии, когда оно типо и проверяет, и выполняет - ведь это же смотрится так круто, так по-хакерски, тупым курочкам пубертатного периода почему-то нравится тот гнилостный питушний запах, который издаёт подобный код.
> Состовлялось для говна, которое писали питухи типа тебя, которые нихрена не осилили сишку.
Так ты ж ваще нихуя не написал полезного, откуда тебе знать статистику-то?
> Лисп написан на сишке, питух.
И чё.
> memcpy на лиспе
Нахуй тебе memcpy, ты питух анскильный, если тебе нужен memcpy.
Почему разные типы?
Для данной функции это не актуально, но так завещали деды. Ты можешь передалть её тело под юникод - и будет работать. Для этого её определение так и запилил в либц.
Для юникода в сишке есть wchar_t* wcschr (const wchar_t*, wchar_t), а сигнатура strchr — говно, потому что основана на отживших своё традициях и легендах.
Животное, ты понимаешь, что такое utf8? В этом ваша проблемы - вы питухи нихрена не понимаете, и паскаль ваш писали животные, которые так же как и вы ничего не понимаете.
Мой char *, int - может юзатся для utf8, а твоя питушня будет давать сотни оверхедов в зависимости от типа утф"а - запилена для маздайской ереси.
Я буду писать 75гигов текста, а ты питух 400. Конечно - это же так круто, когда питух несёт херню и нихрена не понимает.
>Для юникода в сишке есть wchar_t* wcschr (const wchar_t*, wchar_t), а сигнатура strchr — говно, потому что основана на отживших своё традициях и легендах.
Не для юникода, а для говна. Никто в здравом уме этим говном не пользуется. Это маздайская ересь.
unsigned char* _mbsset (unsigned char*, unsigned int); Ты это видишь? Такая же сигнатура, что и обычных стрингов - потому, что придумали это не питухи типа тебя, и которые придумали паскаль, а вменяемые человеки.
char * f(char * p, int c); - сигнатура подходит для всех видов НОРМАЛЬНОЙ кодировки. Для питушни же надо что-то менять.
Почему strchr("Trolololololo", 'xyzl') возвращает lololololo?
http://ideone.com/KsuBoF
Result: runtime error.
return 0;
Теперь нормально?
Патамучто 'xyzl' - 32бита, последние из которые x, а начальные l.
А я отвечу, какого: в синтаксисе K&R все необъявленные типы считались интом. И для тех питухов, которые забывают #include, в сигнатурах стандартных функций использовали инты там, где нужно и где не нужно, чтобы программа хоть как-то слинковалась и запустилась.
Патамучто ты питух написал много символов - а надо 1. А теперь вставь туда утф8 символ и смени тело на твой mb - получишь профит. Сигнатура не поменялась - а всё работает. Оперхеда нет.
А питушки типа тебя будут страдать фигнёй.
Питух - все переменные итак инты, ибо это регистры - а регистры на твоём питух i386 интовые.
Инт здесь только потому, что в старой сишке он был по умолчанию, а прототипы функций не требовались. В C++ наконец-то додумались требовать наличие прототипа.
Поскольку в сишечке типизация нестрогая, действительно при наличии выравнивания все переменные инты (кроме тех, что по размеру больше инта, и кроме чисел с плавающей запятой).
Однако, что делать, если в компиляторе по умолчанию char беззнаковый, а int знаковый?
Кроме утф8 нет других кодировок - всё говно.
>Инт здесь только потому, что в старой сишке он был по умолчанию, а прототипы функций не требовались. В C++ наконец-то додумались требовать наличие прототипа.
Ну замени на чар - вызови это для инта. Что изменится? Ничего. Его там оставили как идеальную сигнатуру.
>Поскольку в сишечке типизация нестрогая, действительно при наличии выравнивания все переменные инты (кроме тех, что по размеру больше инта, и кроме чисел с плавающей запятой).
Выравнивание всегда есть - на нормальной архитектуре всё лежит в регистрах, и все вычисления делаются с регистрами и в регистры.
>Однако, что делать, если в компиляторе по умолчанию char беззнаковый, а int знаковый?
Какая разница какой он, глупышка. За знак в них отвечают совершенно разные биты. Конпелятору похрен какие ты там знаки юзаешь, как и процессору.
Вот из-за такого «какая разница» была написана куча программ, в которых лимиты вдвое меньше ожидаемых.
Она была написана лишь потому, что её писали питухи вроде тебя.
Паскалевского. Любого. И да, и за кучей твой код сам следит? И дллки сам подкружает - вот жешь молодец.
>^ <> #0
Какие конструкци, я даже тебе фору дал и написал != 0, хотя его вообще можно не писать. (Result^ <> #0) == (*str) - как крута, такая немногословность. Что мы получем - в 10раз тормазнее, в 10раз больше символов.
>Так ты ж ваще нихуя не написал полезного, откуда тебе знать статистику-то?
Бомже2дигрулька уровня лабы в недовузе под ведроид - это жет полезно.
>И чё.
И то, что я могу на сишке написать всё, что угондо - включая свой лисп. Ты не можешь.
>Нахуй тебе memcpy, ты питух анскильный, если тебе нужен memcpy.
Я же написал - как ты будешь из кернел в юзерспейс копировать? И да, потомучто в лиспе нет мемкопи - он ниначто, кроме баловства не способен.
Где доказательства тормознутости?
Ну вот давай, иди в соседний тред - собери тот код, напиши его на паскале - сравни перфоманс.
1. Что делать с точками, находящимися на границе и по углам? Оставить, как есть, или считать среднее для 3-4 соседей?
2. Проход у нас один или несколько?
Проходов мильярд.
А тут и считать нечего, после мильярда проходов все элементы будут = 0.
Где тут 10 раз, питух? В моём коде только раскрыты кое-какиесишные умолчания, которые часто осложняют жизнь.
Кому усложнаяют - питуху типа тебя да, мне нет.
Пишешь свой SYSTEM.PAS. Все функции реализовывать не обязательно, можно реализовать только сокращённый комплект хоть на асме, хоть на чём угодно, что в объектные файлы компилируется.
В своё время для 16-битного TP 7.0 энтузиасты писали функцию умножения 32-битных чисел через 32-битные регистры (ага, код с префиксом размера). Перфоманс на 386+ повышался.
Это всё говно, аля напиши либц. Паскаль избыточно говно и если я в сишке могу тупо не юзать либц - нам паскале без юза либпаскаль - ты не напишешь нихрена.
Если на сишке я могу написать себе мемкопи, то на паскале нихрена, либо она будет тормазить как говно. Именно поэтому никто для паскаля рантайм на паскале и не пишет - всё это написанно на си и дёргает либц.
В делфятне есть встроенный ассемблер, но это говно, а не ассемблер, причём говно времён динозавров.
Этим и отличается нормальный язык от говна - для нормального языка рантайм для него написан на нём же. На каких языках рантайм написан на них же? Сишка и наполовину для плюсов - всё. Остальные ЯП - говно.
Но с другой стороны, если в сишке операция со сложными объектами, откуда появится код? Да, его вставит сишный компилятор из себя. А как он там реализован? В виде готового массива машинных инструкций или на ассемблере, под каждую платформу индивидуально.
Неужели Царь никогда не видел исходников гцц?
А в известных реализациях Object Pascal всю эту питушатину из компилятора перенесли в библиотеку, в модуль System. Не всё ли равно, где её держать, в рантайме или в компиляторе?
В сишке нет никаких сложных объектов - в том и суть сишки. Сложнее фора там ничего нет.
>Неужели Царь никогда не видел исходников гцц?
Лучше бы не видел.
>А в известных реализациях Object Pascal всю эту питушатину из компилятора перенесли в библиотеку, в модуль System. Не всё ли равно, где её держать, в рантайме или в компиляторе?
Из сишки можно просто писать код, который будет зависеть только сам от себя. Ты контроллируешь всё. В паскале там не прокатит - в этом и пичаль, ибо всё через жопу.
А между Си и потомками Паскаля особой разницы в контроле нет. Директивы и простые операции есть и там, и там.
Вон питух написал уже strchrnull, потратив в 5раз больше символов. Которая тормазит как говно, я имею фичи - могу заменить char * на __v16qi *. Где это в тухлой паскалятинки? Где? Нихрена нет - всё говно.
Нормальных инклюдов нет, нормальных операций нет - нормальных фич нет. Где мой свич, где мои нормальные указатели? Где всё? Нихрена нет.
Ну придумай что-нибудь посложнее. Добавь туда ссешку, какие-нибудь вызовы - твйо дельфи зафейлится.
Я могу написать в 5, 10, 20 раз быстрее - ты нет. Это твой предел.
Гцц тут тупанул, но и функцию эту так пишут только питухи - он не знает куда оптимизировать - каждый переход, оба сразу. Но в гцц есть фича для этого
И да, питух - приведённый тобой код аналогичен твоему.
В остальном же не вижу улучшений: зачем-то два разыменования указателя (%rax), когда можно было разыменовать один раз.
> Гцц тут тупанул
> Но в гцц есть фича для этого
Так покажите эту фичу и как ей пользоваться.
Гцц оптимизировал оба перехода - .l5 будет работать быстрее без мува. .l3 он объединил с мувом для того, чтобы самая функция на нулях выполнялась быстрее. Поэтому пацаны никогда в функциях не реализуют проверку на пустые строки.
http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html __builtin_expect()
Это надо изначально писать нормально, а не как питухи - тогда и проблем не будет.
Hint: цикл начинается с .L3.
Тогда уж просто войти в цикл не на L3, а со второй строчки после L5, где movsbl.
Возникла другая мысль. А не использовать ли нам пиписюнчик LODSB? Звучит заманчиво: загрузка и инкремент одной инструкцией. Правда, вместо %rax придётся использовать %rsi.
Вывод: микрооптимизация — трата времени, поскольку в очередной реализации процессора её могут поломать.
Возможно из-за декодера команд. Если мне не изменяет память, он загружает блоки по 16 байт, и за 1 такт может раскодировать не более 6 команд. И если набивать команды слишком плотно, на всю катушку юзая inc/loop/lodsb и прочую мелкую херню - упадет пропускная способность декодера.
Ты не умеешь считать.
Мне не рвёт.
Лолшто? Паскаль многословней сишки хотя бы из-за всяких begin, end, procedure, function и прочего многословного говна, лол.
> Только статистика составлялась не для твоего питушиного говна, а для нормальных проектов.
Давай пруфы на свою статистику.
Суть в том, чтое сли сложить все эти "begin, end, procedure, function и прочегее" в одну строку, то эта строка будет длинне самого кода. В этом и пичаль.
Какая статистика - этот питушок даже что такое сишка не знат. Он знает сишку, как часть плюсов - минимальные примитивные конструкция и пару функций из либц. На ней он ничего не писал, не видел кода на ней написанного, не видел конпеляторов. Нихрена не знает и кукарекает.
Ебать, этот питух, не писавший нихуя полезного, меня учит.
Твои аналогии говно. Имена - должны быть осмысленные, но заменять {} на бегин и енд - расточительство, как:
pchar strchrnullll(pchar str, char c) {}
заменять на:
function strshrnullll(str:PChar; c:char): PChar; begin end;
Говно. Имена те же самый - места в 2раза больше.
Статистика бралась по строкам кода. Длина ключевых слов это вообще хуйня, не имеющая никакого значения.
Сишка сливала именно из-за низкоуровневости и необходимости на каждый чих делать закат солнца руками.
Это и есть та самая многословность, и, самое главное, читабельность кода.
> Сишка сливала именно из-за низкоуровневости и необходимости на каждый чих делать закат солнца руками.
Это да, собственно, для задачи нужно выбирать адекватные инструменты. Сишка хороша для ядер ОС, компиляторов, задач, требующих производительности.
Паскаль не может ни в них, не в высокоуровневые задачи.
Нечитабельность, в случае паскаля. Фикс.
>ни в них, ни в
Еще фикс.
Скажешь, что сишка читабельнее Паскаля? Тогда ты тупой фанатик, тут даже аргументировать бесполезно.
[](){} — это что? Это мозгу легко понять?
Скобочки запили для захвата, ибо можно было lambda(){}, но не кошерно.
Особо лучше ты не придумаешь.
Фанатики такие фанатики.
>Читабельнее для кого? Для англоговорящей домохозяйки?
Ты не согласен с тем, что мозгу легче парсить формы, чем слова? Может быть ты вообще без подсветки кодишь?
Слова -- это названия переменных и функций, { и } парсятся быстрее их и мозг их не пытается интерпретировать как названия переменных и функций. То же самое с операторами. Не, ну а чо, почему не писать 2 addition 2 вместо 2+2, мозг же на слова заточен.
Мы говорим о читаемости, а ты уходишь от темы, слив.
То, что компилятор не понимает тебя в случае опечатки - это плюс.
> Не, ну а чо, почему не писать 2 addition 2 вместо 2+2, мозг же на слова заточен.
Потому что арифметику в первом классе учили все и это обозначение всем понятно, в отличие от (+ 2 2)
А вас программированию и английскому не учили? С пеленок это все знали? Что значит begin, end, procude, var?
>это обозначение всем понятно
Мне не надо, чтоб было _всем_ понятно. Мне надо, чтобы заглянув в исходник, я не сломал глаза об procudure var integer begin if then else end end.
typedef int (*func)(int);
Смотришь и думаешь, чем первая пара скобок отличается от второй.
Вырви себе глаза, тогда и ломать не придется. Развели спор на пустом месте...
А в Си круглые скобки могут обозначать вообще что угодно. Приходится гадать, что в данном случае какие скобки обозначают.
В русском языке запятая тоже может означать вообще что угодно. Точка тоже.
Тебе, анскильному питуху, надо гадать. Скобки в сишке значат только одно - функция, если они преставленны в идентификатору. В остальных случаях - они значат то, что значат в матвырениях - а именно разделение порядков операторов.
Если тебе это не ясно - ты животное.
Тарас запята ты тире питух точека Понял вопросительныйзнак. Да, да, это лучше, чем то, что есть.
Нет, не считаю. Потому что мозг успешно натаскан на небольшое вкрапление знаков препинания в тексте.
Закрывающая скобка выполняет ролько точки и перевода строки.
Именно.
> Сишка хороша для ядер ОС, компиляторов, задач, требующих производительности.
Именно, и для чего-то более большого сишка уже начинает мешать.
> Паскаль не может ни в них, не в высокоуровневые задачи.
Для байтоёбства в Паскале есть все нужные инструменты и возможности.
Что касается высокого уровня, то уровня лиспа тут и близко нет, но шаблоны, перегрузка операторов, автодеструкторы, замыкания в нём есть, хотя и весьма неудобны.
Почему я не вижу ни одного используемого ядра ОС/компилятора/чего-то еще значительного на нем? Видимо, потому что байтоебство на нем не удобно и просто прикручено сбоку.
> Что касается высокого уровня, то уровня лиспа тут и близко нет, но шаблоны, перегрузка операторов, автодеструкторы, замыкания в нём есть, хотя и весьма неудобны.
Где есть? В standart pascal я такого не вижу. Может быть ты про какие-нибудь делфи?
Потому что инфраструктура важнее любых фич языка.
> В standart pascal я такого не вижу.
Давай обсудим, чего нет в C79 тогда что ли.
Фичи? В паскале? Не смеши. Между прочим, я был прав, там даже union'ы без извращений нельзя сделать.
>Давай обсудим, чего нет в C79 тогда что ли.
Не путай версии с диалектами. Про какой диалект ты говорил?
Это в сишке union извращённые, а в Паскале самые обычные.
> Не путай версии с диалектами. Про какой диалект ты говорил?
Про самый современный.
Ололо. Может покажешь, как в ваших неизвращенных юнионах сделать разбиение long на lopart + hipart?
> Про самый современный.
Дай ссылку на стандарт. Или хотя бы на компилятор, который его поддерживает.
Открой windows.pas, посмотри что ли.
Может ты расскажешь, как это сделать в сишке без хуйни с промежуточной анонимной структурой?
> Или хотя бы на компилятор, который его поддерживает.
Дельфи-2009
Не нашел такого файла у себя.
>Дельфи-2009
Т.е. Delphi == pascal? Все ясно, лол.
Погугли.
> Т.е. Delphi == pascal? Все ясно, лол.
Это достаточно современный диалект Паскаля, что не так?
Слышь, сливалка, ответь про то, как в сишке делать юнионы без промежуточных говноструктур.
> Погугли.
Windows.pas is a Pascal/Delphi unit which contains the Windows-specific API declarations. It is the Pascal equivalent to windows.h, used in C.
Что сказать-то хотел?
Показать, как union в Дельфи пишутся.
Вычислять каждый раз с & 0x...? Заебешься же.
покормил.
К сожалению, для Object Pascal нет официального стандарта, но его реализуют Turbo Pascal, Delphi, Free Pascal, Virtual Pascal, TMT Pascal (Framework Pascal), WDSibyl, Oxygene, MIDletPascal, DWScript, PascalABC.NET и частично GNU Pascal.
С Паскалем сложилась странная ситуация: многие компиляторы реализуют вариант языка, который не стандартизован, а компиляторы Standard Pascal (и Extended Pascal) можно назвать экспериментальными.
*window.pas
Погугли его.
> у меня гента
Красноглазая школота детектед с достоверностью 95%
Уже не нужно, ниже привели пруф убогой реализации юнионов.
> Красноглазая школота детектед с достоверностью 95%
Чини детектор, луркоёб.
(ответ гуесту)
'a':
...
'b':...;
end;
Да-да, можешь теперь поржать над нелогичным синтаксисом. Но у синтаксиса тоже есть свой смысл - если мы все-таки хотим запилить поле селектора, мы можем написать
case field: AnsiChar of
'a':
...
'b':...;
end;
хотя этот field и не будет ничего контролировать.
>Именно, и для чего-то более большого сишка уже начинает мешать.
/thread
Убило наповал))) Молодец. Ты его рвешь)
Есть несколько компиляторов Extended Pascal, но ими никто не пользуется, а уж Standard Pascal сейчас днём с огнём не найти.
А о чем ты тогда можно говорить. Или ты изобрел новый способ кодить на на с++ - без использования win api?
Эм, Qt?
Отказаться от компилятора и вручную магнетизировать сектора жесткого диска.
В делфи же тоже кодят без использования winapi, пока не понадобится какое-то извращение, которого в библиотеке не реализовали, но его можно пильнуть через winapi.
Пусть жлоб набъет себе шишки.
Каким образом?
Небо станет светлее.
С другой стороны, весь питон сделан для линупса.
Переформулирую своей ответ:
Чтобы петушкам-быдлокодерам(типа короля и гостя) зубы дробить.
ЗЫ прям реально слышал фразу "винапи линукса чего то там ....."
Не в линуксе нет, а линукса нет )
Линукс - это эротический сон пингвинофила, не надо всем его пересказывать.
Ты что, к пингвинам неравнодушен? О-о..
Ты еще на андроид спяздни, что он при попытке работы с сетью из главного потока эксепт бросает.
А это походу был ответ гугла на "андроид - тормозное говно, в котором половина прог не отвечает по 3-5 секунд" ;)
Я даже не знаю, блокирующие они у меня, или нет, потому что я их применяю, только получив сигнал о новом сообщении.
Качалка файлов?
А как насчет такого:
while c=true do
label1.caption:=inttostr(x)
)
Как-будто где-то еще не так. Тредсейф гуи библиотек раз два и обчелся. Большинство только в главном потоке (или дополнительном но один хрен одном, как swing) и работают.
WinAPI - тредсэйф. (Сюрпризом было что MFC не тредсэйф.)
Какао частично тредсэйф.
> Какао частично тредсэйф.
Еще AWT, емнип, потокобезопасен.
Итого насчитали 2.5 библиотеки. Собственно как я и писал выше: тредсейф гуи библиотек раз два и обчелся.
Меня - всем устраивает. Я просто рассказывал о факте. Переадресуйте вопрос оратору выше :)
Потокобезопасный гуй не нужен. Почему?
Во-первых, он будет медленнее однопоточного из-за того что почти в каждой гуишной операции будут стоять синхронизации или пробросы черед тредсейф очередь.
Во-вторых, хоть сам гуй и будет потокобезопасным, но остальные то данные и функции - нет! В результате имеем более сложный код и бОльшую вероятность напороться на гейзенбаг, чем с однопоточным гуем.
В-третьих, скольким задачам действительно необходимо много манипулировать гуишными элементами из воркеров? В большинстве случаев воркеру достаточно доложить о прогрессе/передать промежуточные результаты или перекинуть результат какого-то вычисления/загрузки в GUI поток.
Охуеть замедление. Есть пример, когда взаимодействие с гуем будет узким местом в программе?
>Во-вторых, хоть сам гуй и будет потокобезопасным, но остальные то данные и функции - нет! В результате имеем более сложный код и бОльшую вероятность напороться на гейзенбаг, чем с однопоточным гуем.
Ну это вообще пушка. Т.е. потокобезопасность гуй фреймверка не означает потобезопасность остального кода - и это плохо, лучше тогда и гуй сделать небезопасным? Я правильно понял?
Проггеру дали безопасный по умолчанию инструмент без особых накладных расходов на безопасность, что в этом плогого?
Да, погорячился я тут. Буферизация рисования спасет от узкого места.
> что в этом плогого
Потокобезопасный гуй будет приветствовать работу с ним из нескольких потоков (иначе зачем его таким сделали?).
Из-за этого каждый виджет, который напишу я или кто-то еще тоже должен быть потокобезопасным (ведь если половина из них безопасна, а половина нет - это полная жопа).
В итоге что имеем - до внедрения потокобезопасного гуя о безопасности я задумывался только в воркерах и расшаренных между гуем и воркерами классах.
После внедрения - во всех gui'шных компонентах, и почти во всех классах, которые используются из гуя.
Люди стараются минимизировать взаимодействие между тредами, а вы своим многопоточным гуем повышаете его...
P.S. Вот еще статейка есть на данную тему, там другие доводы: https://weblogs.java.net/blog/kgh/archive/2004/10/multithreaded_t.html
Чет дохуя букв на бусурманском.
Так вот типичный нуб не запилит тред сам, по своей воле. Там же сабклассить и т.п. Поэтому поток один и проблем с многопоточностью никаких.
А здесь ему показали как это сделать, поманили конфеткой. Но не пояснили зачем это все и че оно делает. Вот поэтому я и предложил четвертовать таких авторов.
https://www.google.ru/#output=search&q=create+thread+tutorial
Достаточно одного публично повешать, выпотрошить и четвертовать, и остальные сами свои говнотуториалы по тредам уберут ;)
Полный набор: скули, XSS.
А я думал, откуда пыхеры берут ебанутую идиома с чтением одной записи в цикле... А после я уже не смог вылезти из под стола.
P.S. Ну или этот код там вброшен намеренно, со злым умыслом.
Те, кому нужно читать этот туториал еще не понимают, в чем там проблемы.
А те, кто понимает, в чем там проблемы, не заморачиваются чтением этого туториала. Ну разве чтобы поржать. Естественно править они его не будут, разве что внесут еще пару уязвимостей ради лулзов.
P.S. Вот что хочется сказать в пользу пыхи - несмотря на все недостатки языка и библиотеки, на php.net вполне годная документация, с примерами и указаниями на подводные камни, которой позавидуют очень многие другие языки\библиотеки.
Почему? Изкоробки есть PDO (если его не умудрились не поставить): Да и ORM'ы под пых есть.
>execute
Вот я упорно не понимаю, почему не сделать как в питоне, с форматом printf, и передаем список или хеш-массив?
>Zend_Db_Table_Abstract::getDefaultAdapt er()->fetchAssoc
Зенд, кстати, разве не платный?
http://framework.zend.com/
Однако, если на хостинге есть кэш опкодов типа APC или XCache, тормозить не будет, пока библиотека лежит в кэше.
А вот хуй бы их знал если честно. Я сам был в шоке, когда увидел, что PDO::exec и PDO::query не принимают тот самый массив параметров. Добавить к тем функциям дополнительный аргумент, по аналогии с PDOStatement::execute это явно не самая сложная задача.
Но двухфазный интерфейс с prepare+execute тоже нужно оставить. Он умеет в выходные аргументы, и удобен для пакетных вставок.
P.S. Ну и всегда можно потратить 5 минут и написать себе хелпер, работающий так, как тебе удобно. Например такой:
Про TOOWTDI слышал, питушок? Или ты жаваеб?
> Или ты жаваеб?
Я вас чем-то обидел? Откуда у вас столько ненависти к моей скромной персоне?
> Про TOOWTDI слышал
Да, слышал, конечно. Но если изкоробки функционала нет, то что делать? Остается найти готовую либу или написать свой. У вас питонистов это не так происходит? Только не говори мне, пожалуйста, что для каждой задачи существует ровно одна питонолиба, включенная в комплект поставки, и она идеальна для всех применений.
Взять язык вместо явы? У вас даже декодирования хекса нету.
>Только не говори мне, пожалуйста, что для каждой задачи существует ровно одна питонолиба, включенная в комплект поставки, и она идеальна для всех применений.
Параметризированные запросы - это такая охуенно уникальная задача, что пиздец. Для нее есть все, что надо искаропки. Ты еще спроси может ли фитон json парсить. А жаба, кстати, может?
> У вас даже декодирования хекса нету.
А это что? http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#valueOf%28java.lang.String,%20int%29
> А жаба, кстати, может?
Насколько знаю, из коробки не может. По жабе не ко мне вопросы, я вообще говоря крестовик ;)
>А это что?
Не в инт, блядь, а в byte[]
>На диету бы его.
Зачем? Чтобы он тоньше стал?
По крайней мере, не будет таким занудой, как сейчас.
P.S. Я не блядь, я жду маршрутку.
Значт, программа составлена неправильно. Тормозит не Synchronize, а метод, который им вызывается.
Так как вам нафиг не здалось знать, что это - просто сделаем. Создадим для этого целый анальный класс и занаследуем от потока. Почему просто не использовать поток? Да иди ты в жопу, директор, вот почему.
Canvas not allowed to drawing
Important: Methods and properties of objects in visual components can only be
used in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure ttt.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end;
procedure TVANSThread.Execute;
begin
end;
В неё вписываем следующий код:
for i:=0 to 10000 do Form1.Memo1.Lines.Add(IntToStr(i))
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
Оригинально. Пароль все таки придется поменять.