#java
Почему же Java вместе с JVM могут соревноваться с новоиспеченными языками программирования через 25 лет релиза?
Благодаря умению JVM жонглировать потоками? на ней делают новые языки программирования, к примеру Kotlin. JVM настолько хороша, что ее можно рассматривать как отдельную ОС. Что? - Спросит меня агрессивный любитель низкоуровневого программирования. А я отвечу: Android был значительно основан на Java. Кроме того, существуют ОС, которые в классическом понимании, полностью основаны на базе JVM.
Что делает JVM похожим на ОС? Управление памятью, управление потоками, развитый ввод / вывод, обобщенная философия объектов. Благодаря этим возможностям она позволяет создавать многозадачные и комплексные системы. Это я еще не упоминал механизм байт-кода, который крутит Java код на любом процессоре.
Конечно, JVM не идеальна. Программы на С++ куда быстрее выполняются да и ООП систему, на которой вся Java держится, часто критикуют.
Одинаково Java и JVM остаются одними из лучших инструментов в программировании.
Почему же Java вместе с JVM могут соревноваться с новоиспеченными языками программирования через 25 лет релиза?
Благодаря умению JVM жонглировать потоками? на ней делают новые языки программирования, к примеру Kotlin. JVM настолько хороша, что ее можно рассматривать как отдельную ОС. Что? - Спросит меня агрессивный любитель низкоуровневого программирования. А я отвечу: Android был значительно основан на Java. Кроме того, существуют ОС, которые в классическом понимании, полностью основаны на базе JVM.
Что делает JVM похожим на ОС? Управление памятью, управление потоками, развитый ввод / вывод, обобщенная философия объектов. Благодаря этим возможностям она позволяет создавать многозадачные и комплексные системы. Это я еще не упоминал механизм байт-кода, который крутит Java код на любом процессоре.
Конечно, JVM не идеальна. Программы на С++ куда быстрее выполняются да и ООП систему, на которой вся Java держится, часто критикуют.
Одинаково Java и JVM остаются одними из лучших инструментов в программировании.
Fortran живой. И всегда будет.
Если вы не знаете, что это за язык, то вы вполне нормальный разработчик, или студент, который никогда не имел дел с физическими расчетами, документацией прошлого тысячелетия и расчетом волновой функции линейного гармонического квантового осциллятора в состоянии с квантовым числом, чтобы оно не значило😅
Безусловно, Junior Frontend Developer никогда не писал на Fortran и в этом он точно не нуждается. Это игрушка для физиков и инженеров. Хотя, хороший инструмент будет полезен в умелых руках.
Особенностей в Fortan - четыре. Чрезвычайно огромная библиотека, которую до сих пор не перевели на С. Древний legacy code, еще с 50-х годов. Невероятная точность в расчетах. Быстродействие, которое, в некоторых случаях, обгоняет С.
Комплексные числа, вся вкуснятина с графиками, которая есть в Matlab. Удобная обработка массивов, которая позволяет умножать их на скаляр, перемножать интуитивным способом, использовать математические функции. Можно взять экспоненту из массива. Обнулять все отрицательные элементы массива в одну строку. Мечты студента, который пишет свои лабораторные на C-подобных языках.
Не надо беспокоиться о выделении памяти, компилятор оптимизирует все сам.
С помощью Fortran до сих пор тестируют суперкомпьютеры.
Если вам нужен качественный инструмент в сложных расчетах, это определенно Fortran.
Если вы не знаете, что это за язык, то вы вполне нормальный разработчик, или студент, который никогда не имел дел с физическими расчетами, документацией прошлого тысячелетия и расчетом волновой функции линейного гармонического квантового осциллятора в состоянии с квантовым числом, чтобы оно не значило😅
Безусловно, Junior Frontend Developer никогда не писал на Fortran и в этом он точно не нуждается. Это игрушка для физиков и инженеров. Хотя, хороший инструмент будет полезен в умелых руках.
Особенностей в Fortan - четыре. Чрезвычайно огромная библиотека, которую до сих пор не перевели на С. Древний legacy code, еще с 50-х годов. Невероятная точность в расчетах. Быстродействие, которое, в некоторых случаях, обгоняет С.
Комплексные числа, вся вкуснятина с графиками, которая есть в Matlab. Удобная обработка массивов, которая позволяет умножать их на скаляр, перемножать интуитивным способом, использовать математические функции. Можно взять экспоненту из массива. Обнулять все отрицательные элементы массива в одну строку. Мечты студента, который пишет свои лабораторные на C-подобных языках.
Не надо беспокоиться о выделении памяти, компилятор оптимизирует все сам.
С помощью Fortran до сих пор тестируют суперкомпьютеры.
Если вам нужен качественный инструмент в сложных расчетах, это определенно Fortran.
#java
Почему класс String объявлен final в Java?
Очень полезно иметь строки реализованы как независимые объекты.
Если строка не была окончательной, вы могли бы создать подкласс и иметь две строки, которые выглядят одинаково, когда "рассматриваются как строки", но на самом деле они разные.
Также неизменные данные очень полезны для обеспечения потокобезопасности.
Почему класс String объявлен final в Java?
Очень полезно иметь строки реализованы как независимые объекты.
Если строка не была окончательной, вы могли бы создать подкласс и иметь две строки, которые выглядят одинаково, когда "рассматриваются как строки", но на самом деле они разные.
Также неизменные данные очень полезны для обеспечения потокобезопасности.
#python
Правые методы в Python
Еще одна особенность классов в Python-правые магические методы. Они начинаются префикса r, например: radd, rsub
Эти методы вызываются для правого операнда, когда метод левого операнда не переопределен.
Если мы просуммируем a + b, то Python попытается сделать a.add(b), если метод add не переопределен, то вызовется метод b.radd(a), если radd не переопределен, то выбросится ошибка.
Правые методы в Python
Еще одна особенность классов в Python-правые магические методы. Они начинаются префикса r, например: radd, rsub
Эти методы вызываются для правого операнда, когда метод левого операнда не переопределен.
Если мы просуммируем a + b, то Python попытается сделать a.add(b), если метод add не переопределен, то вызовется метод b.radd(a), если radd не переопределен, то выбросится ошибка.
#java
Преобразование типов в Java.
Вы не можете поместить большое значение в маленькую "чашку".
Честно говоря, это можно сделать, но тогда кое-что потеряется. Произойдет своего рода переполнение. Компилятор попытается предотвратить такую ситуацию, если увидит, что в вашем коде есть какая-то сущность не вмещается в контейнер (переменную/чашку), который вы используете.
Например, вы не можете "залить" значение типа int в контейнер размера byte, как показано ниже.
int x = 24;
byte b = x;
// Не сработает!
Вы просите, почему это не сработает? Значение x равно 24, значит, оно полностью совместимо с типом byte. Да, логично, но компилятора волнует только тот факт, что вы пытаетесь поместить большую сущность в маленькую, из-за чего может произойти переполнение, а то есть, потеря ваших данных. Не надейтесь что компилятор будет знать значение переменной x, даже если вы прямо указали его в своем коде.
Для этого вы указываете компилятору, что хотите привести x(int) к byte, то есть, сделать из большой чашки, маленькую.
int x = 20;
byte b = (byte) x;
(byte) x - из большой чашки делаем маленькую.
// Сработает
И теперь наоборот, если у нас есть большая чашка, маленькую чашку в большую мы положим без проблем.
byte b = 121;
int x = b;
// Сработает
Преобразование типов в Java.
Вы не можете поместить большое значение в маленькую "чашку".
Честно говоря, это можно сделать, но тогда кое-что потеряется. Произойдет своего рода переполнение. Компилятор попытается предотвратить такую ситуацию, если увидит, что в вашем коде есть какая-то сущность не вмещается в контейнер (переменную/чашку), который вы используете.
Например, вы не можете "залить" значение типа int в контейнер размера byte, как показано ниже.
int x = 24;
byte b = x;
// Не сработает!
Вы просите, почему это не сработает? Значение x равно 24, значит, оно полностью совместимо с типом byte. Да, логично, но компилятора волнует только тот факт, что вы пытаетесь поместить большую сущность в маленькую, из-за чего может произойти переполнение, а то есть, потеря ваших данных. Не надейтесь что компилятор будет знать значение переменной x, даже если вы прямо указали его в своем коде.
Для этого вы указываете компилятору, что хотите привести x(int) к byte, то есть, сделать из большой чашки, маленькую.
int x = 20;
byte b = (byte) x;
(byte) x - из большой чашки делаем маленькую.
// Сработает
И теперь наоборот, если у нас есть большая чашка, маленькую чашку в большую мы положим без проблем.
byte b = 121;
int x = b;
// Сработает