, хотя для реализации именованных параметров была бы довольно сложной задачей, остальное вполне выполнимо.
Вариант PHP> = 5.6, реализующий оператор splat:
function query($query, $params = NULL, $types = NULL)
{
if (!$params)
{
return $mysqli->query($query);
}
$statement = $this->mysqli->prepare($select);
$types = $types ?: str_repeat('s', count($params));
$statement->bind_param($types, ...$params);
$statement->execute();
return $statement->get_result();
}
используется как это
$sql = "SELECT * FROM accounts WHERE email = ? AND id = ?";
$row = $engine->query($sql, [$_POST['mail'], 2])->fetch_assoc();
или, если вы хотите явно указать типы
$row = $engine->query($sql, [$_POST['mail'], 2], "si")->fetch_assoc();
Возможно Clojure. Это не со статическим контролем типов, но это имеет больше акцента на неизменность и параллелизм, чем F#. Однако как F# (и в отличие от языка Common LISP), это предназначается, чтобы быть, прежде всего, функциональным языком, который способен использовать библиотеки OO от базовой платформы.
Scala был бы языком.
, Хотя не строго функциональный (это - соединение функциональных и объектно-ориентированных) и это не строго для Java (существует версия.NET Scala), который был бы самым близким аналогом к F# в JVM.
Первая вещь, которая прибыла по моему мнению, была Scala, но действительно Ocaml-Java прибывает ближе, поскольку F# является вариантом Ocaml. См. это сообщение, которое сравнивает Ocaml-Java с Scala:
программисты OCaml обычно по 10x столь же продуктивны как Java или программисты на C++ для широкого спектра практических задач. Несмотря на то, чтобы быть основанным на существенно платформе ООП, F# имеет большое значение для получения производительности - повышение преимуществ OCaml (и целая семья ML). Напротив, Scala не удается получить многие преимущества включая некоторые действительно основные и, следовательно, пишущий, что корректный код является намного более трудным в Scala, чем в любом реальном ML.
, Кроме того, языковая семья ML разработана, чтобы быть сжатой, но Scala является напрасно подробным для всего от "Привет мира!" вверх. Языковая семья ML обеспечивает обширный вывод типа (OCaml больше, чем большинство), но у Scala есть только элементарный вывод для сравнения. OCaml имеет необычно выразительную систему типов, но Scala добавляет мало к ООП, которое имеет практическое значение.
Возможно ни один, потому что JVM испытывает недостаток в последних вызовах и они обязаны делать почти весь функциональный код устойчивым относительно потребления стека.
самая близкая вещь к функциональным реализациям языка на JVM Clojure, Scala и проект OCaml-Java. Хотя существуют обходные решения из-за отсутствия последних вызовов (например, trampolining), ни одна из этих реализаций языка не делает это, потому что обходные решения представляют еще более серьезные проблемы, например, выполнение нанесения вреда и полностью запутывание отладки.
Sun говорил о последних вызовах в течение многих лет и, позже, указал, что они намереваются реализовать их неизбежно. Как только это сделано, я уверен, что мы будем видеть намного больше разнообразия языка на JVM и, в частности, некоторое производственное качество функциональные реализации языка. До тех пор я расцениваю все эти языки как игрушки.
С наилучшими пожеланиями, Jon Harrop.
На данный момент я сказал бы Scala. Но для будущего, я взглянул бы на Крепость. Первая реализация спецификации была выпущена 1 апреля 2008. И не, который не является шуткой. Ключевые функции:
Wikipedia Fortress
@Marc Gravell - функциональные языки все больше используются в кишках финансовых систем корпоративного класса. Мы используем многих функциональных (чистый или "получистый") в банке, на который я работаю...
На самом деле я мог бы быть неправым, но я не ожидаю, что F# будет столь же основным как другие языки.NET; полезный в нескольких кругах (академический, компиляторы, несколько других сценариев) - однако, не забывают, что C# предлагает использование FP - и это становится лучше каждый раз: C# 1.2 имеет делегатов; C# 2.0 имеет анонимные методы и получения/закрытия; C# 3.0 имеет лямбды для простоты и Выражение для абстракции. Анонимные типы (C# 3.0) доля [приблизительно 110] подобие с кортежами (с точки зрения удобства), но очевидно совсем другие звери, так определенно не сопоставимое сравнение.
, Возможно, не совсем столь же оптимизированный как F#, но для большинства ежедневных примеров использования FP, более, чем достаточных.
также довольно ясно, что лучше поддерживают для неизменности (специально для поточной обработки), находится очень на умах команды языка C# для будущего рассмотрения.
Мои деньги находятся на улучшении C# в FP и быть предложением FP.NET в большинстве ежедневных целей. Конечно, будет некоторое использование F# - но (чисто субъективный) я просто не вижу там быть огромной миграцией.
There's a good list of programming languages for JVM, including functional programming paradigm and other paradigm languages on:
My first pick is Scala (multi-paradigm; OO & FP), I spent a 5+ months studing Scala in 2009, and created a quick reference sheet: bchiprog.blogspot.com/2009/05/scala-cheat-sheet.html
I noticed there are other programming paradigms that are interesting, other focuses on parallel processing such as X10, Fortress, and Chapel. X10 is implemented on top of Scala - http://www.scala-lang.org/sites/default/files/odersky/scalaliftoff2009.pdf
It's really based on what problem you need to solve then pick the language that can best solve it. I think it's developers' wish that there's one language that can solve any type of problem easily and doing it simply.