Сохранен 76
https://2ch.hk/news/res/5000917.html
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Язык Bosque — новый язык программирования от Microsoft который никому ненужен

 Аноним 22/04/19 Пнд 15:42:14 #1 №5000917     RRRAGE! 4 
02dtzf10gvz9fdsembpk7zwxgi.png
Буквально несколько дней назад компания 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) => x
x)

//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) => x
x)


6) рекурсия считается злом, которое может усложнить программу, поэтому рекурсивные фунции надо помечать словом rec

7) программы на 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 values
var x = Baz@{f=1, g=2}; //Create a Baz entity with default value for h
Аноним 22/04/19 Пнд 15:49:14 #2 №5000974     RRRAGE! 0 
>>5000917 (OP)
На первый взгляд довольно всрато, плюс непонятно зачем вообще нужно.

мимо аналитик
Аноним 22/04/19 Пнд 15:50:11 #3 №5000981     RRRAGE! 1 
>>5000917 (OP)
язык господ - С, язык рабов - все остальные. дискасс
Аноним 22/04/19 Пнд 15:50:24 #4 №5000983     RRRAGE! 0 
>>5000917 (OP)
>?
>??
Гомосятина какая-то.
Аноним 22/04/19 Пнд 15:51:51 #5 №5000998     RRRAGE! 0 
Нинужна
Аноним 22/04/19 Пнд 15:52:40 #6 №5001003     RRRAGE! 1 
>>5000981
Авторитетное мнение джуна на галерах.
Аноним 22/04/19 Пнд 15:53:39 #7 №5001009 
>>5000917 (OP)
https://habr.com/ru/post/448814/
Аноним 22/04/19 Пнд 15:53:55 #8 №5001011 
>>5001003
ФП дурачок порвался
Аноним 22/04/19 Пнд 16:00:17 #9 №5001046     RRRAGE! 0 
>>5000917 (OP)

Зачем?

вот комментарий понравился:
Это управленческий паттерн «незаменимая команда». Когда команда, разрабатывающая один из ключевых продуктов компании, переводит его на специально ими выдуманную технологию — новый язык программирования, принципиально новую СУБД с ни с чем не совместимым языком запросов, пишет с нуля новую ОС, на которой будет крутиться сервер продукта, ну и т.д.
В итоге команда, которой удалось реализовать этот паттерн, надолго становится незаменимой — их становится очень сложно уволить, не завалив разрабатываемый продукт, потому что спецов по новой технологии в ближайшее десятилетие будет исчезающе мало.
Именно поэтому программистам очень выгодно реализовывать этот паттерн. А вот для менеджера, допустившего такое, например переписывание половины браузера на принципиально новый язык — признак профнепригодности, особенно когда компания испытывает финансовые трудности.
Аноним 22/04/19 Пнд 16:18:38 #10 №5001159 
Когда уже нейросетка научиться генерировать код по описанию?
Аноним 22/04/19 Пнд 16:35:37 #11 №5001278 
>>5000917 (OP)
>чтобы он был прост и понятен как для человека, так и для компьютера.
Двачеры даже в такой не смогут!
Аноним 22/04/19 Пнд 16:36:23 #12 №5001285 
>>5000917 (OP)
>ненужен
сука блядь, 3 класс
Аноним 22/04/19 Пнд 16:47:29 #13 №5001342 
>>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
Аноним 22/04/19 Пнд 16:49:41 #14 №5001352     RRRAGE! 0 
15513596531750-news.jpg
>>5000917 (OP)
>нет циклов
Аноним 22/04/19 Пнд 16:50:34 #15 №5001357     RRRAGE! 2 
>>5001003

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

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

Как же вам объяснить. Вот у тебя есть задача - хренчить какие-нибудь шайбочки. Тут не надо никаких «выоскотехнологичных», модных сейчас 3д-принтеров. Не надо на сишке делать 3дпринтер - он тебе нужен лишь потому, что ты не можешь купить/сделать приспособу для твоих шайбочек.

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

Нужность принтера - это ограничение твоего рынка. Реально он не нужен. Этого рядовая обезьяна понять не может. И постоянно пытается сравнивать покупку принтера с разработкой с нуля голыми руками без готовых деталей.
Аноним 22/04/19 Пнд 16:51:31 #16 №5001361 
Эт че, новый хачкель?
Аноним 22/04/19 Пнд 16:53:04 #17 №5001368 
>>5001342
>for (i = 0; i < arr1.size() && i < arr2.size(), i++) if (arr1 != arr2) return false
фикс
Аноним 22/04/19 Пнд 16:53:19 #18 №5001369     RRRAGE! 0 
>>5000917 (OP)
Майкрософт нашёл критическую недоработку в хаскелях с лиспами.
>>5001357
Лучший пост треда. Двачую. Дякую. Целую в носик!

Аноним 22/04/19 Пнд 16:53:46 #19 №5001374 
>>5001368
>for (i = 0; i < arr1.size() && i < arr2.size(), i++) if (arr1[ i ] != arr2[ i ]) return false
блядь, макаба
Аноним 22/04/19 Пнд 16:54:23 #20 №5001379 
>>5001352
Зачем циклы когда есть рекурсия?
Аноним 22/04/19 Пнд 16:56:16 #21 №5001385     RRRAGE! 0 
picture-000002.jpg
Аноним 22/04/19 Пнд 16:56:41 #22 №5001389 
>>5001342

const 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);

Аноним 22/04/19 Пнд 16:57:27 #23 №5001395     RRRAGE! 0 
>>5001357
Шайбочки = ассемблер.
Миморазраб.
Аноним 22/04/19 Пнд 16:57:30 #24 №5001396 
>>5000917 (OP)
Как название языка звучит правильно, Боскйуу?
Аноним 22/04/19 Пнд 16:58:00 #25 №5001399 
>>5001389
>a2[ind]
А вот нихуя. у тебя нет доступа по индексу, вообще никакого
Аноним 22/04/19 Пнд 16:59:47 #26 №5001408 
>>5001399
А, блядь. Это я проебался, речь ведь не о доступе по индексу а о циклах
Аноним 22/04/19 Пнд 17:01:11 #27 №5001421 
>>5001408
Но всё равно выглядит как костыль >>5001389
Аноним 22/04/19 Пнд 17:01:33 #28 №5001422 
1539894840.png
>>5001374
Не знаю, как там у функциональщиков, вот на моём нынешнем языке (gdscript):
for i in range(arr1.size() if arr1.size() < arr2.size() else arr2.size()): if arr1[ i ] != arr2[ i ] return false
Аноним 22/04/19 Пнд 17:03:46 #29 №5001442 
>>5001374

>2k19
>Пользоваться циклами

bool Huincia(arr1, arr2, i = 0){
\tif(i >= arr1.size() || i >= arr2.size())
\t\treturn true;
\t
\tif (arr1[ i ] != arr2[ i ])
\t\treturn Huincia(arr1, arr2, i+1);
\t
\treturn false;
}
Аноним 22/04/19 Пнд 17:04:00 #30 №5001448     RRRAGE! 0 
Дело в том, что я ненавижу программистов. Несколько десятков лет назад программисты были настоящей элитой. Каждый из них решал сложные технические задачи, а свободное время уделял самосовершенствованию. Компьютеры были роскошью, управляли ими гении, а всякая шваль и скам поролись в очко и слушали рок-н-ролл. Это было золотое время.

С приходом двухтысячных все изменилось. Мировой рынок начал расти, и десятки тысяч «не таких как все» почуяли запах денег. Началась экспансия кадров на внешние рынки. Быть технарем стало модно. Школяр умолял мамку купить компьютер, заканчивал одинадцать классов и шел учиться на программиста. Юная особь, еще ничего не смыслившая в жизни, начинала неистово надрачивать на свою элитарность с самых первых курсов. Абсурд был возведен в абсолют. Теперь гением был каждый второй. Те, кому не удавалось найти работу — шли учить других. Посиделки хипстеров вместе с ноутбуками в дешевых кабаках стали синонимом успеха. Истерия достигла такой степени, что курсы по программированию открывались для женщин, стариков, детей. Каждый хотел обратиться в новую веру и зарабатывать миллионы. Но, предсказуемо, ничего не вышло. Никчемные хуесосы так и остались никчемными хуесосами, а шансы войти в айти с каждым днем стали уменьшатся. Теперь айти непрестижно, но толпы бездарей продолжают считать себя уникальными и успешными. Хотя, на самом деле, они — никто.
Аноним 22/04/19 Пнд 17:04:48 #31 №5001451 
>>5001422
Быстрофикс!
for i in range(arr1.size() if arr1.size() < arr2.size() else arr2.size()): if arr1[ i ] != arr2[ i ]: return false
Одну закорючку проебал, хотя всем похуй.
Аноним 22/04/19 Пнд 17:05:23 #32 №5001453 
>>5001451
Питон какой-то
Аноним 22/04/19 Пнд 17:05:24 #33 №5001454 
>>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;
}
Аноним 22/04/19 Пнд 17:05:25 #34 №5001455 
>>5001451
не похуй, уже хотел поправить
Аноним 22/04/19 Пнд 17:05:47 #35 №5001460 
>>5001453
Таки да, питоноподобный.
Аноним 22/04/19 Пнд 17:06:34 #36 №5001466 
>>5001455
Спасибо!
Аноним 22/04/19 Пнд 17:07:55 #37 №5001477 
>>5001448
>а шансы войти в айти с каждым днем стали уменьшатся
Как они уменьшаются если туда идут только бездари? Если ты сам такой крутой, то превзойти из не составит труда.
Аноним 22/04/19 Пнд 17:10:22 #38 №5001494 
>>5001454
Прикольно! Но если я буду так делать на С++, коллеги вывезут меня в лес и пристрелят
Аноним 22/04/19 Пнд 17:13:08 #39 №5001515 
>>5001494
Для кого придумали сокрытие реализации, мм?))
Аноним 22/04/19 Пнд 17:13:39 #40 №5001520     RRRAGE! 0 
afVvocxC.png
>>5000917 (OP)
>чтобы он был прост и понятен как для человека

Теперь я понимаю, почему пользователей бейсика не считают за людей. Я сам этот пользователь, и если честно, не понимаю как синтаксис босха может быть понятен для человека. И в правду я не человек, что это за @{/}@@%%%))(?|??. Это действительно понятно человеку?

мимо бейсикоблядь
Аноним 22/04/19 Пнд 17:19:21 #41 №5001569 
>>5001515
Это не пройдёт кодревью
Аноним 22/04/19 Пнд 17:20:17 #42 №5001574     RRRAGE! 0 
zDUpZtd2.png
>>5001357
На сишке изобретают велосипеды. Например: принтеры. Нет бы, сука, взять готовый принтер и печатать на нем — лучше заново создать принтер и проебать полжизни; потому что те, кто делал принтеры до тебя, уже делают принтеры v5.0, а у тебя мудя в седине и клеч-дрыгостол версии 0.3b
Аноним 22/04/19 Пнд 17:20:46 #43 №5001580 
>>5001357
Спасибо, насмешил, особенно про 5 минут доставило. Сразу видно опытного разработчика уровня /pr.
Аноним 22/04/19 Пнд 17:21:42 #44 №5001587 
>>5000917 (OP)
>В языке нет циклов for, while и т.д.
>Другими словами, вместо циклов нужно использовать более высокоуровневые штуки типа map, filter и т.д.
Про рекурсию учитель информатики не рассказывал?
Аноним 22/04/19 Пнд 17:22:41 #45 №5001596 
>>5001046
Значит, майки пойдут по стопам эпла и будут делать анально огороженные продукты. А там и терминалы вместо Пекарен подвезут.
Аноним 22/04/19 Пнд 17:23:11 #46 №5001599 
>>5001569
Кто они такие чтобы навязывать свою отсталость?
Начальник охуеет от того как ты умеешь и повысит
Аноним 22/04/19 Пнд 17:23:48 #47 №5001604     RRRAGE! 0 
>>5001599
>и повысит
и повесит
Аноним 22/04/19 Пнд 17:25:23 #48 №5001618 
>>5001159
>генерировать код по описанию
На практике это и люди далеко не всегда могут
Аноним 22/04/19 Пнд 17:27:33 #49 №5001626 
>>5001379
>рекурсия
Сможешь предсказать на какой интерации у тебя закончится память или наебнется интерпретатор? Рекурсии нужно использовать в самом крайнем случае.
Аноним 22/04/19 Пнд 17:32:54 #50 №5001662 
>>5001448
Но действительно ахуенных прогеров малО, это как если бы половина пошла бы на математика, мол тот ахуенно
много получает, но большая часть из них вылетит после 2-3 курсов. Забей хуй, у этой массы ничего не выйдет.
Аноним 22/04/19 Пнд 17:35:09 #51 №5001671 
>>5001626
>закончится память
Не скоро
Аноним 22/04/19 Пнд 17:35:52 #52 №5001675 
>>5001626
Итерация это циклы, а рекурсия это рекурсия.
Аноним 22/04/19 Пнд 17:37:01 #53 №5001677 
>>5001379
Рекурсия жрет много памяти и медленнее обычного цикла.
Аноним 22/04/19 Пнд 17:38:11 #54 №5001691     RRRAGE! 0 
>>5001675
>Итерация это циклы
лол

>>5001677
>Рекурсия жрет много памяти
16Гб хватит всем.

Рекурсия-кун
Аноним 22/04/19 Пнд 17:41:40 #55 №5001713 
>>5001691
Хуёл.
https://techdifferences.com/difference-between-recursion-and-iteration-2.html
Аноним 22/04/19 Пнд 17:48:39 #56 №5001740 
>>5001713
Земля тебе пухом
Аноним 22/04/19 Пнд 18:04:29 #57 №5001820 
>>5001587
Ну давай, обойди массив рекурсией, даун. Куда ты вообще лезешь?
Аноним 22/04/19 Пнд 18:20:43 #58 №5001897 
>>5001820
Обошёл, что дальше? >>5001454
Аноним 22/04/19 Пнд 18:31:51 #59 №5001940 
>>5001520
>бейсикоблядь
>2x10^3+19
Земля тебе пухом, братишка.
бросил каку в 2003 году
Аноним 22/04/19 Пнд 18:37:36 #60 №5001968 
>>5001677
Ебать ты дегенерат. Про оптимизацию рекурсии слышал вообще?
Аноним 22/04/19 Пнд 18:38:28 #61 №5001972 
>>5001940
Вижалбазик в мирке мелкософтовского офисного пакета живёт и здравствует.
Аноним 22/04/19 Пнд 18:41:29 #62 №5001986 
>>5001968
>оптимизацию рекурсии
ТЫ ему ещё по СИКП напиши
Я удивлён что этот зумер не на трубу дал ссылку
Аноним 22/04/19 Пнд 18:41:38 #63 №5001987 
>>5001278
я смог в mit app inventor))
Аноним 22/04/19 Пнд 18:43:59 #64 №5001996 
>>5001987
Что это?
Аноним 22/04/19 Пнд 18:51:03 #65 №5002032 
>>5001996
такая глючная но простая
возможность быстро
делать простые
прожки под андроид
Аноним 22/04/19 Пнд 18:51:14 #66 №5002034 
>>5001454
Ебать ты долбоеб. Ты походу ни на чем кроме похапы не писал и не знаешь что такое стек.
А знать что такое рекурсия, и при этом не иметь понятия о стеке и его реализациях в разных средах - это пиздец, это хуже чем не знать что такое рекурсия.
Твоя функция крашнет все нахуй, если ей передать массивы с хотя бы парой миллионов элементиков.
Лучше бы ты просто самовыпилился, придурок.
Аноним 22/04/19 Пнд 18:55:18 #67 №5002050 
>>5001357
Это все хорошо когда тебе нужны шайбочки.

Но если тебе нужен скажем промышленный комплекс, ну допустим несколько работающих в связке химических предприятий, и ты начнешь на своей сишке делать вручную миллионы разых приспособ, для миллионов разных шайбочек-болтиков-планочек-трубочек-етц из которых состоит будущий промышленный комплекс...
Ну в общем удачи тебе, и тем кому придется поддерживать дальше ту груду хлама которая получится на выходе
Аноним 22/04/19 Пнд 18:57:34 #68 №5002059 
>>5002034
Пруфы будут?

Аноним 22/04/19 Пнд 20:11:32 #69 №5002418 
>>5000917 (OP)
> concept Bar {
> field f: Int;
> }
>
> entity Baz provides Bar {
> field g: Int;
> field h: Bool = true;
> }
Я не понимаю нахуя они все переименовывают класс, абстракт, public, private итд в что то свое непохожее но по сути то же самое, они хотят затруднить изучение своего языка.
Я говорю про ублюдошные языки программирования типа свифта и вот этой ебанины, которая судя по всему с оглядкой на свифт и создается
Аноним 22/04/19 Пнд 20:18:05 #70 №5002463     RRRAGE! 1 
>>5002034
В похапэ самая грамотная и правильная реализация классов и вообще ООП, но сам язык сильно специализирован под серверный бакенд и ни под что больше и по этому он из своей ниши никогда не вылезет.
Так что не пизди на пых.
Аноним 22/04/19 Пнд 20:20:53 #71 №5002478 
нужен только паскаль. все остальные языки для ущербных аутистов типа вас
Аноним 22/04/19 Пнд 22:24:08 #72 №5003093 
>>5002418
Не осилили сделать полноценный класс в классическом понимании, обозвали entity, им заебись
Аноним 23/04/19 Втр 10:39:43 #73 №5005504 
Теперь это говнокода тред
Аноним 23/04/19 Втр 10:42:38 #74 №5005526 
>>5002059
Пруфы чего именно, братан? Каждый вызов функции делает запись в стек. У тебя их будет столько, сколько элементов в массиве
Аноним 23/04/19 Втр 14:19:31 #75 №5006903 
>>5002463
в Lua лучше
Аноним 23/04/19 Втр 20:44:39 #76 №5009588 
>>5006903
Не буду спорить так как луа всегда был симпатичен мне, но хоть убей не могу представить чем.
Я кстати оговорился
> и вообще ООП
нет, самое навороченое это все таки прототипное как в джаваскрипте, а в пыхе как бы сам класс - его синтаксис хорошо проработан, сласс наследник класса абстракт функции, константу можно в класс вписать и ее можно будет и из статического и из экземпляра посмотреть, к наследнику обратится к статическому методу не по имени а через статик свойство в экземпляре. В общем все длялюдей все удобно, только гетеры и сетеры как то коряво сделаны ну да бог с ними.
comments powered by Disqus

Отзывы и предложения