помогите выбрать язык программирования до этого прогал на с++, сейчас планирую пересаживаться на какой-нибудь другой что необходимо: +++ наличие универсальных указателей на функциюна метод +++ возможность вызова функции/метода по имени +++ полноценное ооп, хорошая производительность ++ возможность передать в функцию, требующую определённое количество однотипный элементов, диапазон из массива ++ функции с переменным числом параметров ++ синтаксис, схожий с с++ ++ лёгкая интеграция с другими языками программирования + наличие встроенной библиотеки шаблонов + наличие простых графических библиотек + многофункциональная среда для языка + подключаемый сборщик мусора - динамическая типизация -- отсутствие каких-либо фич из с++ --- неуправляемый сборщик мусора
>>146301513 (OP) Лол, очевидно, что GO. Только на вроде бы нет указателей (не писал на нем). Но из новых и годных языков, больше всего подходит. Еще и комьюнити от Google.
>>146302156 Ты там такие пункты написал - сборщик мусора и указатели в одном пакете? А ты не размечтался там? Просто я таких языков не знаю, чтобы и мусор собирали и прямой доступ к памяти осуществляли.
>>146302242 >А ты не размечтался там? вполне возможно, что размечтался. в целом на сборщик пофигу, а вот указатели очень важны. >>146302320 студентота, выкатываюсь из-за того, что работа с указателями в некоторых ситуациях - сплошные танцы с бубном
Вообще самая большая база сейчас у Java. Но голая Java никому сейчас особо не нужна. Дрочи hibernate, spring. Особое внимание обрати на новый java8 стандарт - это вот сейчас очень модно. Когда освоишь можешь scala смотреть, тоже лишним не будет
>>146303470 Js годный в связке с чем-либо. Сложную бизнес-логику ты одним однопоточным JSом не вывезешь никогда. Ну ты конечно можешь попытаться, но и срать не снимая свитер тоже можно при желании
>>146303599 А что тут расписывать? Java вообще по сути только со ссылками работает - любой объект это по сути ссылка. Исключение составляют только примитивные типы.
>>146303658 я имел ввиду, что без него сейчас никак, хоть ты обосрись, а связка - тот же java или с, не понимаю тех, кто до сих пор использует php на беке
>>146304081 >Объектно-ориентированное программирование как таковое языком не поддерживается, но язык позволяет реализовать большинство понятий ООП при помощи других абстракций, например, типажей. насколько всё плохо?
>>146302851 На шарпе прогал. >наличие универсальных указателей на функциюна метод Вместо указателей там делегаты. class C { public int MyMethod(string str) { return str.Length; } } ..... delegate int MyDelegate(string str); C c = new C(); MyDelegate myDelegate = c.MyMethod; int result = myDelegate("qwe"); >возможность вызова функции/метода по имени Можно через рефлнксию. System.Reflection.MethodInfo method = typeof(C).getMethod("MyMethod'); C c = new C(); int result = method.Invoke(c, new object[] {"qwe"}); >полноценное ооп, хорошая производительность ООП полноценное. Классы, интерфейсы, абстрактные классы, статические классы, ковариация/контрвариация интерфейсов, рефлексия (позволяющая обходить инкапсуляцию...). Только множественного наследования классов нет (а интерфейсов есть), как в плюсах. Производительность хуже, чем у крестов, и, вроде бы, чуть лучше (мб только в некоторых моментами), чем у джавы. >возможность передать в функцию, требующую определённое количество однотипный элементов, диапазон из массива Не совсем понял, что именно ты хочешь. Если в функции эти аргументы объявлены через запятую, то, ну, можешь попробовать это сделать через метод Invoke, описанный выше, только это долговато работает. В таком случае лучше сделать, чтобы функция сразу принимала массив. Тогда и не будет лишних копирований переменных. >функции с переменным числом параметров private void MyMethod(params int[] test) {...} ... this.MyMethod(1, 2, 3, 4); >синтаксис, схожий с с++ + >лёгкая интеграция с другими языками программирования Хз, не пробовал. >наличие встроенной библиотеки шаблонов + >наличие простых графических библиотек + >многофункциональная среда для языка + >подключаемый сборщик мусора Он там всегда. >динамическая типизация Статическая типизация. >отсутствие каких-либо фич из с++ Нет дефайнов, которые позволяют компиллятору код подставлять в исходный файл самому. Вроде бы. А мож и есть, но не встречал. Нет оператора "запятая", позволяющего в одной инструкции выполнить несколько операторов. >неуправляемый сборщик мусора Если ты имеешь в виду неуправляемость программистом, то сборка мусора начинается в непредсказуемое время, но можно начать её самому вызовом System.GC.Collect();
>>146306051 под каждые типы входных/выходных параметров нужен свой тип указателя - неудобно, указатели не конвертируются в указатели на методы, даже если танцевать с бубном, функцию по имени вызвать нельзяне относится конкретно к указателям, но мешает очень сильно
>>146305957 >Вместо указателей там делегаты. не совсем то, что нужно >Можно через рефлнксию. вот это интересно, посмотрю >В таком случае лучше сделать, чтобы функция сразу принимала массив не всегда. если они сильно семантически различны, то передача как массив-плохое решение >Нет дефайнов, которые позволяют компиллятору код подставлять в исходный файл самому. неприятно в целом весьма неплохо, надо будет посмотреть повнимательнее на с#
>>146308459 >не совсем то, что нужно Это в чём это? Какой вообще чудесный функционал указателей на функцию ты используешь, что тебе не хватит делегата? Делегат, по своей сути, это типобезопасный указатель на функцию, лолд. >неприятно Ну, а другим неприятно, когда у тебя половина кода это макросы. Охуеть, серьёзно, выкиньте из головы все нестандартные макросы, чур, чур >лёгкая интеграция с другими языками программирования При небольшом желании через маршалинг можешь работать с любым языком, который есть в платформе .net. С теми же плюсами из мелкомягкого компилятора. >передача как массив-плохое решение Ты всегда можешь передать чудесный указатель на подмассив, это абсолютно эквивалентно передаче двух указателей на элементы, лол.
Но вообще, у всех языков, кроме крестов, есть проблема с графикой, так что такое. Наличие библиотек =/= они нужные/рабочие.
>>146309999 >Ну, а другим неприятно, когда у тебя половина кода это макросы. использовал в основном для сокращения записи указателя на функции, очень удобно >Ты всегда можешь передать чудесный указатель на подмассив, это абсолютно эквивалентно передаче двух указателей на элементы, лол. нет же. представь, что ты должен передать в функцию несколько интов с сильно разным смыслом, что отражено в их названиях в описании функции. >При небольшом желании через маршалинг можешь работать с любым языком, который есть в платформе .net. посмотрю, интересно. >Какой вообще чудесный функционал указателей на функцию ты используешь, что тебе не хватит делегата? много функций с разным количеством параметров, под каждый вид отдельный делегат/указатель заводить не хочу
>>146308126 То есть, ты хочешь, чтобы одному и тому же указателю можно было присваивать адреса функций с разными сигнатурами? Если да, то какой в этом смысл, ведь ты не сможешь вызвать функцию, не зная её сигнатуры.
>>146310649 я знаю, к примеру, что среди параметров только инты, я знаю их количество допустим, возвращаемого значения нет, адрес функции есть, сигнатуру восстановить вполне реально
>>146310594 >представь, что ты должен передать в функцию несколько интов с сильно разным смыслом, что отражено в их названиях в описании функции. Если тебе так важны названия, то можешь использовать ассоциативный контейнер.
>>146310804 Т. е. у тебя, например, есть 2 функции void func1(int par) и void func2(int par1, int par2) и указатель pointer, который может принимать обе этих функции. И тогда ты будешь писать при использовании этого указателя if (pointer == func1) { pointer(228); } else if (pointer == func2) { pointer(228, 1488); } Так что ли? Но тогда какой смысл вообще в этом указателе?
>>146310594 >ты должен передать в функцию несколько интов с сильно разным смыслом может пора подумать про рефакторинг? >отдельный делегат/указатель заводить не хочу Посмотри про вариативность делегатов
>>146311266 не-а. ты принимаешь дополнительно количество параметров(vector.size()), которые надо передать в функцию, и проверка будет if(vector.size()==1) { pointer(vector[1]); } if(vector.size()==2) { pointer(vector[1],vector[2]); }
>>146311574 В языках со статической типизацией такого не может быть, так как ты тут можешь написать передачу двух параметров в функцию с одним параметром и наоборот. Пересмотри свою архитектуру и найди решение получше.
Можешь, вообще, привести простой пример задачи, где это может понажобиться?
>>146311943 >Можешь, вообще, привести простой пример задачи, где это может понажобиться? простенькая программа похожая на интерпретатор. пользователь пишет, какие команды надо выполнять, я сохраняю адрес функции, которую необходимо вызвать и добавляю дополнительные параметры в зависимости от состояния программы, и в определённый момент выполняю пользовательские команды в определённом порядке на данный момент программа уже работает, но мне совершенно не нравится то, что получилось
>>146312373 >они Это он, и у него довольно своеобразный взгляд на ооп. Оче классная была дискуссия на тему ооп с ним на жавадэй 2к16. Алсо >имплагинг, нулл - нужная вещь
Python +крайне востребован +быстр в освоении +100% скрипты для оптимизации своей жизни станешь писать на нём +он заменит тебе калькулятор +гигансткое колличество библиотек + лёгкий импорт с-шных(по сути заголовочный файл переписать) +Django/Tornado/Flask(круче искать априори бесполезно, эти фреймворки и делают пайтон столь востребованным) +ФЕЕРИЧЕСКИ приятный синтаксис +Именно на нём написан(серверные части) Youtube/Dropbox +Его активно спонсирует и юзает google +активно развивается за счёт PEP'ов(рац предложений пользователей), а не прихоти разработчика самодура +Полнейшее ООП +проблема 2/3 уже не актуальна, всё нужное уже переписали +кроссплатформенен +взгляни на вакансии Python 3 + Django - кол-во вакансий и ЗП тебя порадуют -скорость, но в его сфере применения(веб-сервера преимущественно) это не является проблемой -уйти с него будет трудно, затягивает -гибкость, он станет гибким только тогда когда ты его крайне глубоко изучишь, на уровне реализации, но тогда проблема производительности отпадает + такие специалисты крайне востребованы просто ОЧЕНЬ востребованы
>>146312897 основная идея такая: ты выделяешь из пачки переменных/функций логически связанную часть и объединяешь их под одним именем(машина имеет переменную кузов, движок и функцию ездить). теперь ты можешь создать переменную машина и автоматом создадутся переменные кузов и движок внутри неё+ функция ездить будет иметь постоянный доступ к ним. это совсем в двух словах
>>146312397 Сделай для каждой команды по классу, наследнику одного и того же базового класса, и оверрайдь в них виртуальный метод, принимающий мапу с параметрами (имя=>значение). Либо мапу с параметрами передавай в конструктор, а оверрайдить будешь метод без параметров. Все эти объекты в контейнер базового класса загоняешь и на стадии выполнения просто по очереди вызываешь тот метод перегружаемый.
>>146313334 есть и для джуниоров, согласен меньше, но есть. Но он и не вкатывается, он таки на ++ уже посидел. Специалист задроченный в пайтоне - редкость. Самый норм сейчас вкатиться в Python на Лутце + любая рандомная с названием по стрёмней, пройтись по Djang'е и уйти в проект по поддержке Djang'и. Опыт наберёться быстро если не дрочить на стены.
>>146313633 Это довольно разные вещи. Django даст тебе возможность с пол пинка делать почти что угодно(просто взгляни на первые 5-6 страниц любого тутора и ты поймёшь в чём её прелесть). Нравится она всем, точнее не только лишь всем, мало кому она не нравиться)) ИМХО там где есть смысл развернуть Django, php соснёт.
>>146313450 >Сделай для каждой команды по классу, наследнику одного и того же базового класса если я буду использовать мапы, то классы здесь в принципе будут избыточны. это ведь один из паттернов, верно?
>>146301513 (OP) TypeScript >наличие универсальных указателей на функцию Можно сказать Check, если считать ссылку и указатель одним и тем же >полноценное ооп, хорошая производительность Check >возможность передать в функцию, требующую определённое количество однотипный элементов, диапазон из массива Check ...myArray % > функции с переменным числом параметров Check >лёгкая интеграция с другими языками программирования Check >наличие встроенной библиотеки шаблонов Check >наличие простых графических библиотек Check >многофункциональная среда для языка Check >подключаемый сборщик мусора Not check >динамическая типизация По желанию >отсутствие каких-либо фич из с++ давно с плюсами дела не имел, так что не знаю что сказать >--- неуправляемый сборщик мусора Увы, check
>>146313986 Почему классы избыточны? Мапы нужны для того, чтобы передавать в команду различные параметры из командной строки и использовать их по именам.
>>146314557 это фича из EcmaScript 6, но в ТСе поддерживается и компилируется в любой JS левел. А еще есть по целым объектам: const obj = { ...prevObj, a: 5 }
>>146314655 сигнатура у всех функций одинаковая -> понадобится один тип указателя -> помещаем все функции в один класс -> вызываем через указатель. а классы здесь были бы просто большим количеством не сильно полезного кода. и всё-таки, это паттерн, или я туплю?
>>146314433 они выполняют несколько разные задачи. Заменить может, но в некоторых случаях(лёгких проектах) даже Flask, а уже тем более Django будет из пушки по воробьям
>>146315541 либо я тебя совсем не понял, либо в твоём примере в функцию передаётся просто мапа одним параметром, внутри которой имена переменных и их значения, что даёт унифицированную сигнатуру функций
>>146315541 P.S. Если так хочешь какой-нибудь паттерн, то примени абсьрактную фабрику: в базовом классе делаешь статический метод, принимающий строку, содержащую имя команды, и возвращающий, объект класса этой команды.
>>146313097 Вечера тебе. Смотри, буквально на днях начал вкатыватьсяи выкатываться во всю эту среду и выбрал питон как первый язык, который я хотел бы изучать. Но к Лутцу еще не приступал, а по гайдам начал читать Вирта "алгоритмы и структуры данных" и SICP, книги довольно старые, но там объясняются принципы программирования, которые по сути не изменились за это время. Так вот правильно ли я поступаю? И что еще посоветуешь для изучения питон и пойдет ли он как первый язык? Спасибо.
>>146309999 >При небольшом желании через маршалинг можешь работать с любым языком, который есть в платформе .net. С теми же плюсами из мелкомягкого компилятора. Еще через DLR в теории можно много с чем интегрироваться, но сам не пробовал.
>>146316241 >SICP, книги довольно старые, но там объясняются принципы программирования, которые по сути не изменились за это время А почему тогда MIT от него отказался?
>>146316231 хочу писать такие простенькие моменты считанными строчками кода. спасибо тебе за советы, если не перекачусь - возможно пойду по одному из предложенных тобой путей
>>146301513 (OP) Если ты, как ты говоришь, до этого прогал на плюсах, то ты должен сам рассмотреть несколько ЯП и сделать соответствующие выводы. Да и ты не конкретизировал, какие тебе нужны языки, для каких целей? Для web-разработки, али под ОС?
>>146316646 Нет, я про то, что там, как мне кажется, вводят таких же гуманитариев головного мозка как я в сферу программирования, а именно как правильно мыслить.
>>146316241 Лутц "Изучаем Python" 4!!! издание. Это библия Пайтона(не питона, а пайтона!!! он назван в честь телешоу, а не пресмыкающегося), начинать нужно только с неё. Лучше ещё никто не написал.
>>146316741 Ой, разговоры про мышление начались. Лучший способ чему-то научиться, делать это. Для начала любой курс на ютубе посмотри, дальше задачу себе даешь и гуглишь. Книжки не подстегнут тебя ни к чему, онли практика, проверено.
Напоминаю всем сычам, что в веб разработке, нихуя даже думать не нужно. Все говно уже сделали за вас. Работа кодера это искать нужные скрипты в библиотечке и прикручивать их.
>>146317058 Кстати о задаче, я лично изучал(и считаю это верным способом) - читаешь лутца до примерно трети, придумываешь большой проект, например копию какого-нибудь приложения(хоть текстового редактора, пофиг).А дальше читай и реализовывай, ИМХО лучше сразу херачить криво-косо но большую задачу, так ты быстрее набьёшь шишки в стиле написания кода.
>>146317231 Декстоп? Сложно наверное, если борду свою написать, это еще как то я могу себе представить, но вот вибм конвертер... Например функционал в коде окей, а граф оболочка того же редактора как делается? Тоже в коде прописывается, отрисовывается?
>>146317664 >тоже в фотошопе отрисовывается или стандартные окошки/кнопки/менюшки. или крафтишь из графических примитивов внутри приложения если уж совсем что-то примитивное.
>>146317448 Моей 3-й при изучении была реплика winamp'а. Tkinter(таки если уж дрочить, то дрочить, впрочем до сих пор нахожу ему применения, ибо он быстр, встроен и кроссплатформенен) сделал GUI, звуки уже ХЗ на чём 5 лет назад было. Ушло где-то неделя разработки(на тот момент 1.5 месяца вялого изучения в 8 классе шкалки). GUI(в т.ч. с разделяемым КАК в оригинале окошком) парсинг треков, чтение заголовков, подгружал с инета инфу и ещё куча дерьма. Разве визуальные наркотики не делал. Вторым проектом(плохо доделаным конечно, он работал только в 1 конкретном месте, но на 2-м месяца вялого изучения школьника 8-го класса думаю норм) - распознавание жестов. Вебка + OpenCV+куча математики(её то и не хватило чтоб толком закончить), распознавать успел за 3 дня научиться кол-во пальцев и угол поворота руки. ХЗ зачем но было прикольно. Также написал игру столлман есть ноги(даже видос остался криво снятый https://vk.com/saram23?z=video316881060_171320860%2Fvideos316881060)
>>146317870 ты просто машина. я подрабатываю репетиторством, ко мне студиозисы приходят, чтобы понять какие-нибудь вложенные циклы, а ты тут ТАКОЕ вываливаешь
>>146316698 Там надо будет сделать шаблонную функцию template<class T>, которая возвращает указатель на базовый класс (в сигнатуре), но на самом деле возвращает указатель на T, а принимает мапу с параметрами. Далее нужна статическая мапа с ключом — названием класса и значением — адрес на ту шаблонную функцию с соответствующим классом в угловых скобках. И эта мапа инициилизирована строчками вида название команды — адрес шаблонной функции для соответствующего класса, что тоже может быть макросами сделано для уменьшения количества текста.
Ну и в итоге статическая функция в твоём базовом классе принимает строку (название команды) (а так же мапу с параметрами), ищет её в мапе, достаёт адрес функции (та, которая шаблонная), инстанциирующей объект, выполняет её, передавая мапу с параметрами, получает указатель (желательно shared_ptr), ну и возвращает это.
А дальше ты это вносишь в свой вектор команд. И потом, когда надо выполнять их, ты уже не делаешь никаких проверок (объект сам знает, какой код ему выполнять, а параметры уже переданы при инстанциировании), а просто делаешь им всем по очеерди execute().
>>146318097 Кстати как вкатился в репетиторство? Имею некоторый опыт по знакомым, да и наследственное - маман учитель. Но хотел бы взять пиздюка к ЕГЭ готовить или лучше к олимпиадам. Где рекламиться/как искать?
>>146317587 Шаблоны и полиморфизм дают достаточную гибкость для того, чтобы подняться над тем плоским миром, где требуется конвертировать указатели. Небось еще динамик кастом пользуешься.
>>146318343 собственно, идёшь в гугл, пишешь найти репетитора по предмету, выбираешь сайт с репетиторами получше и регаешься там как репетитор. необходима профильная вышка ( не педобраз, а по предмету ), но не везде её наличие будут проверять
>>146301513 (OP) Как ты можешь с чего-то "перекатиться" если ты на плюсах ни копейки не заработал. Бабу даже не понюхал. Ты и никогда в него не вкатывался, твои обосанный лабы это просто ничто. Охуительня история.
>>146320227 У тебя, похоже, заблуждение насчет тяжеловесности некоторых фич языка. Стоит больше дизассемблировать разные подходы, чтобы реально понимать, сколько весит каждый из них. Да, строк кода может оказаться больше (только если это небольшая программа), но после компиляции программа будет не тяжелее, чем если бы она была написана через еблю с указателями. А бонусом будет большая гибкость, что жизненно необходимо при создании больших проектов. Если же в фундаменте большого проекта лежит ебля с указателями, типы которых прибиты гвоздями, то такой проект быстро загнется, т.к. его гибкость будет стремиться к нулю, а внесение изменений в фундамент такого проекта будет требовать массу усилий.
>>146321664 ну смотри, на каждую функцию, реально исполняющую свою задачу, приходится одна строго определённая функция - обёртка, помещающая все её параметры в массив данных. + 2 функции: пакующая и распакующая/запускающая данные. не совсем понимаю, где здесь в принципе может всплыть проблема.
>>146322130 Проблема может оказаться там, где тебе нужно руками кодить много повторяющихся вещей. Например, если тебе для добавления в программу новой "реально исполняющей свою задачу" функции требуется написать еще обертки, где-то зарегистрировать какие-то указатели, что-то еще поменять в десятке файлов, то полезно подумать над дизайном еще раз. Для тебя это, конечно, может и не составлять проблемы. Но с другой стороны ты мог бы поднять эффективность своей работы. Представь, например, что тебе не надо делать обертки, а вся необходимая обвязка генерируется компилятором из шаблонов. Ты только пишешь свою новую "реально исполняющую задачу" функцию и регистрируешь ее одной строчкой.
>>146324323 к такому я только приблизился. сейчас надо для добавления функции написать обёртку, в которой одна строка - вызов пакующей функции. всё остальное работает само по себе
>>146324996 паковщик - функция с переменным числом параметров - просто переписывает все параметры в командный вектор распаковщик: if(vec.size()==4) ((pmove4)(vec[0]))(vec[1],vec[2],vec[3],step); if(vec.size()==3) ((pmove3)(vec[0]))(vec[1],vec[2],step); if(vec.size()==2) ((pmove2)(vec[0]))(vec[1],step); if(vec.size()==1) ((pmove1)(vec[0]))(step); }
>>146313503 Провозился с ним какое-то время. + Удобно, разные неприятные или ненужные мелочи из С++ пофикшены или переделаны + Импорты, хэшмапы в языке (а не в либе), много компайл-тайма, допиленные шаблоны, куча инструментов для мультитрединга в стд, тупли и куча других няшностей. Большая и фичастая стд библиотека. + Линковка с С/С++ библиотеками. Можно без проблем дружить с C, были бы биндинги. Можно кое-как дружить с C++. + Мгновенная компиляция. + На его охуенность можно дрочить.
- Некоторые вещи непривычны после плюсов, надо подолбаться/привыкнуть. Не критично, но если ты дебил, то будет баттхёрт. - Разработчики — большие любители ломать обратную совместимость. Библиотеки собираются ТОЛЬКО той версией компилятора, под которую написаны. - Кривоватое API у стандартной библиотеки. Нет ощущения выдроченности, как в С++. Один раз напоролся на конфликт имён из двух разных модулей стд. Не критично. - Большая и плохо поддерживаемая стандартная либа. Например, shared Variant не засунуть в Message (не помню точные названия классов, но было). Разработчикам дико не хватает рук фиксить всё это говно. - dub ёбаное говно, пакеты модерируются через жопу, старые пакеты проёбываются, из-за сломанной обратной совместимости компилятора сборка превращается в леденящий душу пиздец. Можно не пользоваться и собирать всё по-старинке, либо прикрутить сторонний сборщик, либо разобраться, как в этом дерьме можно собирать из локальных пакетов. - Нет работы, в отличие от хипстерского Go, например. Дишка — труъ андеграунд.
Вывод: Можно играться, но для продакшена не стоит.
Своеобразный язык, но неплохое совпадение по пунктам %) > +++ наличие универсальных указателей на функциюна метод есть > +++ возможность вызова функции/метода по имени Не очень понятно, имеется в виду возможность хранить указатель на функцию на стеке в каком-нибудь хэшмепе? На расте делается просто. > +++ полноценное ооп, хорошая производительность Тут минус, используется система типов родственная хаскелю, имхо очень классная, но ни разу не ООП точно > ++ возможность передать в функцию, требующую определённое количество однотипный элементов, диапазон из массива Да, с любого массива можно взять т.н. слайс, указатель на начало и конец среза с массива > ++ функции с переменным числом параметров К великому сожалению нет, хотя наверняка должна быть поддержка для C FFI > ++ синтаксис, схожий с с++ Имхо плюс-минус > ++ лёгкая интеграция с другими языками программирования Да, так как нет сборки мусора. Код даже может дергаться из C/C++ > + наличие встроенной библиотеки шаблонов Именно плюсовых шаблонов тут нет, есть НОРМАЛЬНЫЕ макросы, а не препроцессор C, и синтаксические расширения времени компиляции, но они пока не доехали до стабильной ветки. Местные дженерики напоминают тайп-классы к хаскелле > + наличие простых графических библиотек Бинлинги к SDL точно есть, с GUI вроде жопа > + многофункциональная среда для языка ??? > + подключаемый сборщик мусора Rust основан на концепции времени жизни объектов (lefetimes - аналог RAII, так же концепция заимствований, про это лучше почитать отдельно, очень интересная тема) Этот подход почти отметает необходимость в сборке мусора, однако заметно усложняет написание кода, особенно на начальном этапе. Однако, если язык интегрируется с языком со сборкой мусора, то можно сделать так, чтобы определенные объекты собирались этим самым сборщиком мусора. > - динамическая типизация Статическая, сильная, во многом похожа на хаскельную, если проникнешься, велик шанс что на типизацию в плюсах будешь смотреть, как на говно > -- отсутствие каких-либо фич из с++ Каких-либо прямых заимствований тупо из плюсов вроде нет, есть, правда, довольно много синтаксического сахара и заимствований из языков высокого уровня (при этом оверхед стараются держать в идеале на нуле или очень небольшой), и вообще код на расте выглядит более высокоуровневым, чем плюсовый > --- неуправляемый сборщик мусора Точно нет, старые добрые стек и куча %)
>>146329986 Что есть, то есть. Язык ИМХО хороший, но новых концепций много, а концепция лайфтаймов и заимствований с гарантиями времени компиляции без рантайм-оверхеда вообще уникальная.
>>146304551 Скажем так, есть аналог класса - struct и аналог абстрактного класса родителя при наследовании? - trate (типаж), методы могут добавляться как к тому так и другому, если добавляются к struct'у, то это аналог собственного метода у класса, от которого никто не наследуется, если к типажу - то это аналог интерфейса в жабе. Наследования нет, вместо того, чтобы описывать кто от кого унаследовался, ты подбираешь к каким страктам подходят какие типажи. Например тупой пример ты не создаешь тип Number и наследуешь от него Int, Uint, Float, а сразу создаешь Int, Uint, Float и говоришь, что Int и Uint удовлетворяют типажу Eq, так как если тебе дать два целых числа, ты однозначно можешь сказать их соотношение - больше, меньше или равно. А вот Float этому типажу увы не соответствует, так как среди допустимых значение есть NaN, который не равен даже самому себе и вообще полная НЁХ. В стандартной библиотеке раста есть типаж для этого PartialEq https://doc.rust-lang.org/std/cmp/trait.PartialEq.html
По началу кажется, да ну его в пень, а со временем понимаешь, что, благодаря такому подходу, ты вынужден обрабатывать почти все пограничные случаи, и кол-во трудноуловимых багов в твоем коде значительно снижается.
до этого прогал на с++, сейчас планирую пересаживаться на какой-нибудь другой
что необходимо:
+++ наличие универсальных указателей на функциюна метод
+++ возможность вызова функции/метода по имени
+++ полноценное ооп, хорошая производительность
++ возможность передать в функцию, требующую определённое количество однотипный элементов, диапазон из массива
++ функции с переменным числом параметров
++ синтаксис, схожий с с++
++ лёгкая интеграция с другими языками программирования
+ наличие встроенной библиотеки шаблонов
+ наличие простых графических библиотек
+ многофункциональная среда для языка
+ подключаемый сборщик мусора
- динамическая типизация
-- отсутствие каких-либо фич из с++
--- неуправляемый сборщик мусора