Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
лыко в строкубуду педантом, но разве longjmp в C не делает этого? Хм. longjmp возвращает управление в указанную точку, а не передает . Пара setjmp/longjmp в чем-то аналогична бейсиковским gosub/return, но при этом longjmp играет роль именно return-а. И при этом отсутствует возможность вызвать подпрограмму (завершающуюся этим return-ом) с произвольного места, как оно возможно в случае gosub. Пожалуй, рискну утверждать, что бейсиковский код вида Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. практически невозможно адекватно эмулировать с помощью longjmp. "Адекватно" здесь следует понимать так - такой код можно будет упростить, отказавшись от longjmp при сохранении результата. Если искать среди бейсиковских конструкций аналог longjmp, то это RESUME, хотя сходство все равно очень дальнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2005, 12:37 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
softwarer Именно. Точно так же как домохозяйка разбирается в содержимом своего холодильника лучше, нежели программист, который пишет программу оптимального наполнения холодильника. Разница в том, что программами для упаковки холодильника никто не пользуется, а как видно из приведенного тут примера, на фортрановских программах летали в космос, правда не всегда успешно. Фортран никогда не претендовал на универсальность и никто из нормальных людей в качестве универсального его использовать не предлагал. Сидел в своей нише и не высовывался. А вот бейсик пытаются использовать как универсльный язык, компилятор написали, даже пытались на нем что-то считать и рассказывали что он не уступает по скорости С, поэтому все пишем на бейсике. softwarer Суть одна и та же - дать предметнику возможность работать "без посредников". Вопрос только в масштабах - в те времена стоимость машинного времени могла тратиться на математиков, сейчас - может и на домохозяек. В мире вообще все похоже если отойти на достаточное расстояние. Проблема классификации. softwarer Хм. Если говорить о Fortran IV, то он на мой вкус был перегружен архаичными по сегодняшним меркам конструкциями - те же операторы FORMAT чего стоят. Как раз фортран хорош тем, что в нем мало лишнего. Формат часто бывает очень удобен. Правда его легко сэмулировать. А чем он еще перегружен? softwarer Ну и часто вспоминаемые мной интересные особенности, например, кажется ENTRY SET - альтернативная точка входа в функцию. Если же говорить о Fortran 77/90, то серьезно я их не изучал, но на первый взгляд они показались мне "испорченным паскалем" - примерно то же по возможностям, но более громоздкий синтаксис. Это называлось ENTRY POINT, который в подпрограмме выглядел как "ENTRY имя(параметры)". Возможности у всех полных языков одиинаковые, поэтому их обсуждать нет смысла, есть смысл обсуждать только удобство для программиста пишушего программу и пишушего компилятор. softwarer c127плюс труднее сделать основную сишную ошибку - забыть освободить память. Этот аргумент я не приму. Никто не заставляет пользоваться динамической памятью, даже если она есть в языке. Конверторы Фортрана на Си существуют именно потому, что программы очень легко перекладываются "один в один". Разница в том, что в фортране приходилось очень нехило извращаться, эмулируя динамическое распределение там, где оно было нужно. Ну да. Переведите один в один subroutine f(n) real y(n) return end Это динамическое распределение памяти, большее в типичной счетной задаче редко когда нужно. Правда по-моему появилось в фортране 77. Тип complex вспоминать не будем. softwarer c127Но самое главное - для фортрана легче написать хороший оптимизатор. Легче - просто потому, что язык относительно небогат. Совершенно верно, а больше и не нужно. Сила фортрана в том, что он имеет достаточно необходимых средств и не имеет много лишних. softwarer Хотя именно поэтому не совсем уверен в хорошей оптимизации конструкций, эмулирующих отсутствующие возможности. Грубо говоря, оптимизировать Сишный цикл for проще, нежели фортрановскую if-goto, его эмулирующую. Аналогом цикла for есть цикл do, а его оптимизировать проще. Всякие хитрые циклы с хитрыми условиями выхода и приращениями пяти переменных в типичной задаче для фортрана почти никогда не нужны, зато они не запутывают оптимизатор. Все равно всеми возможностями цикла for никто не пользуется. softwarer Оптимизировать сишный switch проще, нежели фортрановский вычисляемый goto (поскольку последний куда более произволен, например может использоваться для организации нестабильного цикла). switch удобный оператор, в фортране появился. Не знаю легче ли его. Но опять же в типичной счетной задаче switch возникает довольно редко и еще реже в циклах. А вне цикла можно вообще ничего не оптимизировать. softwarer Безусловно, существует все. Интел Си я просто упомянул, чтобы закрыть вопрос оптимизации - мягко говоря, нелегко найти того, кто лучше оптимизит сложные вычисления, а следовательно нет причин отказываться от более мощного и - сегодня - более привычного языка. Так я ж не призываю Вас отказываться. У каждого языка своя ниша, задачи с плавающей точкой на фортране считать легче, всякие списки, графы и системные задачи легче писать на С. softwarer Я пользовался ваткомовским компилятором с dos4g (я имею в виду полный, а не обрезанный gos4gw). И хотя понятно, почему он использовался для игр - таки 8Mb прямой оперативки есть 8Mb - но генерируемый им код, честно говоря, не очень впечатлял. НДП - не знаю, не встречал, не могу судить. Я сужу по тем задачам которые решал сам. Хотя на самом деле скорости M$ всегда хватало, после появления 32-х разрядного компилятора разумеется, либо же никакой код не спарвлялся. M$ потому и победил что та разница в скорости, которую давали конкуренты некритична в большинстве случаев и мало кого беспокоит, как оказалось. softwarer Веселый Вы человек. Мой оппонент выдвигает.. плохой, назовем так, аргумент. Формальные параметры ОЧЕНЬ ХОРОШИЙ АРГУМЕНТ. ИМХО. Ваш аргумент с циклами по сравнению с ним совсем не в тему. Опять же ИМХО. softwarer Учитывая, что в первых бейсиках по сути не было подпрограмм, в них действительно трудно найти формальные параметры :) Подпрограммы были, можно было написать что-то вроде 200 .... 300 return go sub 200 .... go sub 200 То что между 200 и 300 и есть полноценная подпрограмма, которая вернется в точку вызова. Это основное главное свойство подпрограмм. Следующее свойство - формальные параметры, но оно не необходимое, хотя важное. Понимание смысла формальнх параметров это одно из необходимых условий перехода от домохозяйки к программисту. Поэтому я считаю что аргумент с формальными параметрами очень удачен. softwarer c127Еще в фортране были блоки common и equivalence аналогов которым в бейсике вообще не было, а штука удобная. Насчет "удобства" - скажем так..... Это не то что было удобно, просто альтернативы вообще не было. Альтернатива всегда есть, поэтому речь идет именно об удобстве, экономит много кода. softwarer Я не очень понимаю Вашей точки зрения "раз наследник - значит, должен быть шире". При чем тут шире-не шире, я такого не говорил. Я не думаю что бейсик какой-то особый наследник фортрана. Они появились примерно в одно время, я правда не видел тот бейсик. Даже если бейсик и создавался с оглядкой на фортран (что возможно), то в результате сходство между ними к моменту реанимации бейсика в начале 80-х оказалось не больше чем между паскалем и С. Их некоторое сходство скорее всего объясняется тем что они появились в середине 60-х (фортран чуть раньше, а бейсик скорее на бумаге), тогда экономия на компиляторе и на размере необходимой для компилирования памяти была необходимостью. Кроме того такого изобилия языков как сейчас не было и по-видимому создатель бейсика знал о фортране и ничего другого не мог себе представить. Изменил как мог. Хотя цели и предполагаемые пользователи этих языков совершенно разные. softwarer Но если угодно продолжить, то: - В бейсике, как и в фортране, присутствует уникальный на тот момент оператор DATA. Если не ошибаюсь, позже его повторили опять же в Perl, и других мест я сходу не назову. - В бейсике, как и в фортране, присутствовал только арифметический цикл с произвольным шагом, включая вещественный (цикл WHILE появился в бейсиках намного позже). WHILE не сильно нужен, а компилятор упрощается. Экономили, в этом причина. softwarer - В бейсике, как и в фортране, в отличие от любых других языков выше ассемблера, существовала возможность передать управление в середину подпрограммы. Возможно, хотя как это выглядит в бейсике я не помню. Говорят в С это тоже как-то возможно, но как не знаю, а думать лень. softwarer - В бейсике, как и в фортране, отсутствовало понятие операторного блока, что вынуждало использовать GOTO для его эмуляции. "вынуждало" это сильно сказано, можно обойтись без него. В 77 вообще легко можно обойтись без GOTO. Но в принципе согласен. Объясняется тем же. В алголе который появился примерно в то же время тоже интенсивно использовался GOTO, хотя там были блоки. GOTO есть и в С с паскалем. Операторные блоки сильно усложняют компилятор. Для алгола долго не могли построить компилятор, в частности из-за операторных блоков. softwarer - В бейсике, как и в фортране, существовал вычисляемый GOTO (насчет его наличия в других языках того же периода - не уверен, не помню). Может быть. В бейсике я его не помню. softwarer - Cхема работы бейсика с файлами была почти стопроцентно слизана с фортрановской. Этого я не понимаю. Схемы работы с файлами по-моему вообще у всех одинаковые. softwarer - В бейсике, как и в фортране, существовал оператор STOP Смысл этого оператора всегда был для меня загадкой. Его можно исключить из языка и никто не заметит, к тому же, если не ошибаюсь, у стопа в этих языках разный смысл. softwarer - В бейсике, как и в фортране, длина метки была ограничена пятью символами :)) (в стандартных реализациях для мини-ЭВМ). Шутку понял. В бейсике это не метка, это номер (адрес, идентификатор) строки в программе. Номера идут по-порядку. А вот в фортране это действительно метка. В фортране метки в разных подпрограммах могли дублироваться, а в бейсике номера строк - нет. softwarer Названное, за исключением последнего пункта - с поправкой на мои неполные знания - отличает именно эту пару от всех или почти всех распространенных языков той поры. Если Вы посмотрите на языки действительно той поры (60-е годы), то наверняка увидите что они очень похожи. Хотя я не смотрел, может и ошибаюсь. Лисп не считается, он функциональный. Gluk (Kazan) В Фортране нет рекурсии. Вот вам фундаментальное отличие ;) Это только в самых ранних версиях, потом все испортили, ввели рекурсию. А как хорошо начиналось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2005, 22:31 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
Gluk (Kazan) tchingizцикл и ветвление значат в точности тоже у всех (за исключением арифметического фортрана) В Фортране нет рекурсии. Вот вам фундаментальное отличие ;) это не фундаментальное отличие. рекурсия однозначно соответствует итерации и наоборот. ))))))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2005, 08:40 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
softwarer tchingizпеременные не надо было обьявлять во всех интерпретаторах. И с каких пор фортран стал интерпретатором? Впрочем, и в этом утверждении Вы, мягко говоря, хватили. Например, мне сразу вспоминается вполне себе интерпретатор R-LISP-а. .... Поэтому я старался говорить о распространенных ЯВУ. Нераспространенный, если нужно, я сам за пару дней напишу :) .... Хотя это, пожалуй, таки больше относится к делу, нежели названные Вами номера строк (которые были вызваны переходом от перфокарт к строковому редактору, и вряд ли чем-то другим. И исчезли вместе с исчезновением строкововых редакторов). Кстати, а у фортрана разве были глобальные переменные? У него, сколь помнится, были common-области. Бейсик-программа же в целом похожа на одну-единственную подпрограмму (SUBROUTINE) фортран-программы; операторы GOSUB/RETURN бейсика больше похожи не на подпрограмму в ее нормальном смысле, а на фортрановский "назначаемый GOTO". фортран - компилятор, в любом интерпретаторе не надо обьявлять переменные. не думаю, что любой интерпретатор, на этом основании, является наследником фортрана. кстати, perl удовлетворяет Вашей просьбе назвать язык, где бы имя переменной задавало тип. Там както по имени скаляры от массивов отличаются. Глобальные переменные жили в коммон областях. Они просто не назывались глобальными, но суть таже, отовсюду к ним был доступ. Думаю, что бейсик был позже фортрана, а Вы пишите, что программа бейсика, в целом похожа на одну фортран программу. Не принято както отказываться от хороших качеств. Наследник бы наследовал хорошие качества. сомнительно Ваше утверждение softwarer>Фортран - предок бейсика Скорее разработчики бейсика делали, что могли. вот язык ratfor (rational fortran) разработанный как препроцессор для фортрана под никсами уже обладал всеми атрибутами структурного программирования (циклы while, until, отсутствие меток и операторные скобки), и все равно мог бы считаться наследником фортрана. Формальная грамматика ратфора представляла из себя 10-12 строчек. Для своей версии ратфора, я еще добавил операции ++, --, +=, -= и тд. И думаю это не изменило свойства фортрана быть предком ратфора от меня. )))))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2005, 09:01 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
tchingizрекурсия однозначно соответствует итерации и наоборот. ))))))))))) Ага, некоторые алгоритмы переводить в итеративную форму одно удовольствие :o) Ладно, сможете здесь набросать в итеративной форме альфа-бета алгоритм ? Нууу или Ханойские башенки хотя-бы ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2005, 09:22 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
tchingiz это не фундаментальное отличие. рекурсия однозначно соответствует итерации и наоборот. ))))))))))) Добавлю. Рекурсия эмулируется с использованием LIFO-очереди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2005, 10:26 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
c127В мире вообще все похоже если отойти на достаточное расстояние. Проблема классификации. Согласен. Предлагаю закрыть эту часть беседы констатацией того, что мы классифицируем некоторый факт по-разному. c127Формат часто бывает очень удобен. Правда его легко сэмулировать. А чем он еще перегружен? Возможно, тут вопрос подхода. С моей точки зрения то, что может быть вынесено из языка, должно быть вынесено из языка - это собственно и есть "разгрузка". Сравнивая два фрагмента кода: Код: plaintext 1. 2. и Код: plaintext 1. я бы назвал первый значительно менее удачным. Его несколько сомнительное достоинство - возможность использовать один и тот же формат в нескольких операторах. То есть - не сделать подпрограммы там, где она напрашивается :) Другие неудачи - вычисляемый GOTO и арифметический IF как довольно неуклюжие замены case/switch. COMMON области как неуклюжие замены глобальных переменных (я бы сказал даже, не столько глобальных переменных, сколько конструкции record/struct. Структуру нетрудно передать параметром подпрограммы, в отличие от пятидесяти ее полей поодиночке - поэтому ее и передавали через common область). Напрасное, с моей точки зрения, выделение трех (если не изменяет память) принципиально разных типов подпрограмм. Назначаемый GOTO - специфическая конструкция, мягко говоря не для "языка для непрограммистов". Замечательный оператор IMPLICIT :) Наверное, если откопаю книгу, еще что-нибудь вспомню. eНу да. Переведите один в один subroutine f(n) real y(n) return end[/quote] Признаться, не понимаю этого фрагмента. Судя по Вашим словам, этот массив должен каким-то образом вернуться из подпрограммы, но каким - видимо, я либо тупой, либо слишком хорошо забыл Fortran. Впрочем, согласитесь, "создание массива размерности N" переводится на Си совершенно элементарно. Здесь оказывается очень удобной особенность "массивы есть указатели" - что в случае Код: plaintext что в случае Код: plaintext работа с массивом a идет абсолютно одинаково. Собственно, если бы я писал конвертор, я бы, наверное, просто всегда пользовался вторым вариантом. Совершенно верно, а больше и не нужно. Сила фортрана в том, что он имеет достаточно необходимых средств и не имеет много лишних. Я не считаю, что отсутствие развитых циклов, например - лишнее. Арифметический цикл - хорошо, но стандартнейшая задача "арифметический цикл с условием досрочного выхода" - решается в PL/I, решается в паскале/си, но не в фортране. Вернее, если не ошибаюсь, в фортране она решается на уровне IF..GOTO - можно, в принципе но не лучший вариант. Если говорить о вычислениях - давайте вспомним о такой стандартнейшем математическом приеме, как вычисление с переменным шагом (не помню, как это называется "по научному", но абсолютно стандартная вещь для задач типа "интегрирование с заданной точностью"). В Си это - тот же цикл for. В Паскале это - например, цикл while. В Фортране это - IF/GOTO. Код: plaintext Код: plaintext потребуется очень нетривиально дорабатывать, чтобы он смог оптимизировать аналогичную конструкцию Фортрана. К чему я это - к тому, что у Фортрана как языка нет никаких особых преимуществ по оптимизации. В самом лучшем случае авторы конкретного компилятора просто выполнили свою работу лучше авторов соседнего компилятора Си - но, признаться, сомневаюсь, что так случилось. Все равно всеми возможностями цикла for никто не пользуется. "Отучаемся говорить за всех" (c) Знаете, пока я не поработал с исключениями, вполне нормально делал аналогичные механизмы имеющимися средствами. Пока я не поработал с LISPом - не ощущал отсутствия некоторых его конструкций в других языках. Пока не ушел с Си на "не Си" - считал операцию ? удобной, но не более того. И так далее. К хорошему привыкаешь, и учишься его хорошо использовать. Так я ж не призываю Вас отказываться. У каждого языка своя ниша, задачи с плавающей точкой на фортране считать легче, всякие списки, графы и системные задачи легче писать на С. Хм. Так если помните, эта часть беседы началась с фразы одного из присутствующих о полной прикладной победе Си. Я ответил на это, что лет двадцать назад это же могли бы сказать о Фортране - и были бы столь же корректны. Как модно нынче говорить, there is no silver bullet. Формальные параметры ОЧЕНЬ ХОРОШИЙ АРГУМЕНТ. ИМХО. Ваш аргумент с циклами по сравнению с ним совсем не в тему. Опять же ИМХО. Конечно, можно сойтись на имхах. Я бы сказал так: цикл - более "коренная", необходимая структура языка, нежели подпрограмма, следовательно и сходства-различия в них более важны с точки зрения похожести. Ну а фантазировать "какими были бы подпрограммы в первых бейсиках, если они там были..." Но не было. По сути, от них отказались так же, как и от некоторых других фортрановских конструкций. softwarer Учитывая, что в первых бейсиках по сути не было подпрограмм, в них действительно трудно найти формальные параметры :) Подпрограммы были, можно было написать что-то вроде 200 .... 300 return go sub 200 .... go sub 200 То что между 200 и 300 и есть полноценная подпрограмма, которая вернется в точку вызова. Полноценная подпрограмма? Думаю, мы не сойдемся в определениях. Близкий аналог этой конструкции я использовал в bat-файлах (помните такой язык для DOS?) примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Бейсиковские GOSUB/RETURN - это именно что аналог setjmp/longjmp в Си или назначаемого GOTO в Фортране, но подпрограммами это - только называется. Это основное главное свойство подпрограмм. Следующее свойство - формальные параметры, но оно не необходимое, хотя важное. Понимание Не согласен. Основное свойство подпрограммы - замкнутость; это самостоятельная (в определенных пределах, конечно) программная единица. Из чего неизбежно следует понятие "контекста выполнения подпрограммы", "области видимости" (раньше в англоязычной литературе это называлось display). "Подпрограмма, чей контекст заведомо совпадает с родительским" - формальный уродец, такой же, как показанный выше пример с GOTO. смысла формальнх параметров это одно из необходимых условий перехода от домохозяйки к программисту. Хм. Я не уверен, что понимаю Вас. В первую очередь: имеете ли Вы в виду именно параметры как таковые (то есть логическое противопоставление формальный-фактический), то ли Вы имеете в виду под формальными параметрами фортрановскую "передачу по ссылке". Я бы сказал, параметры есть естественный атрибут подпрограмм; невозможно понять смысл подпрограмм, не поняв смысла их параметров. Проведение именно здесь какой-то границы между "гуру" и "домохозяйками" - имхо, совершенно произвольный жест. Хотя все - понятие относительное. Мой научный руководитель говорил, что не понимает указателей, что не мешало мне научиться у него некоторым интересным способам программистского мышления. Поэтому я считаю что аргумент с формальными параметрами очень удачен. С какой точки зрения? Как различие между языками - безусловно, важное различие. Но это ровно никак не относится к обоснованию или опровержению моего утверждения (о том, что бейсик разрабатывался как идеологический наследник фортрана). Позволю себе использовать Ваш аргумент: если из Фортрана "для простоты" убрали циклы, кроме тривиального, то в Бейсике развили эту идею и "для простоты" убрали "параметры подпрограмм" (с Вашей точки зрения) или "подпрограммы" (с моей). Подчеркну на всякий случай: это не есть утверждение, которое я считаю верным. Это опровержение Вашей схемы рассуждения методом "от противного". c127 softwarer [quot c127]Еще в фортране были блоки common и equivalence аналогов которым в бейсике вообще не было, а штука удобная. Насчет "удобства" - скажем так..... Это не то что было удобно, просто альтернативы вообще не было. Альтернатива всегда есть, поэтому речь идет именно об удобстве, экономит много кода. Давайте так - "не было разумной альтернативы". Разумной альтернативой явилась бы структура/запись, которую можно было бы заполнить и передать как один параметр. Ну а то, с какой осторожностью надо использовать common области, полагаю, не мне Вам рассказывать. c127При чем тут шире-не шире, я такого не говорил. Я не думаю что бейсик какой-то особый наследник фортрана. Хм. Я думаю, что Бейсик - наследник Фортрана. Чингиз, а следом и Вы, решили поспорить с этим, выдвигая основным аргументом отсутствие одной из конструкций, существующих в Фортране - то есть то, что Бейсик не реализует одной из важных особенностей "предка". Поэтому я и сказал, что наследник вовсе не обязан быть "шире" предка; тезис "уже - значит, не наследник" не представляется мне бесспорно верным. Они появились примерно в одно время, я правда не видел тот бейсик. Между ними - семь лет разницы. По утверждению создателя (можно найти точную цитату), Бейсик создавался как учебный язык для студентов, как ступенька для перехода на более мощные Фортран и Алгол (что вполне обосновывает его относительную убогость). Ну и если сравнить из Фортрана и Алгола, на кого больше похож Бейсик - ответ, имхо, совершенно однозначен. В противопоставление созданному позже учебному Паскалю, похожему именно на Алгол. Даже если бейсик и создавался с оглядкой на фортран (что возможно), то в результате сходство между ними к моменту реанимации бейсика в начале 80-х оказалось не больше чем между паскалем и С. Давайте для экономии времени я сформулирую утверждение: я уверен, что если мы с Вами согласуем список формальных признаков (наличие тех или иных конструкций и концепций), то из "прочих основных языков того времени" фортран окажется самым близким или по крайней мере одним из самых близких. Кроме того такого изобилия языков как сейчас не было и по-видимому создатель бейсика знал о фортране и ничего другого не мог себе представить. Не соглашусь. К тому моменту существовало порядка десятка "основных" языков, тех, названия которых сейчас можно вспомнить не напрягаясь: FORTRAN, ALGOL, APL, SIMULA, PL/I, COBOL, LISP. И на самом деле тогда был некий взрыв языкотворчества; раскрывалась новая область, из которой до нас дошли наиболее удачные либо наиболее удачливые представители. Изменил как мог. Хотя цели и предполагаемые пользователи этих языков совершенно разные. Цель - учить тех, кто потом будет программировать на Фортране. "И программировать для тех, кому Фортран сложен" - это уже мое дополнение; это не было изначальной целью, но именно для этого Бейсик как Вы выразились, "реанимировали". WHILE не сильно нужен, а компилятор упрощается. Экономили, в этом причина. WHILE сильно нужен, по крайней мере с точки зрения человека, у которого была возможность выбора. Что касается экономии - я приму этот аргумент для Fortran I-II, но не очень поверю в него для Fortran IV. Если помните, к тому моменту IBM разработала совершенно монструозный по отзывам современников, четырехпроходный, кажется, компилятор, выполнявшийся отдельными стадиями - говоря современным языком, для полной компиляции требовалось запустить несколько exe-шников по очереди. Так что в аргумент "экономили" верится, признаться, с трудом. softwarer - В бейсике, как и в фортране, в отличие от любых других языков выше ассемблера, существовала возможность передать управление в середину подпрограммы. Возможно, хотя как это выглядит в бейсике я не помню. Да так и выглядит. GOSUB. Только не на ту строчку, которую мы считаем "началом подпрограммы", а на ту, которую мы считаем "серединой". Поскольку подпрограммы нет (по крайней мере как присутствующей в языке синтаксической конструкции) все просто. Запросто возможен код типа следующего: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Ну и - этот код, наверное, как-то отработает, но назвать его "программой с подпрограммой" я лично не возьмусь. Говорят в С это тоже как-то возможно, но как не знаю, а думать лень. Полагаю, если говорить о нормальных конструкциях языка, о подразумеваемом их использовании, говорят ошибочно. Разумеется, это можно сделать с помощью адресной арифметики - сотворить указатель на (&func() + 0x20), например, и перейти по нему. "вынуждало" это сильно сказано, можно обойтись без него. Технически - можно. Например, оформлять на месте операторного блока вызов подпрограммы. Но в данном случае "все и всегда" делали именно GOTO - собственно, во многих версиях Бейсика даже не было возможности написать в IF что-то отличное от GOTO. Операторные блоки сильно усложняют компилятор. Для алгола долго не могли построить компилятор, в частности из-за операторных блоков. Хм. Такое впечатление, что Вы начинаете как-то "защищать" решения Фортрана. Я на них не нападаю. Нет - и нет, это факт, с которым придется жить если хочешь программировать на Фортране. Просто один из формальных критериев схожести, раз уж они потребовались. softwarer - В бейсике, как и в фортране, существовал вычисляемый GOTO (насчет его наличия в других языках того же периода - не уверен, не помню). Может быть. В бейсике я его не помню. Скажем так, в том бейсике, которым пользовался я, он был. Если принципиально, можно залезть в стандарт, но не думаю, что это важно. softwarer - Cхема работы бейсика с файлами была почти стопроцентно слизана с фортрановской. Этого я не понимаю. Схемы работы с файлами по-моему вообще у всех одинаковые. Да не сказал бы. Признаться, не помню как в ALGOL и PL/I - может, это было обычно в те времена - но по сравнению с более поздними временами эта схема раритетна. В классическом паскале она достаточно похожа, но все-таки введено важное понятие "файловой переменной"; в результате, например, файл можно передать параметром в подпрограмму. В Си и в более поздних версиях Паскаля сделано правильнее: работа с файлами убрана на уровень библиотек, функций/классов с уровня операторов языка. STOP Смысл этого оператора всегда был для меня загадкой. Его можно исключить из языка и никто не заметит, к тому же, если не ошибаюсь, у стопа в этих языках разный смысл. Признаться, не помню в деталях его смысл в том и в другом случае. Но согласитесь, если это "бессмысленное украшение" - это как раз свидетельствует о прямом заимствовании, копировании, там, где наличие похожих осмысленных конструкций можно отнести на счет объективной необходимости и "есть во всех языках". Шутку понял. В бейсике это не метка, это номер (адрес, идентификатор) строки в программе. Номера идут по-порядку. А вот в фортране это Безусловно, это шутка. Но в данном случае "для простоты" одним механизмом достигли двух целей - делали метки и одновременно делали "опорные точки" для строкового редактора. С точки зрения логики языка это именно метки; в том, что программа строится по возрастанию номеров, а не по порядку ввода, с точки зрения языка нет ничего принципиального. действительно метка. В фортране метки в разных подпрограммах могли дублироваться, а в бейсике номера строк - нет. Дык в бейсике и не было "разных подпрограмм" в фортрановском смысле - там был единый контекст выполнения, общие переменные, ну и общая область видимости меток. Если делать конвертор бейсика в фортран - надо будет делать всю бейсик-программу единственной SUBROUTINE, а GOSUB/RETURN реализовывать как раз тем путем, который я описал выше, в примере бат-файлов - через назначаемый GOTO. Полагаю, Вы согласитесь с тем, что любая другая реализация конвертора окажется много сложнее, а результат ее работы - дальше от исходного варианта. softwarer Названное, за исключением последнего пункта - с поправкой на мои неполные знания - отличает именно эту пару от всех или почти всех распространенных языков той поры. c127Если Вы посмотрите на языки действительно той поры (60-е годы), то наверняка увидите что они очень похожи. Я назвал те отличия, которые выделяют из. Тот же Алгол - наличие операторных блоков, предобъявление переменных, сильная типизация, вообще явный предок Паскаля. PL/I - своеобразный язык, но тоже скорее алгольного типа; в нем, кстати, присутствовала конструкция "арифметического цикла с условием" - не помню как записывалась, но по смыслу именно что Код: plaintext someCondition, естественно, задавался программистом. APL - особая вещь, пожалуй что равно далекая от всего перечисленного. Вот пример текста на нем (обратите внимание на операторы get и set): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. SIMULA - никогда не видел, не знаю, на что она похожа. LISP, опять-таки - совершенно особая вещь. Функциональность тут особо не при чем; R-LISP - вполне себе алгоритмический-процедурный, но его все равно ни с чем не спутаешь :) Хотя я не смотрел, может и ошибаюсь. Лисп не считается, он функциональный. Есть утверждение - с которым я согласен - что после того, как поработаешь на нескольких языках, почти любой новый становится просто комбинацией черт предыдущих. Но тем не менее, столь же легко и назвать различия, пусть они более тонкие, нежели "похожести". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2005, 14:33 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
tchingiz в любом интерпретаторе не надо обьявлять переменные. Глупость. Наиболее популярный нынче пример обратного - Java. tchingizкстати, perl удовлетворяет Вашей просьбе назвать язык, где бы имя переменной задавало тип. То есть собственного примера Вы привести не можете, берете из обсуждения. Кстати, напомню что в Перле вообще весьма специфичное понимание переменных; так, $a в нем с равной вероятностью может оказаться строкой, числом или объектом, а $a и @a, хоть и вроде разные вещи - но внутри оказываются двумя ипостасями одной переменной. tchingizГлобальные переменные жили в коммон областях. Они просто не назывались глобальными, но суть таже, отовсюду к ним был доступ. Не совсем так. Доступ к ним был не "отовсюду", а "отовсюду, откуда захотят его получить". В отличие от глобальных переменных, которые благодаря факту своего создания присутствуют в общей области видимости и никуда оттуда не денутся. Думаю, что бейсик был позже фортрана, Это так. а Вы пишите, что программа бейсика, в целом похожа на одну фортран программу. И это так. Не принято както отказываться от хороших качеств. Наследник бы наследовал хорошие качества. Хм. "Хорошие качества" - весьма обширная тема. В данном случае наследовали такое хорошее качество, как "простота", если не "тривиальность". В качестве сходного примера - Паскаль, как известно, строился на основе Алгола. Однако, отказался от алгольной возможности объявления переменных во вложенных операторных блоках; в Паскале локальные переменные можно объявлять только в заголовке подпрограммы. Если брать примеры посвежее - C++ отказался от элегантности и простоты C в пользу мощи; отказался от слабой типизации в пользу типизации сильной. java и C# дружно потеряли основное хорошее качество своего явного предшественника - множественное наследование, а заодно и от макросов. сомнительно Ваше утверждение softwarer>Фортран - предок бейсика Да, в общем, сомневайтесь если хотите. Правда, в первой же процитированной фразе Вы уверенно изрекли.. куда более сомнительное утверждение. вот язык ratfor (rational fortran) разработанный как препроцессор для фортрана под никсами уже обладал всеми атрибутами структурного программирования (циклы while, until, отсутствие меток и операторные скобки), Причем Фортран сам по себе также обладает всеми необходимыми для структурного программирования конструкциями, а названное скорее провоцирует заподозрить Вас в приверженности популярной благоглупости "структурное программирование - это отказ от GOTO". и все равно мог бы считаться наследником фортрана. Формальная грамматика ратфора представляла из себя 10-12 строчек. Это, простите, ересь. "Препроцессор" не может считаться наследником компилятора - в противном случае утилиту grep можно обозвать наследником "Войны и мира", по которой она делает поиск. Если же говорить о языке вида "препроцессор плюс собственно фортран", то я не вижу ничего, что помешает ему быть "наследником фортрана", но было бы интересно посмотреть на его грамматику из 10-12 правил. tchingizДля своей версии ратфора, я еще добавил операции ++, --, +=, -= и тд. И думаю это не изменило свойства фортрана быть предком ратфора от меня. )))))))) Осталось понять, к чему Вы это рассказали. Боюсь, единственная связь, которую я могу придумать - Вы пытаетесь опровергнуть мое утверждение методом "раз вот это - наследник, то не похожее на это - не наследник". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2005, 16:21 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
softwarer Возможно, тут вопрос подхода. С моей точки зрения то, что может быть вынесено из языка, должно быть вынесено из языка - это собственно и есть "разгрузка". Тогда давайте уберем из С цикл while, сишного for достаточно. Кстати я бы так и поступил на месте авторов С. softwarer Другие неудачи - вычисляемый GOTO и арифметический IF как довольно неуклюжие замены case/switch. Объяснял уже, в тех задачах case/switch не используется почти никогда. Когда создавали фортран о нем никто не подозревал. Потом его ввели в язык. softwarer COMMON области как неуклюжие замены глобальных переменных (я бы сказал даже, не столько глобальных переменных, сколько конструкции record/struct. Структуру нетрудно передать параметром подпрограммы, в отличие от пятидесяти ее полей поодиночке - поэтому ее и передавали через common область). Однако Вы ниже совершенно справедливо утверждаете что COMMON это все-же не совсем глобальные переменные. softwarer Напрасное, с моей точки зрения, выделение трех (если не изменяет память) принципиально разных типов подпрограмм. В паскале тоже три: program, процедура и функция. softwarer Назначаемый GOTO - специфическая конструкция, мягко говоря не для "языка для непрограммистов". Назначаемых это вычисляемый? Неудобно, но почти никогда не используется, нетипичен для тех задач. Уже обсуждался. softwarer Замечательный оператор IMPLICIT :) Это тоже уже обсуждалось, экономит объявления переменных. softwarer Ну да. Переведите один в один subroutine f(n) real y(n) return end[/quote] Признаться, не понимаю этого фрагмента. Судя по Вашим словам, этот массив должен каким-то образом вернуться из подпрограммы, но каким - видимо, я либо тупой, либо слишком хорошо забыл Fortran. Нет, это пример того, что ошибку с освобождением памяти сделать труднее. softwarer Впрочем, согласитесь, "создание массива размерности N" переводится на Си совершенно элементарно. С заведением массива проблем нет, проблема есть с освобождением. softwarer Я не считаю, что отсутствие развитых циклов, например - лишнее. Арифметический цикл - хорошо, но стандартнейшая задача "арифметический цикл с условием досрочного выхода" - решается в PL/I, решается в паскале/си, но не в фортране. Вернее, если не ошибаюсь, в фортране она решается на уровне IF..GOTO - можно, в принципе но не лучший вариант. Еще раз: развитый цикл запутывает опртимизатор. К тому же ими почти никто не пользуется. Я не против развитых циклов, но в фортране они не нужны. GOTO неудобно, согласен, для выхода из цикла в поздних версиях фортрана был введен оператор типа break. softwarer Если говорить о вычислениях - давайте вспомним о такой стандартнейшем математическом приеме, как вычисление с переменным шагом (не помню, как это называется "по научному", но абсолютно стандартная вещь для задач типа "интегрирование с заданной точностью"). В Си это - тот же цикл for. В Паскале это - например, цикл while. В Фортране это - IF/GOTO. Или тот же do c выходом по условию. softwarer Код: plaintext Не мешает, только этого почему-то никто не делат. Пишут для общего случая. softwarer К чему я это - к тому, что у Фортрана как языка нет никаких особых преимуществ по оптимизации. Программы флоат вычислений, написанные на NDP фортране работал в 2 раза быстрее чем такие же на NDP С. NDP очень хороший компилятор. А так больше никаких преимуществ нет. Комплексные числа по-прежнему не вспоминаем. softwarer Все равно всеми возможностями цикла for никто не пользуется. "Отучаемся говорить за всех" (c) Неужели вы используете ВСЕ возможности оператора for? Как часто? softwarer Хм. Так если помните, эта часть беседы началась с фразы одного из присутствующих о полной прикладной победе Си. Я ответил на это, что лет двадцать назад это же могли бы сказать о Фортране - и были бы столь же корректны. Некорректное сравнение. Фортран никогда не продвигался как универсальный язык. softwarer Формальные параметры ОЧЕНЬ ХОРОШИЙ АРГУМЕНТ. ИМХО. Ваш аргумент с циклами по сравнению с ним совсем не в тему. Опять же ИМХО. Конечно, можно сойтись на имхах. Я бы сказал так: цикл - более "коренная", необходимая структура языка, нежели подпрограмма, следовательно и сходства-различия в них более важны с точки зрения похожести. Уже говорил, тогда паскаль ближе к бейсику чем фортран. Цикл простой и даже называется одинаково. softwarer Хм. Я не уверен, что понимаю Вас. В первую очередь: имеете ли Вы в виду именно параметры как таковые (то есть логическое противопоставление формальный-фактический), то ли Вы имеете в виду под формальными параметрами фортрановскую "передачу по ссылке". Первое. Второе - техника, первое - основы. softwarer Я бы сказал, параметры есть естественный атрибут подпрограмм; невозможно понять смысл подпрограмм, не поняв смысла их параметров. Именно об этом и речь, бейсиковцы их и не понимали. Подпрограммы (ИМХО) были, а параметров - не было. Программисты не привыкали к правильно думать. softwarer Позволю себе использовать Ваш аргумент: если из Фортрана "для простоты" убрали циклы, кроме тривиального, то в Бейсике развили эту идею и "для простоты" убрали "параметры подпрограмм" (с Вашей точки зрения) или "подпрограммы" (с моей). Цикл есть цикл, даже если он записывается как goto, от этого ничего не меняется. А если нет формальных параметров это все, их ничто не заменяет. softwarer Подчеркну на всякий случай: это не есть утверждение, которое я считаю верным. Это опровержение Вашей схемы рассуждения методом "от противного". Сравнение некорректное, нет опровержения. softwarer c127Еще в фортране были блоки common и equivalence аналогов которым в бейсике вообще не было, а штука удобная. Насчет "удобства" - скажем так..... Это не то что было удобно, просто альтернативы вообще не было. Ну да, сами же говорили о формальных параметрах. softwarer c127При чем тут шире-не шире, я такого не говорил. Я не думаю что бейсик какой-то особый наследник фортрана. Хм. Я думаю, что Бейсик - наследник Фортрана. Чингиз, а следом и Вы, решили поспорить с этим, выдвигая основным аргументом отсутствие одной из конструкций, существующих в Фортране - то есть то, что Бейсик не реализует одной из важных особенностей "предка". Поэтому я и сказал, что наследник вовсе не обязан быть "шире" предка; тезис "уже - значит, не наследник" не представляется мне бесспорно верным. Ключевое слово - важной. Опять вопрос классификации. softwarer Они появились примерно в одно время, я правда не видел тот бейсик. Между ними - семь лет разницы. По утверждению создателя (можно найти точную цитату), Бейсик создавался как учебный язык для студентов, как ступенька для перехода на более мощные Фортран и Алгол (что вполне обосновывает его относительную убогость). Ну и если сравнить из Фортрана и Алгола, на кого больше похож Бейсик - ответ, имхо, совершенно однозначен. В противопоставление созданному позже учебному Паскалю, похожему именно на Алгол. Похож - не значит наследник. Да и похож не сильно. Даже если бейсик и создавался с оглядкой на фортран (что возможно), то в результате сходство между ними к моменту реанимации бейсика в начале 80-х оказалось не больше чем между паскалем и С. Давайте для экономии времени я сформулирую утверждение: я уверен, что если мы с Вами согласуем список формальных признаков (наличие тех или иных конструкций и концепций), то из "прочих основных языков того времени" фортран окажется самым близким или по крайней мере одним из самых близких. softwarer Не соглашусь. К тому моменту существовало порядка десятка "основных" языков, тех, названия которых сейчас можно вспомнить не напрягаясь: FORTRAN, ALGOL, APL, SIMULA, PL/I, COBOL, LISP. И на самом деле тогда был некий взрыв языкотворчества; раскрывалась новая область, из которой до нас дошли наиболее удачные либо наиболее удачливые представители. Главное что фортран тогда был далеко впереди по использованию. Наука, гонка вооружений, ракеты, везде нужны были рассчеты. Все остальные плелис в хвосте. Появились другие задачи - появились другие языки, фортран утратил первое место потому что утратила первое место та ниша, в которой он сидел. softwarer Да не сказал бы. Признаться, не помню как в ALGOL и PL/I - может, это было обычно в те времена - но по сравнению с более поздними временами эта схема раритетна. В классическом паскале она достаточно похожа, но все-таки введено важное понятие "файловой переменной"; в результате, например, файл можно передать параметром в подпрограмму. В Си и в более поздних версиях Паскаля сделано правильнее: работа с файлами убрана на уровень библиотек, функций/классов с уровня операторов языка. Номер файла тоже можно передавать в подпрограмму. Библиотеки есть везде. По-прежнему не вижу разницы. С непроцедурными языками сравнивать не нужно. Во-первых это и тогда и сейчас очень большая экзотика, а во-вторых бейсик процедурный, по-видимому автор отдавал себе отчет что создает процедурный язык в этом до начала создания языка, как он может быть похож на непроцедурный язык? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2005, 23:43 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
softwarer и все равно мог бы считаться наследником фортрана. Формальная грамматика ратфора представляла из себя 10-12 строчек. Это, простите, ересь. "Препроцессор" не может считаться наследником компилятора - в противном случае утилиту grep можно обозвать наследником "Войны и мира", по которой она делает поиск. Если же говорить о языке вида "препроцессор плюс собственно фортран", то я не вижу ничего, что помешает ему быть "наследником фортрана", но было бы интересно посмотреть на его грамматику из 10-12 правил. 1 ересь про препроцессор Вы придумали сами. /* С другой стороны, компилятор можно рассматривать как препроцессор к ассемблеру. Как и был сделан си - компилятор до эры персоналок. (работал в 3 или 4 или 5 прохода, на предпоследнем проходе вызывался ассемблер) Какая теоретическая причина может не позволить препроцессору фортрана не быть наследником препроцессора ассемблера ума не приложу */ ))))))) ну да, Я обсуждал язык, а не реализацию. грамматика была для yacc - lex. Разработал его Брайон Керниган - автор Си. а на нашей машине был фортран4 (в котором не было операторных скобок ) и не было фортрана77 (в котором они, возможно, были) . Так что лучше меня заподозрить в такой благоглупости, как желание использовать удобные инструменты. гугль нашел ратфор сразу. вот он http://sepwww.stanford.edu/software/ratfor.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 01:21 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
softwarer tchingiz в любом интерпретаторе не надо обьявлять переменные. Глупость. Наиболее популярный нынче пример обратного - Java. ... tchingizГлобальные переменные жили в коммон областях. Они просто не назывались глобальными, но суть таже, отовсюду к ним был доступ. Не совсем так. Доступ к ним был не "отовсюду", а "отовсюду, откуда захотят его получить". В отличие от глобальных переменных, которые благодаря факту своего создания присутствуют в общей области видимости и никуда оттуда не денутся. .... а Вы пишите, что программа бейсика, в целом похожа на одну фортран программу. И это так. . Ява - сомнительный контрпример. Она далеко не интрепретатор. Интерпретатор (как бейсик ) можно было использовать для вычисления каждой отдельной строчки. глобальные переменные. не поленился почитать в справочнике Болски язык программирования си. Оказалось определения глобальных переменных в си противоречит Вашему мнению. к глобальным переменным в си, тоже доступ был не отовсюду. Будем считать, что Вам виднее. Насколько я помню, в старых бейсиках определение глобальных переменых совпадало с Вашим и было отлично от фортрановского. похожесть. это не так я работал на фортране, на бейсике, сишарпе и перле. фортран похож на бейсик так же, как сишарп на перл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 01:36 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
c127 softwarer - В бейсике, как и в фортране, длина метки была ограничена пятью символами :)) (в стандартных реализациях для мини-ЭВМ). Шутку понял. В бейсике это не метка, это номер (адрес, идентификатор) строки в программе. Номера идут по-порядку. А вот в фортране это действительно метка. В фортране метки в разных подпрограммах могли дублироваться, а в бейсике номера строк - нет. наверно, не забуду никогда мудрую строчку из руководства по бейсику, написанного в 88 году (уже при живом паскале и си) : "когда нумеруете строчки программы, делайте это с шагом 10, чтобы была возможность вставлять новые строчки при изменении программы. " явный наследник фортрана. и очень удобно обьяснять студентам и домохозяйкам, в фортране же ничего подобного обьяснить нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 01:46 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
Блинский блинКуда ни глянь - кругом: требуется Delphi, требуется Delphi, требуется Delphi, требуется Delphi..... Он что такой продвинутый что всем вынь да полож? Чем VB не угодил к примеру? Может потому что паскаль - язык студентов, коих и развелось пруд пруди? Не знаю как там у вас, а у нас во Владивостоке, куда ни глянь все Oracle, С++, да 1С. С трудом работу программиста Delphi и VB нашла (зато хорошую). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 09:58 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
Аленочка Блинский блинКуда ни глянь - кругом: требуется Delphi, требуется Delphi, требуется Delphi, требуется Delphi..... Он что такой продвинутый что всем вынь да полож? Чем VB не угодил к примеру? Может потому что паскаль - язык студентов, коих и развелось пруд пруди? Не знаю как там у вас, а у нас во Владивостоке, куда ни глянь все Oracle, С++, да 1С. С трудом работу программиста Delphi и VB нашла (зато хорошую). Молодец ! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 10:31 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
c127 softwarerВозможно, тут вопрос подхода. С моей точки зрения то, что может быть вынесено из языка, должно быть вынесено из языка - это собственно и есть "разгрузка". Тогда давайте уберем из С цикл while, сишного for достаточно. Кстати я бы так и поступил на месте авторов С. Не понял логики. "Разгрузкой" было бы "давайте уберем из C цикл вообще". Насчет "Вы бы так и поступили" - вполне возможно, именно поэтому Вы и ратуете за фортран :) Постараюсь донести свою мысль максимально аккуратно. Итак, если у нас есть эквивалентные оператор WRITEFILE и функция WriteFile, второе представляется мне более удачным решением, поскольку это "отъемлимая", если можно так выразиться, часть языка, часть, объективно склонная к изменениям; стандартизируя ее в языке, мы тем самым душим ее развитие. Это хорошо видно на примере паскалевских файлов - сегодня работать с ними неудобно, незачем и я бы сказал, глупо; виртовские методы поддерживаются только для совместимости. В то же время я приветствую уместное разнообразие правильных способов выражения мысли; скажем, несколько версий функции WriteFile. Цикла for действительно было бы достаточно, но - ключевым достоинством Си является "четкость и лаконичность выражения мысли", чему наличие while весьма способствует. Собственно, если бы его не было - все подряд делали бы макрос while, делающий то же самое, что вряд ли было бы хорошо. c127Объяснял уже, в тех задачах case/switch не используется почти никогда. Когда создавали фортран о нем никто не подозревал. Потом его ввели в язык. Хм. Я кажется уже объяснял, что я нисколько не нападаю на язык, в том плане что абсолютно не стремлюсь доказать "он плохой". Я отвечаю на Ваш же вопрос. Далее, о "тех" задачах. Видите ли, вышло так, что моя мама много лет именно на Фортране делала довольно сложные вещи - обсчет и полунатурное моделирование для авиации, еще кое-что. Я, поскольку в те годы активно интересовался всем связанным, некоторые фрагменты видел/обсуждал. И не сказал бы, что это "тупой прямой обсчет". Да, решение стандартной задачи, какой-нибудь системы линейных уравнений, делается довольно прямо. Но это решение - только кирпичик, из которого строится собственно программа. c127 softwarer COMMON области как неуклюжие замены глобальных переменных (я бы сказал даже, не столько глобальных переменных, сколько конструкции record/struct. Структуру нетрудно передать параметром подпрограммы, в отличие от пятидесяти ее полей поодиночке - поэтому ее и передавали через common область). Однако Вы ниже совершенно справедливо утверждаете что COMMON это все-же не совсем глобальные переменные. Не совсем. Я и здесь утверждаю то же самое :) Я так полагаю, что назвал две основных причины их применения. Но я полагаю, что для обоих случаев существуют более удачные подходы. c127 softwarer Напрасное, с моей точки зрения, выделение трех (если не изменяет память) принципиально разных типов подпрограмм. В паскале тоже три: program, процедура и функция. Program тут не при чем. А разницу между процедурой и функцией весьма стремительно сгладили, что пожалуй является лучшим аргументом в пользу того, что изначальное решение сделать ее было неудачным. c127 softwarer Назначаемый GOTO - специфическая конструкция, мягко говоря не для "языка для непрограммистов". Назначаемых это вычисляемый? Нет, назначаемый это назначаемый Код: plaintext 1. 2. 3. c127Неудобно, но почти никогда не используется, нетипичен для тех задач. Уже обсуждался. Я бы не сказал, что он не использовался. Использовался, и активно. Но пал первой жертвой структурного программирования. c127Это тоже уже обсуждалось, экономит объявления переменных. Хм. Никто не говорит, что "абсолютно бесполезен". Я, если помните, отвечаю на вопрос о перегруженности. И с моей точки зрения, "перегрузить программу объявлениями переменных" - куда более полезных вид этого занятия. c127Нет, это пример того, что ошибку с освобождением памяти сделать труднее. А, вот Вы о чем :) Это актуально если сравнивать ручное программирование. Но именно эта фраза возникла в контексте конвертора Фортран -> Си - а в нем "ошибку с освобождением памяти" сделать столь же трудно. В ручном кодировании, безусловно, об этом нужно помнить, но здесь у каждого языка свои фокусы - вспомним, например, классический фортрановский прикол с изменением значения константы. c127Еще раз: развитый цикл запутывает опртимизатор. Еще раз: не запутывает. А вот "имитация развитого цикла подручными средствами" - та да, чтобы ее распутать, нужно потрудиться. c127К тому же ими почти никто не пользуется. Хм. c127GOTO неудобно, согласен, для выхода из цикла в поздних версиях фортрана был введен оператор типа break. Это утверждение выглядит странно, если сопоставить его с более ранним "я бы оставил в Си только FOR, убрав WHILE". BREAK - это одна из форм оператора GOTO. Всей разницы - экономия нескольких символов на метке. Это ровно такая же приятная мелочь, синтаксическое удобство, как и сишный цикл while. То неудобство, о котором шла речь - в Фортране часто приходилось применять GOTO как раз для эмуляции отсутствующих конструкций: операторного блока и сложного цикла. Именно поэтому фортран-программы приводились в пример в работах по структурному программированию: они держали абсолютный рекорд по частоте употребления GOTO; если мне не изменяет память, у одного из классиков упомянут проект, в котором GOTO встречался в каждой третьей строке выполняемого кода. c127 softwarer Если говорить о вычислениях - давайте вспомним о такой стандартнейшем математическом приеме, как вычисление с переменным шагом (не помню, как это называется "по научному", но абсолютно стандартная вещь для задач типа "интегрирование с заданной точностью"). В Си это - тот же цикл for. В Паскале это - например, цикл while. В Фортране это - IF/GOTO. Или тот же do c выходом по условию. С каким выходом и по какому условию? Еще раз: цикл с переменным шагом . Примерно так: Код: plaintext Не мешает, только этого почему-то никто не делат. Пишут для общего случая. Никак не комментируя истинность этого утверждения - это означает то, что "для общего случая" оптимизировать выгоднее. То есть не "запутывает оптимизатор", а как раз "оптимизация do есть частный случай либо шаг в сторону". softwarer К чему я это - к тому, что у Фортрана как языка нет никаких особых преимуществ по оптимизации. Программы флоат вычислений, написанные на NDP фортране работал в 2 раза быстрее чем такие же на NDP С Как факт - верю. Но сомневаюсь, что Вы покажете мне неустранимую причину этого. Скорее всего, в оптимизаторе C ставили другие задачи. . NDP очень хороший компилятор. А так больше никаких преимуществ нет. Комплексные числа по-прежнему не вспоминаем. Признаться, не смотрел всерьез этот вопрос, поэтому мне нечего вспомнить. Не очень вижу, за счет чего встроенный тип комплексных чисел будет оптимизиться сильно лучше, чем пользовательский, но и не решусь возражать. Неужели вы используете ВСЕ возможности оператора for? Как часто? Что именно Вы называете "все возможности"? Как простой эксперимент - я перебрал циклы for в нескольких модулях, прямо сейчас открытых у меня в IDE. Где-то четвертая или пятая часть из них содержит "навороты". с127 softwarer Хм. Так если помните, эта часть беседы началась с фразы одного из присутствующих о полной прикладной победе Си. Я ответил на это, что лет двадцать назад это же могли бы сказать о Фортране - и были бы столь же корректны. Некорректное сравнение. Фортран никогда не продвигался как универсальный язык. Да и Си тоже - до тех пор, пока не пошел маркетинг. А под маркетинг могло попасть что угодно. Такое впечатление, что Вы принципиально не осознаете логику доказательства "от противного". Я показываю "явно сомнительный пример, похожий на названный" - а Вы тут же начинаете оспаривать именно мой пример. Ну, допустим, оспорите. Что Вы этим доказываете - то, что Си универсальный язык и практически все приложения ближайших лет будут написаны на нем? Именно это утверждал автор, именно на это я возражал, именно это Вы вроде как получается отстаиваете - но в то же время в других фразах Вы явно с этим не согласны. Уже говорил, тогда паскаль ближе к бейсику чем фортран. Цикл простой и даже называется одинаково. Вашу мысль стоит представить в табличном виде. Есть ЯзыкАриф. цикл.Расш. ариф. циклЦикл с предусловиемЦикл с постусловиемBASICFOR---FORTRANDO---PASCALFOR-WHILEREPEATCFORFORWHILEDOPL/I++?? Итак, глядя на эту таблицу, мы видим, что Бейсик больше всего похож на Паскаль, поскольку циклы называются одинаково :) И кстати - почему именно на Паскаль? В Си цикл тоже называется FOR. При этом Фортрановский и Бейсиковский цикл умеют одинаково (что в Вашей логике не аргумент), а вот сравнение Паскалевского с Бейсиковским интересно: каждый из них умеет то, чего не умеет другой. softwarer Я бы сказал, параметры есть естественный атрибут подпрограмм; невозможно понять смысл подпрограмм, не поняв смысла их параметров. Именно об этом и речь, бейсиковцы их и не понимали. Подпрограммы (ИМХО) были, а параметров - не было. Программисты не привыкали к правильно думать. Чем же это подпрограммы? Если говорить в терминах Си, это пара setjmp/goto (аналог GOSUB) и longjmp (аналог RETURN). Это даже слабее, чем ассемблерные подпрограммы. Цикл есть цикл, даже если он записывается как goto, от этого ничего не меняется. А если нет формальных параметров это все, их ничто не заменяет. Да бросьте. Точно так же заменяется. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Сравнение некорректное, нет опровержения. Не могу ничего ответить, поскольку из оставленной цитаты уже не ясно, о чем собственно шла речь. softwarer c127Еще в фортране были блоки common и equivalence аналогов которым в бейсике вообще не было, а штука удобная. Насчет "удобства" - скажем так..... Это не то что было удобно, просто альтернативы вообще не было. Ну да, сами же говорили о формальных параметрах. Да. Я не считаю "Запорожец" удобным только из-за отсутствия "Мерседеса". Это был сомнительный сам по себе инструмент, но реализованные в языке альтернативы были еще хуже. softwarer Чингиз, а следом и Вы, решили поспорить с этим, выдвигая основным аргументом отсутствие одной из конструкций, существующих в Фортране - то есть то, что Бейсик не реализует одной из важных особенностей "предка". Ключевое слово - важной. Опять вопрос классификации. Отнюдь, не ключевое. Для примера - покажите ложное из следующих трех утверждений: 1. С# есть наследник C++ 2. Важной особенностью C++ является множественное наследование 3. C# не допускает множественного наследования. Похож - не значит наследник. Да и похож не сильно. Полагаю, незачем спорить о смысле слова "наследник". Ну а насчет похожести - если автор позиционировал как "учебный язык для перехода на", то видимо таки считал достаточно похожим. Получилось ли - можно обсуждать, но само намерение... Главное что фортран тогда был далеко впереди по использованию. Наука, гонка вооружений, ракеты, везде нужны были рассчеты. Все остальные Я не понимаю, что Вы хотите обосновать. Вы выразились в том смысле, что других языков не было, а какие были - во-первых были похожи на фортран, а во-вторых, автор их не знал. Я показал что были, и постарался обосновать то, что были похожи куда меньше. Насчет "не знал" - сомнительно, но вряд ли есть смысл обсуждать, поскольку трудно проверить. softwarer Да не сказал бы. Признаться, не помню как в ALGOL и PL/I - может, это было обычно в те времена - но по сравнению с более поздними временами эта схема раритетна. В классическом паскале она достаточно похожа, но все-таки введено важное понятие "файловой переменной"; в результате, например, файл можно передать параметром в подпрограмму. В Си и в более поздних версиях Паскаля сделано правильнее: работа с файлами убрана на уровень библиотек, функций/классов с уровня операторов языка. Номер файла тоже можно передавать в подпрограмму. И так было изначально? Хм, возможно здесь меня подводит память. С непроцедурными языками сравнивать не нужно. Во-первых это и тогда и сейчас очень большая экзотика, а во-вторых .... Хм. Возможно, я неправильно понимаю смысл "процедурного" языка. В том, на что Вы отвечаете, названы ALGOL, PL/I, Pascal, С. Кто из них менее процедурен, чем бейсик, и почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 14:21 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
Softwarer ... Мне кажется что для C++ циклы for и while - идентичны. По крайней мере мне удавалось по шаблону переходить от while к for и наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 14:54 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
maytonМне кажется что для C++ циклы for и while - идентичны. Теоретически - да. Но их идентичность не особо жизненная; скажем, чтобы справится со следующим упрощенным примером: Код: plaintext конвертору придется либо сгенерить очень плохой, некрасивый код, либо использовать goto. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 15:41 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
tchingizнаверно, не забуду никогда мудрую строчку из руководства по бейсику, написанного в 88 году (уже при живом паскале и си) : "когда нумеруете строчки программы, делайте это с шагом 10, чтобы была возможность вставлять новые строчки при изменении программы. Чем же она мудрая? Учитывая, что существовал замечательный оператор RENUMBER. А глупостей можно откуда угодно и сколько угодно нацитировать, дефицита не предвидится. явный наследник фортрана. Дык. Там для той же цели совали перфокарту между двумя другими. Перфокарты иногда подкрашивали или иначе выделяли - например, чтобы легко и просто убрать из колоды отладочную печать или заменить подпрограмму на альтернативную версию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 15:50 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
tchingizЯва - сомнительный контрпример. Она далеко не интрепретатор. Видимо, она неизвестный науке зверь. Да, правы были классики: "если факты противоречат теории - тем хуже для фактов". tchingizИнтерпретатор (как бейсик ) можно было использовать для вычисления каждой отдельной строчки. Как минимум, очень неудачная формулировка. Честно говоря, хочется назвать ее бредовой. Интересно было бы посмотреть, как интерпретатор бейсика вычислит вполне себе синтаксически верную строчку Код: plaintext или хотя бы столь же синтаксически верную Код: plaintext Если же говорить о вычислении самостоятельных частей программы, существующая ява вполне способна их вычислить. tchingizне поленился почитать в справочнике Болски язык программирования си. Оказалось определения глобальных переменных в си противоречит Вашему мнению. к глобальным переменным в си, тоже доступ был не отовсюду. Будем считать, что Вам виднее. Насколько я помню, в старых бейсиках определение глобальных переменых совпадало с Вашим и было отлично от фортрановского. Не совсем так. В Си введена новая по сравнению с Фортраном и Бейсиком логическая единица кода - файл. Введена именно в язык, следствием чего явилось ограничение области видимости и директива extern. В Фортране, если мне не изменяет память, многофайловость поддерживалась компилятором (посредством библиотек), но логически программа являлась одним файлом. Соответственно, если взять Си-программу, состоящую из одного логического файла (который может включать другие по #include), то в ней глобальные переменные ведут себя именно таким вот, "бейсиковским" образом. Здесь также важно помнить об отличии глобальной переменной и локальной статической. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 16:25 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
softwarer c127 softwarerВозможно, тут вопрос подхода. С моей точки зрения то, что может быть вынесено из языка, должно быть вынесено из языка - это собственно и есть "разгрузка". Тогда давайте уберем из С цикл while, сишного for достаточно. Кстати я бы так и поступил на месте авторов С. Не понял логики. "Разгрузкой" было бы "давайте уберем из C цикл вообще". Насчет "Вы бы так и поступили" - вполне возможно, именно поэтому Вы и ратуете за фортран :) Я ратую за фортран только в его области - в рассчетных задачах задачах с флоат арифметикой. Там ничего лучшего не придумали. Нигде больше его использовать не нужно. softwarer Постараюсь донести свою мысль максимально аккуратно. Итак, если у нас есть эквивалентные оператор WRITEFILE и функция WriteFile, второе представляется мне более удачным решением, поскольку это "отъемлимая", если можно так выразиться, часть языка, часть, объективно склонная к изменениям; У паскаля та же проблема что и у фортрана. Тут С со своими библиотеками скорее исключение, а не правило. softwarer Цикла for действительно было бы достаточно, но - ключевым достоинством Си является "четкость и лаконичность выражения мысли", чему наличие while весьма способствует. Собственно, если бы его не было - все подряд делали бы макрос while, делающий то же самое, что вряд ли было бы хорошо. Цикл while(предикат){...} полностью эквивалентен цииклу for(;предикат;){...}. Даже символов получается одинаковое количество. Поэтому я не понимаю что в данном случае дает введение дополнительного оператора в язык, никакого выигрыша в смысле лаконичности не получается. softwarer Далее, о "тех" задачах. Видите ли, вышло так, что моя мама много лет именно на Фортране делала довольно сложные вещи - обсчет и полунатурное моделирование для авиации, еще кое-что. Я, поскольку в те годы активно интересовался всем связанным, некоторые фрагменты видел/обсуждал. И не сказал бы, что это "тупой прямой обсчет". Да, решение стандартной задачи, какой-нибудь системы линейных уравнений, делается довольно прямо. Но это решение - только кирпичик, из которого строится собственно программа. Да, но эти кирпичики жрут основное время счета. Их удобно писать на фортране. Операторы switch это в большинстве логика работы программы (это нестрого), но в рассчетах они встречаются редко. Логику нужно писать, например, на С. Когда связка фортрана с С была проблемой, все писалось на одном языке, по-видимому поэтому в Вашем примере в фортране встречалось много конструкций эквивалентных switch. softwarer Program тут не при чем. А разницу между процедурой и функцией весьма стремительно сгладили, что пожалуй является лучшим аргументом в пользу того, что изначальное решение сделать ее было неудачным. Сгладили только в С и всем что от него пошло, типа джавы, пошарпаного С, С++ и пр. softwarer Это актуально если сравнивать ручное программирование. Но именно эта фраза возникла в контексте конвертора Фортран -> Си - а в нем "ошибку с освобождением памяти" сделать столь же трудно. Я говорил о ручном программировании, ясно что правильный конвертор все проконвертит правильно, но я думаю о себе. Ошибка основная, если ее убрать то С станет вполне даже приличным языком. softwarer В ручном кодировании, безусловно, об этом нужно помнить, но здесь у каждого языка свои фокусы - вспомним, например, классический фортрановский прикол с изменением значения константы. Освобождение памяти более серьезная ошибка и более часто встречающаяся. А что там с изменение констаны, это оператор DATA? Я константы всегда объявлял константы как parameter, вроде поменять нельзя, но возможно ошибаюсь. Но это поздние версии фортрана. softwarer c127GOTO неудобно, согласен, для выхода из цикла в поздних версиях фортрана был введен оператор типа break. Это утверждение выглядит странно, если сопоставить его с более ранним "я бы оставил в Си только FOR, убрав WHILE". Речь шла только о сишном for, он эквивалентен while, в фортране, паскале while нужен, там цикл его не заменяет. softwarer BREAK - это одна из форм оператора GOTO. Всей разницы - экономия нескольких символов на метке. Это ровно такая же приятная мелочь, синтаксическое удобство, как и сишный цикл while. GOTO запутывает оптимизатор, оптимизатор не знает куда будет переход. BREAK учесть легче, это частный случай GOTO. Та же история что и с циклами, чем более общий случай тем труднее его оптимизировать. softwarer То неудобство, о котором шла речь - в Фортране часто приходилось применять GOTO как раз для эмуляции отсутствующих конструкций: операторного блока и сложного цикла. Именно поэтому фортран-программы приводились в пример в работах по структурному программированию: они держали абсолютный рекорд по частоте употребления GOTO; если мне не изменяет память, у одного из классиков упомянут проект, в котором GOTO встречался в каждой третьей строке выполняемого кода. Если не ошибаюсь на момент создания фортрана структурного программирования не было и близко. Когда концепция появилась фортран подрехтовали, теперь на нем легко можно программировать структурно без GOTO. Для этого потребовалось 3 оператора: switch, while, break. Не так много. softwarer Еще раз: цикл с переменным шагом . Примерно так: Код: plaintext Вот и попробуйте соптимизировать такой цикл. Компилятор вообще не знает что там происходит. По этой причине вообще циклы не оптимизирует на всякий случай. Шучу конечно, но доля правды есть. А в фортране цикл определяется таким образом, что на момент входа в цикл программа знает сколько раз он будет выполняться. Единственный способ прервать - опрератор break, который в языке появился. А goto компилятор запутывает, его использовать в этой ситуации не рекомендуется. И для которого из циклов легче написать оптимизатор по-Вашему? softwarer Программы флоат вычислений, написанные на NDP фортране работал в 2 раза быстрее чем такие же на NDP С Как факт - верю. Но сомневаюсь, что Вы покажете мне неустранимую причину этого. Скорее всего, в оптимизаторе C ставили другие задачи. Неустранимой причины конечно же нет, все работаем на одной и той же машине Поста, но вот технические есть. Как результат в книгах по фортрану (например в книге "Оптимизация в фортране", автора не помню, книги нет под рукой) советовалось не выносить повторяющиеся вычисления из цикла с целью оптимизации, поскольку компилятор их найдет и вынесет сам и сделает это лучше, а вот компиляторы по С вроде очень часто не выносят и вычисляют каждый раз. Это с точностью до слов моего коллеги который любит лазить по ассемблерным кодам, я сам все никак не соберусь посмотреть. softwarer . NDP очень хороший компилятор. А так больше никаких преимуществ нет. Комплексные числа по-прежнему не вспоминаем. Признаться, не смотрел всерьез этот вопрос, поэтому мне нечего вспомнить. Не очень вижу, за счет чего встроенный тип комплексных чисел будет оптимизиться сильно лучше, чем пользовательский, но и не решусь возражать. А что тут смотреть, в С типа complex нет. А лучше за счет того что: 1) программа где complex нужен получается компактнее, 2) библиотеки оптимизирует производитель компилятора а не я, а это кроме умножения-деления еще и все функции типа sin-cos-exp.... softwarer с127 softwarer Хм. Так если помните, эта часть беседы началась с фразы одного из присутствующих о полной прикладной победе Си. Я ответил на это, что лет двадцать назад это же могли бы сказать о Фортране - и были бы столь же корректны. Некорректное сравнение. Фортран никогда не продвигался как универсальный язык. Да и Си тоже - до тех пор, пока не пошел маркетинг. А под маркетинг могло попасть что угодно. Согласен, маркетинг штука страшная. Но во времена господства фортрана такой маркетинге никому не мог и присниться. К тому же так оказалось что С гораздо ближе к универсальному языку чем фортран, хоть и создавался совсем с другими целями. Мне он очень нравится. Если еще утечку памяти побороть, то вообще бы все было хорошо. Но как всякое универсальное средство С проигрывает специальным в их узких областях. softwarer Уже говорил, тогда паскаль ближе к бейсику чем фортран. Цикл простой и даже называется одинаково. Вашу мысль стоит представить в табличном виде. Есть Это была шутка, типа Ваша логика, доведенная до абсурда. softwarer И кстати - почему именно на Паскаль? В Си цикл тоже называется FOR. Потому что в С цикл for это нечто сложное, а у всех остальных - простое. softwarer При этом Фортрановский и Бейсиковский цикл умеют одинаково (что в Вашей логике не аргумент), а вот сравнение Паскалевского с Бейсиковским интересно: каждый из них умеет то, чего не умеет другой. И что же это в цикле у паскаля такое, что не умеет фортрановский цикл? softwarer Чем же это подпрограммы? Если говорить в терминах Си, это пара setjmp/goto (аналог GOSUB) и longjmp (аналог RETURN). Это даже слабее, чем ассемблерные подпрограммы. Опять речь о терминологии. Ладно, пусть нет подпрограмм, тогда это делает бейсик еще менее похожим на фортран. softwarer Цикл есть цикл, даже если он записывается как goto, от этого ничего не меняется. А если нет формальных параметров это все, их ничто не заменяет. Да бросьте. Точно так же заменяется. Это технически, а с точки зрения логики и понимания это существенная разница. Параметры это следующий после подпрограмм типа GOSUB шаг в абстрактном мышлении. softwarer softwarer Чингиз, а следом и Вы, решили поспорить с этим, выдвигая основным аргументом отсутствие одной из конструкций, существующих в Фортране - то есть то, что Бейсик не реализует одной из важных особенностей "предка". Ключевое слово - важной. Опять вопрос классификации. Отнюдь, не ключевое. Это для меня оно ключевое. Я же говорю, вопрос классификации, тут спорить сложно, она у каждого почти всегда своя. softwarer Номер файла тоже можно передавать в подпрограмму. И так было изначально? Хм, возможно здесь меня подводит память. Не знаю как оно было изначально, но в фортране 77 уже можно было по-моему. softwarer Хм. Возможно, я неправильно понимаю смысл "процедурного" языка. В том, на что Вы отвечаете, названы ALGOL, PL/I, Pascal, С. Кто из них менее процедурен, чем бейсик, и почему? Все одинаково процедурны. А вот ЛИСП и АПЛ (по-моему), которые Вы вспоминали, не процедурные. Но на момент придумывания бейсика (середина 60-х) 1) паскаля не было, 2) у алгола были проблемы с комрилятором, либо же компилятора не было вообще, точно не помню, 3) ПЛ/1 не знаю был ли, может тоже не было. Чтоб не ходить по кругу в вопросе о бейсике как наследнике фортрана предлагаю определиться. Я считаю что чтобы язык программирования D назвать наследником языка F необходимо выполнение двух условий: 1) авторы языка должны в явном виде заявить что D создавался на основе F 2) в момент создания D должен быть нацелен на решение тех же задач что и F В нашем случае условие 1) возможно выполняется, возможно нет, я исследований не проводил. Но вот условие 2) не выполняется наверняка, например потому что по Вашему утверждению бейсик создавался как язык обучения, в момент создания во флоат-вычислениях не был конкурентом фортрана даже теоретически. Поэтому бейсик НАСЛЕДНИКОМ фортрана назвать нельзя. Его можно назвать потомком, ответвлением, но не наследником. Если говорить о лишних и неудачных конструкциях в фортране, то они наверняка есть. Но все познается в сравнении, если посмотреть на другие языки, то там их как правило несравнимо больше, если фортран тут как-то выделяется, то только в лучшую сторону по-моему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 00:04 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
softwarer Соответственно, если взять Си-программу, состоящую из одного логического файла (который может включать другие по #include), то в ней глобальные переменные ведут себя именно таким вот, "бейсиковским" образом. 1 Ваше утверждение было безусловным "отовсюду", а в примере условие. 2 и даже в Вашем примере. если разместить глобальную переменную внизу файла, чтото мне подсказывает, что ее не будет видно "ниоткуда" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 00:44 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
softwarer Дык. Там для той же цели совали перфокарту между двумя другими. Перфокарты иногда подкрашивали или иначе выделяли - например, чтобы легко и просто убрать из колоды отладочную печать или заменить подпрограмму на альтернативную версию. идея рассматривать цвет перфокарт как свойство языка, и говорить что другой язык наследует имеено это свойство - как минимум очень неудачная. я бы назвал ее бредовой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 00:47 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
softwarer tchingizЯва - сомнительный контрпример. Она далеко не интрепретатор. Видимо, она неизвестный науке зверь. Да, правы были классики: "если факты противоречат теории - тем хуже для фактов". Насколько мне известно честных промышленных интерпретаторов в настоящий момент не существует. Они все псевдокомпиляторы в P-код ;) авторЦикл while(предикат){...} полностью эквивалентен цииклу for(;предикат;){...}. Даже символов получается одинаковое количество. Поэтому я не понимаю что в данном случае дает введение дополнительного оператора в язык, никакого выигрыша в смысле лаконичности не получается. Потому-что while настолько часто используется, что все равно нашелся бы какой нибудь ...день, которому он понадобился бы из эстетических соображений. И он разумеется забубенил бы его define-ом. А с макросами и без того проблем хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 08:31 |
|
||
|
Delphi - универсальнейший инструмент разработки?
|
|||
|---|---|---|---|
|
#18+
c127Сгладили только в С и всем что от него пошло, типа джавы, пошарпаного С, С++ и пр. В том-же Паскале, любую функцию без всякого вреда для здоровья можно вызывать как процедуру. В той-же Аде процедуры и функции две больших разницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 08:34 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=33257861&tid=1347403]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
96ms |
get tp. blocked users: |
1ms |
| others: | 277ms |
| total: | 567ms |

| 0 / 0 |
