Есть плохой пример Python 2 => 3, было больно и грязно.
У меня сложилось впечатление, что проблема была скорее в интерпретируемой природе питона. Т.е. для плавного перехода требовалось, чтобы один интерпретатор понимал оба диалекта, умел различать файлы на разных диалектах в одной программе и умел их комбинировать. В случае с компилируемыми языками (в машинный или байткод) это тоже может быть болезненно, но не в такой степени. Если сильно припрёт, можно работать в сторону совместимости на уровне межмодульных бинарных интерфейсов. Тогда скомпилированные модули версий языка 1.х и 2.х вполне могут жить вместе. Пример этого — взаимодействие модулей одной программы, написанных на разных языках, через C ABI. Сложно, да. Но не неразрешимо. А в случае с питоном вы в принципе не могли бы скрестить в одном месте условную Django для 2.х и условный Numpy для 3.х.
У вас, простите, какая-то каша в голове. Для начала попробуйте разбить эту стену текста на отдельные утверждения, хотя бы для себя.
Проблема многих языков это лишний символы, которые надо печатать, например begin end вместо {}, и присвоение переменной через <= или +=, $ перед переменной(в шаблонах это нормально), даже с автодополнением на это тратиться много времени.
Java: extends/implements вместо простого ":", ага.
Тут у меня сразу вспоминается дико не удобный objective c, с которым Apple хотела поменять отношение к программированию
человека учат математике и тип всегда слева, и переменной значение присваивают через знак =
В школьной математике типы вообще не пишутся. Это так, к слову. Порядок присваивания тоже никто не менял. А тип слева — наследие семейства С/С++, которое ещё и усложняет парсер и грамматику. Если вы пройдётесь по современным языкам, у большинства аннотации типов именно справа.
мог переплюнуть своей выразительностью C, C++, JAVA, Python
Выразительность языка — грубо, отношение "количества смысла" в вашем коде к количеству этого самого кода.
Python
Дискутировать не буду т.к. питон использовал крайне мало и давно. Но в целом могу согласиться, питон достаточно лаконичен.
Java
Выразительная? У меня сложилось несколько иное впечатление — для выражения простых концепций требуется очень много писать руками, и спасает от этого только автокомплит в IDE.
C
Насчёт С — это вы серьёзно? Он простой, но я бы не назвал выразительным язык без обобщённого программирования и многих других вещей.
C++
О да. Его пожалуй можно назвать выразительным. Но до появления С++20 обратной стороной этой "выразительности" были километры write-only шаблонного кода, порождавшие такие же километры ошибок.
Вообще же, довольно неплохо видно, что именно наличие сильного конкурента подстёгивает развитие. Активное развитие Java пошло именно в последние годы, когда у неё появился сильный конкурент Kotlin. Активное развитие С++ (выпуск нового стандарта каждые три года) началось, когда его начали активно заменять на другие языки во многих нишах, где С++ исконно доминировал.
ведь нет никакой разницы каким именно оператором склеиваются ренджи, резолв перегрузок с вычислением шаблонных параметров будет одинаково шаманистым.
Я о том, что наличие оператора, позволяющего записывать вызов функции
result range_op(input_range input, arg arg1)
как
input |> range_op(arg1)
сильно упростило бы дело; однако, сейчас поддержка пайпа требует писать новые операторы в виде
struct range_op: public pipe_operator_right_hand
{
range_op(arg arg1) { ... }
result operator()(input_range input) { ... }
arg m_arg1;
};
а в чем конкретно сложность? Написать ленивый генератор на корутинах не сложно, ровно как и реализовать для него begin()/end()
Может я что-то путаю, но корутины вроде как затачивались для работы исключительно с экзекуторами и Ко? Или их вполне можно использовать в стиле питоновских или сишарповских генераторов?
опять же, в чем сложность? Ренджи должны принимать любые контейнеры (т.к. оперируют begin()/end(), которые должны быть определены для любого контейнера). Единственная потенциальная сложность в том, что некоторые методы контейнеров принимают одинаковые типы begin/end итераторов, что для ренджей в общем случае не так. Однако и эта проблема решается с помощью common_view, хоть это и не шибко удобно
Сложность в необходимости руками поддерживать полный протокол итераторов. Не более того. С одной стороны, ничего неразрешимого нет. С другой — таскать из проекта в проект очередной iterator_adaptor уже немного утомляет.
С одной стороны, фича конечно прикольная и нужная. С другой, в текущем варианте уже видна пачка проблем.
Оператор |. Для его реализации требуется определённое шаблонное шаманство, пусть и не сильно сложное. Что менее приятно, для реализации своих рейнджей требуется определённая писанина. Увы, комитет не смог или не захотел внести оператор |> или какой-то аналог.
Насколько я знаю, с поддержкой корутин всё непросто. Написать просто функцию с yield или аналогом, чтобы она сразу стала range-compliant, не выйдет.
Не совсем понятна ситуация с адаптированием своих контейнеров к поддержке рейнджей. До С++17 включительно iterator adaptors в std не пахло.
С одной стороны да. С другой, в моём конкретном случае вроде помогло. Крупный украинский банк, приложение требовало доступ к телефону, камере, хранилищу. Поставил кол, кинул репорт, удалил нафиг. Через какое-то время решил установить снова — и о чудо, разрешения теперь запрашиваются только по мере необходимости.
Обобщённое программирование — ключевое преимущество C++. Я знаю не все языки, но ничего подобного и на таком уровне не видел.
Если вы про именно обобщённое программирование, то какой-нибудь Haskell уделывает С++ и по удобству, и по продуктивности. И появление концептов пусть и улучшит ситуацию, но ненамного. Как минимум потому что они необязательные.
Не могу согласиться. Если воспользоваться аналогией с мореплаанием, есть три судоходных компании. Первая успешно возит грузы в пределах нескольких соседних портов. Вторая периодически выводит прототип корабля из бухты поплескаться. С третьей вообще непонятно. У кого вы закажете доставку груза на соседний архипелаг?
А существуют ли сейчас подобные варианты офлайн-бэкапа для домашнего и SOHO сегмента? Жёсткие диски в тумбочке не совсем вариант, DVD-R деградируют со временем.
Блин, гадский парсер сожрал смайлик. И редактировать не даёт. Надеюсь, было понятно, что это шутка.
Да вы сексист, батенька!
У меня тоже немало. Для меня
var: Typeлегче читать, чемType var, несмотря на то, что я пишу в основном на C++.Парсеру скорее всего не сложно. Человеку лучше видно. Сплошной поток цифробуквенных токенов тяжелее читать, нет визуальной отбивки.
У меня сложилось впечатление, что проблема была скорее в интерпретируемой природе питона. Т.е. для плавного перехода требовалось, чтобы один интерпретатор понимал оба диалекта, умел различать файлы на разных диалектах в одной программе и умел их комбинировать. В случае с компилируемыми языками (в машинный или байткод) это тоже может быть болезненно, но не в такой степени. Если сильно припрёт, можно работать в сторону совместимости на уровне межмодульных бинарных интерфейсов. Тогда скомпилированные модули версий языка 1.х и 2.х вполне могут жить вместе. Пример этого — взаимодействие модулей одной программы, написанных на разных языках, через C ABI. Сложно, да. Но не неразрешимо. А в случае с питоном вы в принципе не могли бы скрестить в одном месте условную Django для 2.х и условный Numpy для 3.х.
У вас, простите, какая-то каша в голове. Для начала попробуйте разбить эту стену текста на отдельные утверждения, хотя бы для себя.
Java: extends/implements вместо простого ":", ага.
Objective-C #History:
Т.е. это одна из первых попыток скрестить С и ООП. Apple его взяли как готовое решение.
Google LLC v. Oracle America, Inc.: Prior Oracle Am., Inc. v. Google Inc., 872 F. Supp. 2d 974 (N.D. Cal. 2012);
Kotlin (programming language): First appeared July 22, 2011
В школьной математике типы вообще не пишутся. Это так, к слову. Порядок присваивания тоже никто не менял. А тип слева — наследие семейства С/С++, которое ещё и усложняет парсер и грамматику. Если вы пройдётесь по современным языкам, у большинства аннотации типов именно справа.
Выразительность языка — грубо, отношение "количества смысла" в вашем коде к количеству этого самого кода.
Дискутировать не буду т.к. питон использовал крайне мало и давно. Но в целом могу согласиться, питон достаточно лаконичен.
Выразительная? У меня сложилось несколько иное впечатление — для выражения простых концепций требуется очень много писать руками, и спасает от этого только автокомплит в IDE.
Насчёт С — это вы серьёзно? Он простой, но я бы не назвал выразительным язык без обобщённого программирования и многих других вещей.
О да. Его пожалуй можно назвать выразительным. Но до появления С++20 обратной стороной этой "выразительности" были километры write-only шаблонного кода, порождавшие такие же километры ошибок.
Вообще же, довольно неплохо видно, что именно наличие сильного конкурента подстёгивает развитие. Активное развитие Java пошло именно в последние годы, когда у неё появился сильный конкурент Kotlin. Активное развитие С++ (выпуск нового стандарта каждые три года) началось, когда его начали активно заменять на другие языки во многих нишах, где С++ исконно доминировал.
Я о том, что наличие оператора, позволяющего записывать вызов функции
как
сильно упростило бы дело; однако, сейчас поддержка пайпа требует писать новые операторы в виде
Может я что-то путаю, но корутины вроде как затачивались для работы исключительно с экзекуторами и Ко? Или их вполне можно использовать в стиле питоновских или сишарповских генераторов?
Сложность в необходимости руками поддерживать полный протокол итераторов. Не более того. С одной стороны, ничего неразрешимого нет. С другой — таскать из проекта в проект очередной iterator_adaptor уже немного утомляет.
С одной стороны, фича конечно прикольная и нужная. С другой, в текущем варианте уже видна пачка проблем.
|. Для его реализации требуется определённое шаблонное шаманство, пусть и не сильно сложное. Что менее приятно, для реализации своих рейнджей требуется определённая писанина. Увы, комитет не смог или не захотел внести оператор|>или какой-то аналог.yieldили аналогом, чтобы она сразу стала range-compliant, не выйдет.С одной стороны да. С другой, в моём конкретном случае вроде помогло. Крупный украинский банк, приложение требовало доступ к телефону, камере, хранилищу. Поставил кол, кинул репорт, удалил нафиг. Через какое-то время решил установить снова — и о чудо, разрешения теперь запрашиваются только по мере необходимости.
Если вы про именно обобщённое программирование, то какой-нибудь Haskell уделывает С++ и по удобству, и по продуктивности. И появление концептов пусть и улучшит ситуацию, но ненамного. Как минимум потому что они необязательные.
Если же вы про метапрограммирование, то примеров гораздо лучших решений хватает. Был такой язык Nemerle. Который позволял полноценное метапрограммирование с использованием квазицитат и паттерн-матчинга по частям AST. Ещё из недавно виденного — Zig и его comptime, который позволяет, к примеру, генерить обобщённые типы в отсутствии дженериков. Тот же Template Haskell, если не ошибаюсь.
Вообще же, шаблоны С++ как инструмент обобщённого или метапрограммирования далеко не предел. И далеко не идеал.
Там не было тьюринг-полных шаблонов, препроцессора и контекстно-зависимой грамматики языка.
Опять кликбейт блин.
Заголовок: "Etsy без объявления заблокировал создание аккаунтов продавцов из России".
В статье: "Etsy заблокировала возможность создавать магазины для продавцов из регионов, где недоступна ее платежная система Etsy Payments".
Не могу согласиться. Если воспользоваться аналогией с мореплаанием, есть три судоходных компании. Первая успешно возит грузы в пределах нескольких соседних портов. Вторая периодически выводит прототип корабля из бухты поплескаться. С третьей вообще непонятно. У кого вы закажете доставку груза на соседний архипелаг?
Я не совсем понял. У Dynetics и Blue Origin уже что-то стабильно летает?
Вычитайте пожалуйста статью. Море опечаток и пропущенных запятых. Я отправил уже 5 штук, не дочитав и до середины.
Совершенно верно. Именно поэтому даже простенькая задача "развенуть строку" не такая уж и простенькая.
del. Уже прокомментировали ниже.
Я, к примеру, настолько привык вместо Home/End/PgUp/PgDn пользоваться Fn+стрелки, что обычная клавиатура уже неудобна.
Не совсем понял. Графика только на кристалле с ЦП? Или есть дискретная?
А существуют ли сейчас подобные варианты офлайн-бэкапа для домашнего и SOHO сегмента? Жёсткие диски в тумбочке не совсем вариант, DVD-R деградируют со временем.