Сравнение языков программирования
От: nikov США http://www.linkedin.com/in/nikov
Дата: 06.11.07 15:27
Оценка: 58 (8) -1
Вот, сделал в Википедии табличку Сравнение языков программирования. Можно заполнить пропущенные значения, исправить где я ошибся, дописать побольше параметров сравнения и еще несколько языков.

Заодно будет возможность еще раз доказать, что ВАШ язык — самый лучший.
Re: Сравнение языков программирования
От: GlebZ Россия  
Дата: 06.11.07 15:51
Оценка: 1 (1) +2
Здравствуйте, nikov, Вы писали:

N>Вот, сделал в Википедии табличку Сравнение языков программирования. Можно заполнить пропущенные значения, исправить где я ошибся, дописать побольше параметров сравнения и еще несколько языков.

N>Заодно будет возможность еще раз доказать, что ВАШ язык — самый лучший.
Не думаю что это хорошая идея. Все таки лучше сравнивать однотипные языки. Которые позиционируются как Что-нибудь вроде D и С++. Ну например, зафигом goto или break в Haskell или Miranda. Или вообще если попробывать описать Refal по данной таблице, то вообще непонятно что. Что значит для него препроцессор, если он обладает свойством суперкомпилятора. То есть он может менять свой код в процессе исполнения. И что значит Bootstrapping для Refal'a или Lisp? Сделать транслятор себя в себя для Schema или для Refal — достаточно просто. К тому же для Lisp существуют до фига реализаций которые достаточно различны. Для некоторых Schema — есть pattern matching. Для некоторых нет. Вывод типов для динамической типизации, тоже непонятен.

Вобщем, можно сравнивать императивные с императивными, функциональные с функциональными, логические с логическими. И это в худшем случае. В лучшем неплохо выделять слаботипизированность — строготипизированность. Или например по данной квалификации:здесь
Автор: GlebZ
Дата: 10.10.05
Re[2]: Сравнение языков программирования
От: nikov США http://www.linkedin.com/in/nikov
Дата: 06.11.07 15:59
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Не думаю что это хорошая идея. Все таки лучше сравнивать однотипные языки. Которые позиционируются как Что-нибудь вроде D и С++.


В целом — я согласен. Есть параметры, по которым язки разных парадигм сравнивать невозможно или бессмысленно. В текущем варианте таблицы для этого предусмотрен крстик ("Данная постановка вопроса не применима к этому языку"). Возможно стоит сделать для таких параметров отдельную таблицу для каждой группы языков. Но есть и параметры, которые имеют смысл почти для всех языков общего назначения, например поддержка длинных целых чисел и т.д.

Это вики, так что любое улучшение, реорганизация и доделка приветствуются.
Re[3]: Сравнение языков программирования
От: LaptevVV Россия  
Дата: 06.11.07 16:14
Оценка:
Здравствуйте, nikov, Вы писали:

N>Это вики, так что любое улучшение, реорганизация и доделка приветствуются.

И еще нужно добавить Оберон и Zonnon — детища Вирта и его детей...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Сравнение языков программирования
От: GlebZ Россия  
Дата: 06.11.07 16:41
Оценка: 1 (1) +4
Здравствуйте, nikov, Вы писали:

N>Это вики, так что любое улучшение, реорганизация и доделка приветствуются.

Да нет. Мое IMHO что данная таблица концептуально неверна. Она внесет элемент неточности, недосказанности что для энциклопедического сайта не совсем хорошо. Ну например, даже в таком виде в C# нет кортежей. Зато есть понятие анонимных типов. Вводить новую строку? Или понятие замыкания. Для C# замыкание работает только на уровне лямбда+анонимов. Для JavaScript/Pascal — на локальных функциях. А в JavaScript все целочисленные значения прозрачно приводятся к double или string в зависимости от контекста использования. Это типа такой прием слаботипизированности. Их считать как целые числа произвольной длины? То есть мы можем вырастить таблицу по вертикали неимоверно, при этом не избавившись полностью от неоднозначности. А если учесть что SQL, XSL/XQuery — также являются языками программирования, то и вдоль.
Вобщем, по моему IMHO, это была бы достаточно интересная для дальнейшего обсуждения в Философии/Св. войнах, но не для энциклопедии.

PS. В англ. варианте здесь неодназначностей значительно меньше. Но и недосказанность присутсвует.
Re: Сравнение языков программирования
От: geniepro http://geniepro.livejournal.com/
Дата: 06.11.07 16:52
Оценка: :)
Здравствуйте, nikov, Вы писали:

По поводу Хаскелла (имхо).

Условная компиляция — Есть в GHC
Макросы препроцессора — Есть в GHC
Включение файлов — Есть в GHC
Шаблоны — Есть в GHC
Поддержка Unicode в идентификаторах — Есть в GHC
Неуправляемые указатели — С помощью модуля System сообразить можно
Целые числа с контролем границ — Нет
Вывод типов переменных из инициализатора — Если под инициализатором имеется в виду конструктор типа, то есть
Вывод типов переменных из использования — Есть
Алиасы типов — Есть
Параметрический полиморфизм с ковариантностью — А что это такое, если не секрет?
Перегрузка функций — Есть, основана на классах типов
Значения параметров по умолчанию — Нет
Локальные функции — Есть
Вывод сигнатуры для локальных функций — Есть
Цикл foreach — Есть, это функция map
Информация о типах в runtime — Есть
Информация о типах-параметрах в runtime — Не уверен, но думаю, что есть
Инструкция goto — В принципе нет, но можно сделать, при желании
Инструкции break без метки, Инструкции break без метки — аналогично goto
Поддержка try/catch — Есть, функция catch. Если кого-то не устраивает, он может сделать собственный вариант
Блок finally, Блок else (исключения) — аналогично goto
Re: Сравнение языков программирования
От: Кодт Россия  
Дата: 06.11.07 17:18
Оценка: +8 :)
Здравствуйте, nikov, Вы писали:

N>Вот, сделал в Википедии табличку Сравнение языков программирования. Можно заполнить пропущенные значения, исправить где я ошибся, дописать побольше параметров сравнения и еще несколько языков.


Пункт "макросы препроцессора", (+) стоит только у C++. Похвально...
А куда припахать макросы вне препроцессора? У Lisp, Nemerle и Template Haskell это важные части языка, причём куда более мощные, чем сишные макросы.

Шаблоны. "Наличие шаблонов наподобие C++ template". До какой степени это подобие? Генерики в Java, классы типов в Haskell — это уже далеко от подобия?
Во всяком случае, язык многопараметрических типов классов в GHC — тьюринг-полный, то есть не уступает возможностям плюсовых шаблонов по созданию чудо-программ

N>Заодно будет возможность еще раз доказать, что ВАШ язык — самый лучший.


Эта таблица — а, скорее всего, вообще любая такая таблица, — обусловлена выбором опорного языка или семейства языков.

Для функциональных языков на первое место вылезут особенности системы типов, порядок вычисления и т.п., а всякие тонкости управляющих конструкций (goto/break/named break) просто пропадут из внимания.
Для объектно-ориентированных языков — возможности рефлексии, конструирования классов в различные моменты существования программы (макропроцессор, компилятор, рантайм), разнообразное наследование.
И так далее.
Здесь, скорее, преобладает процедурно-ориентированный подход. Но тогда где все фортраны?

Если попробовать обозреть сразу все знания в одной таблице — то
1) она разрастётся
2) там будут огромные кластеры минусов или крестиков

Значит, в сводной таблице должны быть только какие-то базовые сведения. Каков размер этого базиса — это предмет для обсуждения.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re: Сравнение языков программирования
От: Кодёнок  
Дата: 06.11.07 22:26
Оценка:
Здравствуйте, nikov, Вы писали:

N>Вот, сделал в Википедии табличку Сравнение языков программирования. Можно заполнить пропущенные значения, исправить где я ошибся, дописать побольше параметров сравнения и еще несколько языков.


Таблица мало о чём вообще говорит.

Может лучше статью «проблема — решение», вспомнить откуда все эти фичи выросли, и какие у них есть аналоги.

Например, была проблема освобождения ресурсов при выходе. Си решает через goto, C++ решает через автоматически вызывающиеся деструкторы, C# решает через Dispose + специальную конструкцию, (кстати, я не видел примера интенсивной работы с ресурсами в ФП).

Или проблема == для пользовательских типов, ради такого же удобства работы, как и со встроенными (DateTime, Point3D, Complex). Си — нет решения, С++ — есть, Basic — нет, Хаскель — есть.

Или вот «включение файлов», оно же растет из модульности, так в .Net например модульность гораздо круче, чем корявая её эмуляция через включения хидеров.
Re: Сравнение языков программирования
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 07.11.07 03:44
Оценка:
Здравствуйте, nikov, Вы писали:

По Java:
  1. Условная компиляция. В Java все проверки внутренней корректности, осуществляемые утверждениями (зарезервированным словом assert):
    assert obj != null: "Ошибка!";
    , являющимися аналогом .NET-класса System.Diagnostic.Debug, всегда включаются в байт-код, но при запуске виртуальной машины могут быть разрешены (ключом -ea/-enableassertion) или запрещены (по умолчанию так и есть, все утверждения просто игнорируются при исполнении). Можно ли считать это наличием условной компиляции?
  2. Локальные функции. Некоторый суррогат в Java есть — анонимные классы:
    obj.someMethod(new ISomeInterface() {
        public void someImplementedMethod() {
            ...
        }
    });
    Канает?
  3. Поддержка Unicode в идентификаторах. Есть.
Re: Сравнение языков программирования
От: a18 Россия  
Дата: 07.11.07 07:19
Оценка:
N>Вот, сделал в Википедии табличку Сравнение языков программирования. Можно заполнить пропущенные значения, исправить где я ошибся, дописать побольше параметров сравнения и еще несколько языков.

Задумка неплохая. По крайней мере, получается гораздо информативнее, чем в английской Вики.
ИМХО стоит как-то сгруппировать требования, т.к. список пока совершенно нечитаемый (нарушается правило 7+-2).
Ещё вспомнилась статья Джоэла Сполски про фичи языков — может, чем-то пригодится.
Re: Сравнение языков программирования
От: Mamut Швеция http://dmitriid.com
Дата: 07.11.07 08:27
Оценка:
N>Вот, сделал в Википедии табличку Сравнение языков программирования. Можно заполнить пропущенные значения, исправить где я ошибся, дописать побольше параметров сравнения и еще несколько языков.


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


dmitriid.comGitHubLinkedIn
Re: Сравнение языков программирования
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 07.11.07 09:18
Оценка:
Сравнение банана и подводной лодки. Да, и у банана и подводной лодки есть сходства в форме. И что?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Сравнение языков программирования
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.11.07 15:39
Оценка: +2
Здравствуйте, nikov, Вы писали:

Нужны отдельные таблички: императивные фичи, функциональные, ООП. Ну и языки в них добавлять только те, которые этот стиль поддерживают.
... << RSDN@Home 1.2.0 alpha rev. 716>>
AVK Blog
Re: Сравнение языков программирования
От: BulatZiganshin  
Дата: 08.11.07 17:01
Оценка: 18 (1)
Здравствуйте, nikov, Вы писали:

N>Вот, сделал в Википедии табличку Сравнение языков программирования. Можно заполнить пропущенные значения, исправить где я ошибся, дописать побольше параметров сравнения и еще несколько языков.


я добавил ссылку на http://www.prowiki.org/wiki4d/wiki.cgi?LanguagesVersusD и слегка подкорректировал хаскловкую часть. очень хорошо, что ты сделал разъяснения, только вот "как это сделано в скала" неинформативно для тех, кто её не знает

имхо, надо выкинуть первые пункты насчёт препроцессора — они С-специфичны, и наверно объединить tenplates/generics/type classes вместе

>Возможность создавать type constructors высших порядков (как в Scala)


такое сойдёт:

data List a = Nil | Cons a (List a)

?
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: Сравнение языков программирования
От: nikov США http://www.linkedin.com/in/nikov
Дата: 08.11.07 18:55
Оценка:
Здравствуйте, Mamut, Вы писали:

M>+- — неинофрмативно. Имхо, лучше добавить фоновый цвет — зеленый(+), красный (-), желтый(+-), серый(неприменимо), белый(недостаточно информации)


А Википедии встречается выделение в таблицах цветом? Не будет выбиваться из общего оформления?
Re[2]: Сравнение языков программирования
От: palm mute  
Дата: 08.11.07 18:58
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

>>Возможность создавать type constructors высших порядков (как в Scala)

BZ>такое сойдёт:
BZ>data List a = Nil | Cons a (List a)
BZ>?

Мне кажется, такое больше подойдет (см. http://www.cs.kuleuven.be/~adriaan/files/higher.pdf):
class Functor f where
    fmap :: (a -> b) -> f a -> f b
Re[3]: Сравнение языков программирования
От: deniok Россия  
Дата: 08.11.07 19:01
Оценка:
Здравствуйте, palm mute, Вы писали:

PM>Мне кажется, такое больше подойдет (см. http://www.cs.kuleuven.be/~adriaan/files/higher.pdf):


The requested URL /~adriaan/files/higher.pdf): was not found on this server.
Re[4]: Сравнение языков программирования
От: palm mute  
Дата: 08.11.07 19:12
Оценка:
Здравствуйте, deniok, Вы писали:

D>The requested URL /~adriaan/files/higher.pdf): was not found on this server.

Без последней скобки работает: http://www.cs.kuleuven.be/~adriaan/files/higher.pdf
Re[5]: Сравнение языков программирования
От: deniok Россия  
Дата: 08.11.07 19:16
Оценка:
Здравствуйте, palm mute, Вы писали:

PM>Здравствуйте, deniok, Вы писали:


D>>The requested URL /~adriaan/files/higher.pdf): was not found on this server.

PM>Без последней скобки работает: http://www.cs.kuleuven.be/~adriaan/files/higher.pdf

Чёрт, совсем заработался.
Re[2]: Сравнение языков программирования
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 08.11.07 20:15
Оценка:
Здравствуйте, rsn81, Вы писали:

Внес изменения в части Java.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.