ТехнологииПрограммированиеЯзыки программирования
Data Science
23 апреля 2022 · 20,5 K
Василий Банников
Погромист на C# · 26 апр 2022
Вопрос не имеет смысла.
Пойдём от обратного: допустим, что программисты не могут ничего принципиально нового привнести в индустрию или создать новый ЯП.
Если бы это было так, то новые языки не появлялись бы, как и новые подходы в разработке.
Например за последние лет 15 появилось минимум 6 новых языков, которые активно используются в современной разработке:
TypeScript
Rust
Go
Kotlin
Dart
Swift
А про новые подходы - это уже скорее тянет на целую статью. Но если коротко, то разработка GUI идёт в сторону упрощения, декларативности, и реактивности, а также уходит от всяких xml-подобных языков разметки к DSL.
На серверах история сделала виток и всё более популярными становятся подходы с разработкой небольших и менее требовательных к ресурсам приложений. Очень сильно развиваются микросервисы и методологии DevOps. "Highload" - это теперь не только про гугл и даже не самым крупным компаниям приходится думать о производительности
Тот же хайповый ML хоть и не новый, но только недавно стал возможен в тех масштабах, как его применяют сейчас.
1 эксперт согласен
Марк Сафронов
Веб-разработчик, геймер, специалист по этике · 3 июн 2022
Короткий ответ точно на поставленный вопрос: программисты не просто "могут", они изобретают, каждый день, прямо сейчас, уже больше шестидесяти лет как.
А насчёт "изобрести свой язык программирования"… давайте я научу вас изобретать языки программирования.
Придумываете грамматику языка, то есть, как он будет выглядеть визуально, напечатанный.
Придумываете семантику языка, то есть, что компьютер должен делать, дойдя до очередного элемента грамматики. На самом деле этот пункт должен быть первым, потому что языки программирования придумывают с определённой целью, для решения конкретных задач конкретным способом, но с обывательской точки зрения нужно начинать с формы, а не с содержания, поэтому я решил подстроиться.
Пишете формальную EBNF для вашего языка. На бумажке. Например:
выражение = атом | список
атом = число | символ
число = [+-]?[\p{Number}]+
символ = [\p{Alpha}][\p{Alpha}\p{Number}].*
список = '(', выражение*, ')'Теперь на основании вашей грамматики на бумажке вы пишете скрипт для универсального конструктора парсеров bison. В процессе выполнения этого скрипта бизон вам делает код парсера токенов в узлы AST и заголовочный файл для токенайзера.
Теперь на основании вашей грамматики на бумажке и заголовочного файла для токенайзера вы пишете скрипт для универсального конструктора токенайзеров flex. В процессе выполнения этого скрипта флекс вам делает код токенайзера.
Теперь, имея токенайзер и парсер, вы дописываете код кодогенератора, который превращает узлы AST от парсера в вызовы LLVM, они будут генерировать код на промежуточном языке LLVM.
Вуаля, вы написали фронтэнд к LLVM для вашего нового языка программирования. Компилируем его и всё, у вас есть компилятор вашего языка для всех платформ, которые поддерживают LLVM. То есть, всех.
Публикуете статью о вашем новом языке на хабре, лоре, в соцсетях, в телеге, делаете сайт-одностраничник со ссылкой на скачивание компилятора.
???
PROFIT!
Видите? Не пришлось даже читать драконью книгу или учиться пять лет в университете. Вот чувак написал свой язык в качестве упражнения в 2009 году. В самом проекте LLVM есть туториал по созданию своего языка, причём они по хардкору даже сами пишут парсер и токенайзер без flex и bison.
Отбросив иронию в сторону, то, что я хотел сказать - это что создание языков программирования уже давно не чёрная магия, доступная только академии. Теперь это вопрос практической применимости, в 2022 году у нас уже есть готовые промышленные инструменты, документированные принципы, техники для этого. Да даже сами готовые языки программирования на любой вкус. Это уже не достижение — LOLCODE, Ook, Chef, Brainfuck, GolfScript и десятки других эзотерических языков программирования тому доказательство.
Более того, концепция "языка программирования" распространяется не только на языки программирования общего назначения, которые будут компилироваться в машинный код. Среди паттернов проектирования есть паттерн под названием "интерпретатор", он описан ещё в исходной книге банды четырёх, двадцать семь лет назад, я только что перепроверил в своём экземпляре. Концепция, как и книга, под названием Domain-Specific Languages, предметно-зависимые языки, существует уже минимум десятилетие.
"Принципиально новое" в разработке программного обеспечения это уже давно не просто новый язык программирования.
2 эксперта согласны
Георгий Устинов
Пишу код и т.п. · 23 апр 2022 · itustinov.ru
Периодически возникают смелые проекты: Хаскелл, Эрланг, Perl, Raku.
Нельзя отрицать влияние на новые возможности в языках лингвистики, математики, философии, культуры в целом.
Нечто по-настоящему новое появляется в результате сотрудничества автора с сообществом, или сообщества с каким-то утверждающим новые возможности органом (кто-то должен упорядочивать RFC) или даже сообществ разных языков.
Конечно, есть множество т.н. эзотерических языков, сделанных ради шутки, которые никогда не предполагалось использовать на практике. Странных языков много, не все они появились 60 лет назад.
Также, новые необычные языки появляются из-за необычных задач. Эрланг появился в телефонной компании и должен был быть предельно отказоустойчивым. Perl появился чтобы обрабатывать тексты. Raku появился, потому что просили, поэтому на нём легко делать парсеры новых языков. Go появился, чтобы привести код к единому стилю, сделать его менее абстрактным и быстрее компилируемым, чем в C++.
2 эксперта согласны
Александр Х. (nikodim)
Пофигист с большим жизненным опытом, обремененный образованием и личной жизнью... ;) · 9 июн 2022
Ваш вопрос в корне неправилен! Он даже не непонятен а именно неправилен. Как минимум в том, что ты должны были нам дать понять, что именно вы вложили в смысл слов «принципиально новое». Программирование - это всегда оперирование математикой логических значений, а также управление командной системой какого-то процессора (не камня, микросхемы контроллера, а именно процессора, как исполнительного инструментария).
В том смысле (и общепонятном, кстати) в котором вы это спросили и вам ответили - «в основе всегда лежит код основанный на наборе нулей и единиц и это неизменно», и об этом вам сказали, хоть и не совсем верно, на мой взгляд, ответили о принципах… Но вы ведь и не уточнили, что вы отнесли к «принципам». В нормальном смысле принципиально новое в программировании появляется почти каждый день и такого принципиально нового было много - начиная с появления языков высокого уровня и иерархии классов и заканчивая графическим программированием, анализом данных, функциональными языками и многим другим!
Кроме того: задумайтесь над заменой исполнительного процессора например на биологический - вы получаете принципиально другое программирование, основанное на другой логике и другом аналитическом и инструментальном аппарате. Это ведь можно посчитать за «принципиально новое»? А меж тем примеров такого программирования в последнее время - множество… — эксперименты с пчелами, людьми и популярной овцой по имени Долли - это все об этом и там везде разный инструментальный, логический и исполнительный аппарат.
Все зависит от того, что программируется (исполнительный процессор), зачем, и как…
И еще… понятие «принципы программирования» - это совсем не то, что мы тут обсуждаем! И да - они появляются и от них отказываются достаточно часто. «Принципы разработки» - это вообще шаг в бок и там нового ну уж очень много за последнее время… а это ведь тоже программирование… так что принципиально нового всегда с избытком… а вопрос который вы задали - больше философский…
2 эксперта согласны
Михаил Б
Очень интересно IT. Программист самоучка · 25 апр 2022
Естественно. Программист может как минимум разработать новый модуль для языка программирования, который улучшит его. Также программист может работать в команде разработчиков языка и вносить в него изменения, добавлять функции, исправлять баги. Тем самым программисты облегчают работу с языком программирования и делают его лучше
1 эксперт согласен
Хекслет
Образовательная платформа Хекслет · 2 мар 2023 · ru.hexlet.io
Отвечает
Да, это вполне вероятно. Языки программирования постоянно развиваются, также появляются новые языки и функциональные возможности. Многие новые языки программирования были созданы программистами, которые вдохновлялись своими опытами и экспериментами в разработке программного обеспечения, а также желанием улучшить эффективность программирования. Программисты могут... Читать далее
Помогаем новичкам освоить профессию веб-разработчика
Перейти на ru.hexlet.io/webinars
Алексей Крутяков
военный инженер-математик на пенсии, интересы: гномоника, воспитание детей, Van-life. · 27 апр 2022 · analemma.ru
Когда языки появляются из "чистой идеи", то возникает LISP. В этой области можно ожидать чего-нибудь, танцующего от задач/интерфейса с будущим ИИ.
Когда язык возникает из специфических структур данных, то появляется SQL. Возможно будут создаваться метаязыки высокого уровня с новыми типами данных, например, видео (аудио), поисковый запрос и т.д.
Из железа пока ничего нового не светит, разве что мы возобновим проект СССР "Сетунь" и появится вычислительная техника на оптимальной 3-чной арифметике ))
Last but not least: Квантовые компьютеры неизбежно породят языки, базирующиеся на теории нечетких множеств.
Стараюсь жить по истинному времени, поэтому общаюсь в offline
Перейти на analemma.ru
3 эксперта согласны
Михаил Б
подтверждает
29 апреля 2022
Верно
Александр Х. (nikodim)
подтверждает
30 апреля 2022
как тут прокомментируешь? все внятно и по делу. Очень лаконичный, четкий и без тумана ответ.
иван смолин
28 апреля 2022
очень интересно:))
Алексей Крутяков
28 апреля 2022
@иван смолин, вы натолкнули на ещё одно соображение, я его внес в ответ:
Last but not least: Квантовые компьютеры неизбежно породят языки, базирующиеся на теории нечетких множеств.
Артур Т
SMM/SEO/ Директор маркетинговой компании. Продвигаем бизнес в цифровой среде Vkontakte... · 26 янв 2023 · taplink.cc/businessb2b
Да, программисты могут придумать что-то принципиально новое для языков программирования. Область языков программирования постоянно развивается, постоянно разрабатываются новые языки и обновления существующих языков. Новые языки могут вводить новые функции, концепции и парадигмы, которые могут сделать программирование более эффективным, выразительным и мощным. Примеры... Читать далее
Продвижение бизнеса /SEO/ Создание любых сайтов / Создание сценариев и роликов
Перейти на taplink.cc/businessb2b
Dmitry Maslov
Инженер путей сообщения – строитель · 23 апр 2022
Всё принципиально новое в языках программирования, как и сами языки программирования изобретены программистами. Следовательно программисты могут изобрести свой язык программирования и с принципиально новыми идеями. Сам «изобрёл» несколько штук. Не знаю насколько это принципиально, насколько это новое, но у меня можно при определении необязательных аргументов функции использовать переменные и другие аргументы, а также переменные в качестве аргументов оператора switch, блоки сохранения значений, а также операторы break и continue c параметром, чтобы можно было прерывать сразу несколько вложенных циклов, обратный foreach на уровне языка, а также с возможностью попарного перебора элементов списка и игнорирования нескольких элементов в начале и в конце списка, а также конструкция else для циклов, ни разу не выполнившихся.
6 экспертов согласны
Михаил Б
подтверждает
30 апреля 2022
Точно
Василий Банников
23 апреля 2022
Только перечисленные фичи так или иначе уже были реализованы в уже существующих языках)
Dmitry Maslov
25 апреля 2022
@Василий Банников, Про это ещё Ильф и Петров писали «Какой удар со стороны классика».
Дмитрий Xy
Частный крипто-программист · 25 янв 2023
Собственно они ежедневно этим и занимаются ежедневно. Что то придумывают новое, чего раньше не было. Языки программирования постоянно развиваются.
1 эксперт согласен
Child Lover
P3D0F1L3 · 28 янв 2023
При́нцип (основа, начало, первоначало) (от лат. principium; греч. αρχή — дословно «первейшее») — основа чего-либо.
Можно ли сделать новую основу ЯП? Например, кодировать не символами, а иконками. Можно, это убьёт абстрактность, зато в конкретной задаче повысит читаемость кода.
Но вопрос не в основах языка, а в принципиально новом чём-то для ЯП. Вне зависимости от его важности, но что является областью работы программистов.
Например:
Алгоритм, который ещё не описан математиками
ИИ-компилятор
ИИ-что-то-ещё
Конечно можно
Юрий Землянов
Давно занимался прогнозирования. Потом бизнесом, но стал просто пенсионером. По... · 7 июн 2022
Нет не могут, язык программирования разный только с позиции синтаксиса и семантики. Основная суть программирования написание инструкций для некого дискретного автомата. В начале это сводилось к элементарным, вроде размести еденички и нолики в память. Сдвинь на одну позицию влево и…, потом все укрупнили - сложи два числа и действуй в зависимости от результат, потом ещё укрупнили - для всех процессов из множества исключи… Хотя на самом деле в основе спрятаны те же алгоритмы сложения, вычитание, сдвига и сравнения двоичных чисел.
1 эксперт согласени3 эксперта не согласны
Александр Х. (nikodim)
возражает
9 июня 2022
Не сказать что я полностью не согласен с ответом - но…
Хоть в основе всегда лежит что-то общее, со времени нулей и единиц появились языки высокого уровня, визуальное, а теперь и графическое программирование… языки высокого уровня и иерархия классов в конце концов - а это все разные принципы программирования.
А они появились исходя из появившихся задач - каждый решал какую-то из них.
Если появятся новые задачи то появятся и новые принципы программирования, т.е. принципиально новое в нем.
Юрий Землянов
9 июня 2022
@Александр Хильченко, все зависит от того, что вкладывать в понятие программирование в этом контексте. Найти корни этого уровнения на отрезке этом. Это тоже программа! Но в ней уже учитывается и исполнительная часть с ее возможностями, и язык, и уровень встроенных библиотек, и интерфейс. Это то, что на экзамене дают решить студенту. В определённом смысле это программа для исполнения студентом. Что нового? Языковой анализатор(какой язык - русский,...), языковой дешифратор(дано, требуется, форма представления), выбор метода(формализации и библиотеки), вычисления... Новое только обложка)
Александр Х. (nikodim)
9 июня 2022
@Юрий Землянов, А я и не особо спорю - более того, я, по большей части, даже согласен с вашим ответом - просто когда говорится о «принципах» мне кажется говорится несколько о другом. Свою точку зрения я изложил в своем ответе. Ну а ваша - только частично охватывает вопрос, и рассуждать, как мне кажется, нужно несколько шире. Поэтому я и высказал свое несогласие.
Более того, человек который задал вопрос не уточнил «что он понимает под принципами», которые должны стать «принципиально новыми», хотя «принципы программирования» — это понятие которое имеет свое определение, количественный и качественный состав. И это понятие - вообще не о том о чем человек спросил…
Михаил Б
возражает
13 июня 2022
Даже не смотря на одинаковые принципы программирования, разработчики активно создают из существующего набора функций языка программирования новый набор, тем самым упрощая код, делая его понятнее новичкам. А в любом языке программирования вы увидите базовый набор в виде переменных, циклов, условий и другого из этой отрасли
Денис Васильковский
возражает
16 июня 2022
Вы абсолютно правы, что большинство языков программирования то, что называется Turing Complete (полные по Тьюрингу), то есть предоставляют необходимый минимум операций для того чтобы посчитать любую численную задачу. Однако семантический аспект, от которого вы так легко отмахнулись крайне важен. Программы — это мостик между человеком и дискретным автоматом тьюринговым автоматом. Для человека неестетсвенно мыслить в таких категориях, и даже люди с многолетней закалкой с трудом могут читать язык ассемблера и тем более машинные коды. Поэтому новые языки продолжают появляться и каждый следующий язык предоставляет разработчикам всё более «человечные» средства для написания и поддержки программ.
Кроме того, тьюринговый автомат — не единственный доступный для человечества вычислитель. Есть программируемая логика (например, FPGA), где программа создает вычислительную схему, которая в свою очередь будет решать задачу. Есть квантовые компьютеры, принцип работы которых радикально отличается от тюринговой машины. Наконец, есть огромная куча Domain Specific Languages (специализированных языков программирования), которые создаются для решения отдельной конкретной задачи (например, SQL, HTML, JSON, PostScript, поднимите руку те разработчики со стажем, кто не создал свой карманный DSL?), и многие из них, к счастью, не полные по Тьюрингу.
На мой взгляд, наиболее точным ответом на вопрос «можно ли изобрести принципиально новый язык программирования» будет безусловно да. Для этого потребуется принципиально новый компьютер и/или принципиально новая задача, стоящая перед программистом.
Юрий Землянов
16 июня 2022
@Денис Васильковский, наверно моё мнение не понято. В программировании ничего нового нет и не будет. Программа это то, что если ей следовать решает задачу. Хоть управлением авто, хоть решения уравнения. На каком языке она реализуется не суть важно. Лучше всего для меня на русском. А дальше работает то, что в моей молодости называли транслятором. Все мнения несогласных были вокруг транслятора и способа представления своих хотелок, которые транслирует транслятор в машинный код или интерпретирует интерпретатор в последовательность операций. Если создадут ИИ (что невозможно из-за не формальности логики людей), то общаться с ним будут на человеческом языке, а не на с++ или рнр или ещё каком-то. Разница понятна между моими доводами и несогласными?
Денис Васильковский
16 июня 2022
@Юрий Землянов, хорошо, вы не осознаете чудовищную количественную разницу между современным C++ и машинными кодами (на первом ещё можно попытаться выразить систему управления автомобилем, на вторых — никак не получится, человек надорвётся). Не достаточно опыта, допустим. Но вы целиком проигнорировали качественную разницу между программированием для процессоров и программированием для квантовых компьютеров или, скажем, программированием аналоговых вычислительных систем. Там никакие машинные коды не помогут, потому что это не машины тьюринга и ленту вправо-влево они смещать не умеют.
Хотя с другой стороны, если для вас «программирование — это написание программы», а «написание программы — это решение условия поставленной задачи», то таки да, такая мелочь как кто будет исполнять вашу программу, конечный ли тьюринговый автомат, или квантовозапутанные кубиты, — одна фигня. Но на мой вкус это reductio ad absurdum.
Марк Сафронов
подтверждает
8 июня 2022
Мнение очень интересное. С выводом (что принципиально нового изобрести нельзя) я не согласен, но в тексте всё верно написано, всё так и есть с языками программирования.
Юрий Землянов
8 июня 2022
@Марк Сафронов, за нас все придумал господь бог. В области программирования это мы с вами. Лучше нам не придумать. А сколько в фоне мы процессов одновременно поддерживаем я и не знаю. Клеточный биосинтез это тоже куча процессов и т.д.
Андрей Бахматов
13 июня 2022
@Марк Сафронов, не согласен с вами: не то что основы ЯП, но даже на самой архитектуре фон Неймана свет клином не сошёлся, в наше время исследуют, ведут разработки в рамках принципиально других архитектур: квантовые компьютеры, мемпроцессоры. Новые архитектуры требуют совершенно новых подходов к программированию, очевидно.
Марк Сафронов
13 июня 2022
@Андрей Бахматов, я и не отрицал то, что вы сказали, более того, из-за этого я с этим ответом и не согласен. Автор ответа всё правильно говорит, только про программирование на фон Неймановских машинах с существующими сегодня архитектурами процессоров.
Комментарий был удалён за нарушение правил
Юрий Землянов
8 июня 2022
@Алексей Черемных, насчёт единички да. Но вы не забыли, что грамматика проверяется когда набираешь слово, ошибки сейчас не из-за грамотности, а из-за невнимательности и нежелания перечитать текст. Насчёт второго - все изобретения человечества подсмотрены у природы или подсказаны ею. Ну и третье язык программирования это способ удобного написания инструкций ЭВМ с учётом её возможностей. Я в молодости в кодах писал программы для факторного и кластерного анализа. Кто-то музыку, ЭВМ при работе попискивала, а ацпу подстукивало. И это новое?