Pascal

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

На самом деле скорость работы скорее не от языка зависит, а от оптимизирующих свойств компилятора (например некоторые люди поработавшие с компилятором Intel Fortran уверены, что самые быстрые программы нужно писать только на фортране)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
cr0acker
God
Posts: 1078
Joined: 03 Feb 2003 13:53

Post by cr0acker »

Shaos wrote:На самом деле скорость работы скорее не от языка зависит, а от оптимизирующих свойств компилятора (например некоторые люди поработавшие с компилятором Intel Fortran уверены, что самые быстрые программы нужно писать только на фортране)
Не скажи скорость зависит в том числе и от парадигм языка. Некие языки(модула-2 например) всегда загружают только динамические библиотеки и линкует их вв процессе выполнения. А пхп, должен например ещё и запустит интерпритатор.
Image
Формат конференции позволяет сказать то что я действительно думаю о проблемах...
(с) Путин
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Дискуссия заняла 7 страниц и примено 3 года...
Интересно, в результате неё кто-либо из участников изменил своё предпочтение
своему рабочему софту?
bar
Senior
Posts: 185
Joined: 07 Aug 2006 10:18

Post by bar »

HardWareMan wrote:
bar wrote:Больше всего меня бесили сложные правила расстановки точки с запятой.
То она должна стоять в конце строки, то не должна... Запомнить эти правила и расставлять правильно несложно, но когда дело доходит до копирования кода кусками из одного места в другое, паскаль начинает фонтанировать идиотизмом, вонять что else ни к месту, или что он несмотря на очки не может найти точки с запятой там, где она должна быть.
Ещё я постоянно спотыкался о невероятные приоритеты операций: как вообще Вирту пришло в голову сделать приоритет логических операций выше приоритета операций сравнения?
Я об этой проблеме даже и не знал, пока ты мне не сказал, лол. :3
Мне нечего на это сказать. Разве что могу задать уточняющий вопрос: о какой из проблем ты не знал? О проблемах с ";" или о невероятных приоритетах?
Кстати эта ; перед else -- это не единственный такого рода момент. Скажем перечисляя элементы типа enum {one, two, three, four, }, я могу оставить запятую после four -- это сделано с той же целью: чтобы копирование кода из конца перечисления в середину оставляло бы код правильным. То же при перечислении элементов инициализатора массива или структуры.
Но, кстати, то, что паскалист не замечал этих проблем -- это очень предсказуемо. Каждый оценивает программирование с вышки "своего" языка. И чем меньше возможностей в языке, тем большее число возможностей такой программист считает опциональными, ненужными, а может даже и вредными.
HardWareMan wrote:
bar wrote:Ну и отсутствие нормального for'а. Распихивать по while'ам все циклы утомляет. Надписи типа:

Code: Select all

for(initLoop(); testLoop(); moveLoop()) {...}
в C очень удобны тем, что собирают организацию цикла в одно место. В паскале же постоянно приходится перемешивать организацию цикла и собственно итерацию цикла. Хуже чем в ассемблере. Постоянно приходится писать что-то типа

Code: Select all

while true; do begin ... end;
Объясни мне практический смысл этого джицу.
Есть такая парадигма программирования, называется она: структурное программирование. Так вот именно ради этого был изобретён C'шный for. Организация цикла -- сама по себе, код относящийся к выполнению действий на каждой итерации -- сам по себе.

Подход "макси" к этой проблеме -- это lisp'овский макрос loop, используя который я пишу что-то типа:

Code: Select all

(loop
    initially действия-выполняемые-до-старта-цикла
    for i from 0 to N  ;;переменная которая на каждой итерации будет иметь разные значения
    for item in mylist ;;ещё одна такая переменная, будет пробегать элементы списка
    for j = 1 then (* j 2) ;; ещё одна -- будет перебирать степени двойки
    with a = 7  ;;локальная переменная
    do безусловно-выполняемые-на-каждой-итерации-действия
    collect эти-значения-с-каждой-итерации-будут-собраны-в-список
    finally действия-выполняемые-после-завершения-цикла)
Там ещё есть возможность условного выполнения кода на итерации, возможности итерации по массивам, по хеш-таблицам, естественно возможности досрочного завершения цикла... Но это в стиле Common Lisp'а -- настолько универсально, что выглядит не иначе как монструозно.
C'шный подход не столь универсален, но зато не лишён изящности:

Code: Select all

for (i = findFirst(); i != NULL; i = findNext()) {
    делаем полезные вещи с i
}
Мне не надо выполнение полезных вещей перетасовывать с кодом организации цикла. То есть надо иногда, но гораздо реже чем в паскале.
И мало того, что такие for'ы читать понятнее, чем уродские while'ы, в которых сам чёрт ногу сломит в попытке выяснить, что этот while делает. Так ведь такие for'ы гораздо удачнее для макрописательства. Я, скажем, с трудом могу представить себе, как в паскале можно было бы написать макрос list_for_each, даже если бы в паскале был бы макроязык. (list_for_each -- достаточно активно используемый макрос в ядре linux, и без этого макроса код ядра стал бы существенно менее читаемым.)
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Вобще, на мой взгляд, расстановка операторных скобок, будь то begin-end или {} , а также различных ограничителей строк - это перекладывание части функций синтаксического анализа с компилятора на плечи программиста.
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Lavr wrote:Вобще, на мой взгляд, расстановка операторных скобок, будь то begin-end или {} , а также различных ограничителей строк - это перекладывание части функций синтаксического анализа с компилятора на плечи программиста.
в питоне например отбивками слева надо блоки выделять - эдакое структурное программирование в пределе :roll:

а в лиспе из синтаксиса есть только круглые скобки, много скобок...

P.S. лисповиков нам ещё не хватает - холиварщики ещё те - за любимый лисп любого сишника порвут :dj:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:лисповиков нам ещё не хватает - холиварщики ещё те - за любимый лисп любого сишника порвут
Я просто высказал своё мнение, а кого здесь не хватает, тебе, видимо, виднее...
Я не сторонник холиваров во всех их проявлениях.

P.S. Я там вот выше вопрос задал и по отсутствию ответа понимаю так, что все
горячие дискуссии и холивары с переходом на личности ещё не изменили конструктивно
ни чью точку зрения на языки программирования.
d_wanderer
Senior
Posts: 180
Joined: 28 Feb 2006 21:34

Post by d_wanderer »

Shaos wrote:
Lavr wrote:Вобще, на мой взгляд, расстановка операторных скобок, будь то begin-end или {} , а также различных ограничителей строк - это перекладывание части функций синтаксического анализа с компилятора на плечи программиста.
в питоне например отбивками слева надо блоки выделять - эдакое структурное программирование в пределе :roll:

а в лиспе из синтаксиса есть только круглые скобки, много скобок...

P.S. лисповиков нам ещё не хватает - холиварщики ещё те - за любимый лисп любого сишника порвут :dj:
Саша, а я между прочим фанат Лиспа. ))) В свое время написал аж две реализации. ))))
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

А на чём ты писал эти две реализации?
Настоящий лисповик не юзает ничего кроме лиспа :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
d_wanderer
Senior
Posts: 180
Joined: 28 Feb 2006 21:34

Post by d_wanderer »

Shaos wrote:А на чём ты писал эти две реализации?
Настоящий лисповик не юзает ничего кроме лиспа :roll:
Увы, лиспа для реализации как раз и не было. ))) Был голый ассемблер. А потом Си и ассемблер. ЕСли интересно могу исходники выложить.