Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
А может кто-нибудь из знатоков программирования объяснить почему байт код и виртуальная машина интерпретирующая его?
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
что почему? скорее для чего?
"Write Once Run Anywhere"![Smile :)](./images/smilies/icon_smile.gif)
К примеру Java приложение может в теории без перекомпиляции выполняться на MF и внутри smart card.
"В теории" - потому что реальное приложение зависит от наличия базовых frameworks, которые будут разные в Java SE и Java Card. Но сам байт код будет действительно выполняться и там, и там.
При использовании JIT (just in time compiler) потери в производительности минимальны.
Но C++ как правило будет быстрее. При "промышленной" разработке софта необходимо учитывать, сколько потом усилий уйдет на отладку и вылавливание блох. С++ требует недюжей дисциплинированности программиста, потому цена разработки на С++ будет выше.
https://benchmarksgame-team.pages.debia ... /java.html
"Write Once Run Anywhere"
![Smile :)](./images/smilies/icon_smile.gif)
К примеру Java приложение может в теории без перекомпиляции выполняться на MF и внутри smart card.
"В теории" - потому что реальное приложение зависит от наличия базовых frameworks, которые будут разные в Java SE и Java Card. Но сам байт код будет действительно выполняться и там, и там.
При использовании JIT (just in time compiler) потери в производительности минимальны.
Но C++ как правило будет быстрее. При "промышленной" разработке софта необходимо учитывать, сколько потом усилий уйдет на отладку и вылавливание блох. С++ требует недюжей дисциплинированности программиста, потому цена разработки на С++ будет выше.
https://benchmarksgame-team.pages.debia ... /java.html
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
Это здорово что ответили именно Вы. Тогда скажите как называется процесс выполнения байт кода?Flash-04 wrote: 12 Sep 2021 16:25 что почему? скорее для чего?
"Write Once Run Anywhere"
К примеру Java приложение может в теории без перекомпиляции выполняться на MF и внутри smart card.
"В теории" - потому что реальное приложение зависит от наличия базовых frameworks, которые будут разные в Java SE и Java Card. Но сам байт код будет действительно выполняться и там, и там.
При использовании JIT (just in time compiler) потери в производительности минимальны.
Но C++ как правило будет быстрее. При "промышленной" разработке софта необходимо учитывать, сколько потом усилий уйдет на отладку и вылавливание блох. С++ требует недюжей дисциплинированности программиста, потому цена разработки на С++ будет выше.
https://benchmarksgame-team.pages.debia ... /java.html
Ну и чтобы два раза не вставать скажите почему все таки нельзя обойтись без байт кода даже если не нужна переносимость?
-
- Уже с Приветом
- Posts: 1962
- Joined: 24 Feb 2001 10:01
- Location: Челябинск -> Everett, WA
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
Упростим для ясности безо всяких rowid.
select * from my_table;
id name
1 aaa
2 aaa
3 aaa
4 aaa
5 bbb
6 bbb
7 ccc
1) По каждой записи в таблице найдем минимальный id с тем же name:
select t.id,
t.name,
(select min(id) from my_table where name = t.name) as min_id
from my_table t;
id name min_id
1 aaa 1
2 aaa 1
3 aaa 1
4 aaa 1
5 bbb 5
6 bbb 5
7 ccc 7
Если не отвлекаться на оптимальность запроса, никаких противоречий и багов тут нет.
Теперь сравниваем 1-ю и 3-ю колонку.
2) Вот эти записи мы хотим оставить:
select t.id,
t.name
from my_table t
where t.id = (select min(id) from my_table where name = t.name) ;
id name
1 aaa
5 bbb
7 ccc
3) А вот эти записи мы хотим удалить:
select t.id,
t.name
from my_table t
where t.id > (select min(id) from my_table where name = t.name)
id name
2 aaa
3 aaa
4 aaa
6 bbb
Вместо ">" можно поставить "!=", не важно.
select * from my_table;
id name
1 aaa
2 aaa
3 aaa
4 aaa
5 bbb
6 bbb
7 ccc
1) По каждой записи в таблице найдем минимальный id с тем же name:
select t.id,
t.name,
(select min(id) from my_table where name = t.name) as min_id
from my_table t;
id name min_id
1 aaa 1
2 aaa 1
3 aaa 1
4 aaa 1
5 bbb 5
6 bbb 5
7 ccc 7
Если не отвлекаться на оптимальность запроса, никаких противоречий и багов тут нет.
Теперь сравниваем 1-ю и 3-ю колонку.
2) Вот эти записи мы хотим оставить:
select t.id,
t.name
from my_table t
where t.id = (select min(id) from my_table where name = t.name) ;
id name
1 aaa
5 bbb
7 ccc
3) А вот эти записи мы хотим удалить:
select t.id,
t.name
from my_table t
where t.id > (select min(id) from my_table where name = t.name)
id name
2 aaa
3 aaa
4 aaa
6 bbb
Вместо ">" можно поставить "!=", не важно.
-
- Уже с Приветом
- Posts: 63430
- Joined: 03 Nov 2004 05:31
- Location: RU -> Toronto, ON
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
процесс исполнения байт кода по сути ничем не отличается от исполнения процессорного кода. Не верите? SUN даже разработал picoJava - hardware implementation Java машины, можно сделать на базе FPGA к примеру.zVlad wrote: 12 Sep 2021 16:36 Это здорово что ответили именно Вы. Тогда скажите как называется процесс выполнения байт кода?
Ну и чтобы два раза не вставать скажите почему все таки нельзя обойтись без байт кода даже если не нужна переносимость?
Современные процессоры тоже не исполняют свои инструкции "as is", внутри их есть ещё один уровень - "микрокод".
"Microcode is a technique that interposes a layer of computer organization between the CPU hardware and the programmer-visible instruction set architecture of the computer"
Обойтись можно, но Java была создана именно как готовый "виртуальный процессор" который можно испольнять on-top других систем.
Кстати, чего вы решили что переносимость не нужна? Немало приложений которые могут испольняться под управлением Windows или Linux, но достигать этого можно по разному. Java - один из возможных способов.
Хороший пример: Android OS. Приложения написаны на Java и могут испольняться на любом "железе" на котором установлена Android OS. Разработчикам приложений не нужно думать какой процессов будет на телефоне, им остается только волноваться за разрешение экрана, чтобы приложение корректно отображалось на любом из них.
Not everyone believes what I believe but my beliefs do not require them to.
-
- Уже с Приветом
- Posts: 2273
- Joined: 29 Jul 2005 17:39
- Location: Калифорнийский Мухосранск
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
Вы ошибаетесь. Посмотрите план выполнения такого запроса. Из-за того, что в подзапросе есть условие связи на внешнюю таблицу, этот подзапрос будет "выполняться" каждый раз для нового набора значений сравниваемых полей.zVlad wrote: 12 Sep 2021 14:31 Фактически, да все дубликаты, кроме одного, будут удалены в первой же итерации на подзапросе, но вместе с ними будут удалены и все остальные строки за той что будет обработана первой.
...
Таким образом результат этого delete будет не предсказуемым. Таблица будет проряжена и транкейтнута случайным образом.
В принципе sp123 все уже рассказал выше. У меня под рукой нет Оракла, есть MySQL.
Code: Select all
mysql> select * from t;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | aaa |
| 3 | aaa |
| 4 | bbb |
| 5 | bbb |
| 6 | ccc |
| 7 | aaa |
+----+------+
7 rows in set (0.00 sec)
mysql> select t1.* from t t1 where t1.id > (select min(t2.id) from t t2 where t2.name = t1.name);
+----+------+
| id | name |
+----+------+
| 2 | aaa |
| 3 | aaa |
| 5 | bbb |
| 7 | aaa |
+----+------+
4 rows in set (0.00 sec)
mysql> explain select t1.* from t t1 where t1.id > (select min(t2.id) from t t2 where t2.name = t1.name);
+----+--------------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-------+------+---------------+------+---------+------+------+-------------+
| 1 | PRIMARY | t1 | ALL | NULL | NULL | NULL | NULL | 7 | Using where |
| 2 | DEPENDENT SUBQUERY | t2 | ALL | NULL | NULL | NULL | NULL | 7 | Using where |
+----+--------------------+-------+------+---------------+------+---------+------+------+-------------+
2 rows in set (0.00 sec)
PRIMARY is the outermost SELECT
...
For DEPENDENT SUBQUERY, the subquery is re-evaluated only once for each set of different values of the variables from its outer context.
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
Вы мне о микрокоде рассказывать будете?:Flash-04 wrote: 12 Sep 2021 18:00процесс исполнения байт кода по сути ничем не отличается от исполнения процессорного кода. Не верите? SUN даже разработал picoJava - hardware implementation Java машины, можно сделать на базе FPGA к примеру.zVlad wrote: 12 Sep 2021 16:36 Это здорово что ответили именно Вы. Тогда скажите как называется процесс выполнения байт кода?
Ну и чтобы два раза не вставать скажите почему все таки нельзя обойтись без байт кода даже если не нужна переносимость?
Современные процессоры тоже не исполняют свои инструкции "as is", внутри их есть ещё один уровень - "микрокод".
"Microcode is a technique that interposes a layer of computer organization between the CPU hardware and the programmer-visible instruction set architecture of the computer"
....
http://scihi.org/ibm-system360-microcode/
On April 7, 1964, IBM introduced the IBM System/360, a rather successful family of mainframe computer systems, originally produced between 1965 and 1978 using microcode to implement the instruction set.
........
IBM was the first manufacturer to exploit microcode technology to implement a compatible range of computers of widely differing performance, although the largest, fastest, models had hard-wired logic instead.
Last edited by zVlad on 13 Sep 2021 00:14, edited 1 time in total.
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
А я разве говорю иначе. Да, конечно, подзапрос будет исполняться, только не для "нового набора значений сравниваемых полей", а для каждой строки найденной в основном запросе.KinDzaDza wrote: 12 Sep 2021 18:28Вы ошибаетесь. Посмотрите план выполнения такого запроса. Из-за того, что в подзапросе есть условие связи на внешнюю таблицу, этот подзапрос будет "выполняться" каждый раз для нового набора значений сравниваемых полей.zVlad wrote: 12 Sep 2021 14:31 Фактически, да все дубликаты, кроме одного, будут удалены в первой же итерации на подзапросе, но вместе с ними будут удалены и все остальные строки за той что будет обработана первой.
...
Таким образом результат этого delete будет не предсказуемым. Таблица будет проряжена и транкейтнута случайным образом.
В принципе sp123 все уже рассказал выше. У меня под рукой нет Оракла, есть MySQL.https://dev.mysql.com/doc/refman/8.0/en ... utput.htmlCode: Select all
mysql> select * from t; +----+------+ | id | name | +----+------+ | 1 | aaa | | 2 | aaa | | 3 | aaa | | 4 | bbb | | 5 | bbb | | 6 | ccc | | 7 | aaa | +----+------+ 7 rows in set (0.00 sec) mysql> select t1.* from t t1 where t1.id > (select min(t2.id) from t t2 where t2.name = t1.name); +----+------+ | id | name | +----+------+ | 2 | aaa | | 3 | aaa | | 5 | bbb | | 7 | aaa | +----+------+ 4 rows in set (0.00 sec) mysql> explain select t1.* from t t1 where t1.id > (select min(t2.id) from t t2 where t2.name = t1.name); +----+--------------------+-------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+--------------------+-------+------+---------------+------+---------+------+------+-------------+ | 1 | PRIMARY | t1 | ALL | NULL | NULL | NULL | NULL | 7 | Using where | | 2 | DEPENDENT SUBQUERY | t2 | ALL | NULL | NULL | NULL | NULL | 7 | Using where | +----+--------------------+-------+------+---------------+------+---------+------+------+-------------+ 2 rows in set (0.00 sec)
PRIMARY is the outermost SELECT
...
For DEPENDENT SUBQUERY, the subquery is re-evaluated only once for each set of different values of the variables from its outer context.
В подзапросе всегда есть предикаты связи с внешним по отношению к нему. И называется такой запрос коррелированный.
Но подзаорос выполнятеся автономно и только результат его передается во внешний. В данном случае с функцией min это будет одиночное значение возвращенное этой функцией на множестве строк удовлетворыющих предикату в подзапросе. А Вы, ошибочно, считаете что подзапрас вернет все множество. Это не так. Это было так если бы не было функции min, или подобной ей - sum, например, count(*) и т.п.. Учите теорию.
И слушайте, не надо ссылок.
-
- Уже с Приветом
- Posts: 2273
- Joined: 29 Jul 2005 17:39
- Location: Калифорнийский Мухосранск
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
Да, говорите и даже настаиваете:
Выделенное в Вашей цитате не верно, никаких «всех остальных строк» там не будет.zVlad wrote: 12 Sep 2021 14:31 Фактически, да все дубликаты, кроме одного, будут удалены в первой же итерации на подзапросе, но вместе с ними будут удалены и все остальные строки за той что будет обработана первой.
...
Таким образом результат этого delete будет не предсказуемым. Таблица будет проряжена и транкейтнута случайным образом.
Что, как видно на приведённых примерах совсем не так и рассматриваемый запрос работает совсем не так как Вы думаете он должен работать. Ничего случайного и непредсказуемого там не будет. Останутся именно записи с минимальными значениями id по своим группам сравнения в единственном экземпляре. Как и просили. Если надо оставить из дубликатов какие-то другие записи - ну флаг в руки, измените/дополните критерий отбора.
Правда что ли? А как же select * from a where id in (select id from b)zVlad wrote: 12 Sep 2021 18:59 В подзапросе всегда есть предикаты связи с внешним по отношению к нему.
Вы сначала приписываете мне то, что я не говорил, а потом радостно разоблачаете.В данном случае с функцией min это будет одиночное значение возвращенное этой функцией на множестве строк удовлетворыющих предикату в подзапросе. А Вы, ошибочно, считаете что подзапрас вернет все множество. Это не так. Это было так если бы не было функции min, или подобной ей - sum, например, count(*) и т.п.. Учите теорию.
Ссылка была дана исключительно для того, чтобы можно было при желании посмотреть что именно в MySQL explain plan имеется ввиду за всякими словами типа PRIMARY, DEPENDENT SUBQUERY и т.п.И слушайте, не надо ссылок.
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
KinDzaDza wrote: 12 Sep 2021 20:29Да, говорите и даже настаиваете:Выделенное в Вашей цитате не верно, никаких «всех остальных строк» там не будет.zVlad wrote: 12 Sep 2021 14:31 Фактически, да все дубликаты, кроме одного, будут удалены в первой же итерации на подзапросе, но вместе с ними будут удалены и все остальные строки за той что будет обработана первой.
...
Таким образом результат этого delete будет не предсказуемым. Таблица будет проряжена и транкейтнута случайным образом.
Что, как видно на приведённых примерах совсем не так и рассматриваемый запрос работает совсем не так как Вы думаете он должен работать. Ничего случайного и непредсказуемого там не будет. Останутся именно записи с минимальными значениями id по своим группам сравнения в единственном экземпляре. Как и просили. Если надо оставить из дубликатов какие-то другие записи - ну флаг в руки, измените/дополните критерий отбора.
Правда что ли? А как же select * from a where id in (select id from b)zVlad wrote: 12 Sep 2021 18:59 В подзапросе всегда есть предикаты связи с внешним по отношению к нему.
Вы сначала приписываете мне то, что я не говорил, а потом радостно разоблачаете.В данном случае с функцией min это будет одиночное значение возвращенное этой функцией на множестве строк удовлетворыющих предикату в подзапросе. А Вы, ошибочно, считаете что подзапрас вернет все множество. Это не так. Это было так если бы не было функции min, или подобной ей - sum, например, count(*) и т.п.. Учите теорию.Ссылка была дана исключительно для того, чтобы можно было при желании посмотреть что именно в MySQL explain plan имеется ввиду за всякими словами типа PRIMARY, DEPENDENT SUBQUERY и т.п.И слушайте, не надо ссылок.
Приведите доказательство что Вы правы. Загоните в ВАш MySQL данные и выполните запрос, т.е. материализуйте пример sp123.
-
- Уже с Приветом
- Posts: 1962
- Joined: 24 Feb 2001 10:01
- Location: Челябинск -> Everett, WA
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
Все примеры, что я тут выше приводил, предварительно исполнялись на базе данных.
Sent from my iPhone using Tapatalk Pro
Sent from my iPhone using Tapatalk Pro
-
- Уже с Приветом
- Posts: 2273
- Joined: 29 Jul 2005 17:39
- Location: Калифорнийский Мухосранск
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
Так уже - Вы же как раз это и цитировали: viewtopic.php?p=7512216#p7512216zVlad wrote: 12 Sep 2021 21:00 Приведите доказательство что Вы правы. Загоните в ВАш MySQL данные и выполните запрос, т.е. материализуйте пример sp123.
![HBZ :pain1:](./images/smilies/pain25.gif)
Там между тэгами CODE результаты выполнения запроса в MySQL, это окошко скроллируемо.
Если бы Вы были правы, второй запрос вернул бы все записи кроме первой с самым маленьким id в этой таблице.
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
Хорошо. Проверю на DB2.KinDzaDza wrote: 12 Sep 2021 21:14Так уже - Вы же как раз это и цитировали: viewtopic.php?p=7512216#p7512216zVlad wrote: 12 Sep 2021 21:00 Приведите доказательство что Вы правы. Загоните в ВАш MySQL данные и выполните запрос, т.е. материализуйте пример sp123.![]()
Там между тэгами CODE результаты выполнения запроса в MySQL, это окошко скроллируемо.
Если бы Вы были правы, второй запрос вернул бы все записи кроме первой с самым маленьким id в этой таблице.
-
- Уже с Приветом
- Posts: 2273
- Joined: 29 Jul 2005 17:39
- Location: Калифорнийский Мухосранск
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
Вот, PostgreSql за нас!sp123 wrote: 12 Sep 2021 21:12 Все примеры, что я тут выше приводил, предварительно исполнялись на базе данных.
![Good :good:](./images/smilies/good.gif)
Там правда у iDesperado на Оракле что-то не получилось, но он ROWNUM использовал а не ROWID, видимо из-за этого и не вышло.
У меня нет сейчас доступа к Ораклу, а качать и ставить дома в лом.
-
- Уже с Приветом
- Posts: 15420
- Joined: 30 Apr 2003 16:43
- Has thanked: 1 time
Re: Зачем появляются новые языки программирования? Сколько их и каких на самом деле нужно?
Отвез соседа на берег и без проверки в ДБ2 соглашаюсь в том что был не прав. Я недоучел что условие связи работает в обе стороны, не только в подзапросе но и в основном запросе тоже.KinDzaDza wrote: 12 Sep 2021 21:14Так уже - Вы же как раз это и цитировали: viewtopic.php?p=7512216#p7512216zVlad wrote: 12 Sep 2021 21:00 Приведите доказательство что Вы правы. Загоните в ВАш MySQL данные и выполните запрос, т.е. материализуйте пример sp123.![]()
Там между тэгами CODE результаты выполнения запроса в MySQL, это окошко скроллируемо.
Если бы Вы были правы, второй запрос вернул бы все записи кроме первой с самым маленьким id в этой таблице.
Извиняюсь если что не так.
P.S. Правильнее будет сказать что основной запрос выполняет подзапрос для каждой строки таблицы по всей таблице. Или иначе scope основного запроса - строка, подзапроса вся таблица.