Это было 50 лет назад. Ну или как минимум 30. Сейчас он по сути мало отличается по функционалу от того же C#. Который, по сути, из паскаля и вырос, после чего уже паскаль уже стал брать из шарпа идеи обратно.
Да. Поэтому надо знать о каком стандарте паскаля говорить (если делать заявления и если какой то стандарт вообще принимался). Я в этом недостаточно копенгаген. Я знаю что и Apple Pascal/Object Pascal и Borland Pascal отошли от стандарта (первый ввел тип "Str255", второй вроде как "String" которых не было в стандарте языка). Я даже не уверен был ли UCSD Pascal стандартным или нет. Ну это уже явное преувеличение, не? в паскале что, есть async/await? или функции высших порядков?
Нынче язык называется Object Pascal с несколькими диалектами в разных компиляторах. Asynchronous Programming Library. Там есть аналогичный функционал, с промисами, параллельными циклами и т.п.. Есть, хотя синтаксис довольно корявый, надо признать. Но в целом и желающих использовать такие подходы не много. Ибо это все нарушает принцип KISS. Очень важный принцип, по моему. Я вот, к примеру, люто ненавижу интерфейсы описанные в прикладном коде, хотя некоторые библиотеки на основе интерфейсов и очень неплохи. Вот чего в паскале пока не ввели - это краткого синтаксиса для лямбд. Анонимные функции все же сильно вербальней.
А формальный стандарт где то опубликован? Я, честно говоря, не нашел. последний ISO который навскидку ищется это 1990 год. Вот тут стандарты более менее собраны: http://pascal.hansotten.com/standard-pascal-and-validation/ выглядит тяжеловесно на мой глаз (паскалевсого кода не касался с 95 года наверное) и не совсем тем что я спросил. почитаю позже, спс. У меня вызывало неприятие/ощущение нереальности твое заявление что C# из паскаля вырос )))) Ну это религиозно-дискуссионный вопрос, ИМХО. "Зачем нужна рекурсия, когда есть for и while?" "Зачем нужны for и while, когда есть if и goto?" "Зачем вообще нужны переменные, когда есть адреса в памяти и можно просто, следуя KISS принципу, их читать и писать?" Границу обычно люди проводят по своему уровню комфорта.
Этой книжке 30 лет. Единого стандарта по большому счету давно нет. Базовый паскаль по сути давно мертв. Есть стандарт Object Pascal, но сам по себе он тоже устарел на десятилетия. А основные диалекты Object Pascal нынче это: 1. Delphi - проприетарный продукт от Idera. "Стандартом" - тут можно считать их документацию. Наиболее распространен. Стандарт реализации современного Object Pascal де факто. Компиляторы свои для винды (очень и очень быстрая сборка) + LLVM для кроссплатформы. Весьма мощная IDE у языка написана на самом Delphi. 2. Free Pascal - опенсорс вариация Delphi, где есть как режим совместимости по коду и основным библиотекам с Delphi, так и режим со своими подходами. Что характерно полноценная кроссплатформенность, дженерики, да и многое другое там появилась намного раньше Delphi, но у Delphi богаче IDE и наборы библиотек и фреймворков, хотя многие библиотеки одновременно совместимы и с Delphi и с Free Pascal. Компиляторы свои. 3. Oxygenе - диалект Object Pascal на базе .net и MSVS, со всеми плюсами и минусами. Концептуальные различия от C# надо искать с лупой. Ну есть и еще с десяток малораспространённых реализаций, не стоящих серьезных упоминаний. Основные нюансы связаны с тем что работу со стандартным виндовым GUI в Delphi надо производить в главном потоке. Если не работать на запись с GUI напрямую из дочерних потоков, то и всякие костальные синхронизации с очередями делать не надо. Так и есть. С# создавал главный разработчик Delphi, которого переманила к себе Microsoft. Со всеми вытекающими. Потому языки во многом очень похожи. Причем миграция идей шла в обе стороны. Десятилетиями. Не стоит доводить до маразма, да. Но на вкус и цвет все фломастеры разные. Со своими полюсами и минусами. И если в конце не видно разницы, то... (с)
К счастью для сишарпа он не сделал главной ошибки - не попытался делать новый язык совместимым с чем то сильно старым ) "очень похожи" они, наверное как и все АЛГОЛ-подобные языки. Не Лисп и не Форт потому что ) О, я посмотрел на то как это реализовано и реально понял почему это никто на дельфях применять не хочет. Потому что несмотря на то что семантически можно сделать все грамотно, обилие кода, требуемого синтасксической совместимостью, делает такой код практически нечитаемым. Примерно та же проблема была и в Objectjve-C и эппловском расширении Си, когда к ним добавили блоки/замыкания, вроде можно много что сделать но из за совместимости с синтаксисом 70-х/80-х просто кровь из глаз когда пытаешься это прочитать. Новый язык (Свифт) сделали без таких ограничений.
Соглашусь. Изврат тот еще. Нужны новые, более "красивые", конструкции. Но не вместо старых. Когда несколько лет назад разрешили инлайн определение переменных, в том числе неявное, Никлаус Вирт инфаркта не получил, да и небо на землю не упало, а старый код продолжил работать. С одной стороны обратная совместимость мешает развитию, с другой - накапливаются огромные наработки, которые можно спокойно использовать и дорабатывать, без необходимости периодически переписывать все чуть ли не с нуля.
По поводу развития/старых наработок - никто не машет флагами и не призывает "выкинуть нафиг/переписать заново". Вон в эппловских операционках (подозреваю и в других системах тоже) математические библиотеки до сих пор фортрановские BLAS и LAPACK вроде как включают. Завернули их, обложили сишными хедерами - и пофиг что им много десятков лет. Кто то писал и отлаживал, зачем их выкидывать или переписывать? Так же как и в случае с новым языком Свифт. Когда его разрабатывали, сумели найти красивый компромисс между новизной языка и интероперабильностью со старым кодом. Все имеющиеся библиотеки на Си/Обжектив-Си из Свифта вызываются и работают. Так же и в случае F# в студии. Сделали нормальный интероп с C# и положили язык "параллельно", ничего не выкидывая и никого не ограничивая.
Дело в чем угодно, только не в технической стороне дела. Удивительно, что хоть java 8 стала доступна. Про Kotlin/Scala - ни-ни ...
порой сильно достаёт "придумывание" имени функции/переменной и тогда вспоминаешь, что можно префиксом get-/set- поиграться, кемл-кейсом, а чтото глобальненькое (баш же) и вовсе с капслоком
Посоветуйте что то по C#. Что бы понять его парадигму. Я на нем писал что то, когда он только вышел, как замена MFC и Delphi. А недавно глянул, а там такого навертели. Для меня он тогда был как C++ c формами как у Дельфи.
По мне дак смысла в них при таком синтаксисе крайне мало. Нафиг делали ? IMHO .чтоб было. Вот дженерики хоть и позже чем в c# но сделали вполне не хуже. Зачем перегрузку операторов сделали? Да хз. Даже страшно представить что они выдумают как альтернативу linq.
По сути imho изначальна таже java. Но с многими фичами которые появились раньше чем в java типа дженериков лямбд, анонимных функций и классов. Последнее время imho больше функциональщины добавили, типа linq.
гы мой единственный проект на mono (c-sharp для линуха) октябрь 2006. Spoiler: угадай для чего участок кода if (minJumps==0) // means stay in the same system { TripDuration2 = 2*WarpDuration + 10; } else { TripDuration2 = minJumps * ( JumpDuration + WarpDuration + 15000/MaxSpeed ) + WarpDuration + 15000/MaxSpeed ; } Destinations += String.Format( "\n\tsell@{0}[i/pc]:{1};\t", (int)(wstoi.Price*0.99), currDestinationStation ); DestInfo += "["+wbsid+"@"+wbtoi.SystemID+">;\t"; DestInfo += ">"+wssid+"@"+wstoi.SystemID+"];"; CurrProfitRate = Margin * 3600.0/(TripDuration1+TripDuration2+1); if (CurrProfitRate>MaxProfitRate) { MaxProfitRate = CurrProfitRate; BestDestinations = Destinations; BestTripDuration = TripDuration1+TripDuration2; ReportOnProduct=""; ReportOnProduct += String.Format("{0}[i/hr] {1}[min] {2}[pcs] {3}\t{4}\n", (int)(MaxProfitRate), (int)((TripDuration1+TripDuration2)/60), (int)CargoQty, tip.ProductName, BestDestinations ); //(int)(FullCost/CargoQty), и кусок debug.log: Mechanical Parts: buy(@634,64@Ajanen VI - Moon 2 - Aliastra Warehouse), sell(@690,05@Kino VII - Moon 7 - Home Guard Testing Facilities) got routes from 30001365 to 30001414 got routes from 30001414 to 30001372 passing low profitrate: 5290<113566 Mechanical Parts: buy(@634,64@Ajanen VI - Moon 2 - Aliastra Warehouse), sell(@667,07@Nonni III - Moon 1 - Home Guard Assembly Plant) got routes from 30001365 to 30001414 got routes from 30001414 to 30001401 passing low profitrate: 1701<113566 Mechanical Parts: buy(@634,64@Ajanen VI - Moon 2 - Aliastra Warehouse), sell(@686,98@Elonaya X - Moon 15 - Home Guard Logistic Support) got routes from 30001365 to 30001414 got routes from 30001414 to 30001399 passing low profitrate: 3246<113566 Mechanical Parts: buy(@634,64@Ajanen VI - Moon 2 - Aliastra Warehouse), sell(@667,07@Nonni III - Home Guard Testing Facilities) got routes from 30001365 to 30001414 got routes from 30001414 to 30001401 passing low profitrate: 1701<113566
да. она. Написал тогда себе TradeRouteFinder - благо, можно было, находясь в какой-либо системе, получать цены по всему региону. Экспорт цен в файл (в два-три клика, в готовое место) и запуск программулины. На выходе - готовый самый выгодный маршрут где чего закупать и куда везти. Но на деле, конечно, выгоднее было фармить в нулях а вообще, сейчас как раз интересно что-то типа ботов писать, изучающих изображение экрана. P.S. немного из экономики ЕУЕ торговля в регионах - около 10-20 кк/час (спокойного драйва). в Нулях - около 100кк/час, но с некоторым риском. помнится, "месячные билеты" торговались где-то за 1ккк. это 10 часов фарминга в нулях. у меня в то время зряплата была где-то 3.5 бакса в час и уже было как-то неприятно тратить время в ЕУЕ на фарминг, чтобы оплачивать подписку ирисками.
некоторые молодцы вон для Элитки "автопилот" пишут как раз типа того, чтоб с экрана читать "колечко" направления следующего прыжка, доворота и запуска основная трабла - объекты, типа звезды/планеты, обруливать