Буквально несколько дней назад компания Microsoft представила публике новый язык программирования. Языку дали название Bosque. Главная миссия дизайна языка — лучше быть богатым и здоровым, чем бедным и больным чтобы он был прост и понятен как для человека, так и для компьютера.Информации пока что очень мало, язык еще очень свежий и нестабильный. Есть лишь paper от Марка Марона и дока в начальной стадии написания.Давайте попробуем рассмотреть некоторые особенности языка.1) Все значения в Bosque являются неизменяемыми (immutable), чтобы каждый блок кода не содержал никаких сайд-эффектов. По мнению авторов языка это полезно как для человека, так и для компьютера.При этом, как ни странно, чуть далее по тексту рассказывается, что можно объявить изменяемую переменную ключевым словом var!. И это не просто сахар для более удобной инициализации иммутабельной переменной, это действительно настоящая переменная.Ладно, допустим, это некий компромисс, и в локальном скоупе так сделали. Но дальше идет упоминание о еще не реализованной фиче языка — передаче аргументов функции по ссылкеfunction internString(ref env: Map<String, Int>, str: String): Int { if(env.has(str)) { //use the ref parameter return env.get(str); } env = env.add(str, env.size()); //update the ref parameter return env.size();}Может я чего-то не понимаю, но странная какая-то иммутабельность в языке, если мы можем передать Map по ссылке, и фунция ее намутирует.2) В языке нет циклов for, while и т.д. Вообще никаких нет. Вместо этого есть коллекции и пайплайны. Другими словами, вместо циклов нужно использовать более высокоуровневые штуки типа map, filter и т.д.3) Строки можно делать разных типов. Т.е., например, можно сделать строку-имя или строку-zipcode, и для type-чекера это будут две разные строки. Если вы в аргументе функции ожидаете zipcode, а вам по ошибке туда пихают имя, то компилятор это не проглотит. Синтаксис такой: String[Zipcode].Тоже сомнительная штука, почему не просто ZipCode. Один раз объявить, что ZipCode — это строка и везде в сигнатурах это писать. И почему именно для строк эта типизация сделана, а не для интов, например.4) Вызов функций можно делать с указанием названия аргументов из сигнатуры функции, например: myfunc(x=1, y=2)5) В стандартной библиотеке есть различные коллекции, и с коллекциями можно работать по разному. Можно просто по цепочке вызывать map, потом filter и т.д., а можно работать через пайплайны.var v: List[Int?] = List@{1, 2, none, 4};//Chained - List@{1, 4, 16}v->filter(fn(x) => x != none)->map[Int](fn(x) => xx)//Piped none filter - List@{1, 4, 16}v |> filter(fn(x) => x != none) |> map[Int](fn(x) => xx)//Piped with noneable filter - List@{1, 4, 16}v |??> map[Int](fn(x) => xx)//Piped with none to result - List@{1, 4, none, 16}v |?> map[Int](fn(x) => xx)6) рекурсия считается злом, которое может усложнить программу, поэтому рекурсивные фунции надо помечать словом rec7) программы на Bosque являются детерминированными. Другими словами в языке нет неопределенного поведения. Например, нельзя использовать переменные, пока они не были определены; алгоритмы сортировки только стабильные и т.д. Если программа выдала какой-то результат, то такой же результат будет и потом, никаких сюрпризов8) Вместо классов и интерфейсов в языке есть понятия entity и concept.concept Bar { field f: Int;}entity Baz provides Bar { field g: Int; field h: Bool = true;}var y = Baz@{f=1, g=2, h=false}; //Create a Baz entity with the given field valuesvar x = Baz@{f=1, g=2}; //Create a Baz entity with default value for h
>>5000917 (OP)Зачем?вот комментарий понравился:Это управленческий паттерн «незаменимая команда». Когда команда, разрабатывающая один из ключевых продуктов компании, переводит его на специально ими выдуманную технологию — новый язык программирования, принципиально новую СУБД с ни с чем не совместимым языком запросов, пишет с нуля новую ОС, на которой будет крутиться сервер продукта, ну и т.д.В итоге команда, которой удалось реализовать этот паттерн, надолго становится незаменимой — их становится очень сложно уволить, не завалив разрабатываемый продукт, потому что спецов по новой технологии в ближайшее десятилетие будет исчезающе мало.Именно поэтому программистам очень выгодно реализовывать этот паттерн. А вот для менеджера, допустившего такое, например переписывание половины браузера на принципиально новый язык — признак профнепригодности, особенно когда компания испытывает финансовые трудности.
>>5000917 (OP)>чтобы он был прост и понятен как для человека, так и для компьютера.Двачеры даже в такой не смогут!
>>5000917 (OP)>2) В языке нет циклов for, while и т.д. Вообще никаких нет. Вместо этого есть коллекции и пайплайны. Другими словами, вместо циклов нужно использовать более высокоуровневые штуки типа map, filter и т.д.Поясните, как сравнить 2 массива с помощью map, filter и тд? Как будет выглядеть кодfor (i = 0; i < arr1.size() && i < arr2.size(), i++) if (arr1 != arr2) return false
>>5001003Сишка - это не язык для говняканья. Рядовой заедушной обезьяне он нужен лишь там, где обсираются недоязычки.Сишка - это основа мироздания. Почему бомжи пытаются юзать сишку с подходом как у недоязычка? Вменяемый диалект сишки не имеет почти никаких ограничений и не определённостей. Это даёт возможность строить идеальные реализации и системы.Как же вам объяснить. Вот у тебя есть задача - хренчить какие-нибудь шайбочки. Тут не надо никаких «выоскотехнологичных», модных сейчас 3д-принтеров. Не надо на сишке делать 3дпринтер - он тебе нужен лишь потому, что ты не можешь купить/сделать приспособу для твоих шайбочек.На сишке же делают какраз-таки приспособы, которая делает только нужную тебе работу - ей не нужна универсальность. Она делается за 5минут и штампует эти шайбочки с тысячи раз быстрее и лучше всяких принтеров.Нужность принтера - это ограничение твоего рынка. Реально он не нужен. Этого рядовая обезьяна понять не может. И постоянно пытается сравнивать покупку принтера с разработкой с нуля голыми руками без готовых деталей.
>>5000917 (OP)Майкрософт нашёл критическую недоработку в хаскелях с лиспами.>>5001357Лучший пост треда. Двачую. Дякую. Целую в носик!
>>5001368>for (i = 0; i < arr1.size() && i < arr2.size(), i++) if (arr1[ i ] != arr2[ i ]) return falseблядь, макаба
>>5001342const arr1 = [1, 2, 3];const arr2 = [1, 2, 7];const isArrayEq = (a1, a2) => { let isEqual = true; a1.forEach((el, ind) => { if (JSON.stringify(el) !== JSON.stringify(a2[ind])) isEqual = false; }); return isEqual;};isArrayEq(arr1, arr2);
>>5001374Не знаю, как там у функциональщиков, вот на моём нынешнем языке (gdscript):for i in range(arr1.size() if arr1.size() < arr2.size() else arr2.size()): if arr1[ i ] != arr2[ i ] return false
>>5001374>2k19>Пользоваться цикламиbool Huincia(arr1, arr2, i = 0){ if(i >= arr1.size() || i >= arr2.size()) return true; if (arr1[ i ] != arr2[ i ]) return Huincia(arr1, arr2, i+1); return false;}
Дело в том, что я ненавижу программистов. Несколько десятков лет назад программисты были настоящей элитой. Каждый из них решал сложные технические задачи, а свободное время уделял самосовершенствованию. Компьютеры были роскошью, управляли ими гении, а всякая шваль и скам поролись в очко и слушали рок-н-ролл. Это было золотое время.С приходом двухтысячных все изменилось. Мировой рынок начал расти, и десятки тысяч «не таких как все» почуяли запах денег. Началась экспансия кадров на внешние рынки. Быть технарем стало модно. Школяр умолял мамку купить компьютер, заканчивал одинадцать классов и шел учиться на программиста. Юная особь, еще ничего не смыслившая в жизни, начинала неистово надрачивать на свою элитарность с самых первых курсов. Абсурд был возведен в абсолют. Теперь гением был каждый второй. Те, кому не удавалось найти работу — шли учить других. Посиделки хипстеров вместе с ноутбуками в дешевых кабаках стали синонимом успеха. Истерия достигла такой степени, что курсы по программированию открывались для женщин, стариков, детей. Каждый хотел обратиться в новую веру и зарабатывать миллионы. Но, предсказуемо, ничего не вышло. Никчемные хуесосы так и остались никчемными хуесосами, а шансы войти в айти с каждым днем стали уменьшатся. Теперь айти непрестижно, но толпы бездарей продолжают считать себя уникальными и успешными. Хотя, на самом деле, они — никто.
>>5001422Быстрофикс!for i in range(arr1.size() if arr1.size() < arr2.size() else arr2.size()): if arr1[ i ] != arr2[ i ]: return falseОдну закорючку проебал, хотя всем похуй.
>>5001422Фу бля>>5001374>2k19>Пользоваться цикламиbool Huincia(arr1, arr2, i = 0){if(i >= arr1.size() || i >= arr2.size())return true;if (arr1[ i ] != arr2[ i ])return Huincia(arr1, arr2, i+1);return false;}
>>5001448>а шансы войти в айти с каждым днем стали уменьшатсяКак они уменьшаются если туда идут только бездари? Если ты сам такой крутой, то превзойти из не составит труда.
>>5000917 (OP)>чтобы он был прост и понятен как для человекаТеперь я понимаю, почему пользователей бейсика не считают за людей. Я сам этот пользователь, и если честно, не понимаю как синтаксис босха может быть понятен для человека. И в правду я не человек, что это за @{/}@@%%%))(?|??. Это действительно понятно человеку?мимо бейсикоблядь
>>5001357На сишке изобретают велосипеды. Например: принтеры. Нет бы, сука, взять готовый принтер и печатать на нем — лучше заново создать принтер и проебать полжизни; потому что те, кто делал принтеры до тебя, уже делают принтеры v5.0, а у тебя мудя в седине и клеч-дрыгостол версии 0.3b
>>5001357Спасибо, насмешил, особенно про 5 минут доставило. Сразу видно опытного разработчика уровня /pr.
>>5000917 (OP)>В языке нет циклов for, while и т.д.>Другими словами, вместо циклов нужно использовать более высокоуровневые штуки типа map, filter и т.д.Про рекурсию учитель информатики не рассказывал?
>>5001046Значит, майки пойдут по стопам эпла и будут делать анально огороженные продукты. А там и терминалы вместо Пекарен подвезут.
>>5001569Кто они такие чтобы навязывать свою отсталость?Начальник охуеет от того как ты умеешь и повысит
>>5001379>рекурсияСможешь предсказать на какой интерации у тебя закончится память или наебнется интерпретатор? Рекурсии нужно использовать в самом крайнем случае.
>>5001448Но действительно ахуенных прогеров малО, это как если бы половина пошла бы на математика, мол тот ахуенномного получает, но большая часть из них вылетит после 2-3 курсов. Забей хуй, у этой массы ничего не выйдет.
>>5001968>оптимизацию рекурсииТЫ ему ещё по СИКП напишиЯ удивлён что этот зумер не на трубу дал ссылку
>>5001454Ебать ты долбоеб. Ты походу ни на чем кроме похапы не писал и не знаешь что такое стек.А знать что такое рекурсия, и при этом не иметь понятия о стеке и его реализациях в разных средах - это пиздец, это хуже чем не знать что такое рекурсия.Твоя функция крашнет все нахуй, если ей передать массивы с хотя бы парой миллионов элементиков.Лучше бы ты просто самовыпилился, придурок.
>>5001357Это все хорошо когда тебе нужны шайбочки.Но если тебе нужен скажем промышленный комплекс, ну допустим несколько работающих в связке химических предприятий, и ты начнешь на своей сишке делать вручную миллионы разых приспособ, для миллионов разных шайбочек-болтиков-планочек-трубочек-етц из которых состоит будущий промышленный комплекс...Ну в общем удачи тебе, и тем кому придется поддерживать дальше ту груду хлама которая получится на выходе
>>5000917 (OP)> concept Bar {> field f: Int;> }> > entity Baz provides Bar {> field g: Int;> field h: Bool = true;> }Я не понимаю нахуя они все переименовывают класс, абстракт, public, private итд в что то свое непохожее но по сути то же самое, они хотят затруднить изучение своего языка.Я говорю про ублюдошные языки программирования типа свифта и вот этой ебанины, которая судя по всему с оглядкой на свифт и создается
>>5002034В похапэ самая грамотная и правильная реализация классов и вообще ООП, но сам язык сильно специализирован под серверный бакенд и ни под что больше и по этому он из своей ниши никогда не вылезет.Так что не пизди на пых.
>>5002059Пруфы чего именно, братан? Каждый вызов функции делает запись в стек. У тебя их будет столько, сколько элементов в массиве
>>5006903Не буду спорить так как луа всегда был симпатичен мне, но хоть убей не могу представить чем.Я кстати оговорился> и вообще ООПнет, самое навороченое это все таки прототипное как в джаваскрипте, а в пыхе как бы сам класс - его синтаксис хорошо проработан, сласс наследник класса абстракт функции, константу можно в класс вписать и ее можно будет и из статического и из экземпляра посмотреть, к наследнику обратится к статическому методу не по имени а через статик свойство в экземпляре. В общем все длялюдей все удобно, только гетеры и сетеры как то коряво сделаны ну да бог с ними.