LINUX.ORG.RU

Явная типизация (C#(mono), Java(openjdk) vs неявная CL (SBCL, ABCL): Производительность

 , , , ,


0

2

А это правда, что CL как динамический язык будет проигрывать в производительности чисто теоретически?

Учу я тут C# и здесь есть раздел динамических переменных, работа с которыми (как учат) чревата падением производительности. Именно из-за этого компиляторы CL должны по определению быть менее производительными?

★★★★★

Последнее исправление: ados (всего исправлений: 2)
Ответ на: комментарий от anonymous

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

То же авто в плюсах - частичная неявная типизация. Это так же называется автотипами. Конечно в обосанном хаскеле никакой статической автотипизации нет, но всё же он прав.

Carb_blog2
()
Ответ на: комментарий от anonymous

Что и требовалось доказать.

Если у тебя одна и та же переменная может менять свой тип, то это динамическая типизация. У неё будет тип auto_type - т.е. структура.

Если же это автоматическая(статическая) типизация, и складываются 2переменные в третью, то тип переменной будет типом переменной а, либо типом переменной б.

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

Carb_blog2
()
Ответ на: комментарий от Carb_blog2

Ок, возможно я перепутал неявную типизацию и неявное приведение типов. И все же более конкретно:

foo=false
typeof (foo+1) //number
typeof (foo+"bar") //string
Сишка так может или нет?

anonymous
()
Ответ на: комментарий от anonymous

aedeph_ , почему ты не можешь объяснить что такое динамическая типизация пацану?

Ещё раз, динамическая неявная типизация - это типизация, в которой тип может менятся в процессе жизни переменной, а именно в рантайме - т.е. тип переменной не известен и изменяется динамически(в процессе выполнения программы).

int a = 123;
if(non const bla-bla) {
  cast(a, string) = "123";//меняем тип на string.
}
//тут тип переменной а не известен. Это динамическая типизация.

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

Это будет неявная статическая типизация, ибо статики у типа не будет.

Мы можем считерить:

int a = 123;
if(non const bla-bla) {
  cast(a, string) = "123";//меняем тип на string.
  uncast(a);//вернуть переменной тип, который был до блока.
}
//тут тип будет известен. Вернее никто его не может поменять, а даже если поменяет - он кастанётся о5 в то, что был. Уже уже хрен поймёшь какая типизация.
Carb_blog2
()
Ответ на: комментарий от anonymous
//foo=false в сишке никто не юзает бул, бул в сишке не true/false, а 0 и !0(не ноль).
foo+"bar"//тут тип не стринг, а указатель. Да, тип будет "string", только это ничего не даст.
typedef char * string;
#define typeid(T) _Generic((T), int:0, float:1, double:2, string:3, uint32_t:4, uint64_t:5, int64_t:6, default:-1)
#define print_typeid2(a, b) fprintf(stderr, "a:%lu, b:%lu\n", typeid(a), typeid(b))
#define print_typeid(a) fprintf(stderr, "%lu\n", typeid(a))
char * type_name[7] = {
  "number",
  "float",
  "double",
  "string"
};
#define print_typename(a) fprintf(stderr, "%s\n", type_name[typeid(a)]);

int main(void) {
  print_typename((true + 123));//number
  print_typename((123 + "123"));//string
  print_typename((123 + 123.f));//float
}
//выхлоп:
//number
//string
//float

Да, будет как ты написал.

Carb_blog2
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.