ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
22 декабря
797777 Топик полностью
Связанные сообщения
Julia
Что интересно, Julia имеет биндинги с Tk (ну и там целиком встроенный Tcl имеется...)2017-11-29
Ксения (28.11.2017 11:33 - 11:38, просмотров: 991) ответил Evgeny_CD на [Julia] is a high-level, high-performance dynamic programming language for numerical computing -> GitHub --> Вроде бы у нас не было, а зря.
Сильно МатЛабово. Точки с запятой из С++ убрали - считают, что новый язык сочинили :). А если серьезно, то эффективность кода и удобство в языка находятся на разных полюсах, а потому здесь возможен только компромисс. Причем компромиссное решение заведомо получится менее эффективным и менее удобным, чем полярности. Мы оттого и используем С/С++ при программировании микроконтроллеров, что нам эффективность кода важнее удобства программирования. Ассемблер в этом смысле - теоретический предел достижимой эффективности, зачастую в ущерб удобству программирования. А на другом полюсе (удобстве) тоже есть много чего хорошего, вот только микроконтроллеры (какие как мы их знали раньше) такие языки не потянут, в том смысле, что такой код памяти займет много, а работать будет медленно. Т.е. практически везде, где нам предлагается свободная типизация переменных (смысл которой определяется последним присвоением ей значения), каждая такая переменная - отдельный объект, заводимый из динамической памяти. А операции над такими переменными выливаются в предварительную проверку их типов на совместимость, что делается уже не на уровне компилятора, а в реальном времени путем опроса соответствующих полей данных этих классов, чтобы потом определиться с тем, какой функцией(-ями) это делать. Причем результат, если его удается получить, сперва образуется в наспех состряпанном объекте (тоже аллокированным из динамической памяти), чтобы потом выполнить с его участием вторую стадию - присвоение содержащегося в нем результата переменной-приемнику. И здесь снова возникают действия по изменению ее статуса, а то и дезаллокированию памяти, хранящей старое содержимое приемника, и аллокирование в нем памяти для нового значения, которое может иметь другой тип. Потом мусор из динамической памяти вычищается. В результате то, что можно было бы написать на ассемблере парой команд, выливается в протяженный процесс, даже не вникая в механизм распределения динамической памяти, который уже сам по себе не прост. Фактически всё это заделы того же типа, которые превращают C++ в C#. Но если на скорость закрыть глаза, то действительно удобно - "int" писать не надо, строка короче получается. :) Скажем, действительно очень удобно, когда функции возвращают не одно единственное значение, а способны выдать список того же рода, что и список своих параметров. Тогда бы функции явились логичным средством преобразования списка одних параметров в список других. Но как только я подумаю, что во что это выльется (аллокирование списка адресов на стеке вместе с указанием их количества), то желание платить такую цену за вызов функции пропадает. Хотя это лишь ягодки по сравнению со свободной типизацией.