Здравствуйте, Ops, Вы писали:
J>>То есть другая половина — не принадлежит И твое оценочное суждение, получается — что PHP вдвое хуже JS Ops>Не-не-не-не, ты не путай тут. Недостатки ЖС не ограничиваются общим с ПХП подмножеством.
Все основные недостатки JS воспроизведены в PHP в лучшем виде. PHP это вообще живая демонстрация как делать не надо.
Здравствуйте, Философ, Вы писали:
Ф>Да, говно, но не поэтому (не из-за var блока и не из-за скобочек).
Ф>Из-за модульной парадигмы (namespace'ов приделанных сбоку, unit vars, initialization/finaliztion), из-за наследования конструкторов, и тучи других причин масштабом поменьше.
Имеется ввиду конкретная реализация модульной парадигмы или же модули vs заголовочные файлы?
Здравствуйте, jazzer, Вы писали:
J>а что не так с перлом? отличный инструмент для своих задач
Он трудночитаемый. Есть шутка, что Perl — это "write-only язык". Преувеличение, конечно, но некоторая почва под этим есть.
Свои задачи он неплохо решает, но читать код, написанный другим человеком, бывает сложно. Хотя я сам видел пример хорошо написанного Perl-кода. Но для новых проектов я б лучше взял что-то другое. Python, например.
Здравствуйте, Ops, Вы писали:
Ops>Половину того, что там написано, можно и про JS сказать.
Я не сталкивался с РНР, но JS — это самый ужасный язык из всего, на чём мне вообще приходилось писать. Надстройка в виде jquery делает его чуть лучше, но я всёже хотел бы чтоб JS ушёл в прошлое и его место занял другой язык.
Ops>Это ж лишнюю галочку ставить придется, имхо, оба вполне себе мейнстрим, пусть и в разных областях.
что тогда мешает и другие языки сгруппировать, чтобы не ставить лишних галочек? php/js, например, — да языки разные, зато оба вполне себе где-то мейнстрим? логика, где?
Здравствуйте, Artem Korneev, Вы писали:
I>>В теории всё так и есть — если таблица будет неограниченой длины и ширины. Хоть звук и видео обрабатывай.
AK>Да ради бога. Пусть таблица будет неограниченной длины. Как это поможет обойтись без программирования?
"один мужик втирал, что теперь когда в электронной таблице можно обсчитывать все что угодно, программисты уже не нужны"
Программисты не нужны и программирование не нужно — это две большие разницы.
Здравствуйте, Artem Korneev, Вы писали:
AK>Здравствуйте, jazzer, Вы писали:
J>>а что не так с перлом? отличный инструмент для своих задач
AK>Он трудночитаемый. Есть шутка, что Perl — это "write-only язык". Преувеличение, конечно, но некоторая почва под этим есть.
Вот что написано в официальном мануале:
Just because you CAN do something a particular way doesn't mean that you SHOULD do it that way. Perl is designed to give you several ways to do anything, so consider picking the most readable one.
AK>Свои задачи он неплохо решает
Свои задачи он просто отлично решает
AK>но читать код, написанный другим человеком, бывает сложно. Хотя я сам видел пример хорошо написанного Perl-кода. Но для новых проектов я б лучше взял что-то другое. Python, например.
Все зависит исключительно от программера и его настроенности на написание понятного кода. Овнокодить можно на любом языке, и питон ни разу не исключение.
Здравствуйте, kurchatov, Вы писали:
K>Каковы будут позиции языков к 2025 году? Я думаю, что: K>Perl все еще жив
Вот-вот будет релиз Perl 6. Сейчас уже совсем скоро, честное слово!
Python 3 (в версии 3.15) наконец-то вытеснил из использования Python 2, который дошел до версии 2.7.42. Но Python 3 сам уже считается устаревшим, потому что вышел несовместимый с ним Python 4 (на основе JavaScript!).
Сам JavaScript — Clang, GCC, Visual C++ компилируют теперь только в него. Oracle усиленно работает над портом JVM под JS.
Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, Философ, Вы писали:
Ф>>Оно говно просто потому, что ты не сможешь сказать что выведет на экран вот такая программа:
Ф>>
Ops>А где такое можно сказать? В С есть #define true false, например, а "хело мир" можно заставить форматировать диск, подключив лишь один заголовок.
В C ты можешь поставить бряк на printf() и посмотреть что в действительности исполняется и в каком файле, а тут бряк на WriteLn() тебе ничего не даст — тебе придётся открыть модуль MyFuckignUnit, посмотреть что импортирует он и если в нём и в остальных модулях секции инициализации. До твоего дэлфячего аналога "мэйна" дело может даже не дойти. Разница вот в этом.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Locksmithpc, Вы писали:
L>Здравствуйте, Философ, Вы писали:
Ф>>Из-за модульной парадигмы (namespace'ов приделанных сбоку, unit vars, initialization/finaliztion), из-за наследования конструкторов, и тучи других причин масштабом поменьше.
Ф>>Оно говно просто потому, что ты не сможешь сказать что выведет на экран вот такая программа:
Ф>>
Здравствуйте, Aleх, Вы писали: A>Здравствуйте, Философ, Вы писали: Ф>>Да, говно, но не поэтому (не из-за var блока и не из-за скобочек). Ф>>Из-за модульной парадигмы (namespace'ов приделанных сбоку, unit vars, initialization/finaliztion), из-за наследования конструкторов, и тучи других причин масштабом поменьше. A>Имеется ввиду конкретная реализация модульной парадигмы или же модули vs заголовочные файлы?
1)
Имеется ввиду сложность предсказания потока исполнения: слишком сложно сказать в каком порядке будут исполнены секции initialization/finalization а от этого может многое зависеть, т.к. там иногда переопределяются некоторые глобальные вещи, типа функций управления памятью. В делфе процветает чёрная магия.
Даже если ты точно сможешь сказать, что секции initialization будут выполнены в том порядке, в котором указаны модули в файле проекта, то о необходимости блюсти этот порядок посторонний разработчик может и не знать. Ловить потом баги порождённые этим очень сложно долго.
2) Такая парадигма крайне плохо дружит с многопоточностью. Вот, представь:
code
//файл проекта---------------------------------------------------program ThisProgramDemonstrateFuckingShitFromDephiWorld;
uses MyFuckignUnit,
MyFuckignUnit2;
begin
WriteLn('Hello from delphi hell');
end.
//файл модуля---------------------------------------------------unit MyFuckignUnit;
interface
uses SysUtils, MyFuckignUnit2, MyFuckignUnit3;
implementation
function CreateMyObjectWithThreads() :TObject;
begin//here creating object that uses threadsend;
var o :TObject;
initialization
o := CreateMyObjectWithThreads();
finalization
FreeAndNil(o);
end.
//файл модуля---------------------------------------------------unit MyFuckignUnit2;
interface
procedure UseModuleVar();
implementation
procedure UseModuleVar();
begin
moduleVar := false;
end;
var moduleVar :boolean;
initialization
moduleVar := true;
finalization
В коде показана ситуация, когда во время инициализации модуля 1 создаётся объект, который создаёт и использует поток (пусть это будет неявно). Из потока читается булевская переменная из модуля 2, которая там инициализируется в секции инициализации. Никакого криминала в незащищённом чтении булевской переменной нет — это атомарная операция. Косяк здесь в том, что поток может её прочитать до того, как она была выставлена в правильное значение — всё, ты попал на часы нудной отладки.
С потоками всё значительно сложнее потому, что распределение квантов времени ты предсказать не можешь: в одном случае переменная уже будет выставлена, а в другом нет.
Даже если без потоков, просто до инициализации модуля дело ещё не дошло, но уже оттуда зовутся функции ситуация оказывается подобной, хотя и проще.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Ops, Вы писали:
Ops>А где такое можно сказать? В С есть #define true false, например, а "хело мир" можно заставить форматировать диск, подключив лишь один заголовок.
В древних ОС (типа MS-DOS) — отформатирует диск, а вот в той же Windows — ОС не даст так просто это сделать пользовательской аппликухе.
По теме:
В том, что можно переопределить действие операторов, констант и даже ключевых слов ЯП — это, ИМХО, только плюс.
Однако, лично меня, когда я (20 лет назад) перешел от Паскаля к C, приятно удивила лаконичность языка C
Лаконичность это прежде всего {/} — вместо BEGIN/END. Хотя там, в Паскале, были еще разные "многобуквенные" ключевые слова.
В общем — забросил я с тех пор Паскаль и уже не возвращался к нему. В Делфи даже и не влезал
P.S. Паскаль и языки с его синтаксисом может и хороши для студентов (для целей обучения), но для повседневной практики они неудобны.
Здравствуйте, Философ, Вы писали:
Ф>В C ты можешь поставить бряк на printf() и посмотреть что в действительности исполняется и в каком файле, а тут бряк на WriteLn() тебе ничего не даст — тебе придётся открыть модуль MyFuckignUnit, посмотреть что импортирует он и если в нём и в остальных модулях секции инициализации. До твоего дэлфячего аналога "мэйна" дело может даже не дойти. Разница вот в этом.
Я тебя умоляю. #pragma init_seg или __attribute__ ((constructor)) — и вся любовь, пусть это и не по стандарту.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, AlexGin, Вы писали:
Ops>>А где такое можно сказать? В С есть #define true false, например, а "хело мир" можно заставить форматировать диск, подключив лишь один заголовок. AG>В древних ОС (типа MS-DOS) — отформатирует диск, а вот в той же Windows — ОС не даст так просто это сделать пользовательской аппликухе.
Это я для примера, форматирование диска частенько упоминают как возможный результат UB, например AG>По теме: AG>В том, что можно переопределить действие операторов, констант и даже ключевых слов ЯП — это, ИМХО, только плюс. AG>Однако, лично меня, когда я (20 лет назад) перешел от Паскаля к C, приятно удивила лаконичность языка C AG>Лаконичность это прежде всего {/} — вместо BEGIN/END. Хотя там, в Паскале, были еще разные "многобуквенные" ключевые слова.
Зато там есть удобная сокращалка, WITH, кажется. AG>В общем — забросил я с тех пор Паскаль и уже не возвращался к нему. В Делфи даже и не влезал
Примерно та же история, хотя с делфи я немного знаком, т.к. игрался с билдером.
AG>P.S. Паскаль и языки с его синтаксисом может и хороши для студентов (для целей обучения), но для повседневной практики они неудобны.
Возможно, приличная IDE может решить это, пусть громоздко, но писать с ней можно меньше.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, Ops, Вы писали:
Ops>Здравствуйте, AlexGin, Вы писали:
AG>>По теме: AG>>В том, что можно переопределить действие операторов, констант и даже ключевых слов ЯП — это, ИМХО, только плюс. AG>>Однако, лично меня, когда я (20 лет назад) перешел от Паскаля к C, приятно удивила лаконичность языка C AG>>Лаконичность это прежде всего {/} — вместо BEGIN/END. Хотя там, в Паскале, были еще разные "многобуквенные" ключевые слова. Ops>Зато там есть удобная сокращалка, WITH, кажется.
То есть (переведём на русский): придуманы костыли для Паскаля.
AG>>В общем — забросил я с тех пор Паскаль и уже не возвращался к нему. В Делфи даже и не влезал Ops>Примерно та же история, хотя с делфи я немного знаком, т.к. игрался с билдером.
С Билдером я также занимался раньше (и довольно плотно — пришлось долго поддерживать один древний проект), только в паскалевский синтаксис не лез.
Там все можно делать на C++. Хорошо, что Борланд догадался сделать такую штуку, как билдер. Хоть с привычным синтаксисом имеешь дело!
AG>>P.S. Паскаль и языки с его синтаксисом может и хороши для студентов (для целей обучения), но для повседневной практики они неудобны. Ops>Возможно, приличная IDE может решить это, пусть громоздко, но писать с ней можно меньше.
К слову сказать, у Борланда все IDE (которые под Windows) — особо глючные и жутко тормозные. В общем — ещё те "подарочки"
Насчет сторонних IDE для Паскаля/Делфи — ИМХО их не было и нет. Только борландовское УГ.