Как стать автором
Обновить
18
0.1

Пользователь

Отправить сообщение
В современных языках динамическая типизация или статическая определяется исключительно разработчиком.

TypeScript:
// Динамика это круто
function f(a, b) {
	// Будь что будет
	return a * b;
}

f(1, "abc") // Ну и что, что получаем NaN, зато не надо писать типы. Красота ! 


// Укажу динамический тип. Динамика это круто
function g(a: any, b: any): any {
	// Будь что будет
	return a * b;
}

// Статика это тоже круто
function h(a: number, b: number): number {
	// Умножаем числа
	return a * b;
}

h(1, "abc") // Плохой компилятор, не хочу ошибку компиляции


C#:
public class Program
{
	// Динамика это круто
	public static dynamic g(dynamic a, dynamic b) {
		// Будь что будет
		return a * b;
	}
	
	// Статика это тоже круто
	public static int h(int a, int b) {
		// Умножаем числа
		return a * b;
	}
	
    public static void Main()
    {
		g(1, "abc"); // Кидает исключение, ерунда. Зато принимает любые типы
		h(1, "abc") // Плохой компилятор, не хочу ошибку компиляции  
    }
}
Увы, да. К сожалению бэкэнд компилятора сильно привязан к .NET Framework, а переписывать его слишком большой объём работы.
Откройте для себя Nemerle и F# уже не будет таким крутым :)
Небольшая разница есть:

struct A
{
 int a = 1.0; // Компилируется
 int c{2.0}; // Получаем по рукам от компилятора
};
Идея иметь compact_optional который будет занимать столько же места.
И использовать примерно так:
using opt_count = compact_optional<evp_int<int, -1>, class cnt_tag>;
Тут нужен compact_optional, которого пока нет.
https://akrzemi1.wordpress.com/2015/07/15/efficient-optional-values/
12 ...
18

Информация

В рейтинге
3 416-й
Зарегистрирован
Активность