|
|
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
Морально устаревшие элементы языков программирования высокого уровня Языки высокого уровня были задуманы, чтобы облегчить программирование по сравнению с ассемблером и машинным кодом. В этом они достигли достаточно больших успехов. Но для их использования существовало еще одно ограничение – скорость компиляции кода. Поэтому в языках высокого уровня остались элементы, которые нужны только компилятору, но не нужны человеку. Однако сейчас производительность обработки текста программы (компиляции) уже не имеет решающего значения, а каждый введенный программистом символ, наоборот, стоит все дороже и дороже. Поэтому некоторые элементы оформления кода можно считать морально устаревшими. Объявление библиотек и структуры объектов В целях повторного использования кода программа делится на модули или классы. Чтобы собрать эти объекты вместе, нужно указать компилятору, где их искать. Самый логичный с точки зрения программиста вариант – указать, где расположена библиотека ядра, несколько личных библиотек, причем все это указывать в проекте. В самой программе достаточно указать только имя класса. Библиотеки должны быть проиндексированы, чтобы по имени класса определить, есть ли он в библиотеке и должна ли подключаться библиотека. В любом случае имя класса уникально. Однако что мы видим на практике? В Паскале, в Си++ и в Java программист должен явно указывать, какие библиотеки использовать (uses, include и import соответственно). Особенно страшно дело выглядит в Си++ - программист должен указывать еще и заголовочные файлы (с расширением H), следить, чтобы заголовочные файлы не включались дважды. Одно это отталкивает от Си++, несмотря на все преимущества ООП. В Java можно включать библиотеки верхнего уровня, при этом подбиблиотеки включаются автоматически – по сути, подключаются лишние библиотеки ради упрощения написания кода. Подход хороший, но не идеальный. Идеально было бы определять библиотеки автоматом, по составу классов. Конечно, использование IDE немного нивелирует эти проблемы, но IDE все равно не решает всех проблем, в любом случае человек видит этот лишний, по сути, мусорный код, и тратит на него свое внимание. Программа в любом случае может лучше человека определить, какие модули нужны. Поэтому нужно запретить явное указание библиотек человеком для улучшения читаемости и скорости ввода программ. Объявление интерфейса вместе с реализацией Если объявлять интерфейс класса отдельно от реализации, как это принято в Си++ и Паскаль, код программы увеличивается и по сути, дублируется. Ничто не мешает компилятору собрать объявление из реализации класса. В Java это поняли и поэтому код стал лаконичнее и прозрачнее. В Си и Паскале при изменении интерфейса приходится менять еще и реализацию, т.е. делать никому не нужную, излишнюю работу. Объявление переменных В этом плане отстает только Паскаль. Только в угоду компилятору локальные переменные можно объявлять только в начале процедуры, хотя ничто не мешает определить, сколько локальных переменных используется в процедуре и отвести под них необходимое место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 09:20:58 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
Fixin, авторв любом случае человек видит этот лишний, по сути, мусорный код, и тратит на него свое внимание. Программа в любом случае может лучше человека определить, какие модули нужны. Не мусорный, после того как класс написан, достаточно при использовании смотреть в .h-файл, чтобы узнать интерфейс. Это очень удобно. А насчёт какие модули нужны, человек как раз может лучше определить, ибо в разных модулях, могут быть классы с одинаковыми названиями, и только человек может указать, что именно он имел в виду. З.Ы. Прошу прощения, Вы ещё студент, и не имеете опыта работы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 09:38:05 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
XDiaBLoFixin, З.Ы. Прошу прощения, Вы ещё студент, и не имеете опыта работы? он не студент, а всех уже доставший на форуме mista.ru хомо. почитай: http://www.forum.mista.ru/topic.php?id=407452 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 10:06:38 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
Fixin первое, вы говорите о конкретной IDE или о нескольких IDE. блокнот не включает ява пакеты автоматически второе, слишком субъективное мнение. какой у вас опыт на ява и на си ? так, например, никто не заставляет вам обьявлять реализацию в си отдельно. но при этом отдельная реализация позволяет разделять headers что существенно упрощает линковку. не говоря уже о том, что можно писать херову кучу классов в одном файле (в яве на это есть ограничения) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 10:25:57 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
trdmXDiaBLoFixin, З.Ы. Прошу прощения, Вы ещё студент, и не имеете опыта работы? он не студент, а всех уже доставший на форуме mista.ru хомо. почитай: http://www.forum.mista.ru/topic.php?id=407452 собственно его и там послали за незнанием ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 10:29:09 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
eee-pcFixin первое, вы говорите о конкретной IDE или о нескольких IDE. блокнот не включает ява пакеты автоматически второе, слишком субъективное мнение. какой у вас опыт на ява и на си ? так, например, никто не заставляет вам обьявлять реализацию в си отдельно. но при этом отдельная реализация позволяет разделять headers что существенно упрощает линковку. не говоря уже о том, что можно писать херову кучу классов в одном файле (в яве на это есть ограничения) Если не объявлять интерфейс отдельно в С++ например, то методы будут inline, насколько мне известно, а это не всегда то что нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 10:29:19 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
Fixin wrote: > В Java можно включать библиотеки верхнего уровня, при этом подбиблиотеки > включаются автоматически – по сути, подключаются лишние библиотеки ради > упрощения написания кода. Фига с два там, тебе в Java в конечном итоге надо для запуска (а это -- считай для сборки, потому что в Java сборка происходит при запуске) надо указать именно ВСЕ библиотеки, которые твоя программа использует, и непосредственно, и опосредованно. Подход хороший, но не идеальный. Идеально было > бы определять библиотеки автоматом, по составу классов. А на самом деле тут дело ещё хуже, чем в С/С++, как ни странно. В С/С++ сборка вынесена из языка, и в заголовочном файле только на логическом уровне указывается, что есть какая-то такая функция или переменная, которую я буду использовать. А где она физически находится, и вообще как сборка физически производится, на уровне языка вообще не определяется. Т.е. язык отделён от физического уровня сборки. В Java же классы -- это элементы в том числе и физической организации программы, и ты В ИСХОДНЫХ КОДАХ их должен указывать. Оно конечно, это не так уж и страшно, но факт. > Если объявлять интерфейс класса отдельно от реализации, как это принято > в Си++ и Паскаль, код программы увеличивается и по сути, дублируется. Бред. Ничего не дублируется. > В этом плане отстает только Паскаль. Ну, паскаль и не только в этом плане отстаёт. Да он вообще сдохнет совсем скоро, и туда ему и дорога. Только в угоду компилятору > локальные переменные можно объявлять только в начале процедуры, хотя > ничто не мешает определить, сколько локальных переменных используется в > процедуре и отвести под них необходимое место. Back to FOTRAN days ? Ну, если тут вообще обсуждать Паскаль в этом аспекте, то он -- самый дурацкий в этом смысле язык. потому что синтаксис языка разрабатывался специально для того, чтобы компилятор был простой и быстрый. Т.е. не так, чтобы было удобно программисту, а так, чтобы было удобно компилятору, что и является установкой проблемы с ног на голову. За что я собственно всегда и не любил язык паскаль. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 11:14:25 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
XDiaBLo wrote: > Если не объявлять интерфейс отдельно в С++ например, то методы будут > inline, насколько мне известно, а это не всегда то что нужно. Они будут inline, но это никому не мешает ни в чём. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 11:15:39 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
FixinПоэтому некоторые элементы оформления кода можно считать морально устаревшими. Объявление библиотек и структуры объектовТебе надо Алана Кея почитать http://alarmingdevelopment.org/?p=229. Он ровно тоже самое замышляет, а именно снизить количество lines of code в десятки раз освободив код от ненужной, служебной мишуры и тем самым повысить качество и скорость разработки софта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 11:58:26 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
MasterZiv XDiaBLo wrote: > Если не объявлять интерфейс отдельно в С++ например, то методы будут > inline, насколько мне известно, а это не всегда то что нужно. Они будут inline, но это никому не мешает ни в чём. Так ведь размер кода может сильно вырасти, разве нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 12:05:15 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
FixinВ Паскале, в Си++ и в Java программист должен явно указывать, какие библиотеки использовать (uses, include и import соответственно). Uses, include и import нужны для того, чтобы было понятно из какой библиотеки ты будешь дергать класс Date (к примеру), из java.util или из javax.sql.SQLDate Можешь тупо без import всё писать, но все названия классов при этом раскрывать полностью, никто import делать не заставляет же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 12:19:58 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
XDiaBLoЕсли не объявлять интерфейс отдельно в С++ например, то методы будут inline, насколько мне известно, а это не всегда то что нужно. а в сидиез вроде бы все функции вируальные. inline - как помпилятор настроиш. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 12:26:52 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
eee-pcXDiaBLoЕсли не объявлять интерфейс отдельно в С++ например, то методы будут inline, насколько мне известно, а это не всегда то что нужно. а в сидиез вроде бы все функции вируальные. inline - как помпилятор настроиш. В жабе тоже все методы виртуальные, и что? Инлайн то при чём тут? :) А в С++ я компилятор не стану на это настраивать, я просто интерфейс отдельно, реализацию отдельно делаю. И каждый класс в отдельном файле. Удобно, по Жаве заметил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 12:37:05 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
XDiaBLoFixin, Не мусорный, после того как класс написан, достаточно при использовании смотреть в .h-файл, чтобы узнать интерфейс. Это очень удобно. З.Ы. Прошу прощения, Вы ещё студент, и не имеете опыта работы? Почему H файл (интерфейс) не может быть создан на основе имеющейся реализации? Вы забываете, что это удобство вылазит боком в том, что человек должен сначала долбить интерфейс, потом реализацию. По крайней мере в Java не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 13:49:52 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
eee-pcтак, например, никто не заставляет вам обьявлять реализацию в си отдельно. но при этом отдельная реализация позволяет разделять headers что существенно упрощает линковку. не говоря уже о том, что можно писать херову кучу классов в одном файле (в яве на это есть ограничения) Вы говорите о упрощении линковки... А не кажется ли вам, что линковка уже морально устарела? Перечитайте еще раз пост. Зачем человеку думать о линковке, если этим должен заниматься компилятор. Человеку достаточно указать имя классов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 13:51:18 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
XDiaBLoЕсли не объявлять интерфейс отдельно в С++ например, то методы будут inline, насколько мне известно, а это не всегда то что нужно. Опять 25. Я вам и объясняю, что С++ как язык высокого уровня в части линковки уже УСТАРЕЛ ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 13:52:07 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
MasterZiv потому что в Java сборка происходит при запуске Тем более - если сборка происходит при сборке, банальный кэш имен классов решает проблему - зная имя найти имя библиотеки как два байта переслать. Смысл программисту напрягаться и указывать библиотеку? MasterZiv А на самом деле тут дело ещё хуже, чем в С/С++, как ни странно. В С/С++ сборка вынесена из языка, и в заголовочном файле только на логическом уровне указывается, что есть какая-то такая функция или переменная, которую я буду использовать. А где она физически находится, и вообще как сборка физически производится, на уровне языка вообще не определяется. Т.е. язык отделён от физического уровня сборки. В Java же классы -- это элементы в том числе и физической организации программы, и ты В ИСХОДНЫХ КОДАХ их должен указывать. Аргумент хороший. Но часто ли используются такие абстракции? На практике чаще реализация объедина с интерфейсом. Можно было бы сделать вариант вынесения интерфейса и описания его вместе с реализацией... MasterZiv Бред. Ничего не дублируется. Ну как же не дублируется, если интерфейс и реализация содержат одни и те же заголовки, без IDE никак. MasterZiv Ну, паскаль и не только в этом плане отстаёт. Да он вообще сдохнет совсем скоро, и туда ему и дорога. Солидарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 14:01:38 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
цешарпщикFixinВ Паскале, в Си++ и в Java программист должен явно указывать, какие библиотеки использовать (uses, include и import соответственно). Uses, include и import нужны для того, чтобы было понятно из какой библиотеки ты будешь дергать класс Date (к примеру), из java.util или из javax.sql.SQLDate Можешь тупо без import всё писать, но все названия классов при этом раскрывать полностью, никто import делать не заставляет же Это нужно для тех классов, где имена дублируются. Опять же, расстановкой приоритетов библиотек в проекте эта проблема решается. Ты хочешь сказать, что если я напишу класс TDialog и не укажу библиотеку, она мне найдет сама нужную библиотеку при условии уникальности имени класса??? Сильно сомневаюсь, скорее пошлет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 14:04:37 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
FixinXDiaBLoFixin, Не мусорный, после того как класс написан, достаточно при использовании смотреть в .h-файл, чтобы узнать интерфейс. Это очень удобно. З.Ы. Прошу прощения, Вы ещё студент, и не имеете опыта работы? Почему H файл (интерфейс) не может быть создан на основе имеющейся реализации? Вы забываете, что это удобство вылазит боком в том, что человек должен сначала долбить интерфейс, потом реализацию. По крайней мере в Java не так. Дак так и надо всегда делать, сначала интерфейс, а потом реализацию. В жабе это вылазит при разработке через тестирование. Сначала пишется тест, в процессе чего продумывается интерфейс, а потом пишется реализация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 14:08:01 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
FixinXDiaBLoЕсли не объявлять интерфейс отдельно в С++ например, то методы будут inline, насколько мне известно, а это не всегда то что нужно. Опять 25. Я вам и объясняю, что С++ как язык высокого уровня в части линковки уже УСТАРЕЛ ! Да чтож это блин? Всё там замечательно, мне ничто не мешает, и вполне удобно. Файлы интерфейсов пользователю реализаций, даже удобнее чем компилятору, т.к. не надо лопатить исходник, достаточно посмотреть заголовки функций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 14:10:33 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
FixinMasterZiv потому что в Java сборка происходит при запуске Тем более - если сборка происходит при сборке, банальный кэш имен классов решает проблему - зная имя найти имя библиотеки как два байта переслать. Смысл программисту напрягаться и указывать библиотеку? Ну как же? А охота писать каждый раз полный путь до класса, с указанием пакета??? Так удобнее??? Fixin MasterZiv А на самом деле тут дело ещё хуже, чем в С/С++, как ни странно. В С/С++ сборка вынесена из языка, и в заголовочном файле только на логическом уровне указывается, что есть какая-то такая функция или переменная, которую я буду использовать. А где она физически находится, и вообще как сборка физически производится, на уровне языка вообще не определяется. Т.е. язык отделён от физического уровня сборки. В Java же классы -- это элементы в том числе и физической организации программы, и ты В ИСХОДНЫХ КОДАХ их должен указывать. Аргумент хороший. Но часто ли используются такие абстракции? На практике чаще реализация объедина с интерфейсом. Можно было бы сделать вариант вынесения интерфейса и описания его вместе с реализацией... Чаще как раз они отдельно идут. Fixin MasterZiv Бред. Ничего не дублируется. Ну как же не дублируется, если интерфейс и реализация содержат одни и те же заголовки, без IDE никак. Предлагаю делать всё в Notepad, надолго хватит нервов? Fixin MasterZiv Ну, паскаль и не только в этом плане отстаёт. Да он вообще сдохнет совсем скоро, и туда ему и дорога. Солидарен. Давно пророчат, я бы и рад, да не вижу конца и края этим дельфятникам... Правда и сам в С++ Билдере в основном пишу, но это всё наследие... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 14:15:44 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
XDiaBLoFixinXDiaBLoЕсли не объявлять интерфейс отдельно в С++ например, то методы будут inline, насколько мне известно, а это не всегда то что нужно. Опять 25. Я вам и объясняю, что С++ как язык высокого уровня в части линковки уже УСТАРЕЛ ! Да чтож это блин? Всё там замечательно, мне ничто не мешает, и вполне удобно. Файлы интерфейсов пользователю реализаций, даже удобнее чем компилятору, т.к. не надо лопатить исходник, достаточно посмотреть заголовки функций. Еще раз: 1. Файл интерфейса можно получить автоматом, если надо, или в той же IDE посмотреть только заголовки функций, зачем требовать его обязательное наличие? 2. Почему я должен писать IF DEFINE в каждом H-файле. 3. Зачем я должен следить за именами H-файлов? 4. Зачем мне вообще H-файлы, если найти нужное описание класса может и сам компилятор? 5. Допустим, пусть есть интерфейс, но почему тогда я не могу просто написать в реализации, что в данном файле я описываю класс такой то (один раз), затем пишу имя каждого метода (без параметров, параметры будут вытягиваться из объявления) и просто писать код метода. Зачем этот бред с дублированием информации. С++ - это язык для компилятора, а не человека. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 14:22:08 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
Fixin, Ваши проблемы надуманны. Если бы кто-то сделал язык, пользуясь вашими рекомендациями, я бы его придушил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 14:27:45 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
XDiaBLo Ну как же? А охота писать каждый раз полный путь до класса, с указанием пакета??? Так удобнее??? Вы о чем? если имя класса уникально, JAVA должна сама его найти, а если есть варинаты swing/awt, то я в проекте укажу предпочитаемую библиотеку или укажу вызов import явно. Мысль понятна? Проблема в том что без import JAVA не найдет мой класс, даже если его имя уникально, вот! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 14:35:49 |
|
||
|
Морально устаревшие элементы языков высокого уровня
|
|||
|---|---|---|---|
|
#18+
FixinXDiaBLo Ну как же? А охота писать каждый раз полный путь до класса, с указанием пакета??? Так удобнее??? Вы о чем? если имя класса уникально, JAVA должна сама его найти, а если есть варинаты swing/awt, то я в проекте укажу предпочитаемую библиотеку или укажу вызов import явно. Мысль понятна? Проблема в том что без import JAVA не найдет мой класс, даже если его имя уникально, вот! Не катит. Это половинчатое решение, т.к. очень часто имя будет неуникально. Да и к путанице приведёт сей подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 14:38:57 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=123&tid=1344474]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
301ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 571ms |

| 0 / 0 |
