LINUX.ORG.RU

Жаба

Дико извиняюсь, что вмешался... Лично мне жаба нравится, она конечно не без недостатков. То есть есть о чем спорить. Сильнее всего печалит скорость - она могла бы быть и выше, но ... С другой стороны есть свои плюсы. Должен сказать, что есть как минимум две категории людей: первые, которые реально работают за большие деньги и делают большие дела (другим конечно завидно и они пытаются полить их грязью, иногда даже заслуженно! Я сам видел ДИКО дорогие поделки, которые просто стыдно было бы мне не то что продавать, а даже показывать близким друзьям! То есть в реальной жизни часто случается так, что цена, качество и сложность - совершенно не связанные и независимые вещи :-(. Суть в том, что когда попал в струю, то уже нет времени вылизывать управление динамической паматью, выискивать ошибки в использовании указателей и пр. - нужно быстро получить рабочий продукт!) вторая группа лудей - это непризнанные гении, которые иногда вообще ничего не сделали РЕАЛЬНОГО, зато твердо знают теорию и умеют широко раздувать щеки. Конечно, только дурак может заявлять, что на С++ получаются более оптимальные по скорости/размеру программы чем на асме, но на асме я напишу одну программу, а на С -за одно и то же время - отсда легко калькулируется прибыль. Конечно великий ТЕОРЕТИК сразу возразит, что и на асме можно писать надежно и быстро и модульно и реюзабильно! Согласен... Но жизнь ставит свои акценты. Так что сегодня Жаба - это руль и хороший источник дохода для программистов. Удачи товарищи!

i_yalovoy
()

> Суть в том, что когда попал в струю, то уже нет времени вылизывать
> управление динамической паматью, выискивать ошибки в использовании
> указателей и пр. - нужно быстро получить рабочий продукт!
собственно, ява и проектировалась с такой целью. например ошибку в использовании указателей нельзя сделать, если в языке указателей просто нет. ИМХО что касается скорости, если бы sun не делала кроме явы еще и железо, скорость могла быть выше. а так получается бОльшая надежность в обмен на мменьшую производительность, что компенсируется бОльшими затратами на сановское железо, что не так уж плохо для сана.

anonymous
()

Не, ява - это отстой. Во-первых, быстродействие (я бы сказал, медленодействие). Демка из состава SDK с демонстрацией разных окошек и пр. отъёдает 65М памяти, а при перетаскивании окошек, щёлакании кнопок и пр. только на отрисовке и обработке действий тратит 10% CPU моего ahlon xp 1800+. Это же дикость! А если написать какую-нидуь приблуду типа Rational Rose - это будет медленная смерть. Во-вторых, язык. Тут уже был флейм про то, что нельзя написать tamplate <class T> void swap(T& t1,T& t2){...} даже без шаблона. С отсутсвием ссылок они промахнулись. В-третьих, проблема с версиями. Версий огромное количество, вместе они не живут и обратной совместимости нет. Хуже, чем BDE! В-четвёртых, в современном С++ проблемы с указателями возникают довольно редко, т.к. широко используются контейнерные классы (STL или другие), smart-указатели и пр. А про malloc() уже все давно забыли. В-четвёртых, .NET явно лучше. Не надо кричать "маст дай", это не поможет. Собственно, .NET лучше хотя бы оттого, что при его разработке учли ошибки и просчёты, которые свойственны яве. Преимущества .NET следующие: - разделение языка и виртальной машины. .NET-совместимых языков уже написано десятки. И есть asm (!!!) - C# является практически явой, только без ряда косяков - Более мощная и развитая библиотека Так что внимательно следим за mono.

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

Если б .NET был под Linux, то был бы повод для разговора.

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

rational rose написана на С++. together - на голой яве. работают примерно с одной скоростью. темплейты будут в 1.5, а это уже совсем скоро. нужны ссылки - пиши на ц. .NET лучше - пиши на нем, но не забудь мне рассказать, как твои приложения юудут работать на спарках, pa-risc'ax и мипсах (мне правда любопытно). кроме учти, какая инфраструктура уже сейчас наработана под яву и подумай, сколько времени на это уйдет у .net. вместе, кстати, версии живут, и обратная совместимость на уровне бинарного кода есть (это если писать аккуратно), хотя да, классы, компиленные 1.4.1 хрен запустишь под 1.1.7, хотя в обратную сторону - сколько угодно.

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

2 Eugene_Korobko:

> Демка из состава SDK с демонстрацией разных окошек и пр. отъёдает 65М памяти, а при перетаскивании окошек, щёлакании кнопок и пр. только на отрисовке и обработке действий тратит 10% CPU моего ahlon xp 1800+. Это же дикость!

GUI-библиотеки в яве действительно страдают некоторой медлительностью, хотя сама виртуальная машина достаточно быстрая; проблема скорее в соответсвующих библиотеках (и тредах некоторых ОС)

а вот 65М вообще мало о чем говорит, что кстати довольно часто вводит в заблуждение даже опытных сишных и паскалевских программистов ;-)

> .. даже без шаблона.

См. JDK 1.5 (Tiger). Можно также скачать прототипный компилятор. Кстати, шаблоны в том же C++ тоже далеко не идеал!

> В третьих, проблема с версиями.

Глупо. В действительности для клиентского программирования есть некоторые проблемы с весьма устаревшей реализацией JDK 1.x.x от печально известной фирмы M$. На серверной же стороне используется Java2.

> В соврменном C++ проблемы с указателями...

По-моему уже давно нелепо спорить на эту тему, хотя все еще много желающих.

Согласен, что есть определенные перегибы со стороны Java-программистов, но и со стороны C++ программеров их тоже не мало в обсуждении этого вопроса...

> .NET явно лучше.

Обычно так говорят только виндузовые программисты с не очень большим опытом работы на яве или, вообще, без оного ;-)

anonymous
()

Дааа, в школе для умственно отсталых каникулы... Воспитанники под анонимусами обсуждают на ЛОРе проблемы явы-питона.

Один плачется: как мне из функции вернуть два значения, если передачи параметров по сцылке в яве нет? Другие ему чего только не отвечают - yмора. прохрамисты из дурдома...

Давайте по порядку, уошнички:

1. Функций в яве нет - вместо них методы. И похожи они только на очень первый и мутный взгляд. Может поэтому и задачи означенной в яве на здоровую голову как-бы и не возникает...

2. Какой там язык позволяет изобразить функцию, которая _возвращает_ ДВА значения? Как такое вообще возможно? Питон, говорите, могёт? Дебилы...

3. Ах-ах, оказывается не возвращать вам два значения надо, а ИЗМЕНИТЬ значение переменных, которые вы в функцию пихаете. А про то, что "побочный эффект - это плохо" в вашем заведении не рассказывают?

Чтобы у вас припадки на начались дам сразу и расшифровки по пунктам:

1. Метод надо использовать вовсе не для того чтобы изменять переданные в него параметры, а наоборот - для того чтобы дергать за него объект, заставляя его изменить своё состояние в соответствии с переданными параметрами. Инкапсуляция, панимашь, штука рулезная...

2. Конструкция "return a, b" в Питоне возвращает вовсе не два значения разом - оно возвращает _одно_ значение (объект типа tuple - т.е кортеж, неизменяемый список). И уж тем более в Питне нельзя присвоить новое значение параметру фунции и отдать это изменение наружу - о побочных эффектах там позаботились точно также, как и в яве.

3. Если действительно надо поменять что-то и у переданных параметров - ну так кто же мешает подёргать их за их же собственные методы _для_этого_ предназначенные (параметры ведь тоже ОБЪЕКТЫ)... Как нет у у них таких методов?! Не может быть - значит что-то не так запроектировано - надо подумать-рефактануть что-то.

speer
()

смотрите-ка, тезки-анноонимусы, приперся спир, прохрамер бля с завышенным самомнением! и чего же он хочет до нас донести?

1. Функций в яве нет - вместо них методы. И похожи они только на очень первый и мутный взгляд. Может поэтому и задачи означенной в яве на здоровую голову как-бы и не возникает...

сюрприз -- в питоне функции есть.

2. Какой там язык позволяет изобразить функцию, которая _возвращает_ ДВА значения? Как такое вообще возможно? Питон, говорите, могёт? Дебилы...

ептыть, анонимусы, он никак хочет поведать про tuple! спир, ты мне просто открыл глаза! я думал это два значения, а это оказывается одна пара значений - дохуя разницы.

3. Ах-ах, оказывается не возвращать вам два значения надо, а ИЗМЕНИТЬ значение переменных, которые вы в функцию пихаете. А про то, что "побочный эффект - это плохо" в вашем заведении не рассказывают?

это у некоторых анонимусов пережитки программирования на перле/паскале. их уже лечат

... по пунктам:

1. Метод надо использовать вовсе не для того чтобы изменять переданные в него параметры, а наоборот - для того чтобы дергать за него объект, заставляя его изменить своё состояние в соответствии с переданными параметрами. Инкапсуляция, панимашь, штука рулезная

и если ты хочешь изменить объект, а потом вытянуть из него пару значений, кто гарантирует что в промежутках его не пнут еще пару раз на предмет изменения этих значений? рефакторить, говоришь?

зачем создавать сложности если можно просто вернуть пару? я понимаю, джава язык с суровой идеологией, заставляет под нее перестраиваться. наверное поэтому такие как ты перестроенные никаких других подходов не воспринимают.

вопрос был от человека, плохо знакомого с явой: "хочу вернуть два значения", ему рассказали как это правильно сделать. а ты тут блин с рефакторингом лезешь, мол два значения никогда никому возвращать не понадобится. нужно все-таки соотносить вопрос с ответом. или тот начинающий так и будет думать что ява такая вещь в себе, и никакой опыт программирования на других языках там неприменим.

anonymous
()

speer в общем-то прав, только как-то он грубовато об этом написал; только вот я не понимаю, чего он на самом деле с "двоичниками" возится? если только для флейма...

а тот, кто написал, что между кортежем из двух значений и просто двумя значениями нет никакой разницы, ну-ну... собственно, отвечать ему больше и не нужно ;-)

anonymous
()

А ведь действительно дебил!

>>>сюрприз -- в питоне функции есть.

Дык вопрос и ответы уошников-то на него были про Яву. И про Питона один из них ввернул (не я же!) - якобы там МОЖНО запрошенное сделать.

Но как? Cсылок в Питоне нет, конструкция "a, b = myFunciton(a, b)" делает много чего интересного, но не то об чём спрашивалось и не то, чего нельзя сделать на яве. И Питон такую конструцию исполнит принципиально с тем же оверхедом на создание промежуточных объектов, что и ява (а ведь можно наверно и без него ;)

>>>ты мне просто открыл глаза! я думал это два значения, а это оказывается одна пара значений - дохуя разницы.

1. А если сделаем "return a, b, c" - это тоже будет "пара значений"?!

2. Чой-то за структура данных такая "пара значений"? Где про неё прочитать? Хочу закрыть пробел в образовании... Или кое-кому другому надо почитать учебничков, написать десяток-другой строк на том и на сём и подумать над смыслом написанного прежде, чем "правильные советы" постить?

3. А без детского мата воспитанник общаться умеет? А имя своё он знает?

>>>это у некоторых анонимусов пережитки программирования на перле/паскале. их уже лечат

Ооо, это хорошо, надо только комплекснее лечиться... электрошок там применять или ещё что. Мне про анамнез и диагноз рассказывать не надо, сам вижу.

>>>если ты хочешь изменить объект, а потом вытянуть из него пару значений, кто гарантирует что в промежутках его не пнут еще пару раз на предмет изменения этих значений?

1. Чего - уже распараллелились? Ну тогда synchronized.

2. Со сцылками проблема-то будет точно такая-же: одно значение внутри функции уже поменяно, второе ещё нет, а переменные (которые снаружи) другой поток взял да и попользовал в таком - промежуточном - состоянии. Так что бардак неизбежен без принятия мер и при процедурном подходе...

3. В многопоточность и синхронизацию не углубляйся - задохнутся можно от западения языка или ещё чего не менее неприятного.

>>>зачем создавать сложности если можно просто вернуть пару? ... такие как ты перестроенные никаких других подходов не воспринимают.

LOL. Про "вернуть пару" - см. выше и лечись дальше.

Питоновские же подходы пишущие помаленьку на яве с целью заработка очень даже любят, воспринимают и вовсю используют. Или прямо, или через Jython.

>>>вопрос был от человека, плохо знакомого с явой: "хочу вернуть два значения" - ему рассказали как это правильно сделать.

1. На спрашивавшего наезжал меньше всего. Не имею обыкновения. Тем более на "плохо знакомых".

2. Но вопрос был крив - ибо желания "вернуть два значения" и "поменять два ссылочных параметра" никак не стыкуются между собой.

3. Как правильно это сделать не рассказали... потому как непонятно, что и ЗАЧЕМ нужно сделать. Вопрос некорректен, дополнительные условия неизвестны.

Правильный ответ возможен только на правильный вопрос. А для этого надо хоть чуть знать основы предметной области, а не манную кашу во рту катать - это в первую очередь относится к ответчикам. Вопрошавший может и не безнадёжен ещё...

speer
()

RationalRose и Together - тормозные убожества. Второе, причем, съедает еще и всю доступную память. Как правильно писать надо - смотрите Visio.

У нас на линуксе 1.4.1 ява частенько падает с sig11. Почему - хез. Вроде на сусе все стандартное стоит. Так и перезапускается сервак регулярно (вот преимущества крона :))) ), чтобы уменьшить вероятность случайного падения. Помогает... А уж памяти жрет. гиг отведен под виртуальную машинку. И все равно мало.

Тут на ЛОРе была недавно новость на тему XML редактора. Я уже писал там. Только после запуска, а уже проглочено 60 мег. И это эффективность?

anonymous
()

> Только после запуска, а уже проглочено 60 мег. И это эффективность?

Проглочено 60 мег виртуальной машиной, а не приложением. Здесь есть существенная разница. Очень может быть, что из этих 60 мег не используется даже большая часть...

Просто подходы, пригодные для программирования на C++ и Delphi, не всегда годятся для понимания явы. Нельзя так прямо судить о явовской программе только по тому, сколько мег выделено системой. Это всего лишь косвенная оценка и не более.

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

На вопрос почему падает ява. Вроде где-то здесь же на LOR проскальзывало в форумах, что некоторые версии glibc страдают падучестью под явой. Плюс еще важно какая виртульная машина запускается: клиентская или серверная.

Просто у меня при тестировании был случай, когда один и тот же (серверный) код правильно работал на клиентской JVM, но отваливался на серверной JVM примерно с такой же ошибкой.

Потом проблемы могут в конкретной версии линукса/библиотек, что совсем не исключено; даже я бы стал искать причину именно с этого...

anonymous
()

> 2. Какой там язык позволяет изобразить функцию, которая _возвращает_
> ДВА значения? Как такое вообще возможно? Питон, говорите, могёт?
> Дебилы...

Форт позволят возвращать произвольное количество аргументов из слова (т.е. функции). Техника приблизительно такая:

: EXAMPLE ( a b - (a+b) (a-b))
DDUP - >R + R> ;

На входе в слово 2 числа, на выходе их разность и сумма.

syomin
()

> Форт позволят возвращать произвольное количество аргументов из слова (т.е. функции). Техника приблизительно такая:

Точно подмечено :-)

Только опять же мы имеем дело с глобальным объектом, представляющим собой так называемый "стек данных", который, вообще говоря, доступен всегда и из любого "фортовского слова".

Сейчас же речь идет о том, что любой функцией (функционалом) возвращается всего только один объект, будь то число, фортовский стек данных, питоновский кортеж, экземпляр класса, вектор или даже функция из какого-нибудь банахового пространства. Детали не важны, важно, что только один объект.

А ради флейма можно конечно и поприкалываться ;-)

anonymous
()

А forth разве "язык программирования", а не система команд некоего виртуального стекового процессора - сами фортовцы говорят обычно forth system|mashine, а не language?!

PS. Прикалываюсь ради флейма :)))

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

Сами фортовцы обычно называют форт метаязыком. И утверждают, что могут построить любой язык со всеми нужными им свойствами. В список ненужных свойств обычно входят типизация, сборка мусора, етц.

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

Мне-то визио пользовать не доводилось, так что вам, наверное, виднее, но что-то я сомневаюсь, что визио тугезу заменит. я (врать не буду) не знаю, но умеет ли визио в двух направлениях диаграммы и код синхронизировать? это бывает очень даже нужно. потом (ну это вопрос личных привычек) лично мне нравится кодовский подход к uml, посему люблю диаграммы именно в таком исполнении. у визио, насколько мне известно, в этом плане есть только личная кодовская нотация, а не кодовские довески к стандартному uml, что не есть гуд лично для меня опять же. кроме того, в визио, небось, нет интеграции с аппсерверами, а это тоже бывет удобно. насчет, кстати, насчет всей доступной памяти вы не правы. даже не на самой сильной машинке тугеза работает достаточно прилично, хотя и жруча.

Относительно падений - под линуксом с глябсями хренотень какая-то была. не в этом дело, часом? а потом, продакшн лично я на линуксе все же делать не стал бы. относительно шестидесяти мег... ну не знаю... по личному опыту, хорошим перловым скриптом машину в ступор вогнать куда проще, чем явой, даже кривой, хотя... нет пределов совершенству.

anonymous
()

>Сами фортовцы обычно называют форт метаязыком.

Агааа, праавильно: смысловой эквивалент по-русски как раз и будет "НЕДОЯЗЫК". Или "ПРОТОЯЗЫК", что звучит лучше, но уже не совсем по-русски :)))

>утверждают, что могут построить любой язык со всеми нужными им свойствами

Ну да - на стековой машине можно практически всё имплементнуть. Тока оверхед местами будет покруче чем в jvm, несмотря на шитый код...

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

> Агааа, праавильно: смысловой эквивалент по-русски как раз и будет "НЕДОЯЗЫК". Или "ПРОТОЯЗЫК", что звучит лучше, но уже не совсем по-русски :)))

А для метакласса "смысловой эквивалент по-русски" будет "НЕДОКЛАСС" или "ПРОТОКЛАСС"?

И с каких это пор "ПРОТО-" стала "чиста-русской" приставкой? :)

anonymous
()

Ну типа того, как сокращение от НЕДО-деланный-КЛАСС ;)

Насчет "прото" - не тормози - ПРОКРУТИ (в смысле - скролингни)! ->>>

speer>>>"звучит лучше, но уже не совсем по-русски".

speer
()

> Ну типа того, как сокращение от НЕДО-деланный-КЛАСС ;)

А мамаша - это недоделанная дочка?

> Насчет "прото" - не тормози - ПРОКРУТИ (в смысле - скролингни)! ->>>

> speer>>>"звучит лучше, но уже не совсем по-русски".

Тогда какого ... меняешь одну вражескую приставку на другую? Сказано было МЕТА - значит МЕТА.

P.S. Рекомендую еще одну классную приставку - ПАРА. Типа там - паракласс, параязык и т.д.

anonymous
()

Nu-ka, speer, rasskazhi, chto Perl vozvraschaet tut:

($x, $y, $z) = generate_several_random_numbers(3);

($sec, $min, $hour, undef, $month) = localtime;

mihalych ★★★
()

>>>А мамаша - это недоделанная дочка?

Это однокоренные слова? А приставки у них где? :)))

>>>Тогда какого ... меняешь одну вражескую приставку на другую?

Что "вражеского" в этих приставках для образованного человека?

>>>Рекомендую еще одну классную приставку - ПАРА. Типа там - паракласс, параязык и т.д.

Кому рекомендуешь, для чего рекомендуешь и в каких случаях какую предлагаешь употреблять?

Ты вроде уже шутить перестал - тогда освети вопрос о языковой классификации форта... Например, есть или нет у него синтаксис и как к этому относиться?

speer
()

2 mihalych:

Ответ на твой вопрос уже был дан несколько постов назад "анонимусом из банахового пространства", но сдаётся мне, что в твоём случае perl - это диагноз, поэтому специально для тебя привожу цитату из русского перевода "Perl Core Language" by S. Holzner:

"Подпрограмма возвращает вызвавшему ее коду значение последнего вычисленного ей выражения. Возвращаемое значение можно указать явно при помощи ключевого слова return."

А то, что тебе _кажется_ иное, так это только сокращения (они же трюки и фокусы) языковой нотации. Автор Perl'a, как известно, человек не склонный к рациональному мышлению и со своеобразным подходом к лаконичности.

PS. Шёл бы ты в тред про питон и пообщался бы там с коллегами - они там, бедные, никак себе применения и понимания найти не могут.

speer
()

> Ты вроде уже шутить перестал

:)

anonymous
()

паравоз

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

А в яве нельзя передать методу несколько аргументов.

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

to Eugene_Korobko :

>Версий огромное количество, вместе они не живут

Докажи. Мой опыт показывает что ты ошибаешься. Объяснять не буду,
если хочешь разобраться почему ты ошибаешься - ковыряйся сам :0)

>и обратной совместимости нет

Ничуть не хуже обратной совместимости в M$ продуктах.

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

> Кстати, при современной стоимости памяти, этот критерий уже давно далеко не самый важный в оценке эффективности.

Ох, как я люблю такие доводы ;( Какая разница, обслужит железка
10 клиентов или 1000, будет она стоить $1000 или $100K и т.д.

anonymous
()

speer: ja byl o tebe luchshego mnenija.

Znatok jazykov nashelsja. Da ty prosto lamer, esli privodish' mne takoj nepravil'nyj otvet. Uchi Perl, sovsem glupyj s Javoj stal. Konechno zhe dlja tebja e'to otkrovenie:

return (1, 2, 3 .. 9);

return (@array1, @array2);

return wantarray? @array: $array[0];

mihalych ★★★
()

Темнота....

Ё-моё... Я ж тебе процитировал документацию к Perl! Выходит тот кто её писал тоже ламер :) А ты, получается, доку к языку даже в глаза не видел, не говоря уж про учебники.

Ещё раз - то как записано выражение ничего не говорит о том, какие действия происходят когда оно выполняется... На то ведь и язык программирования. Функция же (подпрограмма) ВСЕГДА возвращает одно значение, либо ОДНУ ссылку не структуру данных (которая в этом случае и является значением), либо одну ссылку на какой-нибудь объект. Наука есть такая - теория алгоритмов. И она говорит, что иначе - никак. НЕВОЗМОЖНО. НЕ БЫВАЕТ.

Поэтому выражение

($x, $y, $z) = generate_several_random_numbers(3);

не описывает атомарной операции. Оно исполняется наверно так: Три раза вызывается п/п которая вычислет одно очередное случайное значение и происходит три присваивания их переменным. В каком точно порядке это происходит - зависит от реализации...

speer
()

speer:

1) In Perl a list is the first class citizen. Perevod: v Perl listami mozhno obraschat'sja kak ugodno i vezde, naprimer:

($a, $b) = (1, 2, 3); @a = (1, 2, 3); ($c, $d) = (5, @a); return 1, 2;

2) Java ne imeet analogov, ona operiruet lish' s edinichnym ob~ektom.

3) Iz togo chto Java statichna i nepolnocenna ne sleduet, chto vse jazyki takie zhe nepolnocennye i, naprimer, funkcija ne mozhet vozvraschat' neskol'ko ob~ektov za raz.

4) Esli ty esche ne ponjal, chto sledujuschaja funkcija vyzyvaetsja odin raz v svoej stroke, to e'to tvoi problemy:

($x, $y, $z) = generate_several_random_numbers(3);

($a, $b, $c, $d) = generate_several_random_numbers(4);

sub generate_several_random_numbers ($) {

my $n = shift;

my @several_random_numbers = map { rand() } 1 .. $n;

return @several_random_numbers;

}

Ne nado putat' teoriju algoritmov s uscherbnost'ju Java. Prosto v Java net ponjatija lista, terpi.

mihalych ★★★
()

По пунктам.

1. Это и означает что в перле "лист" - встроенный тип данных (объект) Возврат его из функции - возврат одного значения. Польностью соответствует теории и моим утверждениям.

2. Да, встроенного типа данных "лист" подобных перловому или питоновскому в Яве нет. В яве коллекции - это объекты, которые САМИ реализованы на этом же языке. Но к теме это отношения не имеет - из фукции возможен возрат только одного объекта - будь это "встроенный список" или "ArrayList". Именно об этом писал банахов анонимус. И он и теоретически и практически прав.

3. Полноценность-не полноценность - это не критерий. Это не может быть предметом разбора - хотя можно обсуждать характеристики и свойства разных языков. Но делать это нужно в терминах "Теории алгоритмов".

И придется понять и согласится с тем, что несколько объектов ни один из рассматриваемых языков из функции/метода не возвращает. Если это непонятно или неизвестно - говорить просто не о чем. Увы.

4. Это декларация, создание и присваивание ОДНОГО значения ОДНОЙ переменной:

my @several_random_numbers = map { rand() } 1 .. $n;

А это - возврат той самой _одной_ перемененной:

return @several_random_numbers;

Всё происходит в полном соответствии с теорией и точно так же как и написано в Perl'ом справочнике:

"Подпрограмма возвращает вызвавшему ее коду значение последнего вычисленного ей выражения. Возвращаемое значение можно указать явно при помощи ключевого слова return."

Тебе надо действительно получить образование по какой-нибудь естественно-научной дисциплине. Тогда тебе не будет казаться, что в них практика может нарушать теорию, когда теория говорит, что нечто является невозможным. Те кто думают иначе являются всего-лишь изобретателями вечного двигателя. Или клиентами астрологов, колдунов и прочих гадалок.

speer
()

Pojasnjaju v poslednij raz. V Perl @array - vstroennyj tip dannyh, a list ne otdel'nyj tip dannyh, a imenno neskol'ko dannyh ljubyh tipov vremenno soedinennyh vmeste. V Java net nikakih analogov. Dlja zametki v nekotoryh sluchajah array i list mozhno smeshivat', no naprimer mozhno ukazat' reference na array, no ne na list. Funkcija mozhet ispolnjat'sja kak v listovom kontekste tak i v skaljarnom i sama funkcija mozhet uznat' v kakom kontekste ona ispolnjaetsja, no e'to lish' prelesti jazyka i k delu ne otnosjatsja. V Java net listovogo konteksta ispolnenija funkcii/metoda, a v Perl est'.

Vmesto togo, chtoby priznat', chto vozmozhen vozvrat bolee odnogo znachenija iz funkcii, skazhem 3 takih znachenija

return 1, "Mihalych", [ 2, { speer => "Upornyj zanuda", "Java" => "nemoschnyj jazyk" } ];

ty nachinaesh' privjazyvat' vsjo k terminam Java/C i mutit' vodu. Ty esche Prolog opishi terminami Java. Stydno.

BTW, imeju B.Sc in Computer Science.

mihalych ★★★
()

speer,

Я бы еще понял, если бы ты утверждал, что любая функция принимает лишь одно знаечение и возвращает лишь одно значение:

[1] a = func x

Но ты утверждаешь, что функция это нечто, что принимает несколько значений и возвращает лишь одно:

[2] a = func (x, y, z)

Да, это ограничение многих языков програмирования, как C и Java, и некоторых простых теорий. Но кто мешает тебе подобным образом обобщить понятие функции. Функция, как в Perl, может приминать несколько значений и возвращать несколько значений:

[3] (a, b, c, d) = func (x, y, z)

Твоё настаивание на том, что функция есть не что иное как [2], то есть принимает вектор значений, а возвращать вектор значиений никак не может, вызывает сомнение в уровне твоего интелекта. Выйди из своих одномерных узких понятий.

Для определения функции, [2] слишком узко и несимметрично. Образованный человек либо признает [1], либо обобщит его в [3].

mihalych ★★★
()

Мдяяя...

1. Вектор значений это один объект или несколько?

2. Приведи определение функции, возвращающей несколько значений. С указание автора.

speer
()

Ты читать умеешь?

Функция принимает вектор значений (несколько значений) и возвращает несколько значений. В Перл все функции такии. Любая функция принимает лист значений и может возвратить лист значений. Ява такого не умеет, а Перл умеет, ok? Вместо того, чтобы латать свою неправильную теорию, выучил бы чего нового. Perl много вобще чего умеет, чего Ява не умеет, потому как Perl динамический язык, с OOP по типу Smalltalk, а Ява статический. Изучи Perl и прекрати всё судить по Java, может поумнеешь, грамотей.

Вот например, функция localtime возвращет 9 значений в листовом контексте (и одно в скалярном), а вот функция strftime из пакета POSIX принимает 10 значений. Посему я могу написать так (запусти в shell):

perl -MPOSIX -e ' print strftime("Time now: %Y/%m/%d %T\n", localtime) '

А могу эти 2 функции и так использовать (читай внимательно):

($sec, $min, $hour) = localtime(); # остальные 6 значений не интересуют.

strftime("%T", $sec, $min, $hour, 1, 0, 103); # 1-ое Января не используется в %Т

Прежде чем отвечать, почитай документацию на эти Perl функции, а то опять какую-то чушь ляпнешь:

perldoc -f localtime

man POSIX /strftime

mihalych ★★★
()

Izvinjajus' za ton, mne pokazalos', chto ty prodolzhaesh' nastaivat' na svoej teorii, no vozmozhno, chto ne vsjo tak zapuscheno. :-)

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