← Exploratory programming, Julia и графовые базы данных -- что в них общего?
Обсуждение
Читать и комментировать в ЖЖ ↗
Это деградация. В конце восьмидесятых началось движение на следующий мета-уровень. Но теория индуских мартышек всё похерила. Даже Дельфи загнулся, не говоря о более мощных парадигмах.
Комментарий
А ранних версиях Rust был REPL. Правда, у меня стабильно в корку падал.
Может еще вернут - llvm сервис для этого предоставляет.
Комментарий
В этом-то и фишка, что один язык к REPL идёт, а другой от него. Я это как-то и ощущаю. Базисное различие для меня.
Ну, и там ещё детали про llvm против AOT компиляции. Rust более на AOT, конечно, нацелен -- и там не до REPL при этом обычно.
Комментарий
Что деградация? Что такое "следующий мета-уровень"? Дельфи -- это ж был слегка усиленный пакетами типа адовских паскаль, чего там мощного и парадигмального?
Я понимаю, что в нулевых отрабатывались концепты программирования-в-большом, а предыдущие языки обслуживали программирование-в-малом. Но и это не так, линия smalltak и self это обсуждала ещё в начале восьмидесятых (но всё это оборвано в Java, к сожалению).
Так что я вижу тут не деградацию, а новый виток спирали и расцвет удачных бутончиков прошлого.
Комментарий
Мммм, а ты смотрел, как сделан разбор типов в сильно типизированных функциональных языках?
Комментарий
А подробнее -- ты на что намекаешь? Понятно, что все "разбирательства с типами" сейчас происходят главным образом с функциональными языками, но что такое "разбор типов", пардон мой pun intended?
Комментарий
Ну, пишешь разборный тип или типаж, а потом case-ом его разбираешь по вариантам:
// !scala
trait Expr
case class Number(n: Int) extends Expr
case class Sum(e1: Expr, e2: Expr) extends Expr
// ...
def eval(e: Expr): Int = e match {
case Number(n) => n
case Sum(e1, e2) => eval(e1) + eval(e2)
}
match здесь обобщает и распространяет на интроспекцию switch, как можно понять.
Можешь глянуть мой конспектик недописанный (не факт, что более внятные тексты по-русски существуют).
Я просто поймал себя на том, что когда решал простые задачки, несколько раз писал файл с определением типа и кучей данных, вместо того, чтобы организовывать нормальное чтение данных из файла.Комментарий
А где здесь графовые базы данных?
Комментарий
То есть ты про эмуляцию multiple dispatch в Scala? Это во многих языках есть, а хоть и в Си: http://en.wikipedia.org/wiki/Multiple_dispatch (но как я понимаю, в Scala более прямые методы реализации). Я просто не понимаю, что ты хочешь сказать -- хотя твои намёки на файл-как-базу-данных и работу с типизацией данных в нём через систему типов языка я воспринимаю, но по-прежнему не понимаю, что именно ты говоришь, на какой вопрос отвечаешь.
Комментарий
> в тексте Graydon Hoare всё более-менее систематически изложено, включая важность Forth
Перечитал оба текста дважды, но про Forth увидел только два упоминания: "Possible exceptions might be the Forth lineage" и на картинке про популярность разных языков программирования. Может, была ещё какая-то ссылка?
Комментарий
Графовые базы данных, семантический веб, трипл сторы -- это всё разные имена для одного и того же явления. В Julia этого в явном виде нет, но в этом и есть суть моего псто: графовые базы данных с их языками запросов решают примерно те же задачи, что и multiple dispatch (с точностью до того, что это разные задачи, разные области применения разных языков, разная терминология, разная теория -- и я лишь верхним чутьём улавливаю их какую-то похожесть).
Комментарий
Да-да. (Possible exceptions might be the Forth lineage or the Oberon System, each with similar minimal, efficient, interactive compilers; there are 77 Schemes, a dozen MLs and 37 Common Lisps vs. 126 Forths.). Для меня лично это очень важное замечание и сравнение лисповой и фортовой экосистем -- включая разнообразие диалектов, разработки спецжелеза, стремительный расцвет и не менее стремительное вываливание из мейнстрима куда-то в ниши.
Комментарий
"Почему симпатична" - потому что (единственное заметное) новое шевеление в интересующей exploratory нише. На безрыбье. Всё остальное существует по 20 и более лет.
Комментарий
Это не эмуляция мультиметода, это стиль, при котором проблема мультиметодов не должна возникать по идее.
Я сам здесь несколько плаваю, поскольку в детстве типизованное ФП (ML and the kind) как-то пролетело мимо.
Комментарий
И то правда. На остальном глаз просто не останавливается, оно про другое.
Комментарий
> Графовые базы данных, семантический веб, трипл сторы -- это всё разные имена для одного и того же явления.
нет, конечно. все три термина даже на разных уровнях находятся. графовая база данных - про то, как она внутри устроена, про engine. трипл стор - это какая у нас schema (которая, в свою очередь, может лежать в реляционке, а может и нет). семантический веб - это про semantic entities и их relationships безотносительно того, какая там schema и где и как они хранятся.
Комментарий
Суть этого моего псто и комментов не искать нюансы и различия, а наоборот -- кластеризовать всё, относящееся к одной проблеме. "Уровни" технологического стека, разные тусовки -- мне это неважно. Всё это про рдф-аул-трипл-сторы-спаркл -- как угодно это назвать, из одной бочки, в отличие от бочки табличек-реляционок-объектов-атрибутов-сиквел. Мне это важно подчеркнуть.
Комментарий
okay :)
Комментарий
Это называется pattern matching.
В Scala он несколько обобщен, но в том или ином виде есть почти во всех современных языках.
Комментарий
Смысл моего замечания был в том, что такие конструкты поддерживают стиль, в котором проблема мультизначений не должна бы вылезать на поверхность надолго.
Сопоставление с образцом - это очень перегруженный термин.
Разумеется, разбор типов есть везде, где система типов включает разборные или алгебраические типы. Скала просто в соседнем окне оказалась открыта.