Именно монструазность. Сложный синтаксис и семантика &| большой стандарт много нелогичностей исторических но невнятных вещей. ИМХО Common Lisp, Perl и C++ под это подходят, про Кобол я только наслышан точно не могу судить.
Ну если уж у Лиспа сложный синтаксис и семантика - то к монструозным можно отнести любой язык. Перл тоже не то чтобы монстр, если его применять только там, где нужно (обработка текстов, тулзы для администрирования). Кресты - это да, согласен, что монстр. Про кобол не знаю, не писал на нём.
Так же в монстры однозначно: жабу, цшарп. Хаскелл тоже к монстрам можно отнести, но скорее по возможностям.
Самые монструозные, нелогичные и зубодробительные языки на которых мне приходилось кодить это mumps и focal. Программа на них написаная выглядит как mime64 или uuencode. Правила хорошего тона в программировании - чем короче имена переменных, длиннее строки и больше сокращений тем лучше. Операторных скобок нет, локальных переменных нет. Циклы принято реализовывать через goto. Поощряются переходы напрямую на номера строк без меток.
Вобщем если что-то удается скодить и отладить, через две недели проще написать заново, чем разобраться в том что написано даже при наличии комментариев. Пробел не в том месте поставил - программа неработоспособна.
ява монструазна скорее фреймворками разнообразными (и необычайно обширными), а также стандартной библиотекой, где есть практически все что угодно.
как язык ява достаточно прост, в смысле синтаксиса и сематики. С++ значительно сложнее и запутаннее, к примеру. Кроме того плюсы способствуют писанию значительно более нетривиальных и трудно читаемых конструкций, ровно как и перл, например.
Про лисп, а именно про scheme как одну из реализаций --- там как раз синтаксис и семантика очень простая и "компактная". Непривычная по сравнению с си-подобными (плюсы, ява, отчасти перл), но простая. Другое дело что с помощью этой простой семантики наваять можно :)
> чем короче имена переменных...и больше сокращений тем лучше
в том единсвенном интерпретаторе фокала (в БэКашке) длина переменных не воспринималась больше бвух символов -- извиняюсь, когда у тебя 2,5 килобайта на все про все -- не забалуешь
> Поощряются переходы напрямую на номера строк без меток
не было в фокале строк без меток
да и вообще -- ну что ты хотел? его лепили явно левой ногой с оглядкой на фортран и бейсик -- вот уж два достойных подражания предка. да и первый блин как водится
Плюсы моструозны однозначно. Лисп - возможно, т.к. схему создали насколько я помню именно из-за разросшегося стандарта лиспа (более 1000 страниц). Ада - огромный стандарт, встроенная многопоточность, собственная распределенная система и т.д., зато удобно =)
Тогда что ты понимаешь под сложными синтаксисом и семантикой?
По-моему S-выражения - это очень просто
И синтаксис у lisp'а очень лаконичный
В отличии от
Common Lisp - ну очень незамысловатое синтаксис и семантика. Самые незамысловатые из всех чё мне ведомы наверное. Самый гнусный ИМХО С#: совершенно безсмысленное нагромождение костылей и подпорок, и ни одной светлой мысли. Ещё С++ в реализации мелкосовта, тож не подарок хоть и получе. Паскаль от Борланда, который внутре делфей. Думаю так про Perl, но точно не знаю, это наречие мне мало знакомо.
Почему-то Фортран до сих пор не вспомнили.
Приходилось иногда искать глюки в чужом древнем коде -
ой, мама дорогая!
C*MODULE RHFUHF *DECK DEMHF
SUBROUTINE DEMHF(IW,DBG,EHF,EN,FAO,FMO,FSAVE,EIG,OCC,IA,SCR,
* IWRK,VEC,V0,D,H1,S,SMO,BUF,IBUF,L0,L1,L2,L3,
* NOCC,NINTMX,NUMDEM,NOPK)
C
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
C
LOGICAL DBG,GOPARR,DSKWRK,MASWRK
C
PARAMETER (MAXDEM=8)
C
DIMENSION ETAU(MAXDEM),XTAU(MAXDEM),TAUTAB(MAXDEM)
DIMENSION FAO(L2),FMO(L2),FSAVE(L2),EIG(L1),OCC(L1),IA(L1),
* SCR(L1,8),IWRK(L1),VEC(L3),V0(L3),D(L2),H1(L2),
* S(L2),SMO(L3),BUF(NINTMX),IBUF(NINTMX)
C
COMMON /PAR / ME,MASTER,NPROC,IBTYP,IPTIM,GOPARR,DSKWRK,MASWRK
C
PARAMETER (ZERO=0.0D+00, ONE=1.0D+00)
C
SAVE ETAU,XTAU
C
DATA TAUTAB/0.00D+00, 0.25D+00, 0.50D+00, 1.00D+00, 1.50D+00,
* 2.50D+00, 4.00D+00, 6.00D+00/
KT=1
XTAU(KT)=ZERO
ETAU(KT)=EHF+EN
IF(DBG) WRITE(IW,9010) KT,XTAU(KT),ETAU(KT)
C
SIGN = ONE
KT0=2
100 CONTINUE
C
DO 200 KT=KT0,MAXDEM
TAU = SIGN * TAUTAB(KT)
CALL DEMRHF(TAU,ESCF,FMO,V0,IA,OCC,H1,NOCC,L0,L1,L2,L3,
* FAO,FSAVE,EIG,SCR,IWRK,VEC,D,S,SMO,
* BUF,IBUF,NINTMX,NOPK)
XTAU(KT)=TAU
ETAU(KT)=ESCF+EN
IF(DBG) WRITE(IW,9010) KT,XTAU(KT),ETAU(KT)
IF(ETAU(KT).GT.ETAU(KT-1)) GO TO 300
200 CONTINUE
<...>
Понятия не инею. Для меня синтаксис Perl, C, C++, Java и Lisp - простой. Синтаксис бейсика - простой. Turtle graphic - простой. Ассемблера - простой. Хотя нет, вру. Синтаксис асма для меня не вполне очевиден, там есть требования к структуре программы... Prolog - синтаксис очень простой.
> Perl :-D
Ну хорошо, как можно переписать хотя бы такое:
while (<>){
while ( /(.*?<!--)(.[^-]*)(.*$)/){
print $2."\n";
$_=$3;
}
}
Так, чтоб было понятно с первого взгляда?
> Ну если уж у Лиспа сложный синтаксис и семантика - то к монструозным можно отнести любой язык.
Не в случаел лиспа синтаксис - убираем. Но я имел ввиду не лисп вообще а коммон лисп, в стандарте встроено несколько сложных DSL, огромное > 1000 количество стандартных функций и макросов и.т.д.
> На каком языке невозможно написать нетривиальную и трудночитаемую конструкцию?
На любом, но есть языки, которые поощеряют чистый код, которые нет и которые наооборот способствуют грязному коду (хотя конечно это уже личные эротические проблемы разработчика если он поддаётся на такие провакации).
> У вас есть варианты другого синтаксиса для регулярных выражений?
А нафига из регулярных выражений пытаться сделать полноценный парсер? :P
#!/usr/bin/env python
from sys import stdin
from pyparsing import Literal, SkipTo
comment = Literal('<!--').suppress() + SkipTo('-->')
for s in comment.scanString(stdin.read()):
print s[0][0]
> Ну хорошо, как можно переписать хотя бы такое:
while (<>){
while ( /(.*?<!--)(.[^-]*)(.*$)/){
print $2."\n";
$_=$3;
}
}
Да без б.
while ($line = <STDIN>){
while ($line =~ m{
(.*?<!--) # Before comment
(.[^-]*) # Body
(.*$)/) # After comment to end of line
}x
{
($body, $after) = ($2, $3);
print $body."\n";
$line = $after;
}
}
Несчитово! :) Если комментариев после каждой строчки натыкать, то любой код станет понятнее. И m{}x немногим лучше, чем //. А главное, семантика так и осталась излишне императивной и бейсикоподобной.
Вот именно. Девиз Ларри - мы не ставим решётки на окнах потому, что здравомыслящйи человек будет ходить в дом через дверь. А если он нездравомыслящий - так он и черепахой порнографию нарисует...