Опитування

Які мови програмування ви знаєте?

C
443 (27.2%)
C++
551 (33.8%)
Java
249 (15.3%)
Python
143 (8.8%)
Perl
139 (8.5%)
OCaml
17 (1%)
Haskell
26 (1.6%)
Lisp
63 (3.9%)

Проголосувало: 121

Автор Гілка: Мови програмування  (Прочитано 48038 раз)

Відсутній gvy

  • Письменник
  • *****
  • дописів: 576
  • Карма: +0/-0
Re: Мови програмування
« Відповідей #45 : 2006-11-22 17:04:44 »
;D Все програмне забезпечення для танків Абрамс, Літаків Боінг та ПРО, реалізовано за допомогою АДИ (діалект Пскаля).
Дядю, вже смішно.  А я -- діялект Паскалю? ("тоже является частью Вселенной...")

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Мови програмування
« Відповідей #46 : 2006-11-22 20:12:23 »
і виставити залежності, які повинні виконуватися до початку виконання цього методу (напр. щоб можна було написати правило, що перед початком виконання будь-якого піблічного методу класу повинен виконатися метод init без написання if(!initialized) init(); в кожному методі).
Ось такого щось ніде не пригадаю.  Насправді узагальнених бібліотек врахування формалізованих залежностей теж біля мов програмування не вистачає, НМД.  Й дуже багато часткових реалізацій в ітозі -- від ядра до apt.

Ну як  - а "make"? На ньому навіть програми писали, тільки його зав'язаність на файлову систему дуже обмежувала.

Бібліотеки для обробки залежностей є, але вони часто проходять по темі "штучний інтелект", тому їх в нормальних проектах бояться як чорт ладана. Реально - це звичайні графи. Є купа вже розроблених та відтестованих алогритмів для роботи з графами, є купа непоганих бібліотек, але задіяти їх в реальній програмі дуже важко.

http://www.awprofessional.com/articles/article.asp?p=25756&rl=1
Цитата
A common use of the graph abstraction is to represent dependencies. One common type of dependency that we programmers deal with on a routine basis is that of compilation dependencies between files in programs that we write. Information about these dependencies is used by programs such as make, or by IDEs such as Visual C++, to determine which files must be recompiled to generate a new version of a program (or, in general, of some target) after a change has been made to a source file.

Реально, 80% коду більшості програм можна викинути, так він займається перекладанням даних з місця на місце (особливо в ОО мовах, таких як Ява, Cі++) та обробкою залежностей. Для прикладу, алгоритм "Як закип'ятити воду в чайнику на газовій плиті".

Набрати в чайник воду.
Поставити чайник на газову плиту.
Запалити газ.
Дочекатися коли вода у чайнику закипить.
Вимкнути газ.

Реально, такий алгоритм ставить лише цілі, які потрібно досягти, не вказуючи як конкретно їх досягти. Якби довелося писати імперативний механізм на всі випадки життя (які зараз і пишуть) то він містив би конструкції подібні до такої:

Взяти сірники у серванті на другій поличці зверху.
Якщо сірників нема, перерити всю кімнату у пошуку сірників.
Якщо сірників нема, сходити в магазин за сірниками.
Якщо сірників нема, взяти у серванті запальничку.
Якщо запальнички нема, перерити всю кімнату у пошуку запальнички.
Якщо запальнички нема, сходити в магазин за запальничкою.
Якщо запальнички нема, (увага - це хак для печерної людини) підняти з підлоги кремінь і кресало.
....
[Fedora Linux]

Відсутній tabajara

  • Новачок
  • *
  • дописів: 11
  • Карма: +0/-0
Re: Мови програмування
« Відповідей #47 : 2007-01-02 21:27:41 »
Я не розумію як можна говорити що одна мова швидша або ефективніша за іншу. Мова - це тільки синтаксис.  Парсер для паскаля і сішки будується на скільки я знаю за одним алгоритмом. В них одна і та сама LL1 граматика. Можна порівнювати конкретні реалізації мови. Наскільки швидко компілюється програма залежить тільки від конкретного компілятора - які методи оптимізації використані,  і так далі . Десь там вище писали що сішка швидша за паскаль, я  написав декілька маленьких програмок на gcc на с і на fpc. Екзешки відкомпільовані з gcc мали менший розмір, але були повільніші за аналогічні, відкомпільовані з fpc. Ще писали, що є речі які можна зробити на С і не можливо або складно на паскалі. То повний бред, бо паскаль є більш високорівнева мова ніж с. Під  "більш високорівнева " я розумію "краще підтримує структурне програмування." Є такі штуки як записи з варіантами, вкладені функції, яких нема в С потім, якщо говорити за fpc, то він підтримує і класи delphi  і обєкти tp тобто є ще й оо. Велика програми не є зрозумілішими на С ніж на паскалі - це не логічно, бо паскаль підтримує більш складні структури даних відповідно і велика програма на паскалі є зрозумілішою. Приклад великої програми на паскалі - це fpc, він написаний на самому собі.

Praporshic

  • Гість
Re: Мови програмування
« Відповідей #48 : 2007-01-03 03:12:25 »
От халепа... немає жодного варіанту для мене. От де, питається, "Казармено-лайкова мова програмування особового складу"?  :-/

Відсутній Cthulhu

  • Кореспондент
  • ***
  • дописів: 183
  • Карма: +0/-0
Re: Мови програмування
« Відповідей #49 : 2007-01-03 03:19:39 »
де, питається, "Казармено-лайкова мова програмування особового складу"?  :-/
/me різко захотів написати інтерпретатор.

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Мови програмування
« Відповідей #50 : 2007-01-03 16:57:03 »
де, питається, "Казармено-лайкова мова програмування особового складу"?  :-/
/me різко захотів написати інтерпретатор.
Доведеться помучитися, особливо при реалізації функції статевих стосунків з будь-яким об'єктом.
[Fedora Linux]

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Мови програмування
« Відповідей #51 : 2007-01-03 17:19:58 »
Я не розумію як можна говорити що одна мова швидша або ефективніша за іншу.
Деякі особливості мов програмування можуть приводити до того, що якийсь з ресурсів (процесор, стек, пам'ять, диск, ...) використовуються неефективно і тому, при інших рівних, програми написані на цій мові працюють повільніше. Неефективно ресурси можуть використовувати і реалізації компіляторів/інтерпретаторів/стандартної бібліотеки.

Типовий приклад - у Паскалі стрічки передаються по значенню, у Сі - через вказівник, у Яві - через посилання. Це особливості самої мови а не реалізації. Ця особливість впливає на швидкодію і ефективність використання пам'яті та стеку.

Цитата
Мова - це тільки синтаксис.

Не тільки. shell і ASM відрізняються не тільки синтаксисом але й концепціями, якими оперують.

Цитата
Ще писали, що є речі які можна зробити на С і не можливо або складно на паскалі. То повний бред, бо паскаль є більш високорівнева мова ніж с.
Це мови одного рівня з LL1 граматикою.

Цитата
Під  "більш високорівнева " я розумію "краще підтримує структурне програмування."  Є такі штуки як записи з варіантами,
union в Сі.

Цитата
вкладені функції, яких нема в С

$ cat test.c
#include <stdio.h>

int main(int argc, char **argv)
{
  void test()
  {
    printf("Hello, world!\n");
  }
  test();

  return 0;
}
$ gcc test.c
$ ./a.out
Hello, world!

Цитата
потім, якщо говорити за fpc, то він підтримує і класи delphi  і обєкти tp тобто є ще й оо.
Якщо вже говорити про розширення, то давайте загадаймо за Сі++ чи ObjectiveC - там також є і об'єкти і класи.

Цитата
Велика програми не є зрозумілішими на С ніж на паскалі - це не логічно, бо паскаль підтримує більш складні структури даних відповідно і велика програма на паскалі є зрозумілішою.
Сі також підтримує складні структури даних - там немає ніяких обмежень. І я ще не бачив програми яка б була зрозумілішою при використанні складніших конструкцій.

Цитата
Приклад великої програми на паскалі - це fpc, він написаний на самому собі.
Приклад великої бібліотеки програм на Сі - це UNIX.
« Змінено: 2007-01-03 20:00:33 від lvm »
[Fedora Linux]

Відсутній Cthulhu

  • Кореспондент
  • ***
  • дописів: 183
  • Карма: +0/-0
Re: Мови програмування
« Відповідей #52 : 2007-01-03 18:38:10 »
де, питається, "Казармено-лайкова мова програмування особового складу"?  :-/
/me різко захотів написати інтерпретатор.
Доведеться помучитися, особливо при реалізації функції статевих стосунків з будь-яким об'єктом.
Зате яка буде користь при програмуванні гігантських людиноподібних роботів!

Відсутній tabajara

  • Новачок
  • *
  • дописів: 11
  • Карма: +0/-0
Re: Мови програмування
« Відповідей #53 : 2007-01-03 20:27:38 »
Цитата
Цитата
Мова - це тільки синтаксис.

Не тільки. shell і ASM відрізняються не тільки синтаксисом але й концепціями, якими оперують.

З огляду на швидкість і складність побудови персеру (розпізнавання мови, побудова синтаксичного дерева) - мова - це тільки синтаксис. Концепція ,на скільки я розумію -це семантика різних конструкцій мови.  Семантика використовується під час генерації коду і ніяк не впливає на синтаксис. В одній мові А  if може робити зовсім інші речі , ніж в В, але той if все одно треба розпізнати.
Цитата
Цитата
Ще писали, що є речі які можна зробити на С і не можливо або складно на паскалі. То повний бред, бо паскаль є більш високорівнева мова ніж с.
Це мови одного рівня з LL1 граматикою.
Граматика відноситься до синтаксису, а не до семантики. bash - тоже має LL(1) -граматику - вона на одному рівні з  C++, Java, Pascal?
Цитата
Цитата
Під  "більш високорівнева " я розумію "краще підтримує структурне програмування."  Є такі штуки як записи з варіантами,
union в Сі.
Про це не знав, звіняюсь.
Цитата
вкладені функції, яких нема в С
В старих версіях точно не було


Цитата
І я ще не бачив програми яка б була зрозумілішою при використанні складніших конструкцій.
В пітоні є списки і словники, які використовуються абсолютно всюди і програми на пітоні аж ніяк не стають від цього менш читабельними.
Цитата
Цитата
Приклад великої програми на паскалі - це fpc, він написаний на самому собі.
Приклад великої бібліотеки програм на Сі - це UNIX.
fpc - це доказ того, що на паскалі можна писати великі і зрозумілі програми. Зрозуміло, що на С пишуть великі програми, я цього не заперечую

zzandy

  • Гість
Re: Мови програмування
« Відповідей #54 : 2007-01-03 22:39:26 »
Мова - це тільки синтаксис.

Абсурд, якщо називати речі своїми іменами, бо

1. Англійська (наприклад) від, наприклад, української відрізняється не тільки синтаксисом а ще багатьма речами, наприклад - фічами, типу відмінків. Це не просто особливості синтаксису, це різні моделі мислення. Те саме стосується комп'ютерних мов. С і С++ мало відрізняються синтаксисом але значно відрізняються принципами.

2. Стандарт ANSI C включає описання синтаксису, але набагато більше уваги приділяє поведінці мови в різних ситуаціях. Таким "дрібницям" як наприклад, хто відновлює стек після функції - функція чи код, який її запустив, чи чому рівне і після чогось такого i += i * func( ++i ); - тут справа не в синтаксисі.
« Змінено: 2007-01-03 22:39:51 від zzandy »

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3820
  • Карма: +11/-0
  • Програміст
Re: Мови програмування
« Відповідей #55 : 2007-01-03 22:40:29 »
Граматика відноситься до синтаксису, а не до семантики. bash - тоже має LL(1) -граматику - вона на одному рівні з  C++, Java, Pascal?
Так, bash, C++, Java, Pascal - це мови 4-го рівня. ASM (мова макросів) - це мова 2-го рівня.

Цитата
Цитата
І я ще не бачив програми яка б була зрозумілішою при використанні складніших конструкцій.
В пітоні є списки і словники, які використовуються абсолютно всюди і програми на пітоні аж ніяк не стають від цього менш читабельними.
Згоден. Але в Паскалі таких речей немає. Щось додали в Turbo Pascal, Borland Pascal, Delphi - але це вже інші мови, не сумісні з Паскалем, так само як Objective-C і Сі++ не сумісні з Сі.

« Змінено: 2007-01-04 16:09:03 від lvm »
[Fedora Linux]

Відсутній tabajara

  • Новачок
  • *
  • дописів: 11
  • Карма: +0/-0
Re: Мови програмування
« Відповідей #56 : 2007-01-04 13:13:34 »
1. Англійська (наприклад) від, наприклад, української відрізняється не тільки синтаксисом а ще багатьма речами, наприклад - фічами, типу відмінків. Це не просто особливості синтаксису, це різні моделі мислення. Те саме стосується комп'ютерних мов. С і С++ мало відрізняються синтаксисом але значно відрізняються принципами.

2. Стандарт ANSI C включає описання синтаксису, але набагато більше уваги приділяє поведінці мови в різних ситуаціях. Таким "дрібницям" як наприклад, хто відновлює стек після функції - функція чи код, який її запустив, чи чому рівне і після чогось такого i += i * func( ++i ); - тут справа не в синтаксисі.

Щоб повністю визначити мову потрібно дві штуки - опис синтаксису і семантики (там ще опис різних контекстних умов , але то не має значення ). Щоб щось відкомпілювати, спочатку то треба розпізнати (розпарсати), розпізнати англійську, українську та інші мови може машина Тюрінга тобто складність розпізнавання української і англійської- однакова , (нема різниці є чи нема відмінки). С, Пасваль може розпізнати автомат з магазинною пам'яттю  (нема різниці хто відновлює стек,  операції відновлення стеку запишуться в бінарний файл під час генерації коду).  Коли компілятор розпізнав мову (створив в пам'яті якусь структуру тої програми, що парсав) він проходиться  по тій структурі і для кожної конструкції генерує код. Який саме код він згенерує описується семантикою . Зрозуміло, що якщо ,наприклад, оператор for в с і с++ має один і той самий синтаксис але іншу семантику (генерується інший код) то і виконуватись він  буде інакше.

Відсутній papa

  • Новачок
  • *
  • дописів: 26
  • Карма: +0/-0
  • Що новенького?
Re: Мови програмування
« Відповідей #57 : 2007-01-04 13:26:01 »
...
Я починав з паскаля а потім пересів на С. Ні жодного разу не засумував за Паскакалем, бо С/C++ більш довершені і зручні. А є такі люди, які зробили навпаки?!
...

Я починав з С/C++ і використовував його доти доки писав САМ проекти, зарас пишу на Object Pascal. Тоді мені здавалося що дуже круто використовувати перевантаження операторів, використовувати оператор присвоєння в оперетарі порівняння, писати вирази такі як цей:
Цитата
i += i * func( ++i )
... Але коли над проектом працює не один десяток людей і містить він не одну сотню модулів то тут набагато важче (читай дорожче) написати безглючней код на С++... Як на мене мова C++ це мова хаків (виникли проблеми з множинним наслідуванням - придумали віртуальне наслідування, виникли проблеми з доступом до членів класу - придумали френдлі класи ...).

...
Типовий приклад - у Паскалі стрічки передаються по значенню, у Сі - через вказівник, у Яві - через посилання. Це особливості самої мови а не реалізації. Ця особливість впливає на швидкодію і ефективність використання пам'яті та стеку.
...

За "у Паскалі стрічки передаються по значенню" вас потрібно відправити в школу і заставити вивчити var i const. :)
Я не чаклун - я тільки навчаюся

zzandy

  • Гість
Re: Мови програмування
« Відповідей #58 : 2007-01-04 13:43:37 »
Але коли над проектом працює не один десяток людей ...

Коли має місце така ситуація, треба виділити досить багато ресурсів на речі, які не є безпосередньо програмуванням - розробка продуманої архітектури і менеджмент. Цим відрізняється маленькі проекти від великих - маленькі на 99% складаються з програмування, а великі мають набагато меншу його частку. Але про це часто забувають або недооцінюють і тому, наприклад, S.T.A.L.K.E.R.-а сім років чекають.

До того-ж, вибрекеньки типу i += i * func( ++i ) лежать в одній площині, а 100 модулів - в іншій.

« Змінено: 2007-01-04 13:45:10 від zzandy »

Відсутній Cthulhu

  • Кореспондент
  • ***
  • дописів: 183
  • Карма: +0/-0
Re: Мови програмування
« Відповідей #59 : 2007-01-04 14:41:51 »
Тоді мені здавалося що дуже круто використовувати перевантаження операторів, використовувати оператор присвоєння в оперетарі порівняння, писати вирази такі як цей:
Цитата
i += i * func( ++i )
... Але коли над проектом працює не один десяток людей і містить він не одну сотню модулів то тут набагато важче (читай дорожче) написати безглючней код на С++...
Дядю, а ви чули про таку непристойну штуку, як кодінг стандарти? Без жорстких правил, за якими пишеться код у кожному конкретному проекті, чітких означень, що можна використовувати, а що ні, будь-який проект на будь-якій мові перетвориться на помийну яму.

Як на мене мова C++ це мова хаків (виникли проблеми з множинним наслідуванням - придумали віртуальне наслідування, виникли проблеми з доступом до членів класу - придумали френдлі класи ...).
Чиста правда. Я не збираюсь захищати C++, але увага, питання: і що з того?


За "у Паскалі стрічки передаються по значенню" вас потрібно відправити в школу і заставити вивчити var i const. :)
Щодо var i const: ви ж пам'ятаєте, через яку... м-м-м... з якими труднощами реалізуються, наприклад, референси в паскалі порівняно з C/C++?