Какие языки программирования и языковые функции меньше 10?

Кажется, что существует много «новых» языков, но на самом деле кажется, что большинство популярных, не экспериментальных языков уже находятся в подростковом возрасте, а истинно основные языки старше большинства молодых программистов. Я только что вспомнил этот очевидный факт, когда понял, что даже «модному» языку Ruby в этом месяце (февраль 1994 г.) исполняется 15 лет. Хотя такие вещи, как Haskell, которые есть в списке всех, кому нужно научиться, даже старше этого.

Думая об этом, единственный действительно новый широко используемый язык, я мог подумать, что до 10 лет - это C #. Но даже в C # на самом деле нет никаких новых функций, хотя он унаследовал некоторые из лучших функций своих предшественников.

Так что мне интересно, какие новые языки и соответствующие им новые функции / идеи сейчас менее 10? Что-нибудь, что может стать большим через 10 лет? Есть ли какие-нибудь новые языковые функции, которых стоит ждать? Или мы уже сделали ???


Видимо, нет ничего нового, кроме гибрида или доработки. Может быть, LOLCODE, потому что он спроектирован так, чтобы быть абсурдным прежде всего, но даже такие вещи, как Brainf * ck и WhiteSpace, в основном являются древними языками сборки на основе стека.

Достигли ли мы энциклопедической эры языков программирования?


person Community    schedule 14.02.2009    source источник
comment
C # старше этого - просто он не был выпущен до июня 2000 года. Проект .NET стартовал в 1997 году, и проект cool, который в конечном итоге стал C #, был запущен почти одновременно. Однако большая часть программного обеспечения проходит через подобную раннюю фазу. PHP не использовался широко до версии 3 ...   -  person Adam Davis    schedule 14.02.2009
comment
Agda меньше 10 лет, и у нее есть зависимые типы, чего почти нет в старых языках.   -  person Ingo    schedule 27.07.2013


Ответы (17)


Нет, что я видел.

Конечно, все время появляются «новые» языки. Но я использовал пугающие цитаты, потому что обычно предлагаются следующие примеры:

  • переупаковка (на другой язык) идей, которые десятилетиями использовались в компьютерных науках и математике, или
  • языки / методы, которые старше этого, но только недавно «открыты» «основным» миром.

Для конкретных примеров:

Работа по продвижению, популяризации, применению и совершенствованию этих (и многих других) важных идей стоит. Но это не делает эти способы использования по-настоящему инновационными.

Конечно, я буду рад, если кто-нибудь сможет привести пример действительно оригинальной концепции программирования, которой не было десять лет назад.

person Community    schedule 14.02.2009
comment
Я отмечаю вас как ответ, но очень надеюсь, что кто-то сможет доказать, что это неправда;) - person Robert Gould; 14.02.2009
comment
Может быть что-то новое в высших сферах, например, в системе типов Haskell (не совсем новое как математическое понятие, но впервые созданное для работы на языке программирования). Не то чтобы это важно для 99,9% всех программистов ... - person starblue; 14.02.2009

В Википедии есть хороший график первого появления языков программирования - он показывает, что есть несколько языков, которые как это было в 2000+ годах, хотя я считаю, что это не так широко используемые языки (пока ?).

person Community    schedule 14.02.2009
comment
Да ... C #, F #, Clojure, Boo, Groovy и D очень актуальны. - person ; 04.03.2009

Языку программирования D чуть меньше 10 лет. Его уникальные особенности включают в себя транзитивную константу (все, что доступно из константного объекта, также является константой), вычисление функции времени компиляции и возможность аннотировать функции как чистые и статически проверять их компилятором на предмет побочных эффектов, видимых вне функции. Также включена система шаблонов, которая позорит шаблоны C ++, дженерики Java / C # и т. Д.:

  1. Вариативные шаблоны, которые «просто работают» для неограниченного количества аргументов.
  2. Строки, числа с плавающей запятой и псевдонимы функций могут быть параметрами шаблона.
  3. Оператор static if, аналогичный тому, что существует на бумаге в C ++ 0x, фактически реализован и работает.
  4. Строковые и шаблонные миксины, которые позволяют вводить произвольный параметризованный шаблонный код в любое место вашего источника и для произвольной генерации кода времени компиляции. В крайнем случае, это было использовано Доном Клагстоном для создания библиотеки математических матриц, которая фактически анализировала код, заданный в виде строковых литералов, во время компиляции и генерировала оптимальный встроенный ассемблерный код для этих операций перед этапом генерации кода компилятора.
  5. Структуры могут быть представлены в виде кортежей, что позволяет выполнять итерацию по их полям. Это позволяет реализовать интересное общее программирование со структурами.
  6. Невероятно мощная рефлексия / интроспекция во время компиляции. Однажды я написал шаблон функции, который мог глубоко копировать любую структуру, пока не были задействованы объекты полиморфного класса времени выполнения (которые просто не могут работать с отражением времени компиляции). Это было сделано только с использованием отражения во время компиляции. Информация о типе среды выполнения не использовалась.
person Community    schedule 14.02.2009
comment
Да, D похож на C ++, C # и Java на стероидах, но в нем нет ничего нового, кроме распространения констант. В любом случае мощность компилятора D потрясающая, и я бы хотел, чтобы он использовался чаще! Но виртуальная машина / общий язык сильны, и я не уверен, куда это нас приведет. - person Robert Gould; 14.02.2009
comment
Постоянное распространение ??? Какого черта ??? - person dsimcha; 14.02.2009
comment
Я имел в виду транзитивную константу. :) - person Robert Gould; 14.02.2009
comment
Кроме того, в разработке находится D .net. the-free-meme.blogspot.com Реализация LLVM находится на стадии бета-тестирования. dsource.org/projects/ldc - person dsimcha; 14.02.2009

Языки развиваются. Вам не обязательно нужен новый язык, чтобы получить новую языковую функцию. Например, Haskell - не новый язык, но у него есть много «новых» функций, включая STM.

person Community    schedule 14.02.2009
comment
Верно, но я согласен, что через 20 лет не будет ничего нового, если это не произойдет сейчас, я имею в виду, что я уже догоняю идеи, которые были у людей еще в 90-х :) - person Robert Gould; 14.02.2009

Я думаю, что формулировка вопроса предполагает, что инноваций нет, но на самом деле все, что раскрывается в ходе обсуждения здесь, - это то, что инновациям требуются десятилетия, чтобы стать мейнстримом.

Если бы вы задали этот вопрос около 20 лет назад, когда объектно-ориентированный объект был одной из «больших новых вещей» с C ++, Smalltalk и т. Д., Люди могли бы просто ответить, что это просто переупаковка Simula (1967). Но в 1970 году я не думаю, что кто-то мог бы считать объекты «большим нововведением», скорее, они были бы просто «интересной синтаксической тонкостью» в этом языке Simula. Со временем объектно-ориентированный подход эволюционировал, люди осознали, насколько объектно-ориентированный объект естественен для моделирования / построения систем, были найдены шаблоны проектирования ... и сегодня очень многие языки принимают объектно-ориентированный объект «как должное». Но трудно найти момент времени, когда люди сказали бы, что «объектно-ориентированный объект был великой новой инновацией», потому что, когда он был новым, никто не оценил масштаб его влияния на область разработки программного обеспечения, и к тому времени, когда его охват стал очевидным, он уже не было новым.

Через 20 лет, возможно, все новые / популярные языки будут иметь такую ​​функцию, как «классы типов» из сегодняшнего Haskell (это убойная функция), но она уже «слишком устарела» по критериям этого вопроса, чтобы быть нововведением, даже если она может быть «следующим большим достижением».

Так что да, я уверен, что есть новые вещи под солнцем, вероятно, сотни, но все они написаны на крошечных экспериментальных языках, и мы не будем ценить новизну до тех пор, пока спустя десятилетия, когда лучшие из сегодняшних идей будут усовершенствованы / проверены и воплотятся в жизнь. путь в мейнстрим.

person Community    schedule 15.02.2009
comment
Я также хочу поспорить, что сейчас есть какая-то сумасшедшая новая функция, которую еще никто не пробует, но я не смог ее найти :( - person Robert Gould; 15.02.2009
comment
очень проницательный ответ - person CoffeeTableEspresso; 20.11.2018

Я не думаю, что последнее нововведение связано с изобретением новых функций. Он делает старые идеи доступными (и практичными) в обычных условиях. Лямбда-выражения - отличный пример этого - старые как горы, но подавляющее большинство разработчиков не сталкивались с ними до C # 3 и VB9.

Точно так же две функции могли существовать раньше независимо, но никогда на одном языке. Я не хотел бы начинать утверждать, какие комбинации являются новыми, но об этом стоит подумать.

Кстати, является ли природа универсальных шаблонов .NET "новой"? Я не знаю достаточно истории вычислений, чтобы сказать, но есть явные различия между ними и дженериками Java (со стиранием типа) или шаблонами C ++ (где специализация на самом деле является делом времени компиляции, насколько я могу судить, требуя источник для шаблона).

person Community    schedule 14.02.2009
comment
Трудно сказать о дженериках C #, реализация действительно отличается, но не знаю, как ее классифицировать. - person Robert Gould; 14.02.2009
comment
См. Вывод типа Хиндли-Милнера (en.wikipedia.org/wiki/Hindley-Milner_type_inference ). Обобщения и вывод типов присутствуют в ML с 1973 года, но не стали популярными, пока они не были реализованы в Ada в 1977 году. - person Juliet; 15.02.2009
comment
@Princess: C # даже не имеет вывода типа Хиндли-Милнера. Я знал, что дженерики существуют уже давно, но существуют разные формы. Мне было интересно, была ли форма .NET новой или, по крайней мере, имела новые аспекты. Не то чтобы это действительно важно (ИМО) в любом случае. - person Jon Skeet; 15.02.2009
comment
@JonSkeet: Компилятор MLton (1997 г.) для Standard ML выполнял мономорфизацию, которая по сути такая же, как и обобщенные дженерики .NET, за исключением того, что в нем использовалась компиляция всей программы, а не JIT. - person J D; 11.02.2018

OMeta менее двух лет, и это язык для создания других языков. На мой взгляд, он более выразителен, чем языки вроде предстоящего MGrammar от Microsoft.

Самая крутая идея в том, что вы можете создавать языки объектно-ориентированным способом (например, вы можете создать гибридный язык грамматик Ruby и C #).

Также приятно, что синтаксис выглядит почти идентично BNF и, следовательно, вполне читабелен.

Я написал об этом подробнее здесь.

person Community    schedule 14.02.2009
comment
Интересная идея. Вид современного Yacc. - person Robert Gould; 14.02.2009
comment
синтаксис выглядит почти идентичным BNF и, следовательно, вполне читаемым. Я единственный, кто получил от этого хихиканье? - person Andy Dent; 15.02.2009
comment
Еще одна ссылка на OMeta (потому что ссылка выше у меня не работает): tinlizzie.org/ometa - person user128807; 29.06.2009
comment
Конечно, он называется OMeta, потому что он в значительной степени вдохновлен языком META-II 1962 года и основан на нем. - person Jörg W Mittag; 02.07.2011

Язык AgentSpeak (L) для программирования интеллектуальных агентов. Он основан на Прологе (который очень старый), но у него есть некоторые очень специфические особенности, и он совершенно новый.

Вы можете проверить полноценный интерпретатор по имени Джейсон.

person Community    schedule 14.02.2009

Как насчет F # :). Есть также множество новых языков, разрабатываемых индивидуальными разработчиками. Например, scala, jruby, groovy, boo и т. Д.

Чтобы язык прижился, ему действительно нужна большая поддержка со стороны большой компании, поэтому на какое-то время мы будем придерживаться того, что у нас есть. Хотя Sun и MS вкладывают значительные средства в то, чтобы сделать свои платформы (JVM, CLR) более открытыми для этих языков. На данный момент значениями по умолчанию будут Java и C #, но только время покажет.

person Community    schedule 14.02.2009
comment
Не слишком много знаком с F #, но есть ли в нем что-нибудь новое? - person Robert Gould; 14.02.2009
comment
Единицы измерения и активные шаблоны - это особенности, которых, я думаю, может не быть в других языках. - person Brian; 15.02.2009
comment
Поставщики типов также относительно новы. Поддержка F # для inline - новая AFAIK. - person J D; 11.02.2018

с нетерпением жду Boo.

Boo - это объектно-ориентированный язык программирования со статической типизацией, который активно разрабатывается с 2003 года. Он стремится использовать поддержку Common Language Infrastructure для Unicode, интернационализации и веб-приложений, используя при этом синтаксис, вдохновленный Python 1, уделяя особое внимание расширяемости языка и компилятора. Некоторые особенности, которые следует отметить, включают вывод типа, генераторы, мультиметоды, дополнительную утиную типизацию, макросы, истинные замыкания, каррирование и функции первого класса.

person Community    schedule 14.02.2009
comment
Вау Бу старше, чем я думал :) в любом случае это интересная смесь сценариев и скомпилированных идей. - person Robert Gould; 14.02.2009

языку программирования Scala меньше 10 лет (я считаю, что он был первоначально выпущен в 2001 году) и мог претендовать на звание первого:

  • Реальный масштабируемый язык (например, от скриптов и имплицитов до акторов и модулей). Я говорю реальный, потому что некоторые будут утверждать, что другие, начиная с Lisp, были здесь первыми, но я считаю, что совместимость Scala с Java, объектно-ориентированные функции, система типов и т. Д. Делают его другим.
  • Сочетание функционального и объектно-ориентированного программирования в реальном мире (например, с функциями высшего порядка, а также с набором состояний и статической типизацией). Я снова говорю реальный, потому что, например, Oz старше, я считаю, что совместимость и прагматизм Scala имеют значение
person Community    schedule 14.02.2009
comment
Scala почти не поддерживает функциональное программирование (например, без исключения хвостовых вызовов), а CLOS и O в Лиспе в OCaml уже сделали FPL + ООП и сделали это лучше. - person J D; 11.02.2018

Много «нового» языка нацелено на ту или иную хорошо работающую виртуальную машину, а именно на JVM или CLR. Это позволяет сосредоточиться на разработке синтаксиса и «философии» больше, чем на реализации (использование существующих оптимизированных виртуальных машин, сборщика мусора, библиотек и т. Д.).

Интересно, что некоторые языки ориентированы на обе платформы, например Fan Programming Language.

Другие языки просто переводят себя на другой язык (обычно C), полагаясь, таким образом, на какой-нибудь переносимый или локально оптимизированный компилятор, который сделает хорошую работу.

Я нашел Haxe интересным, поскольку он нацелен на несколько языков / виртуальных машин: JavaScript, Flash, NekoVM или даже PHP.

Как говорили другие, сегодня трудно найти действительно новые концепции. Отчасти потому, что многое уже изучено, отчасти потому, что многие программисты ленивы и сбиты с толку, если новый язык не использует знакомый синтаксис (я видел много жалоб от людей в списке рассылки Lua, которые просили использовать {и} вместо do / end - см. также жалобы на то, что JavaFX не является Java ...), не говоря уже о новой концепции!

person Community    schedule 14.02.2009

Хорошо, мы знаем контракты кода со времен Eiffel - так что это 20+ лет, а анализ кода - годы и годы, но я никогда не видел такой полной комбинации контрактов кода, анализа кода и модульного тестирования, как в C # 4.0 и Pex. Возможно, я ошибаюсь и не знаком с другими языками и продуктами, которые предлагали такой уровень функциональности много лет назад, но я бы определенно назвал такую ​​степень помощи в отношении «безошибочного» программного обеспечения функцией. Итак, это новое?

person Community    schedule 14.02.2009

Powershell как язык менее 10, конечно, не языковые функции.

person Community    schedule 30.10.2009

E-язык сделал доступной упрощенную конвейерную обработку обещаний. Это должно стать решающей идеей для предстоящей революции многоядерных процессоров, поскольку она позволяет писать код, который легко распараллеливается, имеет недорогие зависимости между взаимодействующими подпроцессами и позволяет обойти все стандартные проблемы с управлением блокировками и предотвращением тупиковых ситуаций. . Основные идеи E были перенесены на множество других языков. E является частью длинной (хотя и несколько неясной) линии языков объектных возможностей, которые вносят очень важный вклад в надежность и безопасность программного обеспечения. E сейчас всего около 10 лет.

person Community    schedule 26.04.2009

Синий язык программирования демонстрирует большой потенциал. Подумайте: «Python, но его проще использовать и расширять».

Нет, я не говорю, что Blue лучше Python, я просто говорю, что он готов, прост в использовании и (уже через пару лет) достаточно стабилен. Растет у меня около года :)

person Community    schedule 26.04.2009

Я бы сказал, что последние дополнения C #, такие как LINQ, методы расширения, лямбда-выражения и прочее, являются относительно новыми. Если они сейчас не большие, то будут.

ASP.NET MVC, хотя это не языковая функция, будет большой (я почти уверен), хотя я знаю, что многие никогда ее не примут.

person Community    schedule 14.02.2009
comment
Ну лямбда старше всех живущих и даже копьютеров :( - person Robert Gould; 14.02.2009
comment
Лямбда-исчисление было изобретено только в 1930-х годах, а LINQ уже некоторое время существует в форме списков (в Haskell с 1990 года). Я думаю, это правда, что под солнцем нет ничего нового. ;) - person Josh Lee; 14.02.2009
comment
Как сказали Роберт и Джлидев, НЕТ. Язык SETL был разработан в конце 60-х и использовал те же концепции из теории множеств, которые теперь проявляются как понимания. Вот пример из Википедии: print ({n in {2..N} | forall m in {2..n - 1} | n mod m ›0}); - person joel.neely; 14.02.2009
comment
Дополнения C # являются новинкой в языке C #, но C # опирается на идеи, которые существуют уже несколько десятилетий. LINQ - это реализация списков, лямбда-выражения были особенностью языков в течение последних 50 лет, методы расширения - это разновидность миксинов .NET и т. Д. - person Juliet; 15.02.2009
comment
Методы расширения существовали как помощники классов в Delphi за много лет до того, как они были введены в C #. - person Wouter van Nifterick; 26.04.2009
comment
Я изучал MVC на первом курсе колледжа ... почти 8 лет назад друг. Я не уверен, серьезно ли вы были здесь, но я все равно смеялся. +1 за связь :) - person Shane C. Mason; 26.04.2009
comment
Высокомерие - плохое человеческое качество, друг. - person User; 26.04.2009