аргумент простой, если язык использует CLR то на нем можно все что можно на других языках использующих CLR NET Framework. К примеру, Цикла FOREACH в Pascal никогда не было, его разработчики урвали из С#тоже самое они сделали и с последовательностями. Более того, C# это тоже не С++ далеко не С++ как и PascalABC далеко не Pascal, при этом C# имеет в своем названии символ Си как в С++, тоже самое можно сказать и про PascalABC и Pascal, НИЧЕГО ОБЩЕГО!!!. Так вот, если сделать как перегруженные дополнительные циклы в PascalABC такими же как в С# пусть то For или whilе c проверкой множества условий и изменением переменных внутри условий, цены бы не было такому PascalABC. Ну ведь forech и последовательности вырвали(хотя по началу думал сами придумали…))) Наградите и другие ЦИКЛЫ достоинством из Си Шарп. И все дружно будут вам благодарны, ведь реально синтаксис красивее чем в С#,
взять организацию тех же последовательностей
В PascalABC:
var int i:=2.TO(10).Slice(0,3);
А вот в С# (Еnumerable какой то в пень…)))):
var ii = Enumerable.Range(1, 10).Select(x=>x+3).ToArray();
foreach(var nn in ii){ }
НЕ БЫЛО ТАКОГО В ПАСКАЛЬ, ХОТЯ УПОР ДЕЛАЕТСЯ НА эти последовательности…
В ОБЩЕМ НЕ ТУПИТЕ и ТАЩИТЕ ВСЕ ЦИКЛЫ в PascalABC, не стройте из себя изобретателей CLR/FCL, а то повзрослеете стыдно будет перед MicroSoft…)))) уже слышу возгласы детской неожиданности…
Что то мне навеяло, что аббревиатура ABC в названии PascalABC символизирует Алгоритмы из языков A = Algol или ADA, B = Basic и C = Си или С++ и С#…))))))) вот и здорова!, платформа свободная как и FrameWork и SDK. Хороший язык всегда универсальный, впитавший в себя лучшее из разных языков.
Да, это все знают. Так же все знают что всё, включая человеческое сознание можно представить в виде набора бит. Но вас спрашивали примеры а не теорию))
Но, кстати, я в своём автокликере реализовал рекурсию через Stack<T>, вот и пример. Смотрите Script.Execute в StmParser.pas.
вот интересно как циклом foreach вывести глобальный массив другим потоком(тоесть вывод из другого потока) ? вот тут то и нужен цикл for. А, если мне нужно вывести с шагом, то как? а ну да конечно while, НО тогда зачем нужен вообще цикл for? или кто то с потоками никогда не играл… или у вас программирование ограничивается вашим воображением и круче вас никто вообразить не может, по этому вы и не даете возможности воображать другим? цикл foreach слизан с С#, а цикл for намеренно ограничен, не вижу логики…
да я то могу сделать это в C#, могу даже синхронизировать. но через foreach не могу он system volatileread() не принимает… а while я использую только для бесконечного цикла к примеру в потоке while(true). Интересен другой вопрос, зачем в pascalabc урезали возможность цикла for, если foreach слизан с С#?- его же нет ни в одном из стандартов Pascal. И зачем нужен такой обрубленный for? Ну раз говорите, что foreach глобальный массив выведет из потока, покажите, да чтоб один поток задавал счетчик, другой по этому счетчику заносил в глобальный массив, а третий чтоб этот массив выводил, а результат при этом был равномерная последовательность без коллизий. я думаю у вас получится асинхронная каша, а если нет то синхронность вы достигнете тормозя потоки, а нужно чтоб все это дело работало асинхронно, тоесть при обращении потока к глобальному массиву, он продолжает свою работу как и остальные. терять скорость на копиях не допустимо, потому как потоков может быть тысячи… а кашу из потоков любой дурак выведет.
Подождите, при чём тут это ко всему предыдущему? Как улучшение for поможет сделать то, что невозможно на уровне IL?
И насчёт for-foreach - for не урезан а наоборот улучшен относительно старого паскаля. А foreach - в том то и дело, его не было раньше, поэтому никаких коллизий совместимости.
не ну знаешь брякать языком и я могу, но буду ли, это вопрос порядочности. Говоришь For улучшен, приводи пример. Я вот считаю, что нельзя к программированию допускать людей не изучавших логику, так и с вами, я вам про фому, а вы мне про ерему… Где логика в ваших словах? (на il возможно все для CLR.).
если вы не знаете как, то это не означает, что вы бог вероятности. я не пишу не возможных вещей, все возможно, главное понимать что такое потоки и что такое одновременность на компьютере. Одновременность это иллюзия, по этому глубокое понимание многопоточности не возможно без учета этой иллюзии. Именно по этому грубо говоря, синхронность - это слияние с потоками, а асинхронность не зависимость относительно идеологии системы которая создает иллюзию одновременности но асинхронность это тоже порядок, только в потоке выстроенном потоком системы. Грубо говоря Синхронность это участие в порядке другого потока как монолит одного целого потока. Все монолиты чередуется при выполнении с другими монолитами, системой по алгоритму создания одновременности. А, асинхронность это не зависимость монолитов но зависимость от системного потока, который чередует эти монолиты как составляющие своего потока. Есть только один поток это система, все остальное это комбинация данных в этом потоке. По этому легко можно создать асинхронный цикл внутри которого будет синхронный, ведь вся одновременность это иллюзия. Слился с потоком и ты уже имеешь последовательный доступ к его аргументам, разъединился и доступ как попало(как система приоритеты поставит), вот и вся синхронность. Много программистов думает что в программировании понятия синхронности и асинхронности трактуются на оборот, потому как упускают понятие иллюзии одновременности, им кажется что создавая потоки они создают синхронность в обыденном понимании, то типа как тогда понимать асинхронность?
Но так получится в любом случае. Чтоб не было асинхронной каши всегда нужны какие то тормоза на синхронизацию. И в IL тоже. И For тут вообще не при чём.
Описание переменной прямо в for. Это вы и сами найти могли. Если вы не знаете какое это преимущество даёт по скорости - стоит сначала пойти, хотя бы, поэкспериментировать с декомпиляцией.
Полностью согласен. А ещё людей которые говорят кучу заумных слов и называют это логикой, при это не могут (а скорее не хотят) понять написанное на человеческом языке…
эх вы, так не получится в любом случаи… , я вам даже подсказку оставил VolatileRead() - блокирует доступ к памяти к которой ты обращаешься с любого потока, далее делаешь глобальные сигналы которые будут синхронизировать твои потоки и используешь VolatileRead и VolatileWrite, все на столько просто, в итоге ты получаешь синхронный доступ в асинхронных потоках, главное понимать, как я сказал ранее, что одновременность- это иллюзия, следовательно и синхронность и асинхронность тоже иллюзия, потому что строятся на одном фундаменте. Главное иметь независимый доступ к памяти в определенный момент, иначе система создаст иллюзию одновременной записи даже с расстановкой сигналов, в с# выдаст ошибку, а в С++ в управляемом коде все прокатит и введет вас в недоумение, проверенно экспериментальным путем, система показывает что она внесла в память данные но по факту их там нет. Каша полезна для самостоятельного рандома, прокручивать переменные… Не ограничивайте себя, в программировании нет иллюзий, программист сам создает иллюзию, и если кто то что то не понял- это не говорит о том что его поведение не смогут понять другие. В общем нельзя ограничивать языки, их нужно только расширять, иначе их судьба динозавров. И цикл For с условием настолько прост в интерпретации Assembler-a что просто до бешенства иногда доходит когда сталкиваешься с ограничениями в примитивах. Это по типу как нашли способ отфильтровывать эмбрионов по iQ- в итоге жизнь обрекает себя на упущение при возникновении новых озарений.
По моему вас снова куда то не в ту степь понесло. lock в большей части случаев лучше с синхронизацией справляется, чем VolatileRead и VolatileWrite.
Но вы говорили про то чтоб сделать без задержек. А это можно и без VolatileRead, а обычным доступом. Единственное - тогда будут проблемы с кешем, но приведите пример программы где будет
И при этом будет выдаваться стабильный результат. Да так чтоб не было лишних задержек на синхронизацию.