(defn calculate* []
(->> (range 10)
(filter odd?)
(map #(* % %))
(reduce +)))
logWarn :: String -> String
logWarn = warning . correctSpaces . asciiOnly
Clojure (Lisp)
Haskell
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("John", 36)
class Person {
String name; // имя
int age; // возраст
void displayInfo(){
System.out.printf("Name: %s \tAge: %d\n", name, age);
}
}
Python
Java
int get_minimum_int (int * nums, size_t len){
int min = nums[0];
for (size_t i = 1; i < len; i++) {
if (nums[i] < min) {
min = nums[i];
}
}
return min;
}
float get_minimum_float (float * nums, size_t len){
float min = nums[0];
for (size_t i = 1; i < len; i++) {
if (nums[i] < min) {
min = nums[i];
}
}
return min;
}
Non generic
static <T> T get_minimum(T[] nums, int len){
T min = nums[0];
for (int i = 1; i < len; i++) {
if (nums[i] < min) {
min = nums[i];
}
}
return min;
}
Generic
(+ 1 1) ; - обычный вызов в Clojure "+" воспринимайте как обычную функцию в которую передали 2 параметра
; => 2
(defmacro infix - название макроса
"Use this macro when you pine for the notation of your childhood"
[infixed] ;;;; - Это выражение, которое принимает макрос
(list (second infixed) (first infixed) (last infixed)))
; + 1 1
(infix (1 + 1))
; => 2
; чем-то похоже на функцию eval в Python, которая работает не со строками, а с выражениями
# Без рефлексии
obj = Foo()
obj.hello()
# С рефлексией
class_name = "Foo"
method = "hello"
obj = globals()[class_name]()
getattr(obj, method)()
GIL mostly
Threading
Green Threading
сложный язык - сложная эко
C++ (98, 03, 11, 15, 17, 21 standards)
C# (.NET classic, .NET core)
средний язык - сложная эко
Java (Java 8 vs Java 15+)
Python,
Ruby
сложный язык - простая эко
Haskell
OCaml
Elixir/Erlang
Rust
простой язык - простая эко
Go
Clojure
простой язык - сложная эко
C
Cobol